Loading...
Searching...
No Matches
audio.h File Reference

OpenSNES Audio System. More...

#include <snes/types.h>

Go to the source code of this file.

Classes

struct  AudioSample
 BRR sample descriptor. More...
 
struct  AudioVoiceState
 Voice state information. More...
 

Macros

#define AUDIO_ATTACK_FAST   12
 
#define AUDIO_ATTACK_INSTANT   15
 ADSR attack rates (0=4.1s, 15=instant)
 
#define AUDIO_ATTACK_MEDIUM   8
 
#define AUDIO_ATTACK_SLOW   4
 
#define AUDIO_DECAY_FAST   7
 
#define AUDIO_DECAY_MEDIUM   4
 
#define AUDIO_DECAY_NONE   0
 ADSR decay rates.
 
#define AUDIO_DECAY_SLOW   1
 
#define AUDIO_ECHO_DELAY_MAX   15
 
#define AUDIO_ECHO_DELAY_MIN   1
 Echo delay (delay_ms = value * 16ms)
 
#define AUDIO_ERR_INVALID_ID   2
 
#define AUDIO_ERR_NO_MEMORY   1
 
#define AUDIO_ERR_NOT_LOADED   3
 
#define AUDIO_ERR_TIMEOUT   4
 
#define AUDIO_MAX_SAMPLES   64
 Maximum number of sample slots.
 
#define AUDIO_MAX_VOICES   8
 Maximum number of voices.
 
#define AUDIO_OK   0
 Error codes.
 
#define AUDIO_PAN_CENTER   8
 
#define AUDIO_PAN_LEFT   0
 Pan positions (0-15 scale)
 
#define AUDIO_PAN_RIGHT   15
 
#define AUDIO_PITCH_C3   0x085F
 Common pitch values.
 
#define AUDIO_PITCH_C4   0x10BE
 
#define AUDIO_PITCH_C5   0x217C
 
#define AUDIO_PITCH_DEFAULT   0x1000
 Default pitch (1.0x playback rate)
 
#define AUDIO_RELEASE_FAST   24
 
#define AUDIO_RELEASE_INSTANT   31
 ADSR release rates (0=infinite, 31=instant)
 
#define AUDIO_RELEASE_MEDIUM   16
 
#define AUDIO_RELEASE_SLOW   8
 
#define AUDIO_SUSTAIN_FULL   7
 ADSR sustain levels (0=1/8, 7=full)
 
#define AUDIO_SUSTAIN_HALF   3
 
#define AUDIO_SUSTAIN_QUARTER   1
 
#define AUDIO_VOICE_AUTO   0xFF
 Auto-allocate voice in audioPlaySampleEx.
 
#define AUDIO_VOL_MAX   127
 Maximum volume value.
 
#define AUDIO_VOL_MIN   0
 
#define audioSetPan(id, pan)   /* No-op, use audioPlaySampleEx instead */
 Legacy pan conversion (0-127 to 0-15)
 
#define audioStop()   audioStopAll()
 Alias for audioStopAll.
 
#define audioStopSample(id)   audioStopVoice(id)
 Alias for audioStopVoice.
 

Functions

void audioDisableEcho (void)
 Disable echo for all voices.
 
void audioEnableEcho (u8 voiceMask)
 Enable echo for specific voices.
 
u16 audioGetFreeMemory (void)
 Get available SPC700 RAM for samples.
 
u8 audioGetSampleInfo (u8 id, AudioSample *info)
 Get information about a loaded sample.
 
void audioGetVoiceState (u8 voice, AudioVoiceState *state)
 Get current state of a voice.
 
u8 audioGetVolume (void)
 Get current master volume.
 
void audioInit (void)
 Initialize the audio system.
 
u8 audioIsReady (void)
 Check if audio system is ready.
 
u8 audioLoadSample (u8 id, const u8 *brrData, u16 size, u16 loopPoint)
 Load a BRR sample into SPC700 RAM.
 
u8 audioPlaySample (u8 sampleId)
 Play a sample with default settings.
 
u8 audioPlaySampleEx (u8 sampleId, u8 volume, u8 pan, u16 pitch)
 Play a sample with custom settings.
 
void audioSetADSR (u8 voice, u8 attack, u8 decay, u8 sustain, u8 release)
 Set ADSR envelope for a voice.
 
void audioSetEcho (u8 delay, s8 feedback, s8 volumeL, s8 volumeR)
 Configure echo parameters.
 
void audioSetEchoFilter (const s8 fir[8])
 Set FIR filter coefficients for echo.
 
void audioSetGain (u8 voice, u8 mode)
 Set GAIN mode for a voice (alternative to ADSR)
 
void audioSetVoicePitch (u8 voice, u16 pitch)
 Set pitch for a specific voice.
 
void audioSetVoiceVolume (u8 voice, u8 volumeL, u8 volumeR)
 Set volume for a specific voice.
 
void audioSetVolume (u8 volume)
 Set master volume.
 
void audioStopAll (void)
 Stop all audio playback.
 
void audioStopVoice (u8 voice)
 Stop a specific voice.
 
void audioUnloadSample (u8 id)
 Unload a sample from a slot.
 
void audioUpdate (void)
 Process audio updates.
 

Detailed Description

OpenSNES Audio System.

Comprehensive audio API featuring:

  • 8 simultaneous voices with independent volume/pan/pitch
  • Dynamic BRR sample loading (up to 64 samples)
  • Echo/reverb effects with configurable FIR filter
  • Per-voice ADSR envelope control

Quick Start

#include <snes.h>
extern u8 beep_brr[];
extern u8 beep_brr_end[];
int main(void) {
audioLoadSample(0, beep_brr, beep_brr_end - beep_brr, 0);
while (1) {
if (padPressed(0) & KEY_A) {
}
}
}
int main(void)
Entry point — initialize audio, display controls, run transport loop.
Definition main.c:37
void WaitForVBlank(void)
Wait for next VBlank period.
void audioUpdate(void)
Process audio updates.
void audioInit(void)
Initialize the audio system.
u8 audioPlaySample(u8 sampleId)
Play a sample with default settings.
u8 audioLoadSample(u8 id, const u8 *brrData, u16 size, u16 loopPoint)
Load a BRR sample into SPC700 RAM.
#define KEY_A
Definition input.h:81
unsigned char u8
8-bit unsigned integer (0 to 255)
Definition types.h:46
u16 padPressed(u8 pad)
Get buttons pressed this frame.
OpenSNES Master Header.

Features

  • Up to 8 simultaneous sound effects (SPC700 voices)
  • Up to 64 sample slots with dynamic loading/unloading
  • Per-voice volume, pan, and pitch control
  • Echo/reverb with configurable delay and FIR filter
  • Per-voice ADSR envelope control
  • Fully documented, readable SPC700 driver (~500 bytes)
Author
OpenSNES Team