vbagx/source/vba/gba/Sound.h

90 lines
2.3 KiB
C
Raw Normal View History

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();
// sets the Sound throttle
void soundSetThrottle(unsigned short throttle);
2008-10-18 08:49:04 +02:00
// 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();
//// GBA sound options
long soundGetSampleRate();
void soundSetSampleRate(long sampleRate);
2008-10-18 08:49:04 +02:00
// 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
#ifdef __LIBRETRO__
void soundSaveGame( u8 *& );
void soundReadGame(const u8*& in, int version );
#else
2008-10-18 08:49:04 +02:00
void soundSaveGame( gzFile );
void soundReadGame( gzFile, int version );
#endif
2008-09-23 01:00:10 +02:00
class Multi_Buffer;
void flush_samples(Multi_Buffer * buffer);
2009-01-10 08:44:34 +01:00
#endif // SOUND_H