unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.9)
Page:
Section:
Apropos / Subsearch:
optional field



File Formats                                                au(4)



NAME
     au - AU audio file format

SYNOPSIS
     #include <audio/au.h>

DESCRIPTION
     An AU audio file is composed of three parts:  a  header,  an
     optional  description  field,  and  a  contiguous segment of
     audio data. The header is  24  bytes,  and  the  description
     field is at least 4 bytes. Therefore, the offset for most AU
     files is 28 bytes. However,  some  people  store  additional
     data in the AU header.

     The AU audio structure members and audio data are stored big
     endian.  That  is, it starts with the most significant byte,
     regardless of the native byte order of the machine architec-
     ture  on  which  an  application  may be running. Therefore,
     multi-byte audio data may require byte reversal  for  proper
     playback on different processor architectures. See the macro
     section for properly reading and writing the AU audio struc-
     ture members.

     The AU header is defined by the following structure:


     struct au_filehdr {
        uint32_t au_magic;       /* magic number (.snd) */
        uint32_t au_offset;      /* byte offset to start of audio data */
        uint32_t au_data_size;   /* data length in bytes */
        uint32_t au_encoding;    /* data encoding */
        uint32_t au_sample_rate; /* samples per second */
        uint32_t au_channels;    /* number of interleaved channels */
     };
     typedef struct au_filehdr au_filehdr_t;


     The au_magic field always contains  the  following  constant
     for an AU audio file:


     AUDIO_AU_FILE_MAGIC   ( 0x2e736e64 ) /* ".snd" */


     The au_offset field contains the length of  the  audio  file
     header plus the variable length info field. Consequently, it
     can be interpreted as the offset from the start of the  file
     to the start of the audio data.

     The au_data_size field contains the length, in bytes, of the
     audio  data  segment.  If  this length is not known when the
     header    is    written,    it    should    be    set     to



SunOS 5.9           Last change: 15 Jan 2001                    1






File Formats                                                au(4)



     AUDIO_AU_UNKNOWN_SIZE, defined as follows:


     AUDIO_AU_UNKNOWN_SIZE  ( ~0 )       /* (unsigned) -1 */


     When the au_data_size field contains  AUDIO_AU_UNKNOWN_SIZE,
     the  length of the audio data can be determined by subtract-
     ing au_offset from the total length of the file.

     The encoding field contains one of the following  enumerated
     keys:


     AUDIO_AU_ENCODING_ULAW         /* 8-bit u-law */
     AUDIO_AU_ENCODING_LINEAR_8     /* 8-bit linear PCM */
     AUDIO_AU_ENCODING_LINEAR_16    /* 16-bit linear PCM */
     AUDIO_AU_ENCODING_LINEAR_24    /* 24-bit linear PCM */
     AUDIO_AU_ENCODING_LINEAR_32    /* 32-bit linear PCM */
     AUDIO_AU_ENCODING_FLOAT        /* Floating point */
     AUDIO_AU_ENCODING_DOUBLE       /* Double precision float */
     AUDIO_AU_ENCODING_FRAGMENTED   /* Fragmented sample data */
     AUDIO_AU_ENCODING_DSP          /* DSP program */
     AUDIO_AU_ENCODING_FIXED_8      /* 8-bit fixed point */
     AUDIO_AU_ENCODING_FIXED_16     /* 16-bit fixed point */
     AUDIO_AU_ENCODING_FIXED_24     /* 24-bit fixed point */
     AUDIO_AU_ENCODING_FIXED_32     /* 32-bit fixed point */
     AUDIO_AU_ENCODING_EMPHASIS     /* 16-bit linear with emphasis */
     AUDIO_AU_ENCODING_COMPRESSED   /* 16-bit linear compressed */
     AUDIO_AU_ENCODING_EMP_COMP     /* 16-bit linear with emphasis
                                                   and compression */
     AUDIO_AU_ENCODING_MUSIC_KIT    /* Music kit DSP commands */
     AUDIO_AU_ENCODING_ADPCM_G721   /* CCITT G.721 ADPCM */
     AUDIO_AU_ENCODING_ADPCM_G722   /* CCITT G.722 ADPCM */
     AUDIO_AU_ENCODING_ADPCM_G723_3 /* CCITT G.723.3 ADPCM */
     AUDIO_AU_ENCODING_ADPCM_G723_5 /* CCITT G.723.5 ADPCM */
     AUDIO_AU_ENCODING_ALAW         /* 8-bit A-law G.711 */


     All of the linear encoding formats are signed integers  cen-
     tered at zero.

     The au_sample_rate field contains the audio file's  sampling
     rate in samples per second. Some common sample rates include
     8000, 11025, 22050, 44100, and 48000 samples per second.

     The au_channels field contains  the  number  of  interleaved
     data  channels. For monaural data, this value is set to one.
     For stereo data, this value is set to  two.  More  than  two
     data  channels  can  be  interleaved,  but  such formats are
     currently unsupported by the Solaris audio driver  architec-
     ture.  For a stereo sound file, the first sample is the left



SunOS 5.9           Last change: 15 Jan 2001                    2






File Formats                                                au(4)



     track and the second sample is the right track.

     The optional info field  is  a  variable  length  annotation
     field  that  can  be  either  text  or data. If it is a text
     description of the sound, then it should be NULL terminated.
     However,  some older files might not be terminated properly.
     The size of the info field is  set  when  the  structure  is
     created and cannot be enlarged later.

  Macros
     Accessing all of the AU audio structure  members  should  be
     done    through    the   supplied   AUDIO_AU_FILE2HOST   and
     AUDIO_AU_HOST2FILE macros. By  always  using  these  macros,
     code will be byte-order independent. See the example below.

EXAMPLES
     Example 1: Displaying Header Information for a Sound File

     The following program reads and displays the header informa-
     tion  for  an  AU  sound  file. The AUDIO_AU_FILE2HOST macro
     ensures that this information will always be in  the  proper
     byte order.

     void main(void)
     {
          au_filehdr_t    hdr;
          au_filehdr_t    local;
          int             fd;
          char            *name = "bark.au";

          if ((fd = open(name, O_RDONLY)) < 0) {
               printf("can't open file %s0, name);
          exit(1);
          }

          (void) read(fd, &hdr, sizeof (hdr));

          AUDIO_AU_FILE2HOST(&hdr.au_magic, &local.au_magic);
          AUDIO_AU_FILE2HOST(&hdr.au_offset, &local.au_offset);
          AUDIO_AU_FILE2HOST(&hdr.au_data_size, &local.au_data_size);
          AUDIO_AU_FILE2HOST(&hdr.au_encoding, &local.au_encoding);
          AUDIO_AU_FILE2HOST(&hdr.au_sample_rate, &local.au_sample_rate);
          AUDIO_AU_FILE2HOST(&hdr.au_channels, &local.au_channels);

          printf("Magic = %x0, local.au_magic);
          printf("Offset = %d0, local.au_offset);
          printf("Number of data bytes = %d0, local.au_data_size);
          printf("Sound format = %d0, local.au_encoding);
          printf("Sample rate = %d0, local.au_sample_rate);
          printf("Number of channels = %d0, local.au_channels);

          (void) close(fd);



SunOS 5.9           Last change: 15 Jan 2001                    3






File Formats                                                au(4)



     }


ATTRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Availability                | SUNWaudh                    |
    |_____________________________|_____________________________|
    | Stability Level             | Evolving                    |
    |_____________________________|_____________________________|


SEE ALSO
     attributes(5)

NOTES
     Some older AU audio files are incorrectly  coded  with  info
     strings  that are not properly NULL-terminated. Thus, appli-
     cations should always use the au_offset value  to  find  the
     end of the info data and the beginning of the audio data.































SunOS 5.9           Last change: 15 Jan 2001                    4