#pragma once // Sound emulation setup/options and GBA sound emulation #include //// Setup/options (these affect GBA and GB sound) // Initializes sound and returns true if successful. Sets sound quality to // current value in soundQuality global. bool soundInit(); // Manages muting bitmask. The bits control the following channels: // 0x001 Pulse 1 // 0x002 Pulse 2 // 0x004 Wave // 0x008 Noise // 0x100 PCM 1 // 0x200 PCM 2 void soundSetEnable(int mask); // Pauses/resumes system sound output void soundPause(); void soundResume(); // Cleans up sound. Afterwards, soundInit() can be called again. void soundShutdown(); //// GBA sound options void soundSetSampleRate(long sampleRate); // Sound settings extern bool soundInterpolation; // 1 if PCM should have low-pass filtering //// GBA sound emulation // GBA sound registers enum { SGCNT0_H = 0x82, FIFOA_L = 0xa0, FIFOA_H = 0xa2, FIFOB_L = 0xa4, FIFOB_H = 0xa6 }; // Resets emulated sound hardware void soundReset(); // Emulates write to sound hardware void soundEvent(uint32_t addr, uint8_t data); void soundEvent(uint32_t addr, uint16_t data); // TODO: error-prone to overload like this // Notifies emulator that a timer has overflowed void soundTimerOverflow(int which); // Notifies emulator that SOUND_CLOCK_TICKS clocks have passed void psoundTickfn(); extern int SOUND_CLOCK_TICKS; // Number of 16.8 MHz clocks between calls to soundTick() extern int soundTicks; // Number of 16.8 MHz clocks until soundTick() will be called class Multi_Buffer; void flush_samples(Multi_Buffer *buffer);