Audio File Format Specifications

File Description: ESPS sampled data file
File Extension: Commonly .sd
File Byte Order: Little-endian or big-endian

Prof. Peter Kabal, MMSP Lab, ECE, McGill University: Last update: 2017-01-20

ESPS Audio File Specifications

Entropic Research Laboratories used a proprietary file format for its WAVES+ display program, ESPS signal processing library, and the HTK hidden Markov model speech recognition toolkit. WAVES+ and ESPS were withdrawn when Entropic was acquired by Microsoft in October 1999. HTK is now being maintained and distributed free of charge by Cambridge University: HTK Hidden Markov Model Toolkit - speech recognition research toolkit. The current version of HTK accepts a number of file formats including the Esignal format designated by Entropic to supercede the ESPS file format.

The ESPS file system is complicated by design. ESPS files are infamous as to the length of their headers; the standard ESPS programs imbed the header of the input file(s) along with processing parameters into the header of the output file to provide a complete history of the processing steps. From the Entropic document, The Esignal File Format, draft document 1995-08-24,

The self-description portion of a FEA file is stored in a header at the beginning of the file. There is no simple description of the format for such headers because their specification is essentially algorithmic - in effect, the format is defined as the representation that is read and written by the ESPS library functions read_header and write_header. For example, these functions include hash coding for the tables contained in the header. ...

The situation is complicated by licensing considerations; the structure of ESPS and the patterns of desirable ESPS program usage made it necessary to perform product license checks within read_header and write_header.

Nonetheless, it is possible to read sound data from ESPS files.

ESPS FEA-SD files (feature files with sampled data) contain a preamble and a fixed part of the header which in fact gives most of the information necessary to extract the data from the file.

Preamble

Offset Length Type Contents
0 4 integer Machine code
4 4 integer Version check code: (3000)
8 4 integer Data offset
12 4 integer Record size
16 4 character ESPS magic number: 0x00006A1A for big-endian data, or 0x1A6A0000 for little-endian data
20 4 integer EDR flag, 0 or non-zero
24 4 integer Alignment pad
28 4 integer Pointer to foreign header, or -1

Fixed Part of the Header

Offset Length Type Contents
32 2 integer File type (13 for an FEA file)
34 2 integer -
36 4 character ESPS magic number, 0x00006A1A or reversal
40 26 character Date, e.g. Fri May 26 23:57:43 1995
66 8 character Header version, e.g. 1.85
74 16 character Program, e.g. copysps
90 8 character Program version, e.g. 3.14
98 26 character Program date, e.g. 6/19/91
124 4 integer Number of data records (frames)
128 2 integer Tag flag, 0 or non-zero
130 2 integer -
132 4 integer Number of 64-bit floats in a record
136 4 integer Number of 32-bit floats in a record
140 4 integer Number of 32-bit integers in a record
144 4 integer Number of 16-bit integers in a record
148 4 integer Number of characters in a record
152 4 integer Length of the fixed part of the header (40)
156 4 integer Total length of the header
160 8 character User name: sccsmas
168 20 character (always seen as zeros)

Feature File Header Information

The feature header has the following structure.

Offset Length Type Contents
188 2 integer Feature file type (8 for a FEA-SD file)
190 2 integer Labelled flag
192 2 integer Number of fields

FEA Items

The preamble and fixed part of the header give us most of the information needed. What is missing is the sampling frequency. This and other information is contained in Generic Items. Each Generic Item has the following form.

Offset Length Type Contents
0 2 integer Code: 13
2 2 integer Identifier length (number of 4 byte words)
4 n character Identifier string (null terminated, multiple of 4 bytes), e.g. record_freq
n+4 4 integer Data count
n+8 2 integer Data type: 64-bit float (1), 32-bit float (2), 32-bit integer (3), 16-bit integer (4)
n+10 - - Data

Sample Files

addf8.sd (48 kB)
ESPS file, big-endian byte order, 16-bit data, 8 kHz sampling rate
speech12.sd (84 kB)
ESPS file, big-endian byte order, 32-bit float data, 12 kHz sampling rate.