A CLI program in Go for extracting WAV audio files from ZIMO ZPP format files (unencrypted).
UNZPP is a command-line tool that parses ZIMO Sound project files (.zpp format) and extracts all contained audio files as WAV files with proper headers.
The program supports:
- 8-bit and 16-bit PCM files
- Sample rates: 11025 Hz, 22050 Hz, 44100 Hz
- Automatic detection of audio parameters from flags in the ZPP file
- Preservation of original sound file names
- Sound file type information (if defined)
./unzpp -i <input_file.zpp> [-o <output_directory>]-i- Required. Path to the input ZPP file-o- Optional. Output directory for extracted WAV files (default:output)
# Extract files from BR_194_ZIMO_16-Bit_S02_mfx.zpp to extracted_wav directory
./unzpp -i BR_194_ZIMO_16-Bit_S02_mfx.zpp -o extracted_wavThe program will create WAV files in the output directory with names in the format:
[number]-[name]_[type].wav
Examples:
002-Stand_BR194_typeFF.wav015-Schaltwer_mix_01-1_type88.wav037-Schaffnerpfiff_Echo_type08.wav
Each file contains:
- Valid WAV header (RIFF)
- Audio data in PCM format
- Correct sample rate and bit depth
The program supports unencrypted ZIMO ZPP files. File format:
- Header (0x00-0x7F): Magic bytes "SP" + configuration data
- File table (0x80-0x47F): 256 entries × 4 bytes:
- Byte 0: Sound file type
- Bytes 1-3: 24-bit offset (big-endian)
- File data: Each file contains:
- Flags byte (specifies bit depth and sample rate)
- 3 × 3-byte offsets (little-endian): data_end, loop_start, loop_end
- PCM audio data
- File name (with length)
- Bit 7 (0x80): 16-bit PCM (if set), otherwise 8-bit
- Bit 5 (0x20): 44100 Hz sample rate
- Bit 2 (0x04): 22050 Hz sample rate
- Default: 11025 Hz, 8-bit
0x01- Short whistle0x02- Long whistle0x06- Air pump0x08- Conductor's whistle0x09- Station announcement0x0A- Coupling0x80- Idle0x82- Braking0x83- Thyristor0x86- Electric motor0x88- Switchgear0x8E- Electric brake0xFF- Engine
This project is for educational purposes and analysis of ZIMO ZPP file format.