AudioToolbox很强很暴力,要想把它研究清楚,那是相当的有难度,所以,我当前的目标是,基本弄清楚这些常用的api。最近,做自己的app时,遇到一堆音频相关的问题,发现必须得将AudioToolbox的API好好的学习一下了,那么,AudioFile.h这个文件开始吧:
1,AudioFile.h描述了苹果的 Audio File Services,使用这些服务(C 编程 API),我们可以读或者写多种格式的音频数据到内存或者硬盘。简单的说,就是关于音频文件读写的内容。
---create(创建)、初始化(initialize)、打开(open)、关闭(close)音频文件。
---读(Read)、写(Write)音频文件。
---优化(Optimize)音频文件。
---和用户自己的数据和全局信息一起工作(Work with user data and golobal information)。
2,
OSStatus
AudioFileCreateWithURL (
CFURLRef inFileRef,
AudioFileTypeID inFileType,
const
AudioStreamBasicDescription *inFormat,
UInt32 inFlags, AudioFileID *outAudioFile)
UInt32 inFlags, AudioFileID *outAudioFile)
创建文件,inFileRef是目地路径,inFileType是创建音频文件的格式,inFormat中这个文件的更多详细的信息,inFlags 表示是创建还是打开文件(如果值为kAudioFileFlags_EraseFiles的话,将会移除一个已经存在的文件,然后重新创建;如果没有设置的话,如果url出已经有文件,就会返回失败 ),默认是:
kAudioFileFlags_EraseFiles。outAudioFile是这个音频文件的句柄,唯一标识这个音频文件或者音频流。
使用示例:
AudioFileCreateWithURL((CFURLRef) fileURL,kAudioFileCAFType, &audioStreamDesc, kAudioFileFlags_EraseFile,&audioFile);
3,AudioStreamBasicDescription 的设置,需要保存一个文件时设置,获取是使用其他接口。
CAStreamBasicDescription dstFormat;
dstFormat.mSampleRate = myInfo.mDataFormat.mSampleRate;
dstFormat.mChannelsPerFrame = myInfo.mDataFormat.mChannelsPerFrame;
dstFormat.mFormatID = kAudioFormatLinearPCM;
dstFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger; // little-endian
dstFormat.mBitsPerChannel = 16;
dstFormat.mBytesPerPacket = dstFormat.mBytesPerFrame = 2 * dstFormat.mChannelsPerFrame;
dstFormat.mFramesPerPacket = 1;
dstFormat.mSampleRate = myInfo.mDataFormat.mSampleRate;
dstFormat.mChannelsPerFrame = myInfo.mDataFormat.mChannelsPerFrame;
dstFormat.mFormatID = kAudioFormatLinearPCM;
dstFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger; // little-endian
dstFormat.mBitsPerChannel = 16;
dstFormat.mBytesPerPacket = dstFormat.mBytesPerFrame = 2 * dstFormat.mChannelsPerFrame;
dstFormat.mFramesPerPacket = 1;