mirror of https://github.com/mgba-emu/mgba.git
GB Audio: Optimize channel 4
This commit is contained in:
parent
c19457aa4b
commit
46b59268d3
|
@ -568,13 +568,24 @@ void GBAudioRun(struct GBAudio* audio, int32_t timestamp, int channels) {
|
||||||
|
|
||||||
int32_t last = 0;
|
int32_t last = 0;
|
||||||
int32_t diff = timestamp - audio->ch4.lastEvent;
|
int32_t diff = timestamp - audio->ch4.lastEvent;
|
||||||
|
int samples = 0;
|
||||||
|
int positiveSamples = 0;
|
||||||
|
int lsb;
|
||||||
|
int coeff = 0x60;
|
||||||
|
if (!audio->ch4.power) {
|
||||||
|
coeff <<= 8;
|
||||||
|
}
|
||||||
for (; last + cycles <= diff; last += cycles) {
|
for (; last + cycles <= diff; last += cycles) {
|
||||||
int lsb = audio->ch4.lfsr & 1;
|
lsb = audio->ch4.lfsr & 1;
|
||||||
audio->ch4.sample = lsb * audio->ch4.envelope.currentVolume;
|
|
||||||
++audio->ch4.nSamples;
|
|
||||||
audio->ch4.samples += audio->ch4.sample;
|
|
||||||
audio->ch4.lfsr >>= 1;
|
audio->ch4.lfsr >>= 1;
|
||||||
audio->ch4.lfsr ^= (lsb * 0x60) << (audio->ch4.power ? 0 : 8);
|
audio->ch4.lfsr ^= lsb * coeff;
|
||||||
|
++samples;
|
||||||
|
positiveSamples += lsb;
|
||||||
|
}
|
||||||
|
if (samples) {
|
||||||
|
audio->ch4.sample = lsb * audio->ch4.envelope.currentVolume;
|
||||||
|
audio->ch4.nSamples += samples;
|
||||||
|
audio->ch4.samples += positiveSamples * audio->ch4.envelope.currentVolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio->ch4.lastEvent += last;
|
audio->ch4.lastEvent += last;
|
||||||
|
|
Loading…
Reference in New Issue