void soloud_sdl_audiomixer(void *userdata, Uint8 *stream, int len) { int samples = len / 4; short *buf = (short*)stream; SoLoud::Soloud *soloud = (SoLoud::Soloud *)userdata; float *mixdata = (float*)(soloud->mBackendData); soloud->mix(mixdata, samples); int i; for (i = 0; i < samples*2; i++) { buf[i] = (short)(mixdata[i] * 0x7fff); } }
static int portaudio_callback( const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { SoLoud::Soloud *soloud = (SoLoud::Soloud *)userData; float *mixdata = (float*)(soloud->mBackendData); soloud->mix((float*)output, frameCount); return 0; }
void soloud_sdlstatic_audiomixer(void *userdata, Uint8 *stream, int len) { short *buf = (short*)stream; SoLoud::Soloud *soloud = (SoLoud::Soloud *)userdata; if (gActiveAudioSpec.format == AUDIO_F32) { int samples = len / (gActiveAudioSpec.channels * sizeof(float)); soloud->mix((float *)buf, samples); } else // assume s16 if not float { int samples = len / (gActiveAudioSpec.channels * sizeof(short)); soloud->mixSigned16(buf, samples); } }