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
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
headerat 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.
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 |
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.
|
74 | 16 | character | Program, e.g.
|
90 | 8 | character | Program version, e.g.
|
98 | 26 | character | Program date, e.g.
|
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:
|
168 | 20 | character | (always seen as zeros) |
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 |
samples
" for
sampled data files.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.
|
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 |
record_freq
)
containing one 64-bit float value. This Generic Item is required for sampled
data files.start_time
)
contains one 64-bit float value. This Generic Item is required for sampled
data files.max_value
)
containing either one 64-bit float (for all channels) or one value per
channel. The maximum value is an upper bound. This Generic Item is optional.0
, identifier length 0
.1
, same layout as the first part of a
Generic Item.2
, same layout as the first part of a
Generic Item.4
, same layout as the first part of a
Generic Item.8
.11
, same layout as the first part of a
Generic Item. Imbedded newline characters separate lines.13
(as in table above)15
, same layout as the first part of a
Generic Item.