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

SNESMOD - Tracker-based Audio Engine. More...

#include <snes/types.h>

Go to the source code of this file.

Macros

#define SNESMOD_PITCH_HIGH   12
 
#define SNESMOD_PITCH_LOW   4
 Standard pitch values (sample rate multiplier, 0-15 range)
 
#define SNESMOD_PITCH_NORMAL   8
 

Functions

void snesmodAllocateSoundRegion (u8 size)
 Allocate SPC RAM for streaming buffer.
 
void snesmodFadeVolume (u8 targetVolume, u8 speed)
 Fade module volume.
 
void snesmodFlush (void)
 Wait for command queue to empty.
 
u8 snesmodGetPosition (void)
 Get current module position.
 
void snesmodInit (void)
 Initialize SNESMOD audio engine.
 
u8 snesmodLoadEffect (u16 sfxIndex)
 Load a sound effect from the soundbank.
 
void snesmodLoadModule (u16 moduleId)
 Load a module from the soundbank.
 
void snesmodPause (void)
 Pause module playback.
 
void snesmodPlay (u8 startPosition)
 Start module playback.
 
u8 snesmodPlayEffect (u16 effectId, u8 volume, u8 pan, u16 pitch)
 Play a sound effect.
 
void snesmodProcess (void)
 Process audio commands.
 
void snesmodResume (void)
 Resume module playback.
 
void snesmodSetModuleVolume (u8 volume)
 Set module volume.
 
void snesmodSetSoundbank (u8 bank)
 Set the soundbank bank number.
 
void snesmodSetSoundTable (const u8 *table)
 Set the streaming sound table.
 
void snesmodStop (void)
 Stop module playback.
 

Detailed Description

SNESMOD - Tracker-based Audio Engine.

A full-featured audio engine for SNES supporting:

  • Impulse Tracker module playback (up to 8 channels)
  • Sound effects with priority and mixing
  • Echo/reverb effects
  • Volume fading and position synchronization

Quick Start

#include <snes.h>
#include <snes/snesmod.h>
#include "soundbank.h" // Generated by smconv
extern u8 soundbank[];
int main(void) {
// Initialize video...
snesmodSetSoundbank(soundbank);
snesmodLoadModule(MOD_MUSIC); // From soundbank.h
while (1) {
snesmodProcess(); // MUST call every frame!
if (padPressed(0) & KEY_A) {
snesmodPlayEffect(SFX_JUMP, 127, 128, 0x1000);
}
}
}
int main(void)
Entry point — initialize audio, display controls, run transport loop.
Definition main.c:37
void WaitForVBlank(void)
Wait for next VBlank period.
#define KEY_A
Definition input.h:81
void snesmodSetSoundbank(u8 bank)
Set the soundbank bank number.
void snesmodInit(void)
Initialize SNESMOD audio engine.
void snesmodPlay(u8 startPosition)
Start module playback.
void snesmodLoadModule(u16 moduleId)
Load a module from the soundbank.
void snesmodProcess(void)
Process audio commands.
u8 snesmodPlayEffect(u16 effectId, u8 volume, u8 pan, u16 pitch)
Play a sound effect.
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.
SNESMOD - Tracker-based Audio Engine.

Soundbank Creation

Use smconv to create soundbanks from Impulse Tracker files:

smconv -s -o soundbank music.it effects.it

This generates:

  • soundbank.asm - Assembly data to link with ROM
  • soundbank.h - Module/effect ID constants

Memory Usage

  • SPC700 driver: ~5.5KB
  • Sample data: up to ~58KB
  • Echo buffer: 4KB (at $D000-$FFFF)
Note
The snesmodProcess() function MUST be called every frame! Failure to do so will cause audio glitches.
Author
Original SNESMod by mukunda
WLA-DX port by KungFuFurby
Adapted for OpenSNES