Ginsu Wave Content
Ginsu is the primary audio format used for continuous engine/exhaust sounds.
Decoding[edit | edit source]
Ginsu resources can be decoded using a tool such as Ginsu Converter.
Structures[edit | edit source]
Note: Ginsus begin with a Binary File resource.
rw::audio::core::GinsuDataLayout[edit | edit source]
The header for the audio data.
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | char[4] | id | Magic | Gnsu |
0x4 | 0x2 | char[2] | ver | Version number | 20 |
0x6 | 0x2 | short | flags | Always null | |
0x8 | 0x4 | float | minFrequency | Minimum RPM | |
0xc | 0x4 | float | maxFrequency | Maximum RPM | |
0x10 | 0x4 | int | segCount | Number of segments | Always 50 |
0x14 | 0x4 | int | cycleCount | Number of cycles | |
0x18 | 0x4 | int | sampleCount | Total number of samples | |
0x1c | 0x4 | int | sampleRate | Sample rate (Hz) | |
0x20 | 0x1 | uchar[1] | data | Ginsu data | See data |
0x21 | 0x3 | Padding |
Data[edit | edit source]
The header is followed by two tables of 32-bit integers representing sample indices.
The first table defines the segments, likely so only a particular portion of the audio is loaded at a given time. This always has 51 entries (though the count value is always 50) with an additional 4 bytes of padding following it.
The second table defines the cycles. Each cycle is a specific point in the rev range; at any time, it may be played continuously, switched to the next or previous cycle, or stopped altogether. A 10-second Ginsu normally contains around 400 cycles. Cycles can be automatically generated by a tool such as Crankcase Audio REV.
Audio data immediately follows the tables. It uses a proprietary lossy codec most closely related to 4-bit ADPCM.