iOS技术资料

AudioFileStream学习

2015-12-28  本文已影响2338人  zjunchao

AudioFileStream介绍

AudioFileStreamOpen

初始化AudioFileStream,创建一个音频流解析器,生成一个AudioFileStream示例。

函数示例

extern OSStatus 
AudioFileStreamOpen (
                            void * __nullable                       inClientData,
                            AudioFileStream_PropertyListenerProc    inPropertyListenerProc,
                            AudioFileStream_PacketsProc             inPacketsProc,
                            AudioFileTypeID                         inFileTypeHint,
                            AudioFileStreamID __nullable * __nonnull outAudioFileStream)
                                                                        __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);

参数列表:

返回值

返回值用来判断是否成功初始化(OSSStatus == noErr)

AudioFileStreamParseBytes

解析数据,在初始化完成之后,调用该方法解析文件数据。

函数示例

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

参数列表

返回值

OSStatus的值不是noErr则表示解析不成功,对应的错误码:

enum 
{ 
  kAudioFileStreamError_UnsupportedFileType        = 'typ?', 
  kAudioFileStreamError_UnsupportedDataFormat      = 'fmt?', 
  kAudioFileStreamError_UnsupportedProperty        = 'pty?', 
  kAudioFileStreamError_BadPropertySize            = '!siz', 
  kAudioFileStreamError_NotOptimized               = 'optm', 
  kAudioFileStreamError_InvalidPacketOffset        = 'pck?', 
  kAudioFileStreamError_InvalidFile                = 'dta?', 
  kAudioFileStreamError_ValueUnknown               = 'unk?', 
  kAudioFileStreamError_DataUnavailable            = 'more', 
  kAudioFileStreamError_IllegalOperation           = 'nope', 
  kAudioFileStreamError_UnspecifiedError           = 'wht?', 
  kAudioFileStreamError_DiscontinuityCantRecover   = 'dsc!' 
}; 

每次调用成功后应该注意返回值,一旦出现错误就不必要进行后续的解析。

AudioFileStream_PropertyListenerProc

解析文件格式信息的回调,在调用AudioFileStreamParseBytes方法进行解析时会首先读取格式信息,并同步的进入AudioFileStream_PropertyListenerProc回调方法。

函数示例

typedef void (*AudioFileStream_PropertyListenerProc)(
                                            void *                          inClientData,
                                            AudioFileStreamID               inAudioFileStream,
                                            AudioFileStreamPropertyID       inPropertyID,
                                            AudioFileStreamPropertyFlags *  ioFlags);

参数列表

AudioFileStreamPropertyID解析

计算时长Duration

double duration = (audioDataByteCount * 8) / bitRate

音频数据的字节总量audioDataByteCount可以通过kAudioFileStreamProperty_AudioDataByteCount获取,
码率bitRate可以通过kAudioFileStreamProperty_BitRate获取

AudioFileStream_PacketsProc

分离音频帧回调,读取格式信息完成之后,继续调用AudioFileStreamParseBytes方法可以对帧进行分离,并同步的进入AudioFileStream_PacketsProc回调方法

函数示例

typedef void (*AudioFileStream_PacketsProc)(
                                            void *                          inClientData,
                                            UInt32                          inNumberBytes,
                                            UInt32                          inNumberPackets,
                                            const void *                    inInputData,
                                            AudioStreamPacketDescription    *inPacketDescriptions);

参数列表

AudioFileStreamSeek

seek操作

AudioFileStreamClose

AudioFileStream使用完毕后需要调用AudioFileStreamClose进行关闭

函数示例

extern OSStatus AudioFileStreamClose(AudioFileStreamID inAudioFileStream);  

参数:inAudioFileStream 初始化时生成的AudioFileStreamID

参考资料:

  1. Using Audio
  2. AudioFileStream
上一篇 下一篇

猜你喜欢

热点阅读