如果开发项目需要解析音频文件流,可以使用 iOS 的 Audio File Stream Services。 Audio File Stream Services 支持的音频数据格式:


  • AIFF

  • AIFC

  • WAVE

  • CAF

  • NeXT

  • ADTS

  • MEPEG Audio Layer 3

  • AAC


解析音频文件流的过程如下:


  1. 使用 AudioFileStreamOpen 方法创建音频文件流的解析器:

    OSStatus  AudioFileStreamOpen (
       void                                  *inClientData,
       AudioFileStream_PropertyListenerProc  inPropertyListenerProc,
       AudioFileStream_PacketsProc           inPacketsProc,
       AudioFileTypeID                       inFileTypeHint,
       AudioFileStreamID                     *outAudioFileStream
    );


    设置解析器获取音频数据和元数据的回调方法:AudioFileStream_PacktsProc 和 AudioFileStream_propertyListtenerProc。


  2. 获取流数据。通过AudioFileStreamParseBytes 把数据发送给解析器:

    OSStatus AudioFileStreamParseBytes (
       AudioFileStreamID  inAudioFileStream,
       UInt32             inDataByteSize,
       const void         *inData,
       UInt32             inFlags
    );

    当解析器获取到可用的音频buffer,并传回回调方法(AudioFileStream_PacktsProc)。在回调方法可以播放数据,或者把数据写进文件,或者其它处理。


    当解析器获取到元数据,会调用设置好的属性回调方法(AudioFileStream_propertyListtenerProc)。在回调方法通过属性ID 获取属性值。


  3. 当完成数据流的解释,使用 AudioFileStreamClose 关闭并释放解析器。

    OSStatus AudioFileStreamClose (
       AudioFileStreamID inAudioFileStream
    );