OpenSNES
Modern Open-Source SNES Development SDK
Loading...
Searching...
No Matches
audio.h
Go to the documentation of this file.
1
60
61#ifndef OPENSNES_AUDIO_H
62#define OPENSNES_AUDIO_H
63
64#include <snes/types.h>
65
66/* Removed on 2026-10-05 (1.0 plan, lot C): audioUpdate.
67 * The replacements are in docs/UPGRADING.md; `make check-upgrade` names them. */
68
69/*============================================================================
70 * Constants
71 *============================================================================*/
72
77
79#define AUDIO_MAX_SAMPLES 64
80
82#define AUDIO_MAX_VOICES 8
83
86#define AUDIO_VOICE_AUTO 0xFF
87
91#define AUDIO_VOICE_NONE 0xFF
92
94#define AUDIO_VOL_MAX 127
95#define AUDIO_VOL_MIN 0
96
98#define AUDIO_PAN_LEFT 0
99#define AUDIO_PAN_CENTER 8
100#define AUDIO_PAN_RIGHT 15
101
103#define AUDIO_PITCH_DEFAULT 0x1000
104
106/* Pitch is a ratio to the sample's own rate (0x1000 = 1.0); these three
107 * double per octave and assume a sample that plays just under middle C at
108 * 0x1000 (~250 Hz). Until 2026-10-04 the comments were one octave off
109 * their names (C3 called "Middle C"). */
110#define AUDIO_PITCH_C3 0x085F
111#define AUDIO_PITCH_C4 0x10BE
112#define AUDIO_PITCH_C5 0x217C
113
115#define AUDIO_ATTACK_INSTANT 15
116#define AUDIO_ATTACK_FAST 12
117#define AUDIO_ATTACK_MEDIUM 8
118#define AUDIO_ATTACK_SLOW 4
119
121#define AUDIO_DECAY_NONE 0
122#define AUDIO_DECAY_FAST 7
123#define AUDIO_DECAY_MEDIUM 4
124#define AUDIO_DECAY_SLOW 1
125
127#define AUDIO_SUSTAIN_FULL 7
128#define AUDIO_SUSTAIN_HALF 3
129#define AUDIO_SUSTAIN_QUARTER 1
130
139#define AUDIO_RELEASE_INSTANT 31
140#define AUDIO_RELEASE_FAST 24
141#define AUDIO_RELEASE_MEDIUM 16
142#define AUDIO_RELEASE_SLOW 8
143
145#define AUDIO_ECHO_DELAY_MIN 1
146#define AUDIO_ECHO_DELAY_MAX 7
147
149#define AUDIO_OK 0
150#define AUDIO_ERR_NO_MEMORY 1
151#define AUDIO_ERR_INVALID_ID 2
152#define AUDIO_ERR_NOT_LOADED 3
153#define AUDIO_ERR_TIMEOUT 4
154
156
157/*============================================================================
158 * Data Types
159 *============================================================================*/
160
171
182
183/*============================================================================
184 * Initialization
185 *============================================================================*/
186
191
221
232
234
235/*============================================================================
236 * Sample Management
237 *============================================================================*/
238
243
264u8 audioLoadSample(u8 id, const u8 *brrData, u16 size, u16 loopPoint);
265
277
285
301
303
304/*============================================================================
305 * Playback Control
306 *============================================================================*/
307
312
322
336u8 audioPlaySampleEx(u8 sampleId, u8 volume, u8 pan, u16 pitch);
337
364u8 audioPlaySampleOn(u8 voice, u8 sampleId, u8 volume, u8 pan, u16 pitch);
365
371
376
378
379/*============================================================================
380 * Volume Control
381 *============================================================================*/
382
387
393
399
406u8 audioSetVoiceVolume(u8 voice, u8 volumeL, u8 volumeR);
407
414
421
423
424/*============================================================================
425 * ADSR Envelope Control
426 *============================================================================*/
427
432
442u8 audioSetADSR(u8 voice, u8 attack, u8 decay, u8 sustain, u8 release);
443
449u8 audioSetGain(u8 voice, u8 mode);
450
452
453/*============================================================================
454 * Echo/Reverb Effects
455 *============================================================================*/
456
461
481u8 audioSetEcho(u8 delay, s8 feedback, s8 volumeL, s8 volumeR);
482
488
494
499
501
502/*============================================================================
503 * Legacy API (backward compatibility)
504 *============================================================================*/
505
511
513#define audioStop() audioStopAll()
514
516#define audioStopSample(id) audioStopVoice(id)
517
519#define audioSetPan(id, pan) /* No-op, use audioPlaySampleEx instead */
520
522
523#endif /* OPENSNES_AUDIO_H */
u8 audioSetGain(u8 voice, u8 mode)
Set GAIN mode for a voice (alternative to ADSR).
u8 audioSetADSR(u8 voice, u8 attack, u8 decay, u8 sustain, u8 release)
Set ADSR envelope for a voice.
u8 audioEnableEcho(u8 voiceMask)
Enable echo for specific voices.
u8 audioDisableEcho(void)
Disable echo for all voices.
u8 audioSetEcho(u8 delay, s8 feedback, s8 volumeL, s8 volumeR)
Configure echo parameters.
u8 audioSetEchoFilter(const s8 fir[8])
Set FIR filter coefficients for echo.
u8 audioIsReady(void)
Check if audio system is ready.
u8 audioInit(void)
Initialize the audio system.
u8 audioStopAll(void)
Stop all audio playback.
u8 audioStopVoice(u8 voice)
Stop a specific voice.
u8 audioPlaySampleEx(u8 sampleId, u8 volume, u8 pan, u16 pitch)
Play a sample with custom settings.
u8 audioPlaySampleOn(u8 voice, u8 sampleId, u8 volume, u8 pan, u16 pitch)
Play a sample on a voice YOU choose.
u8 audioPlaySample(u8 sampleId)
Play a sample with default settings.
void audioUnloadSample(u8 id)
Unload a sample from a slot.
u16 audioGetFreeMemory(void)
Get available SPC700 RAM for samples.
u8 audioLoadSample(u8 id, const u8 *brrData, u16 size, u16 loopPoint)
Load a BRR sample into SPC700 RAM.
u8 audioGetSampleInfo(u8 id, AudioSample *info)
Get information about a loaded sample.
u8 audioGetVolume(void)
Get current master volume.
void audioGetVoiceState(u8 voice, AudioVoiceState *state)
Get current state of a voice.
u8 audioSetVoiceVolume(u8 voice, u8 volumeL, u8 volumeR)
Set volume for a specific voice.
u8 audioSetVoicePitch(u8 voice, u16 pitch)
Set pitch for a specific voice.
u8 audioSetVolume(u8 volume)
Set master volume.
signed char s8
8-bit signed integer (-128 to 127)
Definition types.h:44
unsigned short u16
16-bit unsigned integer (0 to 65535)
Definition types.h:53
unsigned char u8
8-bit unsigned integer (0 to 255)
Definition types.h:47
BRR sample descriptor.
Definition audio.h:164
u8 flags
Definition audio.h:168
u16 spcAddress
Definition audio.h:165
u16 size
Definition audio.h:166
u8 reserved
Definition audio.h:169
u16 loopPoint
Definition audio.h:167
Voice state information.
Definition audio.h:175
u8 sampleId
Definition audio.h:177
u16 pitch
Definition audio.h:180
u8 volume
Definition audio.h:178
u8 pan
Definition audio.h:179
u8 active
Definition audio.h:176
OpenSNES Standard Types.