|
|
@@ -109,10 +109,12 @@ void GBAudioReset(struct GBAudio* audio) { |
|
|
mTimingDeschedule(audio->timing, &audio->ch3Fade);
|
|
|
mTimingDeschedule(audio->timing, &audio->ch4Event);
|
|
|
mTimingDeschedule(audio->timing, &audio->sampleEvent);
|
|
|
- mTimingSchedule(audio->timing, &audio->frameEvent, 0);
|
|
|
if (audio->style != GB_AUDIO_GBA) {
|
|
|
mTimingSchedule(audio->timing, &audio->sampleEvent, 0);
|
|
|
}
|
|
|
+ if (audio->style == GB_AUDIO_GBA) {
|
|
|
+ mTimingSchedule(audio->timing, &audio->frameEvent, 0);
|
|
|
+ }
|
|
|
audio->ch1 = (struct GBAudioSquareChannel) { .envelope = { .dead = 2 } };
|
|
|
audio->ch2 = (struct GBAudioSquareChannel) { .envelope = { .dead = 2 } };
|
|
|
audio->ch3 = (struct GBAudioWaveChannel) { .bank = 0 };
|
|
|
@@ -486,7 +488,13 @@ void GBAudioWriteNR52(struct GBAudio* audio, uint8_t value) { |
|
|
|
|
|
void _updateFrame(struct mTiming* timing, void* user, uint32_t cyclesLate) {
|
|
|
struct GBAudio* audio = user;
|
|
|
+ GBAudioUpdateFrame(audio, timing);
|
|
|
+ if (audio->style == GB_AUDIO_GBA) {
|
|
|
+ mTimingSchedule(timing, &audio->frameEvent, audio->timingFactor * FRAME_CYCLES - cyclesLate);
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+void GBAudioUpdateFrame(struct GBAudio* audio, struct mTiming* timing) {
|
|
|
int frame = (audio->frame + 1) & 7;
|
|
|
audio->frame = frame;
|
|
|
|
|
|
@@ -576,8 +584,6 @@ void _updateFrame(struct mTiming* timing, void* user, uint32_t cyclesLate) { |
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
- mTimingSchedule(timing, &audio->frameEvent, audio->timingFactor * FRAME_CYCLES - cyclesLate);
|
|
|
}
|
|
|
|
|
|
void GBAudioSamplePSG(struct GBAudio* audio, int16_t* left, int16_t* right) {
|
|
|
@@ -959,8 +965,10 @@ void GBAudioPSGDeserialize(struct GBAudio* audio, const struct GBSerializedPSGSt |
|
|
audio->playingCh4 = !!(*audio->nr52 & 0x0008);
|
|
|
audio->enable = GBAudioEnableGetEnable(*audio->nr52);
|
|
|
|
|
|
- LOAD_32LE(when, 0, &state->ch1.nextFrame);
|
|
|
- mTimingSchedule(audio->timing, &audio->frameEvent, when);
|
|
|
+ if (audio->style == GB_AUDIO_GBA) {
|
|
|
+ LOAD_32LE(when, 0, &state->ch1.nextFrame);
|
|
|
+ mTimingSchedule(audio->timing, &audio->frameEvent, when);
|
|
|
+ }
|
|
|
|
|
|
LOAD_32LE(flags, 0, flagsIn);
|
|
|
audio->frame = GBSerializedAudioFlagsGetFrame(flags);
|
|
|
|
0 comments on commit
2c870ca