Infantile Paralysiser's DSM format is used to hold video for playback on Nintendo DS game consoles, using homebrew software.
The file format is noninterleaved, multi-chunk.
Video appears to be specially compressed image frames, with no temporal encoding.
Audio is a modified TTA1 codec with a stripped header, TTB1.
Container Format
Index 0: Sector=0x13298c size=12304 Index 1: Sector=0x135f24 size=8 Index 2: Sector=0x25f274 size=158264 Index 3: Sector=0x2c7134 size=226400 Index 4: Sector=0x304e8c size=408632 Index 5: Sector=0xfffffff size=0 VideoSeektable: 412445416 = 23992 bytes AudioSeektable: 27348652 = 5568 bytes 20986 frames 0x51FA 15.100fps 15bit 0x0000 44 53 4d 32 DSM2 0x0004 6c 64 a1 01 00000000 44 53 4d 32 6c 64 a1 01 7c 06 f4 16 e8 6a 95 18 |DSM2ld?.|.?.?j..| 00000010 b8 5d 00 00 28 00 00 00 84 4e a1 01 ac 4e a1 01 |?]..(....N?.?N?.| 00000020 c0 15 00 00 99 19 0f ff 54 54 42 31 02 00 00 00 |?......?TTB1....| 00000030 08 00 00 00 50 0f 00 00 00 10 00 00 6c 2b 00 00 |....P.......l+..| 00000040 80 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| DSMFilename=[yesy]_Utawarerumono_-_17_[5FD891C1].dsm FileSize=412469408byte HeaderID:DSM2 VideoData=27,354,220 -> 385,091,196byte VideoSeekTableData=412,445,416 -> 23,992byte AudioData=40 -> 27,348,612byte AudioSeekTableData=27,348,652 -> 5,568byte VideoInfo FrameCount=20986Frames ScreenSize=(256x144)Pixels SampleRate=32768Hz AudioInfo HeaderID:TTB1 Attribute=3920Hz,8bits,2chs FrameLength=4096Samples FramesCount=11116Frames ExtendInfo TotalSamples=45,531,136Samples TotalTime=0:23:09 FPS=15.100frames/sec
Video Format
Nothing yet.
Audio Format
00000000 54 54 42 31 02 00 00 00 08 00 00 00 50 0f 00 00 |TTB1........P...| 00000010 00 10 00 00 6c 2b 00 00 80 04 00 00 00 00 00 00 |....l+..........| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| Format 54 54 42 31 TTB1 Channels 02 00 00 00 0x00000002 2 CH Bits 08 00 00 00 0x00000008 8 bit Hz 50 0f 00 00 0x00000f50 3920Hz FrameLen 00 10 00 00 0x00001000 4096 Samples Frames 6c 2b 00 00 0x00002b6c 11116 Frames Frame Data: FrameSz 80 04 00 00 0x00000480 1152 bytes (variable, incl crc32) FrameData FrameCRC32 3e a5 95 68 0x6895a53e CRC32 00000010 00 10 00 00 6c 2b 00 00 80 04 00 00 00 00 00 00 |....l+..........| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000490 00 00 00 00 00 00 00 00 3e a5 95 68 80 04 00 00 |........>?.h....| 0x18-$ 01 00 echo -en "\x54\x54\x41\x31\x00\x00\x02\x00\x08\x00\x50\x0f\x00\x00\x00\x10\x00\x00\x13\x0c\x6c\x74" > tta.hdr dd if=test.snd of=tta.smp bs=24 skip=1 cat tta.hdr tta.smp > sound.tta
See also: genSeekTable.php