Chapter 9. Simple Signal File Format (SSFF)

Table of Contents
SSFF Utilities
Using SSFF in C programs
Using SSFF in C++ programs
Implementation of SSFF


SSFF stands for Simple Signal File Format. SSFF defines a format for storing laboratory data files, libraries exist for C and C++ which allow reading, writing and manipulation of the data stored in this format.

SSFF was developed originally to provide an alternative to the ESPS (Entropic Signal Processing System) file format, which is proprietary. Not only is the ESPS file format documentation not publicly available, but the accessing of files using the ESPS libraries (currently the only way) involves the use of a draconian licence manager system.

The SSFF system is equivalent to the ESPS format in that files can be easily converted between the two systems. In this sense, SSFF provides an equivalent representation for the storing of data. The SSFF library, however, will read and write in both formats (given that the ESPS libraries are available). The SSFF library will also read files generated by the SpeechStation software on the IBM-PC and could be extended to read other file formats where appropriate.

What are signal files?

Signal files hold data which is representative of, or derived from, analogue signals which measure real world phenomena. Examples are: sampled waveform data, spectrographic data, pitch data from speech and formant parameters.

Every signal file has a characteristic recording (or sampling) frequency and starting time; these are typically stored in a header prepended to the actual data. SSFF files can also store an arbitrary number of variables in the file header. These variables serve to provide additional information about the data in the file. Examples of variables that might be stored in an SSFF file include comments about the data, information about how the data was derived from other signals and labels relating to events in the data.

The data is stored in the files as fields. Each field has a dimensionality, like an array in a programming language, and also a type (e.g. integer, floating point, character etc.). A file may have an arbitrary number of fields, each with a different type. A record consists of a value for each field (and all dimensions) at a particular sample point. Each file can have an arbitrary number or records.

Why is SSFF useful?

It makes a lot of sense to store all signal files in a common format. SSFF provides such a format, and is general enough to store most, if not all, parameters relating to speech. This means that the SSFF libraries can be used to access and manipulate all the data files, saving the programmer a lot of effort. Also, programs do not have to assume the value of items such as recording frequency etc. as this information is stored in the file. This allows signal processing programs to be more general, and hopefully more useful.

The SSFF system also allows for a degree of binary portability across machine platforms. For example, a binary signal file storing floating point data can be moved directly across to a PC environment, and read without further processing.

Data Types

The SSFF system can store signal information in numeric or character form. Files can have an arbitrary number of fields, and generally the data is time related. However, the format can also be used to store lists of information of any sort. The fact that the headers can have any number of variables also means that as much information can be stored about the file as is desired. The random access facility of SSFF files make them suitable for storing information such as labels and diphone pairs for example. The SSFF format is analogous to a stored spreadsheet -- information is stored in a number of fields (columns) and these columns can be of any length.