AKAI S3000 Series Disk and File Formats

Hiroyuki Ohsaki (ohsaki[atmark]lsnl.jp)

July 18, 2019 / Version 1.0

Overview

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).

Disk Format

General Information

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).

Disk Structure

  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-

Disk Information

  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...

Volume Entry

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)

File Allocation Table (FAT)

  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

File Entry

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

File Format

Sample File Format

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.

Program File Format

  0000-00bf       program common data
  00c0-017f       keygroup 1
  0180-023f       keygroup 2
      :

program common data format

  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   

keygroup format

  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.

Hiroyuki Ohsaki (ohsaki[atmark]lsnl.jp)