【问题标题】:Record little endian PCM with AudioQueue on iOS在 iOS 上使用 AudioQueue 录制 little endian PCM
【发布时间】:2011-11-24 08:53:06
【问题描述】:

我正在尝试使用 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 录制的一种替代方法是稍后转换文件,因此任何关于此的提示也将非常有用。

【问题讨论】:

    标签: ios core-audio pcm endianness


    【解决方案1】:

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

    清除标志的方法不是像您所做的那样设置除一个以外的每个位(您可能在示例中设置了几十个非法位),但是:

    mFormatFlags &= ~(bitToClear);
    

    【讨论】:

    • 我最终解决它的方法是清除整个格式结构。我猜你应该经常做的事? :) memset(format, 0, sizeof(format));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2021-11-20
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2022-06-10
    相关资源
    最近更新 更多