Port of krom (Peter Lemon)'s SpeechSynth (PeterLemon/SNES, SPC700/SpeechSynth). Speech on the SNES = sequencing a phoneme bank on one DSP voice: per phoneme, the APU-side program selects the sample (SRCN), shapes it (ADSR: plosives one-shot, vowels/nasals looped and sustained), inflects pitch for prosody, and waits (4 ms timer grain). krom's 32-phoneme bank spells "PETER LEMON"; our original 5-phoneme bank (formant synthesis, gen_phonemes.py) says "OPEN SNES" on loop.
ROM mode: LoROM (project default).
| Element | krom | this port |
|---|---|---|
| Master | MVOL 127/127, echo fully off (FLG $20) | same |
| Voice 0 | VOL 127/127, GAIN 127 | same |
| Vowel ADSR | %11110111/%11111100 | same values |
| Plosive ADSR | %11111111/%11100000 | same values |
| Pacing | 32 ms consonants / 256 ms vowels | same (4 ms tick × 8/64) |
| Retrigger | bare KON per phoneme, no KOFF | same |
| Phrase end | plain wait, no KOFF (ADSR decays) | same |
luna spc-dump exports the full APU state (64 KB ARAM + all 128 DSP registers) as a playable .spc — diffing two dumps localized every one of the bugs above. See docs/tutorials/audio.md.
console, apu