Jump to content

OBD:SNDD/aif: Difference between revisions

m
replaced formula GIFs with Math markup; replaced nowiki tags around equals signs with new {{=}} magic word
m (actually that section doesn't exist, and it's not needed anyway)
m (replaced formula GIFs with Math markup; replaced nowiki tags around equals signs with new {{=}} magic word)
 
Line 15: Line 15:
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x00 | char[4]  |FF0000| 46 4F 52 4D | FORM      | identifier for the "EA IFF 85" standard }}
{{OBDtr| 0x00 | char[4]  |FF0000| 46 4F 52 4D | FORM      | identifier for the "EA IFF 85" standard }}
{{OBDtr| 0x04 | int32    |FFFF00| 00 00 2A 90 | 10896    | size of the file from 0x08 to the end (<nowiki>=</nowiki> size of the raw IMA4 data + 50 bytes) }}
{{OBDtr| 0x04 | int32    |FFFF00| 00 00 2A 90 | 10896    | size of the file from 0x08 to the end ({{=}} size of the raw IMA4 data + 50 bytes) }}
{{OBDtr| 0x08 | char[4]  |00FF00| 41 49 46 43 | AIFC      | identifier for the "AIFC" format (compressed aif file) }}
{{OBDtr| 0x08 | char[4]  |00FF00| 41 49 46 43 | AIFC      | identifier for the "AIFC" format (compressed aif file) }}
{{OBDtr| 0x0C | char[4]  |00FFFF| 43 4F 4D 4D | COMM      | identifier announcing the following aif format header (COMM stands for "common")}}
{{OBDtr| 0x0C | char[4]  |00FFFF| 43 4F 4D 4D | COMM      | identifier announcing the following aif format header (COMM stands for "common")}}
{{OBDtr| 0x10 | block[26]|FFC8C8| &nbsp;      | &nbsp;    | COMM data (a.k.a. AIFC format header, similar to a WAVE file's "fmt"; see below) }}
{{OBDtr| 0x10 | block[26]|FFC8C8| &nbsp;      | &nbsp;    | COMM data (a.k.a. AIFC format header, similar to a WAVE file's "fmt"; see below) }}
{{OBDtr| 0x2A | char[4]  |FFFFC8| 53 53 4E 44 | SSND      | identifier announcing the following aif data (actual stream + stream size + 2 more parameters) }}
{{OBDtr| 0x2A | char[4]  |FFFFC8| 53 53 4E 44 | SSND      | identifier announcing the following aif data (actual stream + stream size + 2 more parameters) }}
{{OBDtr| 0x2E | int32    |C8FFC8| 00 00 2A 66 | 10854    | size of the following SSND data (<nowiki>=</nowiki> size of the raw IMA4 data + 8 bytes)
{{OBDtr| 0x2E | int32    |C8FFC8| 00 00 2A 66 | 10854    | size of the following SSND data ({{=}} size of the raw IMA4 data + 8 bytes)
:(since SSND is the last section, this is also the remaining file size, from 0x32 to the end) }}
:(since SSND is the last section, this is also the remaining file size, from 0x32 to the end) }}
{{OBDtr| 0x32 | int32    |C8FFFF| 00 00 00 00 | 0        | "offset"; determines where the first sample in the data starts; typically zero }}
{{OBDtr| 0x32 | int32    |C8FFFF| 00 00 00 00 | 0        | "offset"; determines where the first sample in the data starts; typically zero }}
Line 28: Line 28:
Here is the detail of the format header at 0x10:
Here is the detail of the format header at 0x10:


[[image:sndd_hdm.gif]]
[[Image:sndd_hdm.gif]]


{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x10 | int32    |FFC8C8| 00 00 00 16 | 22    | size of the following COMM data (AIFC format settings) }}
{{OBDtr| 0x10 | int32    |FFC8C8| 00 00 00 16 | 22    | size of the following COMM data (AIFC format settings) }}
{{OBDtr| 0x14 | int16    |FFFFC8| 00 01      | 1    | number of channels (1 <nowiki>=</nowiki> mono) }}
{{OBDtr| 0x14 | int16    |FFFFC8| 00 01      | 1    | number of channels (1 {{=}} mono) }}
{{OBDtr| 0x16 | int32    |C8FFC8| 00 00 01 3F | 319  | [[image:sndd_hm1.gif]] }}
{{OBDtr| 0x16 | int32    |C8FFC8| 00 00 01 3F | 319  | number of frames: <math>\frac{\text{size of the part in the raw file}}{\text{number of channels}*34}</math> }}
{{OBDtr| 0x1A | int16    |C8FFFF| 00 10      | 16    | bits per sample }}
{{OBDtr| 0x1A | int16    |C8FFFF| 00 10      | 16    | bits per sample }}
{{OBDtr| 0x1C | float80  |FFC8FF| 40 0D AC... | 22050 | samples per second (a.k.a. "frequency" or "sample rate")
{{OBDtr| 0x1C | float80  |FFC8FF| 40 0D AC... | 22050 | samples per second (a.k.a. "frequency" or "sample rate")
Line 44: Line 44:
At 0x3A start the IMA4 frames, each of them 34 bytes long and coding for 64 samples. Here is a view of a stereo .aif file (based on Oni's SNDDalarm_loop.aif), showing how the IMA4 frames are organized.
At 0x3A start the IMA4 frames, each of them 34 bytes long and coding for 64 samples. Here is a view of a stereo .aif file (based on Oni's SNDDalarm_loop.aif), showing how the IMA4 frames are organized.


[[image:sndm_aif2.gif]]
[[Image:sndm_aif2.gif]]


{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x00 | char[4]  |FF0000| 46 4F 52 4D | FORM  | identifier for the "EA IFF 85" standard }}
{{OBDtr| 0x00 | char[4]  |FF0000| 46 4F 52 4D | FORM  | identifier for the "EA IFF 85" standard }}
{{OBDtr| 0x04 | int32    |FFFF00| 00 01 16 4E | 71246 | size of the file from 0x08 to the end (<nowiki>=</nowiki> size of the raw IMA4 data + 50 bytes) }}
{{OBDtr| 0x04 | int32    |FFFF00| 00 01 16 4E | 71246 | size of the file from 0x08 to the end ({{=}} size of the raw IMA4 data + 50 bytes) }}
{{OBDtr| 0x08 | char[4]  |00FF00| 41 49 46 43 | AIFC  | identifier for the "AIFC" format (compressed aif file) }}
{{OBDtr| 0x08 | char[4]  |00FF00| 41 49 46 43 | AIFC  | identifier for the "AIFC" format (compressed aif file) }}
{{OBDtr| 0x0C | char[4]  |00FFFF| 43 4F 4D 4D | COMM  | identifier announcing the following aif format header (COMM stands for "common")}}
{{OBDtr| 0x0C | char[4]  |00FFFF| 43 4F 4D 4D | COMM  | identifier announcing the following aif format header (COMM stands for "common")}}
{{OBDtr| 0x10 | int32    |FFC8C8| 00 00 00 16 | 22    | size of the following COMM data (AIFC format settings) }}
{{OBDtr| 0x10 | int32    |FFC8C8| 00 00 00 16 | 22    | size of the following COMM data (AIFC format settings) }}
{{OBDtr| 0x14 | int16    |FFFFC8| 00 02      | 2    | number of channels (2 <nowiki>=</nowiki> stereo) }}
{{OBDtr| 0x14 | int16    |FFFFC8| 00 02      | 2    | number of channels (2 {{=}} stereo) }}
{{OBDtr| 0x16 | int32    |C8FFC8| 00 00 04 17 | 1047  | [[image:sndd_hm1.gif]] }}
{{OBDtr| 0x16 | int32    |C8FFC8| 00 00 04 17 | 1047  | number of frames: <math>\frac{\text{size of the part in the raw file}}{\text{number of channels}*34}</math> }}
{{OBDtr| 0x1A | int16    |C8FFFF| 00 10      | 16    | bits per sample }}
{{OBDtr| 0x1A | int16    |C8FFFF| 00 10      | 16    | bits per sample }}
{{OBDtr| 0x1C | float80  |FFC8FF| 40 0D AC... | 22050 | samples per second (a.k.a. "frequency" or "sample rate")
{{OBDtr| 0x1C | float80  |FFC8FF| 40 0D AC... | 22050 | samples per second (a.k.a. "frequency" or "sample rate")
Line 60: Line 60:
{{OBDtr| 0x26 | char[4]  |FFC800| 69 6D 61 34 | ima4  | compression type }}
{{OBDtr| 0x26 | char[4]  |FFC800| 69 6D 61 34 | ima4  | compression type }}
{{OBDtr| 0x2A | char[4]  |00FFC8| 53 53 4E 44 | SSND  | identifier announcing the following aif data (actual stream + stream size + 2 more parameters) }}
{{OBDtr| 0x2A | char[4]  |00FFC8| 53 53 4E 44 | SSND  | identifier announcing the following aif data (actual stream + stream size + 2 more parameters) }}
{{OBDtr| 0x2E | int32    |FF00C8| 00 01 16 24 | 71204 | size of the following SSND data (<nowiki>=</nowiki> size of the raw IMA4 data + 8 bytes)
{{OBDtr| 0x2E | int32    |FF00C8| 00 01 16 24 | 71204 | size of the following SSND data ({{=}} size of the raw IMA4 data + 8 bytes)
:(since SSND is the last section, this is also the remaining file size, from 0x32 to the end) }}
:(since SSND is the last section, this is also the remaining file size, from 0x32 to the end) }}
{{OBDtr| 0x32 | int32    |C8FF00| 00 00 00 00 | 0    | "offset"; determines where the first sample in the data starts; typically zero }}
{{OBDtr| 0x32 | int32    |C8FF00| 00 00 00 00 | 0    | "offset"; determines where the first sample in the data starts; typically zero }}
Line 75: Line 75:
*For the stereo example, there are 1047 frames of 68 bytes each (a stereo frame is the combination of a Left frame and a Right frame), or 71196 bytes (8 bytes less than 0x11624, 50 bytes less than 0x1164E).
*For the stereo example, there are 1047 frames of 68 bytes each (a stereo frame is the combination of a Left frame and a Right frame), or 71196 bytes (8 bytes less than 0x11624, 50 bytes less than 0x1164E).
The SNDD file in .dat receives the offset to the .raw data as well as several parameters that depend on the engine version.  
The SNDD file in .dat receives the offset to the .raw data as well as several parameters that depend on the engine version.  
===Filling in Mac SNDD===
===Filling in Mac SNDD===
Here is how the SNDD instance should look (in .dat) for the above mono example:
Here is how the SNDD instance should look (in .dat) for the above mono example:


[[image:sndd_alm.gif]]
[[Image:sndd_alm.gif]]


*The "compressed" flag is set (because IMA4 is a compressed format; however, if the flag isn't set, the Mac engine will process the data as IMA4 anyway).
*The "compressed" flag is set (because IMA4 is a compressed format; however, if the flag isn't set, the Mac engine will process the data as IMA4 anyway).
Line 89: Line 90:
Here is how the SNDD instance looks (in an .oni file) for the above stereo example:
Here is how the SNDD instance looks (in an .oni file) for the above stereo example:


[[image:sndd_alm2.gif]]
[[Image:sndd_alm2.gif]]


Same as above, except:
Same as above, except:
Line 101: Line 102:
Here is how the PC retail SNDD instance will look (in an .oni file) for the above stereo example:
Here is how the PC retail SNDD instance will look (in an .oni file) for the above stereo example:


[[image:sndd_alm4.gif]]
[[Image:sndd_alm4.gif]]


All the fields can be zeroed out or filled with garbage, except:
All the fields can be zeroed out or filled with garbage, except: