|
I've had a cursory glance at the structure of the voicedat.kwi from the Audi/Alpine satnav. It doesn't actually seem to match the spec. Basic structure is shown below. | Offset | Tag
| Length | Data
| | 0x00000000 | Size of Header
| 4 | 00 00 68 7D | 0x00000004
| Lang Count
| 2 | 00 07
| 0x00000006
| Lang Record
| 28
| 00 01 17 0A F0 00 04 BC 78 00 00 00 07 22 00 10 00 14 02 7A 00 00 00 65 00 00 0E DC | 0x00000022
| Lang Record
| 28
| 00 01 17 0A F0 00 04 BC 78 00 00 00 07 22 00 10 00 14 02 7C 00 00 0F 41 00 00 0E E8 | | ....... | ...... | .... | ............................................................................................ | 0x000000AE
| Lang Record
| 28
| 00 01 17 0A F0 00 04 BC 78 00 00 00 07 22 00 10 00 14 02 7A 00 00 59 9F 00 00 0E DC | 0x000000CA
| Voice Record
| 12
| 01 00 00 10 00 01 00 00 68 80 04 80 | 0x000000D6
| Voice Record
| 12
| 01 00 00 11 00 01 00 00 6D 00 04 80 | .........
| ........ | ..... | ............................................................................................ | 0x0000D0EA
| Voice Record
| 12 | 0A 1D 31 00 00 01 02 3E 94 80 0D 80 | 0x0000D0F6
| Checksum ? | 4 | 03 42 71 40 | | 0x0000D0F6 | NULL PAD
| | | 0x00012B00
| Voice Data | ?? | 1C 1B 1B 1C 1C 1B 1B 1C 1C 1B 1C 1C 1C 1B 1C
|
Format of the Language Record Offset | Tag
| Length
| Data
| | 0x00000000 | Unknown | 14 | 00 01 17 0A F0 00 04 BC 78 00 00 00 07 22 | | 0x0000000E | Unknown* | 2
| 00 10
| | 0x00000010 | Unknown**
| 2
| 00 14
| | 0x00000012 | Voice Count
| 2
| 02 7A
| 0x00000014
| Offset
| 4
| 00 00 00 65
| | 0x00000018 | Size
| 4
| 00 00 0E DC
|
Format of the Voice Record | Offset | Tag | Length | Data | | 0x00000000 | Unknown | 6 | 01 00 00 10 00 01 | | 0x00000006 | Offset | 4 | 00 00 68 80 | | 0x0000000a | Size | 2 | 04 80 |
* According to the spec, this is Usage Identification Value
| Meaning | | 0x10 | Voice Guidance A (minimum set. It is recommended that it be resident.) | | 0x11 | Voice Guidance B (other than A) | | 0x20-0x2F | Point Memory Tone (Alert Sound) | | 0x30-0x3F | Voice Guidance for Operation | | 0xE0-0xFF | Manufacturer-specific Voice (dependent on the manufacturer Identification) |
** According to the spec, this is Speaker Code + Reproduction Method Identification No.
| Bit
| Description
| | 1 | 15:8 | Speaker Code | | 2 | 7:0 | Reproduction Method Identification |
Reproduction Method Identification Value
| Meaning | | 0x01 | CD-DA | | 0x02-0x0F | Reserved | 0x10
| CD-I ADPCM Class A Mono | 0x11
| CD-I ADPCM Class A Stereo
| | 0x12 | CD-I ADPCM Class B Mono
| | 0x13 | CD-I ADPCM Class B Stereo
| | 0x14 | CD-I ADPCM Class C Mono
| | 0x15 | CD-I ADPCM Class C Stereo
| | 0x16 | 2.2S Full-rate ADPCM Mono
| | 0x17 | 2.2S Full-rate ADPCM Stereo
| | 0x18 | 2.2S Half-rate ADPCM Mono
| | 0x19 | 2.2S Half-rate ADPCM Stereo
| | 0x1A-0x1F | Reserved
| | 0x20 | MPEG Audio
| 0x21-0x2F
| Reserved
| 0x30
| Dolby-AC-3
| | 0x31-0x3F | Reserved
| | 0x40 | Linear PCM Full-rate
| | 0x41 | Reserved
| | 0x42 | Linear PCM Half-rate
|
There is just enough information here to write an extractor. I've knocked together a small parser : it only prints out details of the records in the files.
Update : there is now a GUI for viewing the contents of voicedat.kwi. This is just a first run, so all it does is display some details of the records in the file in a ( frankly crappy ) simple UI. Next release will hopefully have the ability to play the voices, and edit them. If I get the chance/have the time and the inclination that is. Download here . Update: The GUI now plays the audio content, and saves to wave.
Still to come : Add/Replace/Delete  |