mirror of https://github.com/mgba-emu/mgba.git
Libretro: Add back missing audio overkill (fixes #2734)
This commit is contained in:
parent
9c69b86d71
commit
71d1f122f9
|
@ -617,6 +617,39 @@ void retro_run(void) {
|
||||||
core->desiredVideoDimensions(core, &width, &height);
|
core->desiredVideoDimensions(core, &width, &height);
|
||||||
videoCallback(outputBuffer, width, height, BYTES_PER_PIXEL * 256);
|
videoCallback(outputBuffer, width, height, BYTES_PER_PIXEL * 256);
|
||||||
|
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
if (core->platform(core) == mPLATFORM_GBA) {
|
||||||
|
blip_t *audioChannelLeft = core->getAudioChannel(core, 0);
|
||||||
|
blip_t *audioChannelRight = core->getAudioChannel(core, 1);
|
||||||
|
int samplesAvail = blip_samples_avail(audioChannelLeft);
|
||||||
|
if (samplesAvail > 0) {
|
||||||
|
/* Update 'running average' of number of
|
||||||
|
* samples per frame.
|
||||||
|
* Note that this is not a true running
|
||||||
|
* average, but just a leaky-integrator/
|
||||||
|
* exponential moving average, used because
|
||||||
|
* it is simple and fast (i.e. requires no
|
||||||
|
* window of samples). */
|
||||||
|
audioSamplesPerFrameAvg = (SAMPLES_PER_FRAME_MOVING_AVG_ALPHA * (float)samplesAvail) +
|
||||||
|
((1.0f - SAMPLES_PER_FRAME_MOVING_AVG_ALPHA) * audioSamplesPerFrameAvg);
|
||||||
|
size_t samplesToRead = (size_t)(audioSamplesPerFrameAvg);
|
||||||
|
/* Resize audio output buffer, if required */
|
||||||
|
if (audioSampleBufferSize < (samplesToRead * 2)) {
|
||||||
|
audioSampleBufferSize = (samplesToRead * 2);
|
||||||
|
audioSampleBuffer = realloc(audioSampleBuffer, audioSampleBufferSize * sizeof(int16_t));
|
||||||
|
}
|
||||||
|
int produced = blip_read_samples(audioChannelLeft, audioSampleBuffer, samplesToRead, true);
|
||||||
|
blip_read_samples(audioChannelRight, audioSampleBuffer + 1, samplesToRead, true);
|
||||||
|
if (produced > 0) {
|
||||||
|
if (audioLowPassEnabled) {
|
||||||
|
_audioLowPassFilter(audioSampleBuffer, produced);
|
||||||
|
}
|
||||||
|
audioCallback(audioSampleBuffer, (size_t)produced);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (rumbleCallback) {
|
if (rumbleCallback) {
|
||||||
if (rumbleUp) {
|
if (rumbleUp) {
|
||||||
rumbleCallback(0, RETRO_RUMBLE_STRONG, rumbleUp * 0xFFFF / (rumbleUp + rumbleDown));
|
rumbleCallback(0, RETRO_RUMBLE_STRONG, rumbleUp * 0xFFFF / (rumbleUp + rumbleDown));
|
||||||
|
|
Loading…
Reference in New Issue