Aufbau des SNDSoundStruct


next up gif
Next: AIFF Up: SND Previous: SND

Aufbau des SNDSoundStruct

Der SNDSoundStruct hat folgenden Aufbau (C Syntax):

typedef struct {
    int magic; /* magic number SND_MAGIC */
    int dataLocation; /* offset or pointer to the data */
    int dataSize; /* number of bytes of data */
    int dataFormat; /* the data format code */
    int samplingRate; /* the sampling rate */
    int channelCount; /* the number of channels */
    char info[4]; /* optional text information */
} SNDSoundStruct;
magic ist die (UNIX übliche) Dateikennung 0x2e736e64, was der ASCII Repräsentation der Zeichenfolge ,,.snd''´ entspricht. dataLocation ist üblicherweise der Byte-Offset des Beginns der Daten vom Beginn des SNDSoundStruct. Dieser Wert ist mindestens 28 (= sizeof(SNDSoundStruct)). Bei fragmentierten Daten kann in diesem Feld auch ein Zeiger abgelegt sein (s.u.). dataSize gibt die Größe des Datenteils in Byte an.

dataFormat gibt die Bedeutung der Daten an. Werte zwischen 0 und 255 werden bereits benutzt oder sind reserviert für spätere Erweiterungen, andere Werte können frei verwendet werden. Die derzeit definierten Formate sind:

Die meisten Formate unterscheiden sich durch die Auflösung und die Darstellung der Abtastwerte. Die Formate SND_FORMAT_DSP_CORE und SND_FORMAT_DSP_COMMANDS enthalten keine Abtastwerte, sondern Programme für den internen Signalprozessor. Ebenso enthält das Format SND_FORMAT_DISPLAY keine Audiodaten.

SND_FORMAT_INDIRECT gibt an, daß die Abtastpunkte nicht mehr in einem durchgehenden Speicherbereich abgelegt sind. Dies wird verwendet, um beim Editieren von Klangdaten (z.B. Löschen oder Einfügen von Bereichen) nicht ständig Speicherbereiche kopieren zu müssen. Jeder Bereich wird als eigener Klang mit eigenem SNDSoundStruct im Speicher abgelegt. dataLocation des originalen SNDSoundStruct zeigt auf eine Tabelle von Zeigern, die wiederum auf die einzelnen SNDSoundStructs der Bereiche zeigen. Bei Verwendung der Systemfunktionen muß nicht bekannt sein, ob die Daten fragmentiert sind oder nicht. Persistente Dateien sind nie vom Typ SND_FORMAT_INDIRECT.

Für samplingRate sind derzeit die Konstanten SND_RATE_CODEC (8012,821 Hz), SND_RATE_LOW (22,05 kHz) und SND_RATE_HIGH (44,1 kHz) definiert. channelCount gibt die Anzahl der gespeicherten Audiokanäle an. info ist ein beliebiger null-terminierter Beschreibungstext. Der Text kann länger als 3 Zeichen sein, falls er kürzer ist, werden dennoch 4 Bytes reserviert.



Martin Gerczuk
Wed May 3 18:29:11 MET DST 1995