1.
Introduction
AIBO ODA files are archives containing multiple other
files. Typically motion, LED, or sound elements for
skits.
ODA's consist of a 64-byte header, followed by an index
table storing chunk names & file offset/length of the corresponding
elements, followed by the chunks/elements themselves.
These files may be optionally GZIP compressed -- AIBO can decompress
them on-the-fly. In Aibo Mind, the file headers are
uncompressed and the -entries-
individually GZIP compressed. This enables AIBO to
dynamically load compressed audio files without reading the
entire ODA archive (as necessary for decompressing whole files).
2.
ODA
Header
struct oda_header_type { char signature[4]; // "ODAR" int oda_version; // 0x30000 int entry_count; int index_recordlen; // Size of ODA Index Entry (always 0x90) char reserved[0x30]; };
|
3.
ODA
Index Entry
struct oda_index_type { char signature[4]; // Signature copied from chunk/element. char chunk_name[0x80]; // Reference name for chunk/element (null padded). unsigned data_ofs; // Byte offset within file of chunk/element. int data_len; // Byte length of chunk/element. unsigned reserved; };
|
4.
Example
Simple ODA file containing two LED files...
000000: 4f 44 41 52 00 00 03 00 02 00 00 00 90 00 00 00 |ODAR............| 000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000040: 4c 45 44 00 4e 65 77 53 6b 69 74 31 00 00 00 00 |LED.NewSkit1....| 000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c0: 00 00 00 00 60 01 00 00 41 00 00 00 00 00 00 00 |....`...A.......| 0000d0: 4c 45 44 00 4e 65 77 53 6b 69 74 32 00 00 00 00 |LED.NewSkit2....| 0000e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000150: 00 00 00 00 a1 01 00 00 3a 00 00 00 00 00 00 00 |........:.......| 000160: 4d 54 68 64 00 00 00 06 00 00 00 01 00 78 4d 54 |MThd.........xMT| 000170: 72 6b 00 00 00 2b 00 ff 01 09 4d 4f 44 45 4c 3d |rk...+....MODEL=| 000180: 32 31 30 00 ff 03 08 75 6e 74 69 74 6c 65 64 00 |210....untitled.| 000190: ff 51 03 07 a1 20 00 90 54 7f 78 54 00 00 ff 2f |.Q... ..T.xT.../| 0001a0: 00 4d 54 68 64 00 00 00 06 00 00 00 01 00 78 4d |.MThd.........xM| 0001b0: 54 72 6b 00 00 00 24 00 ff 03 08 75 6e 74 69 74 |Trk...$....untit| 0001c0: 6c 65 64 00 ff 51 03 07 a1 20 00 90 3c 7f 00 3d |led..Q... ..<..=| 0001d0: 7f 78 3c 00 00 3d 00 00 ff 2f 00 |.x<..=.../. |
Download Example
|