19,041
edits
m (changed family) |
m (replaced formula GIFs with Math markup; replaced nowiki tags around equals signs with new {{=}} magic word) |
||
Line 18: | Line 18: | ||
The below example was taken from Mac Oni. In PC demo the file would look the same, except for possibly different res_id (at 0x00) and smaller raw data size (at 0x10). | The below example was taken from Mac Oni. In PC demo the file would look the same, except for possibly different res_id (at 0x00) and smaller raw data size (at 0x10). | ||
[[ | [[Image:sndd_alm.gif]] | ||
{{Table}} | {{Table}} | ||
Line 109: | Line 109: | ||
Below is the .dat file part used in the PC retail version. | Below is the .dat file part used in the PC retail version. | ||
[[ | [[Image:sndd_all.gif]] | ||
{{Table}} | {{Table}} | ||
Line 138: | Line 138: | ||
If the "8" flag of the SNDD (at 0x08) is ON and the "4" flag is OFF (as is always the case in Vanilla Oni), the 50-byte block is interpreted as a standard "fmt " chunk that you find in WAVE files (see [[/wav|HERE]] for details). | If the "8" flag of the SNDD (at 0x08) is ON and the "4" flag is OFF (as is always the case in Vanilla Oni), the 50-byte block is interpreted as a standard "fmt " chunk that you find in WAVE files (see [[/wav|HERE]] for details). | ||
[[ | [[Image:sndd_hd.gif]] | ||
{{Table}} | {{Table}} | ||
{{OBDth}} | {{OBDth}} | ||
{{OBDtr| 0x0C | int16 |FFFFC8| 02 00 | 2 | format ID (2 | {{OBDtr| 0x0C | int16 |FFFFC8| 02 00 | 2 | format ID (2 {{=}} MS ADPCM format) | ||
:<small>'''N.B.''' At the time of writing, only "1" (linear PCM) and "2" (MS ADPCM) are known to work in Oni; in Vanilla Oni, only MS ADPCM is ever used.</small>}} | :<small>'''N.B.''' At the time of writing, only "1" (linear PCM) and "2" (MS ADPCM) are known to work in Oni; in Vanilla Oni, only MS ADPCM is ever used.</small>}} | ||
{{OBDtr| 0x0E | int16 |C8FFC8| 01 00 | 1 | number of channels (1 | {{OBDtr| 0x0E | int16 |C8FFC8| 01 00 | 1 | number of channels (1 {{=}} mono) | ||
:<small>'''N.B.''' Both PCM and ADPCM support only mono and stereo sounds, i.e., 1 or 2 channels.</small>}} | :<small>'''N.B.''' Both PCM and ADPCM support only mono and stereo sounds, i.e., 1 or 2 channels.</small>}} | ||
{{OBDtr| 0x10 | int32 |C8FFFF| 22 56 00 00 | 22050 | sample rate in Hz (samples per second), a.k.a. "sampling frequency" }} | {{OBDtr| 0x10 | int32 |C8FFFF| 22 56 00 00 | 22050 | sample rate in Hz (samples per second), a.k.a. "sampling frequency" }} | ||
{{OBDtr| 0x14 | int32 |FFC8FF| 93 2B 00 00 | 11155 | | {{OBDtr| 0x14 | int32 |FFC8FF| 93 2B 00 00 | 11155 | ADPCM average data rate: <math>\frac{\text{samples per second}*\text{block alignment}}{\text{samples per block}}</math> }} | ||
:<small>'''N.B.''' For PCM, the data rate is simply | :<small>'''N.B.''' For PCM, the data rate is simply ''samples per second*block alignment'', seeing as each sample gets its own block.</small> | ||
:<small>'''N.B.''' For ADPCM, the average data rate is based on whole ADPCM blocks (not accounting for how Oni truncates the .raw data).</small>}} | :<small>'''N.B.''' For ADPCM, the average data rate is based on whole ADPCM blocks (not accounting for how Oni truncates the .raw data).</small>}} | ||
{{OBDtr| 0x18 | int16 |FFC800| 02 00 | 512 | block alignment a.k.a "block size", in bytes | {{OBDtr| 0x18 | int16 |FFC800| 02 00 | 512 | block alignment a.k.a. "block size", in bytes | ||
:<small>'''N.B.''' The block size is trivially 2 bytes for PCM mono (one 16-bit sample) and 4 bytes for PCM stereo (Left and Right 16-bit samples).</small> | :<small>'''N.B.''' The block size is trivially 2 bytes for PCM mono (one 16-bit sample) and 4 bytes for PCM stereo (Left and Right 16-bit samples).</small> | ||
:<small>'''N.B.''' For ADPCM, Oni's Vanilla data always uses 512 bytes per channel for 22050 Hz waveforms, and 1024 bytes for 44.1 kHz mono (see below).}} | :<small>'''N.B.''' For ADPCM, Oni's Vanilla data always uses 512 bytes per channel for 22050 Hz waveforms, and 1024 bytes for 44.1 kHz mono (see below).}} | ||
Line 156: | Line 156: | ||
{{OBDtrBK|1=Special extended ADPCM wav format header (black outline); fully ignored if the format ID is 1 }} | {{OBDtrBK|1=Special extended ADPCM wav format header (black outline); fully ignored if the format ID is 1 }} | ||
{{OBDtr| 0x1C | int16 |C87C64| 20 00 | 32 | size of the extra ADPCM parameters, in bytes; typically always 32 }} | {{OBDtr| 0x1C | int16 |C87C64| 20 00 | 32 | size of the extra ADPCM parameters, in bytes; typically always 32 }} | ||
{{OBDtr| 0x1E | int16 |B0C3D4| F4 03 | 1012 | | {{OBDtr| 0x1E | int16 |B0C3D4| F4 03 | 1012 | samples per block: <math>\dfrac{(\text{block alignment}-7*\text{number of channels})*8}{\text{bits per sample}*\text{number of channels}}+2</math> }} | ||
{{OBDtr| 0x20 | int16 |E7CEA5| 07 00 | 7 | number of the following coefficient pairs; always 7 in practice }} | {{OBDtr| 0x20 | int16 |E7CEA5| 07 00 | 7 | number of the following coefficient pairs; always 7 in practice }} | ||
|-align=center valign=top | |-align=center valign=top | ||
| 0x22 || int16-16 || bgcolor="#FFDDDD" | 00 01 00 00 || 256, 0 || rowspan=7 align=left | The coefficient pairs themselves (always the same in practice).<br> | | 0x22 || int16-16 || bgcolor="#FFDDDD" | 00 01 00 00 || 256, 0 || rowspan=7 align=left | The coefficient pairs themselves (always the same in practice).<br><math>\begin{array}{|c|c||c|} \text{coefficient set} & \text{coefficient 1} & \text{coefficient 2} \\ | ||
\hline | |||
0 & 256 & 0\\ | |||
1 & 512 & -256\\ | |||
2 & 0 & 0\\ | |||
3 & 192 & 64\\ | |||
4 & 240 & 0\\ | |||
5 & 460 & -208\\ | |||
6 & 392 & -232 | |||
\end{array} </math> | |||
|-align=center valign=top | |-align=center valign=top | ||
| 0x26 || int16-16 || bgcolor="#FFDDDD" | 00 02 00 FF || 512, -256 | | 0x26 || int16-16 || bgcolor="#FFDDDD" | 00 02 00 FF || 512, -256 |