void BurnYMF278BUpdate(int nSegmentEnd) { short* pSoundBuf = pBurnSoundOut; int nSegmentLength = nSegmentEnd; // bprintf(PRINT_NORMAL, _T(" YMF278B render %6i -> %6i\n"), nYMF278BPosition, nSegmentEnd); if (nBurnSoundRate == 0) { return; } if (nSegmentEnd < nYMF278BPosition) { nSegmentEnd = nYMF278BPosition; } if (nSegmentLength > nBurnSoundLen) { nSegmentLength = nBurnSoundLen; } YMF278BRender(nSegmentEnd); pYMF278BBuffer[0] = pBuffer + 0 * 4096 + 4; pYMF278BBuffer[1] = pBuffer + 1 * 4096 + 4; for (int i = nFractionalPosition; i < nSegmentLength; i++) { pSoundBuf[(i << 1) + 0] = pYMF278BBuffer[0][i]; pSoundBuf[(i << 1) + 1] = pYMF278BBuffer[1][i]; } nFractionalPosition = nSegmentLength; if (nSegmentEnd >= nBurnSoundLen) { int nExtraSamples = nSegmentEnd - nBurnSoundLen; for (int i = 0; i < nExtraSamples; i++) { pYMF278BBuffer[0][i] = pYMF278BBuffer[0][nBurnSoundLen + i]; pYMF278BBuffer[1][i] = pYMF278BBuffer[1][nBurnSoundLen + i]; } nFractionalPosition = 0; nYMF278BPosition = nExtraSamples; } }
void BurnYMF278BUpdate(INT32 nSegmentEnd) { #if defined FBA_DEBUG if (!DebugSnd_YMF278BInitted) bprintf(PRINT_ERROR, _T("BurnYMF278BUpdate called without init\n")); #endif INT16* pSoundBuf = pBurnSoundOut; INT32 nSegmentLength = nSegmentEnd; // bprintf(PRINT_NORMAL, _T(" YMF278B render %6i -> %6i\n"), nYMF278BPosition, nSegmentEnd); if (nBurnSoundRate == 0) { return; } if (nSegmentEnd < nYMF278BPosition) { nSegmentEnd = nYMF278BPosition; } if (nSegmentLength > nBurnSoundLen) { nSegmentLength = nBurnSoundLen; } YMF278BRender(nSegmentEnd); pYMF278BBuffer[0] = pBuffer + 0 * 4096 + 4; pYMF278BBuffer[1] = pBuffer + 1 * 4096 + 4; for (INT32 n = nFractionalPosition; n < nSegmentLength; n++) { INT32 nLeftSample = 0, nRightSample = 0; if ((YMF278BRouteDirs[BURN_SND_YMF278B_YMF278B_ROUTE_1] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) { nLeftSample += (INT32)(pYMF278BBuffer[0][n] * YMF278BVolumes[BURN_SND_YMF278B_YMF278B_ROUTE_1]); } if ((YMF278BRouteDirs[BURN_SND_YMF278B_YMF278B_ROUTE_1] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) { nRightSample += (INT32)(pYMF278BBuffer[0][n] * YMF278BVolumes[BURN_SND_YMF278B_YMF278B_ROUTE_1]); } if ((YMF278BRouteDirs[BURN_SND_YMF278B_YMF278B_ROUTE_2] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) { nLeftSample += (INT32)(pYMF278BBuffer[1][n] * YMF278BVolumes[BURN_SND_YMF278B_YMF278B_ROUTE_2]); } if ((YMF278BRouteDirs[BURN_SND_YMF278B_YMF278B_ROUTE_2] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) { nRightSample += (INT32)(pYMF278BBuffer[1][n] * YMF278BVolumes[BURN_SND_YMF278B_YMF278B_ROUTE_2]); } nLeftSample = BURN_SND_CLIP(nLeftSample); nRightSample = BURN_SND_CLIP(nRightSample); pSoundBuf[(n << 1) + 0] = nLeftSample; pSoundBuf[(n << 1) + 1] = nRightSample; } nFractionalPosition = nSegmentLength; if (nSegmentEnd >= nBurnSoundLen) { INT32 nExtraSamples = nSegmentEnd - nBurnSoundLen; for (INT32 i = 0; i < nExtraSamples; i++) { pYMF278BBuffer[0][i] = pYMF278BBuffer[0][nBurnSoundLen + i]; pYMF278BBuffer[1][i] = pYMF278BBuffer[1][nBurnSoundLen + i]; } nFractionalPosition = 0; nYMF278BPosition = nExtraSamples; } }