SongWalker music programming library for the browser. Provides audio playback and preset loading via WebAssembly.
npm install songwalker-jsimport { SongPlayer, initWasm } from 'songwalker-js';
// Initialize WASM (required before playback)
await initWasm();
// Create player and play a song
const player = new SongPlayer();
await player.playSource(`
track.beatsPerMinute = 120;
track.instrument = Oscillator({ type: 'square' });
C4 D4 E4 F4 G4
`);import { PresetLoader, initWasm } from 'songwalker-js';
await initWasm();
// Create loader pointing to a preset library
const loader = new PresetLoader('https://example.com/presets');
// Load the root index and enable a library
await loader.loadRootIndex();
await loader.enableLibrary('FluidR3_GM');
// Search for presets
const pianos = loader.search({ tags: ['piano'] });
// Load a specific preset
const preset = await loader.loadPreset('FluidR3_GM/Acoustic Grand Piano');import * as monaco from 'monaco-editor';
import { registerSongwalkerLanguage } from 'songwalker-js/monaco';
// Register the SongWalker language with Monaco
registerSongwalkerLanguage(monaco);
// Create an editor with the SongWalker language
monaco.editor.create(container, {
language: 'songwalker',
theme: 'songwalker-dark',
});SongPlayer— Audio player classPresetLoader— Preset fetching and cachinginitWasm/initSync— WASM initializationcompile_song— Compile .sw source to eventsrender_song_samples/render_song_wav— Render to audio- All preset types (
PresetDescriptor,PresetIndex, etc.)
registerSongwalkerLanguage()— Register language with MonacoLANGUAGE_ID— Language identifier ('songwalker')languageConfig— Monaco language configurationmonarchTokens— Syntax highlighting tokenseditorTheme— Catppuccin Mocha themecompletionItems— Auto-complete items
MIT