Hiroyuki Ohsaki (ohsaki[atmark]lsnl.jp)
July 18, 2019 / Version 1.0
The following is the disk and file formats of AKAI S3000 series samplers. To the best of my knowledge, the disk and file formats of S3000 CD-ROM are not disclosed and explained anwhere. So, I analyed its disk and file formats using a binary editor as well as a large number of experiments and tries/errors. The follwoing document is the outcome of my analysis done in 1993, which results in akaitools --- a set of utilities for AKAI S-series samplers (S1000/S1100/S2800/S3000/S3200/CD3000/S2000/S3000XL/S3200XL).
The block size is fixed at 0x2000 (8192 bytes).
AKAI encoded strings can be decoded with perl as
tr/\x00-\x28/0-9 A-Z#+-./ .
All numbers are strored in little-endian (lower byte comes earlier).
0000-00c9 disk information
00ca-0709 volume entry (16 bytes * 100)
070a- file allocation table (FAT)
6000- file entry of volume 1
part 1
4400-452b ??
4500- partition table??
1x1 01 01 80 00 80 00 00 00 00 .. 00
00 .. 00 00 .. 00
00 .. 00 62 03 62 03
2x1 01 01 00 01 00 01 00 00 00 .. 00
00 .. 00 00 .. 00
00 .. 00 5e 03 5e 03
3x1 01 01 80 01 80 01 00 00 00 .. 00
00 .. 00 00 .. 00
00 .. 00 5a 03 5a 03
2x2 02 01 00 01 00 01 00 02 00 .. 00
00 .. 00 00 .. 00
00 .. 00 56 03 56 03
1x2 02 01 80 00 80 00 00 01 00 .. 00
00 .. 00 00 .. 00
00 .. 00 5e 03 5e 03
1x3 03 01 80 00 80 00 80 00 80 01 00 .. 00
00 .. 00 00 .. 00
00 .. 00 5a 03 5a 03
1x4 04 01 80 00 80 00 80 00 80 00 00 02 00 00 00 00
00 .. 00 00 .. 00
00 .. 00 56 03 56 03
00 number of partitions
01 ?? (fixed at 01)
02-03 partition size 1 (in blocks)
04-05 partition size 2
:
partition size n
total disk size
28 check sum (0x66 - partition size * 4)
29 ?? (fixed at 03)
2a check sum
2b ?? (fixed at 03)
4600-47ff ??
part 2
104000-10412b
104100 partition table??
104600-1047ff
204000-
00-01 partition size (in blocks)
c6-c7 ?? (see below)
c8-c9 ?? (fixed at 0x2f, 0x00)
The partition size is assumed to be in unit of 128 (0x80) blocks. The values of c6 and c7 are calucated as follows:
x = (disk_size_in_blocks / 128) - 1
c6 = (x mode 2 == 0) ? 0x55 : 0xd5
c7 = 0xba + int(x / 2)
I don't know what these values mean...
At most 100 volume entries are contained.
0000-000f volume entry 1
0010-001f volume entry 2
0020-002f volume entry 3
:
0630-063f volume entry 100
Each volume entry has the following structure.
00-0b volume name (AKAI encoded string)
0c-0d volume type (0=inactive, 1=S1000 volume, 3=S3000 volume)
0e-0f volume start (in blocks)
0000-0001 block 0 (always 0040)
0002-0003 block 1 (always 0040)
0004-0005 block 2 (always 0040)
0006-0007 block 3
:
58f4-58f5 block 11386
The limitation of disk capacity may stem from the limiation in the number of fat entries.
The meaning of FAT is as follows.
0040 reserved (for disk info., volume/file entries)
0080 reserved (second file entry; S3000 only)
00c0 end of file
0000 free
others points to the next block
The start address is pointed by `volume start' in the volume entry. There are at most 341 file entries in the volume in S1000 (0x2000 / 24). On the other hand, S3000 file entry spans over two blocks, so that (2 * 0x2000 / 24) entries can be stored.
0000-0017 file entry 1
0018-002f file entry 2
:
1fb0-1fc7 file entry 339
1fc8-1fdf file entry 340
:
2fd0-2fe7 file entry 511
2fe8-2fff file entry 512
3000-317f ???
max = 128 in S1000
max = 512 in S3000
entry 511 is tune/level of 00 01 01 00 00 00 32 09 0c ff x14
Each file entry has the following structure.
00-0b file name (AKAI encoded string)
0c-0f ??
10 file type (see below)
11-13 file size (in bytes)
14-15 start (in blocks) (address = start * 0x2000)
16-17 ??
file type identifier:
64=drum
70=S1000-program
71=QL
73=S1000-sample
78=effect
f0=S3000-program
f3=S3000-sample
You should also refer to ``AKAI S2800/S3000/S3200 MIDI System Exclusive Format'' found in www.akai.com.
0000-00bd sample header
00be- sample data
The sample header has the following structure.
00 sample header id (1=S1000, 3=S3000)
01 bandwidth (0=10khz, 1=20khz)
02 original pitch (24-127 = C0-G8)
03-0e name (AKAI encoded string)
0f sampel rate ssrate valid (80=yes)
10 # of active loops (internal use)
11 first active loop (internal use)
12 dummy
13 playback type (0=loop in release, 1=loop until release, 2=no looping,
3=play to sample end)
14 pitch offset (decimal) / 256
15 pitch offset
16-19 data absolute start address (internal?)
1a-1d data length (in samples)
1e-21 play relative start address
22-25 play relative end address
26-29 (1) loop at
2a-2b (1) loop len (decimal) / 65536
2c-2f (1) loop len
30-31 (1) loop times (0=no loop, 1-9998=msec, 9999=hold)
:
:
7a-7d (8) loop at
7e-7f (8) loop len (decimal) / 65536
80-83 (8) loop len
84-85 (8) loop times (0=no loop, 1-99998=msec, 9999=hold)
86-87 dummy
88-89 address of stereo partner (internal)
8a-8b sample rate in HZ
8c hold loop tune offset
8d-bd ?? (from 0xc0??)
The sample data is stored in 16bit, linear, unsigned PCM format. The data length is given by ``data length'' in its sample header.
0000-00bf program common data
00c0-017f keygroup 1
0180-023f keygroup 2
:
00 C 1 program header id
01-02 x2 n/a 1st keygroup address (internal)
03-0e a12 program name
0f C 0 MIDI program number (0-127)
10 C 0 MIDI channel (0-15, ff=omni)
11 C 31 polyphony (1-32; 1-16 in S1000)
12 C 1 priority (0=low, 1=normal, 2=high, 3=hold)
13 C 24 play range low (24-127 = C0-G8)
14 C 127 play range high (24-127 = C0-G8)
15 C 0 play octave (keyboard) shift (+/-2)
16 C 255 indivisual output (0-7, ff=off)
17 C 99 stereo level
18 C 0 stereo pan
19 C 80 loudness
1a C 20 velocity > loud
1b C 0 key > loud
1c C 0 pressure > loud
1d C 0 pan LFO rate
1e C 99 pan depth
1f C 0 pan LFO delay
20 C 0 key > pan position
21 C 50 LFO speed
22 C 0 LFO fixed depth
23 C 0 LFO delay
24 C 30 modwheel > depth
25 C 0 pressure > depth
26 C 0 velocity > depth
27 C 2 bendwheel > pitch
28 C 0 pressure > pitch
29 C 0 keygroup crossfade (0=off, 1=on)
2a C # of keygroups (1-99)
2b C n/a temporary program number (internal)
2c-37 C12 key temperament
38 C 0 echo output level (0=off, 1=on)
39 C 0 modwheel pan amount
3a C 0 sample start coherence (0=off, 1=on)
3b C 0 LFO de-sync (0=off, 1=on) (def. 0)
3c C 0 pitch law
3d C 0 voice assign algorithm (0=oldest, 1=quietest)
3e C 10 soft pedal loudness reduction
3f C 10 soft pedal attack stretch
40 C 10 soft pedal filter close
41-42 v 0 tune offset
43 C 0 key > LFO rate
44 C 0 key > LFO depth
45 C 0 key > LFO delay
46 C 50 voice output scale
47 C 0 stereo output scale
48-bf
0000-0021 keygroup common data
0022-
00 C 2 keygroup block id
01-02 v n/a next keygroup block address (internal)
03 C 24 keyrange low
04 C 127 keyrange high
05-06 v 0 tune offset
07 C 99 filter freq.
08 C 0 key > filter freq.
09 C 0 velocity > filter freq.
0a C 0 pressure > filter freq.
0b C 0 envelope > filter freq.
0c C 25 amp. attack
0d C 50 amp. decay
0e C 99 amp. sustain
0f C 45 amp. release
10 C 0 velocity > amp. attack
11 C 0 velocity > amp. release
12 C 0 off velocity > amp. release
13 C 0 key > decay & release
14 C 0 filter attack
15 C 50 filter decay
16 C 99 filter sustain
17 C 45 filter release
18 C 0 velocity > filter attack
19 C 0 velocity > filter relase
1a C 0 off velocity > fiter release
1b C 0 key > decay & release
1c C 25 velocity > filter envelope output
1d C 0 envelope > pitch
1e C 1 velocity zone crossfade (0=off, 1=on)
1f C n/a # of velocity zones (internal)
20 C n/a internal
21 C n/a internal
22-2d A12 sample name
2e C 0 velocity range low
2f C 127 velocity range high
30-31 v 0 tune offset
32 C 0 loudness offset
33 C 0 filter freq. offset
34 c 0 pan offset
35 C 0 loop in relase
36 C n/a low velocity xfade factor (intarnal)
37 C n/a low velocity xfade factor (intarnal)
38-39 v n/a sample header block address (intarnal)
3a-52 velocity zone 2
53-69 velocity zone 3
6a-82 velocity zone 4
83 C 0 fixed rate detune
84 C 0 attack hold until loop
85-88 C4 0 constant pitch for zone 1--4 (0=track, 1=const); 84??
89-8c C4 0 output number offset for zone 1--4
8d-94 v4 0 velocity > sample start
95 C 0 velocity > loudness offset
96-bf ??
97 C 0 vel. > filter freq.
98 C 0 pres. > filter freq.
99 C 0 env. > filter freq.