2009-01-10 08:44:34 +01:00
|
|
|
#ifndef SOUND_H
|
|
|
|
#define SOUND_H
|
2008-09-23 01:00:10 +02:00
|
|
|
|
2009-01-10 08:44:34 +01:00
|
|
|
// Sound emulation setup/options and GBA sound emulation
|
2008-09-23 01:00:10 +02:00
|
|
|
|
2009-01-10 08:44:34 +01:00
|
|
|
#include "../System.h"
|
2008-09-23 01:00:10 +02:00
|
|
|
|
2008-10-18 08:49:04 +02:00
|
|
|
//// 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 sound volume, where 1.0 is normal
|
|
|
|
void soundSetVolume( float );
|
|
|
|
float soundGetVolume();
|
|
|
|
|
|
|
|
// 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 );
|
|
|
|
int soundGetEnable();
|
|
|
|
|
|
|
|
// Pauses/resumes system sound output
|
|
|
|
void soundPause();
|
|
|
|
void soundResume();
|
|
|
|
extern bool soundPaused; // current paused state
|
|
|
|
|
|
|
|
// Cleans up sound. Afterwards, soundInit() can be called again.
|
|
|
|
void soundShutdown();
|
|
|
|
|
|
|
|
// Sound buffering
|
|
|
|
extern int soundBufferLen; // size of sound buffer in BYTES
|
|
|
|
extern u16 soundFinalWave[1470];// 16-bit SIGNED stereo sample buffer
|
|
|
|
|
|
|
|
|
|
|
|
//// GBA sound options
|
|
|
|
|
|
|
|
// Sets sample rate to 44100 / quality
|
|
|
|
void soundSetQuality( int quality );
|
|
|
|
extern int soundQuality; // current sound quality
|
|
|
|
|
|
|
|
// Sound settings
|
|
|
|
extern bool soundInterpolation; // 1 if PCM should have low-pass filtering
|
|
|
|
extern float soundFiltering; // 0.0 = none, 1.0 = max
|
|
|
|
|
|
|
|
|
|
|
|
//// GBA sound emulation
|
|
|
|
|
|
|
|
// GBA sound registers
|
2008-09-23 01:00:10 +02:00
|
|
|
#define SGCNT0_H 0x82
|
|
|
|
#define FIFOA_L 0xa0
|
|
|
|
#define FIFOA_H 0xa2
|
|
|
|
#define FIFOB_L 0xa4
|
|
|
|
#define FIFOB_H 0xa6
|
|
|
|
|
2008-10-18 08:49:04 +02:00
|
|
|
// Resets emulated sound hardware
|
2008-09-23 01:00:10 +02:00
|
|
|
void soundReset();
|
2008-10-18 08:49:04 +02:00
|
|
|
|
|
|
|
// Emulates write to sound hardware
|
|
|
|
void soundEvent( u32 addr, u8 data );
|
|
|
|
void soundEvent( u32 addr, u16 data ); // TODO: error-prone to overload like this
|
|
|
|
|
|
|
|
// Notifies emulator that a timer has overflowed
|
|
|
|
void soundTimerOverflow( int which );
|
|
|
|
|
|
|
|
// Notifies emulator that PCM rate may have changed
|
|
|
|
void interp_rate();
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
|
|
|
// Saves/loads emulator state
|
|
|
|
void soundSaveGame( gzFile );
|
|
|
|
void soundReadGame( gzFile, int version );
|
2008-09-23 01:00:10 +02:00
|
|
|
|
2009-01-10 08:44:34 +01:00
|
|
|
#endif // SOUND_H
|