Unix/Linux Go Back    

OpenSolaris 2009.06 - man page for au (opensolaris section 4)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)

au(4)					   File Formats 				    au(4)

       au - AU audio file format

       #include <audio/au.h>

       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 peo-
       ple 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 archi-
       tecture 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 structure 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 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 subtracting 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_ALAW 	/* 8-bit A-law G.711 */

       All of the linear encoding formats are signed integers centered 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 architecture. For a stereo sound file, the first sample is the left 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. How-
       ever, 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.

       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.

       Example 1 Displaying Header Information for a Sound File

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

	 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 %s\n", name);

	      (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 = %x\n", local.au_magic);
	      printf("Offset = %d\n", local.au_offset);
	      printf("Number of data bytes = %d\n", local.au_data_size);
	      printf("Sound format = %d\n", local.au_encoding);
	      printf("Sample rate = %d\n", local.au_sample_rate);
	      printf("Number of channels = %d\n", local.au_channels);

	      (void) close(fd);

       See attributes(5) for descriptions of the following attributes:

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


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

SunOS 5.11				   15 Jan 2001					    au(4)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums

All times are GMT -4. The time now is 07:18 PM.