MyBunnyhug

Yamaha A-Series Sample Disk Format

Important files and directories:

Sample Disk the physical Yamaha A3000/A4000/A5000 Sample CD, Zip, etc. Not Floppies!
/ the root directory of the Sample Disk.
/disk/ a Disk. Data under this directory will show up as data under a specific "Disk" on the sampler.
/disk/volume/ a Volume. Data under this directory will show up as data under a specific "Volume" on the sampler.
/disk/volume/SBNK/ a directory holding information about every sample in a volume.
/disk/volume/SMPL/ a directory holding data for every sample in a volume.
0000 an "Information File". 0000 files are found in disks, SBNK, and SMPL directories.
Fxxx a file that stores information for a specific disk/sample. xxx represents a three digit number.
Fyyy an Fxxx file with a different value for xxx

/

The root directory of the Sample Disk contains a sub-directory for every Disk on the Sample Disk. Each sub-directory represents a Disk.

example:

> cd Yamaha_Sample_Disk_Root
> ls -l
total 16
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 1DDAAB50
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 23F05C50
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 30DCA350
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 40728C50
>

This Sample Disk has 4 disks.

/disk/

Each Disk directory contains a 0000 file, a sub-directory for every Volume in the Disk, and an Fyyy file.

example:

> ls -l 1DDAAB50/
total 32
-r-xr-xr-x  1 root  wheel   288  6 Sep  1999 0000
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F001
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F002
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F003
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F004
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F005
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F006
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F007
dr-xr-xr-x  1 root  wheel  2048  6 Sep  1999 F008
-r-xr-xr-x  1 root  wheel    16  6 Sep  1999 F009
>

/disk/0000

The 0000 file contains the name of each Volume and the sub-directory associated with it as well as the name of the file that holds the Disk's name. The 0000 file has the following format:

?nnnnnnn nnnnnnnn
n?Fxxx.. ........
*
?_DSKNAM E.......
.?Fyyy.. ........

where,

n 16 byte name of the Volume. Names are padded with blank spaces until they are 16 bytes long.
Fxxx the name of the sub-directory of the volume
* repeated for the number of volumes in the disk
Fyyy the name of the file that contains the name of the disk. This file is always (?) the last file in the disk directory.

example:

> hexdump -C 1DDAAB50/0000
00000000  66 42 72 31 31 20 45 6e  73 31 41 6c 6c 20 35 31  |fBr11 Ens1All 51|
00000010  6d 5d 46 30 30 31 00 00  00 00 00 00 00 00 00 00  |m]F001..........|
00000020  55 42 72 31 32 20 45 6e  73 31 52 6d 20 20 32 31  |UBr12 Ens1Rm  21|
00000030  6d 5e 46 30 30 32 00 00  00 00 00 00 00 00 00 00  |m^F002..........|
00000040  c1 42 72 31 33 20 45 6e  73 31 52 6d 20 20 20 35  |.Br13 Ens1Rm   5|
00000050  6d 5f 46 30 30 33 00 00  00 00 00 00 00 00 00 00  |m_F003..........|
00000060  d5 42 72 31 34 20 45 6e  73 31 52 6d 45 71 20 35  |.Br14 Ens1RmEq 5|
00000070  6d 60 46 30 30 34 00 00  00 00 00 00 00 00 00 00  |m`F004..........|
00000080  49 42 72 31 35 20 45 6e  73 53 74 61 63 20 20 35  |IBr15 EnsStac  5|
00000090  6d 61 46 30 30 35 00 00  00 00 00 00 00 00 00 00  |maF005..........|
000000a0  5a 42 72 31 36 20 53 66  7a 53 77 65 6c 20 32 36  |ZBr16 SfzSwel 26|
000000b0  6d 62 46 30 30 36 00 00  00 00 00 00 00 00 00 00  |mbF006..........|
000000c0  b2 42 72 31 37 20 46 61  6c 6c 73 20 20 20 20 38  |.Br17 Falls    8|
000000d0  6d 63 46 30 30 37 00 00  00 00 00 00 00 00 00 00  |mcF007..........|
000000e0  96 42 72 31 38 20 53 63  6f 6f 70 73 20 31 33 6d  |.Br18 Scoops 13m|
000000f0  20 64 46 30 30 38 00 00  00 00 00 00 00 00 00 00  | dF008..........|
00000100  e1 5f 44 53 4b 4e 41 4d  45 00 00 00 00 00 00 00  |._DSKNAME.......|
00000110  00 65 46 30 30 39 00 00  00 00 00 00 00 00 00 00  |.eF009..........|
00000120
>

Note: the name of the last volume is "Br18 Scoops 13m ". There is a ' ' padded on the end of the name.

/disk/Fyyy

The Fyyy file holds the Disk's name. The file has the following format:

nnnnnnnn nnnnnnnn

where,

n 16 byte name of the Disk. Names are padded with blank spaces until they are 16 bytes long.

example:

> hexdump -C 1DDAAB50/F009
00000000  42 52 41 53 53 20 31 20  20 20 20 20 20 20 20 20  |BRASS 1         |
00000010
>

The name of this disk is "BRASS 1         ".

/disk/volume/

Volume directories contain up to five sub-directories and no files. The sub-directories are named PROG, SBAC, SBNK, SEQU, and SMPL. The SEQU directory exists when the Volume contains Sequence Data.

example:

> ls -l 1DDAAB50/F001/
total 64
dr-xr-xr-x  1 root  wheel   2048  6 Sep  1999 PROG
dr-xr-xr-x  1 root  wheel   2048  6 Sep  1999 SBAC
dr-xr-xr-x  1 root  wheel  12288  6 Sep  1999 SBNK
dr-xr-xr-x  1 root  wheel  16384  6 Sep  1999 SMPL
>

PROG Holds Volume's Program information
SBAC Holds Volume's Sample name information? I do not currently know the use for these files...
SBNK Holds Volume's Sample Bank information and Sample parameters
SEQU Holds Volume's Sequence Data
SMPL Holds Volume's Sample waveform data

/disk/volume/SBNK/

The SBNK folder contains a 0000 file and an Fxxx file for every Sample in the Volume.

example:

> ls -l 23F05C50/F002/SBNK/
total 0
-r-xr-xr-x  1 root  wheel  256  6 Sep  1999 0000
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F001
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F002
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F003
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F004
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F005
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F006
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F007
-r-xr-xr-x  1 root  wheel  356  6 Sep  1999 F008
>

This volume contains 8 samples (F001-F008).

/disk/volume/SBNK/0000

The 0000 file contains the names of every Sample in the volume as well as the Fxxx file (Sample parameter file) associated with it. The 0000 file has the following format:

?nnnnnnn nnnnnnnn
n?Fxxx.. ........
*

where,

n 16 byte name of the Sample. Names are padded with blank spaces until they are 16 bytes long.
Fxxx the name of the Fxxx file containing the Sample's parameters. This file also includes the name data found in the 0000 file. This fact may make the 0000 file redundant.
* repeated for the number of Samples in the Volume.

example:

> hexdump -C 23F05C50/F002/SBNK/0000
00000000  b8 42 72 61 73 73 45 6e  73 20 20 20 30 35 38 20  |.BrassEns   058 |
00000010  20 5d 46 30 30 31 00 00  00 00 00 00 00 00 00 00  | ]F001..........|
00000020  ca 42 72 61 73 73 45 6e  73 20 20 20 30 35 38 20  |.BrassEns   058 |
00000030  32 5e 46 30 30 32 00 00  00 00 00 00 00 00 00 00  |2^F002..........|
00000040  ff 42 72 61 73 73 45 6e  73 20 20 20 30 36 37 20  |.BrassEns   067 |
00000050  20 5f 46 30 30 33 00 00  00 00 00 00 00 00 00 00  | _F003..........|
00000060  11 42 72 61 73 73 45 6e  73 20 20 20 30 36 37 20  |.BrassEns   067 |
00000070  32 60 46 30 30 34 00 00  00 00 00 00 00 00 00 00  |2`F004..........|
00000080  44 42 72 61 73 73 45 6e  73 20 20 20 30 37 35 20  |DBrassEns   075 |
00000090  20 61 46 30 30 35 00 00  00 00 00 00 00 00 00 00  | aF005..........|
000000a0  56 42 72 61 73 73 45 6e  73 20 20 20 30 37 35 20  |VBrassEns   075 |
000000b0  32 62 46 30 30 36 00 00  00 00 00 00 00 00 00 00  |2bF006..........|
000000c0  2a 42 72 61 73 73 45 6e  73 20 20 20 30 38 32 20  |*BrassEns   082 |
000000d0  20 63 46 30 30 37 00 00  00 00 00 00 00 00 00 00  | cF007..........|
000000e0  3c 42 72 61 73 73 45 6e  73 20 20 20 30 38 32 20  |<BrassEns   082 |
000000f0  32 64 46 30 30 38 00 00  00 00 00 00 00 00 00 00  |2dF008..........|
00000100
>

/disk/volume/SBNK/Fxxx

The Fxxx file contains sample parameters including the Sample name and the names of the waveforms associated with the Sample. The important bytes are as follows:

Bytes (inclusive) Information
0x32 to 0x41 16 byte name of the Sample. Names are padded with blank spaces until they are 16 bytes long.
0x78 to 0x87 16 byte name of the left channel (or Mono) waveform. This name will match up to a Fxxx file in the SMPL/ directory. Names are padded with blank spaces until they are 16 bytes long.
0x88 to 0x97 16 byte name of the right channel waveform if the sample is stereo. This name will match up to a Fxxx file in the SMPL/ directory. If the sample is not stereo, all bytes will be 0. Names are padded with blank spaces until they are 16 bytes long.

example (first 256 bytes of Fxxx file):

> hexdump -C -n256 23F05C50/F002/SBNK/F001
00000000  46 53 46 53 44 45 56 33  53 50 4c 58 53 42 4e 4b  |FSFSDEV3SPLXSBNK|
00000010  00 00 00 00 00 00 00 02  00 00 01 34 00 00 00 00  |...........4....|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  10 0c 42 72 61 73 73 45  6e 73 20 20 20 30 35 38  |..BrassEns   058|
00000040  20 20 00 14 00 08 b9 86  09 02 35 30 00 00 00 00  |  ........50....|
00000050  00 00 00 00 42 72 32 31  20 45 6e 73 32 20 20 20  |....Br21 Ens2   |
00000060  20 20 32 6d 30 00 00 00  00 00 00 00 42 72 61 00  |  2m0.......Bra.|
00000070  00 00 00 00 00 00 00 00  42 72 61 73 73 45 6e 73  |........BrassEns|
00000080  20 20 20 30 35 38 20 20  00 00 00 00 00 00 00 00  |   058  ........|
00000090  00 00 00 00 00 00 00 00  09 13 51 80 00 00 00 00  |..........Q.....|
000000a0  09 13 85 40 00 00 00 00  4a 04 01 20 47 05 01 20  |...@....J.. G.. |
000000b0  49 0b 01 e0 48 0c 01 e0  00 00 00 00 00 00 00 00  |I...H...........|
000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000d0  03 00 00 00 02 00 3a 3a  ab 94 ab 94 00 00 13 05  |......::........|
000000e0  15 bf 42 24 30 01 23 28  00 00 00 00 00 00 00 00  |..B$0.#(........|
000000f0  00 02 50 56 00 00 00 00  00 00 ec a3 00 00 00 00  |..PV............|
00000100
>

The Sample's name is "BrassEns   058  ". The name of its left waveform is "BrassEns   058  ". The bytes that would contain its right waveform name are all 0. This is a mono sample. Note that the waveform names can be any 16 character long string. They do not need to relate to the Sample's name in any way. Separating the sample parameters from the sample waveform allows a single waveform to be used by multiple Samples without requiring extra memory to store the waveform data.

/disk/volume/SMPL/

The SMPL directory contains a 0000 file and an Fxxx file for every waveform in the Volume.

example:

> ls -l 23F05C50/F002/SMPL/
total 2363
-r-xr-xr-x  1 root  wheel     128  6 Sep  1999 0000
-r-xr-xr-x  1 root  wheel  303796  6 Sep  1999 F001
-r-xr-xr-x  1 root  wheel  301158  6 Sep  1999 F002
-r-xr-xr-x  1 root  wheel  299908  6 Sep  1999 F003
-r-xr-xr-x  1 root  wheel  305800  6 Sep  1999 F004
>

This volume contains 4 waveforms (F001-F004).

/disk/volume/SMPL/0000

The 0000 file contains the waveform names and the Fxxx files those names are associated with. The 0000 file has the following format:

?nnnnnnn nnnnnnnn
n?Fxxx.. ........
*

where,

n 16 byte name of the waveform. Names are padded with blank spaces until they are 16 bytes long.
Fxxx the name of the Fxxx file containing the waveform data.
* repeated for the number of waveforms in the Volume.

example:

> hexdump -C 23F05C50/F002/SMPL/0000
00000000  b8 42 72 61 73 73 45 6e  73 20 20 20 30 35 38 20  |.BrassEns   058 |
00000010  20 5d 46 30 30 31 00 00  00 00 00 00 00 00 00 00  | ]F001..........|
00000020  ff 42 72 61 73 73 45 6e  73 20 20 20 30 36 37 20  |.BrassEns   067 |
00000030  20 5e 46 30 30 32 00 00  00 00 00 00 00 00 00 00  | ^F002..........|
00000040  44 42 72 61 73 73 45 6e  73 20 20 20 30 37 35 20  |DBrassEns   075 |
00000050  20 5f 46 30 30 33 00 00  00 00 00 00 00 00 00 00  | _F003..........|
00000060  2a 42 72 61 73 73 45 6e  73 20 20 20 30 38 32 20  |*BrassEns   082 |
00000070  20 60 46 30 30 34 00 00  00 00 00 00 00 00 00 00  | `F004..........|
00000080
>

/disk/volume/SMPL/Fxxx

Each Fxxx file represnts one channel of a Sample's total waveform. Therefore, Stereo Samples are associated with two Fxxx files while Mono Samples are associated with only one Fxxx file. Any number of Samples can be associated with a single Fxxx file. All data is Big Endian!! The important bytes of the Fxxx file are as follows:

Bytes (inclusive) Information
0x00 to 0x1FF waveform parameters
0x28 to 0x29 sample rate in samples/sec. The value is an unsigned 16-bit integer.
0x200 to End of File Raw waveform data. Always 16-bits per sample?

example (first 576 bytes of Fxxx file):

> hexdump -C -n576 23F05C50/F002/SMPL/F001
00000000  46 53 46 53 44 45 56 33  53 50 4c 58 53 4d 50 4c  |FSFSDEV3SPLXSMPL|
00000010  00 00 02 00 00 00 00 03  00 00 00 7c 00 04 a0 b4  |...........|....|
00000020  00 04 a0 b4 00 00 00 00  ab 94 00 02 00 00 00 00  |................|
00000030  02 e0 42 72 61 73 73 45  6e 73 20 20 20 30 35 38  |..BrassEns   058|
00000040  20 20 36 b8 00 00 00 14  09 02 35 30 00 00 00 00  |  6.......50....|
00000050  00 00 00 00 42 72 32 31  20 45 6e 73 32 20 20 20  |....Br21 Ens2   |
00000060  20 20 32 6d 30 73 73 20  09 13 51 68 09 13 85 7e  |  2m0ss ..Qh...~|
00000070  09 02 37 00 09 13 51 68  09 13 85 40 ab 94 3a 00  |..7...Qh...@..:.|
00000080  13 05 00 00 30 01 00 00  00 00 00 00 00 00 00 00  |....0...........|
00000090  00 00 00 02 50 56 00 00  ec a3 00 01 63 b3 00 00  |....PV......c...|
000000a0  00 00 00 00 00 00 00 00  00 00 02 51 00 00 00 00  |...........Q....|
000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  ff be ff 8b ff 34 fe fb  fe c3 fe 64 fe 1c fe 01  |.....4.....d....|
00000210  fd f3 fd cf fd a6 fd 61  fc f4 fc 6f fc 01 fb 9c  |.......a...o....|
00000220  fb 3b fb 02 fb 18 fb 3e  fb 2c fb 25 fb 5a fb ca  |.;.....>.,.%.Z..|
00000230  fc 77 fd 69 fe 85 ff 84  00 93 02 24 04 25 06 27  |.w.i.......$.%.'|
00000240
>

The sample rate is "0xAB94", 43924 samples per second. The first sample of the waveform begins at 0x200.