Inside Macintosh: Sound Manager

| Previous | Chapter contents | Chapter top | Section top | Next |

Legacy Documentclose button

Important: Sound Input Manager is deprecated as of Mac OS X v10.5. For new audio development in Mac OS X, use Core Audio. See the Audio page in the ADC Reference Library.

Constructing Sound Resource and File Headers

The Sound Input Manager provides two functions, SetupSndHeader and SetupAIFFHeader , to help you set up headers for sound resources and sound files.

SetupSndHeader

You can use the SetupSndHeader function to construct a sound resource containing sampled sound that can be passed to the SndPlay function.

FUNCTION SetupSndHeader (sndHandle: Handle;
                                                              numChannels: Integer;
                                                              sampleRate: Fixed;
                                                              sampleSize: Integer;
                                                              compressionType: OSType;
                                                              baseFrequency: Integer;
                                                              numBytes: LongInt;
                                                              VAR headerLen: Integer): OSErr;

sndHandle

A handle to a block of memory that is at least large enough to store the sound resource header information. The handle is not resized in any way upon successful completion of SetupSndHeader . The SetupSndHeader function simply fills the relocatable block specified by this parameter with the header information needed for a format 1 'snd ' resource, including the sound resource header, the list of sound commands, and a sampled sound header. It is your application's responsibility to append the desired sampled-sound data.

numChannels

The number of channels for the sound; one channel is equivalent to monaural sound and two channels are equivalent to stereo sound.

sampleRate

The rate at which the sound was recorded. The sample rate is declared as a Fixed data type. In order to accommodate sample rates greater than 32 kHz, the most significant bit is not treated as a sign bit; instead, that bit is interpreted as having the value 32,768.

sampleSize

The sample size for the original sound (that is, bits per sample).

compressionType

The compression type for the sound ( 'NONE' , 'MAC3' , 'MAC6' , or other third-party types).

baseFrequency

The base frequency for the sound, expressed as a MIDI note value.

numBytes

The number of bytes of audio data that are to be stored in the handle. (This value is not necessarily the same as the number of samples in the sound.)

headerLen

On exit, the size (in bytes) of the 'snd ' resource header that is created. In no case will this length exceed 100 bytes. This field allows you to put the audio data right after the header in the relocatable block specified by the sndHandle parameter. The value returned depends on the type of sound header created.

DESCRIPTION

The SetupSndHeader function creates a format 1 'snd ' resource for a sampled sound. The resource contains a sound resource header that links the sound to the sampled synthesizer, a single sound command (a bufferCmd command to play the accompanying data), and a sampled sound header. You can use SetupSndHeader to construct a sampled sound header that can be passed to the Sound Manager's SndPlay function or stored as an 'snd ' resource. After calling the SetupSndHeader function, your application should place the sampled-sound data directly after the sampled sound header so that, in essence, the sampled sound header's final field contains the sound data.

The sampled sound is in one of three formats depending on several of the parameters passed. Table 3 shows how SetupSndHeader determines what kind of sound header to create.

Table 3 The sampled sound header format used by SetupSndHeader

compressionType

numChannels

sampleSize

Sampled sound header format

'NONE'

1

8

SoundHeader
'NONE'

1

16

ExtSoundHeader
'NONE'

2

any

ExtSoundHeader

not 'NONE'

any

any

CmpSoundHeader

A good way to use this function is to create a handle in which you want to store a sampled sound, then call SetupSndHeader with the numBytes parameter set to 0 to see how much room the header for that sound will occupy and hence where to append the audio data. Then record the data into the handle and call SetupSndHeader again with numBytes set to the correct amount of sound data recorded. The handle filled out in this way can be passed to SndPlay to play the sound.

SPECIAL CONSIDERATIONS

You cannot call the SetupSndHeader function at interrupt time.

ASSEMBLY-LANGUAGE INFORMATION

The trap macro and routine selector for the SetupSndHeader function are

Trap macro

Selector

_SoundDispatch

$0D480014

RESULT CODES

noErr

0

No error

siInvalidCompression

-223

Invalid compression type

SEE ALSO

For an example that uses the SetupSndHeader function to set up a sound header before recording, see Listing 42 .

SetupAIFFHeader

You can use the SetupAIFFHeader function to set up a file that can subsequently be played by SndStartFilePlay .

FUNCTION SetupAIFFHeader (fRefNum: Integer;
                                                              numChannels: Integer;
                                                               sampleRate: Fixed;
                                                              sampleSize: Integer;
                                                              compressionType: OSType;
                                                              numBytes: LongInt;
                                                               numFrames: LongInt): OSErr;

fRefNum

A file reference number of a file that is open for writing.

numChannels

The number of channels for the sound; one channel is equivalent to monaural sound and two channels are equivalent to stereo sound.

sampleRate

The rate at which the sound was recorded. The sample rate is declared as a Fixed data type. In order to accommodate sample rates greater than 32 kHz, the most significant bit is not treated as a sign bit; instead, that bit is interpreted as having the value 32,768.

sampleSize

The sample size for the original sound (that is, bits per sample).

compressionType

The compression type for the sound ( 'NONE' , 'MAC3' , 'MAC6' , or other third-party types).

numBytes

The number of bytes of audio data that are to be stored in the Common Chunk of the AIFF or AIFF-C file.

numFrames

The number of sample frames for the sample sound. If you are using a compression type defined by Apple, you can pass 0 in this field and the appropriate value for this field will be computed automatically.

DESCRIPTION

The SetupAIFFHeader function creates an AIFF or AIFF-C file header, depending on the parameters passed to it:

The SetupAIFFHeader function might format a sound file as an AIFF file even if the File Manager file type of a file is 'AIFC' . The Sound Manager will still play such files correctly.

The AIFF header information is written starting at the current file position of the file specified by the fRefNum parameter, and the file position is left at the end of the header upon completion. The SetupAIFFHeader function creates a Form Chunk, a Format Version Chunk, a Common Chunk, and a Sound Data chunk, but it does not put any sound data at the end of the Sound Data Chunk.

A good way to use this routine is to create a file that you want to store a sound in, then call SetupAIFFHeader with numBytes set to 0 to position the file to be ready to write the audio data. Then record the data to the file, set the file position to the beginning of the file, and call SetupAIFFHeader again with numBytes set to the correct amount of sound data recorded. The file created in this way can be passed to the SndStartFilePlay function to play the sound.

SPECIAL CONSIDERATIONS

If recording produces an odd number of bytes of sound data, you must add a pad byte to make the total number of bytes even.

Because the SetupAIFFHeader function moves memory, you should not call it at interrupt time.

ASSEMBLY-LANGUAGE INFORMATION

The trap macro and routine selector for the SetupAIFFHeader function are

Trap macro

Selector

_SoundDispatch

$0B4C0014

RESULT CODES

noErr

0

No error

siInvalidCompression

-223

Invalid compression type


© 1999 Apple Computer, Inc.

Inside Macintosh: Sound Manager

| Previous | Chapter contents | Chapter top | Section top | Next |

Legacy Documentclose button

Important: Sound Input Manager is deprecated as of Mac OS X v10.5. For new audio development in Mac OS X, use Core Audio. See the Audio page in the ADC Reference Library.