MCPcopy Create free account
hub / github.com/StrongPC123/Far-Cry-1-Source-Full / MixStreams

Method MixStreams

CrySoundSystem/MusicSystem.cpp:1136–1207  ·  view source on GitHub ↗

mix all streams in the play-list into pBuffer; mixlength is nSamples the data is processed before mixing if needed (eg. ramping) */

Source from the content-addressed store, hash-verified

1134 the data is processed before mixing if needed (eg. ramping)
1135*/
1136void CMusicSystem::MixStreams(void *pBuffer, int nSamples)
1137{
1138 for (TPatternPlayInfoVecIt It=m_vecPlayingPatterns.begin();It!=m_vecPlayingPatterns.end();)
1139 {
1140 int nSamplesToRead=nSamples;
1141 SMusicPatternPlayInfo &PlayInfo=(*It);
1142 bool bStreamEnd=false;
1143 if (PlayInfo.eBlendType==EBlend_Stop)
1144 {
1145 bStreamEnd=true;
1146 }else
1147 {
1148 GUARD_HEAP; // AMD64 note: here was a Memory Corruption
1149 switch (PlayInfo.eBlendType)
1150 {
1151 case EBlend_ToEnd:
1152 {
1153 int nLength=PlayInfo.pPatternInstance->GetSamplesToEnd();
1154 if (nSamplesToRead>=nLength)
1155 {
1156 nSamplesToRead=nLength;
1157 bStreamEnd=true;
1158 }
1159 break;
1160 }
1161 }
1162 PlayInfo.pPatternInstance->GetPCMData((signed long*)m_pMixBuffer, nSamplesToRead);
1163
1164 switch (PlayInfo.eBlendType)
1165 {
1166 case EBlend_FadeOut:
1167 {
1168 if (FadeStream(PlayInfo, (signed short*)m_pMixBuffer, nSamplesToRead))
1169 bStreamEnd=true;
1170 break;
1171 }
1172 }
1173 //const int nSize = 1024*1024*4;
1174 //static int arrBuffer[nSize];
1175 //memset (arrBuffer, 0xCE, sizeof(arrBuffer));
1176 //memcpy (pBuffer, m_pMixBuffer, nSamplesToRead*4);
1177 //memset(pBuffer, 0, nSamplesToRead*4);
1178 CS_DSP_MixBuffers(pBuffer, m_pMixBuffer, nSamplesToRead, m_nSampleRate, PlayInfo.pPatternInstance->GetPattern()->GetLayeringVolume(), 128, CS_16BITS | CS_STEREO);
1179/*
1180 signed short *destptr = (signed short *)pBuffer;
1181 signed int *srcptr = (signed int *)pBuffer;
1182
1183 for (int count = 0; count < nSamplesToRead; count++)
1184 {
1185 signed int lval,rval;
1186 lval = *srcptr++;
1187 rval = *srcptr++;
1188
1189 *destptr++ = (signed short)( lval < -32768 ? -32768 : lval > 32767 ? 32767 : lval);
1190 *destptr++ = (signed short)( rval < -32768 ? -32768 : rval > 32767 ? 32767 : rval);
1191 }
1192/**/
1193

Callers

nothing calls this directly

Calls 7

GetSamplesToEndMethod · 0.80
GetLayeringVolumeMethod · 0.80
GetPatternMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
GetPCMDataMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected