A Python software emulation of the Votrax SC-01A speech synthesizer chip, ported from MAME's implementation. This project includes both a command-line interface and a modern GUI with English-to-Phoneme conversion.
- Get the ROM: You must have the
sc01a.binfile (CRC32:fc416227) in this folder. This is the internal ROM dump of the Votrax chip. - Run: Double-click
run_gui.bat.- This script will automatically create a virtual environment, install necessary dependencies, and launch the GUI.
If you are on Linux/Mac or prefer to run manually:
- Install Python 3.8+
- Install Dependencies:
Or install individually:
pip install -r requirements.txt
pip install numpy numba g2p_en nltk(Note:winsoundis used for playback in the GUI, which is Windows-specific. On other platforms, you can use the CLI or modify the script to usepyaudioorsounddevice.) - Place ROM: Ensure
sc01a.binis in the project directory.
- GUI app (
votrax_gui.py):- English-to-Phoneme: Type regular English text, and it will be converted to Votrax phonemes automatically using
g2p_en. - Raw Mode: Toggle "Raw Phonemes Mode" to manually enter Votrax phoneme codes (e.g.,
PA0 H EH3 L L O PA1). - Playback: Real-time synthesis and playback.
- Save WAV: Export the synthesized speech to a
.wavfile. - Phoneme Reference: Double-click phonemes from the side panel to insert them.
- English-to-Phoneme: Type regular English text, and it will be converted to Votrax phonemes automatically using
You can also use the backend script directly from the command line:
python votrax.py "PHONEME LIST" sc01a.bin output.wavTo say "HELLO":
python votrax.py "H EH3 L L O" sc01a.bin hello.wavThe following phonemes are supported (standard Votrax SC-01A set):
EH3, EH2, EH1, PA0, DT, A1, A2, ZH, AH2, I3, I2, I1, M, N, B, V, CH, SH, Z, AW1, NG, AH1, OO1, OO, L, K, J, H, G, F, D, S, A, AY, Y1, UH3, AH, P, O, I, U, Y, T, R, E, W, AE, AE1, AW2, UH2, UH1, UH, O2, O1, IU, U1, THV, TH, ER, EH, E1, AW, PA1, STOP
- Performance: The emulation simulates analog filters sample-by-sample. While
numbais included to help speed this up (if implemented in the backend), it can still be CPU intensive. - ROM Required: The emulation relies on the exact
sc01a.binROM data to function. Without it, the output will be silence or garbage.