在iOS上使用AudioQueue记录小尾数PCM

时间:2011-11-24 08:53:07

标签: ios core-audio pcm endianness

我试图用AudioQueue录制一个小尾数PCM文件。根据文档,我应该清除AudioStreamBasicDescripton.mFormatFlags中的kAudioFormatFlagIsBigEndian位。

文档说:

  

kAudioFormatFlagIsBigEndian。设置大端,清晰一点   端。

我的设置看起来像

- (void)setupAudioFormat:(AudioStreamBasicDescription*)format 
{
    //format->mSampleRate = 8000.0;
    format->mSampleRate = 44000.0;
    format->mFormatID = kAudioFormatLinearPCM;
    format->mFramesPerPacket = 1;
    format->mChannelsPerFrame = 2;
    format->mBytesPerFrame = format->mBytesPerPacket = format->mChannelsPerFrame * sizeof(SInt16);
    format->mBitsPerChannel = 16;
    format->mReserved = 0;
    format->mFormatFlags = ~kAudioFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked | kAudioFormatFlagIsAlignedHigh;

}

我得到的错误是

  

kAudioFileUnsupportedDataFormatError

有谁能帮我弄清楚什么是错的?是否有可能在iOS设备上录制小端?使用little endian录制的一种替代方法是稍后转换文件,因此任何提示也会很受欢迎。

1 个答案:

答案 0 :(得分:1)

您的意思是要求采样率为44100.0吗?

清除标志的方法不是设置除了那个之外的所有位(你可能在你的例子中设置了几十个非法位),但是:

mFormatFlags &= ~(bitToClear);