OpenSNES
Modern Open-Source SNES Development SDK
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 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 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
int main(void) {
// Initialize video...
snesmodSetSoundbank(SOUNDBANK_BANK); // the bank number, from soundbank.h
snesmodLoadModule(MOD_MUSIC); // From soundbank.h
while (1) {
snesmodProcess(); // MUST call every frame!
if (padPressed(0) & KEY_A) {
}
}
}
int main(void)
Definition main.c:66
void WaitForVBlank(void)
Wait for next VBlank period.
#define KEY_A
Definition input.h:84
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.
#define SNESMOD_PITCH_NORMAL
Definition snesmod.h:348
void snesmodProcess(void)
Process audio commands.
u8 snesmodPlayEffect(u16 effectId, u8 volume, u8 pan, u16 pitch)
Play a sound effect.
#define padPressed(pad)
Definition input.h:159
OpenSNES common-case 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