为什么这个AudioStreamBasicDescription导致'AudioConverterNew返回-50'错误?

时间:2015-09-11 17:44:41

标签: ios objective-c core-audio audio-recording audioqueue

这是我们用于设置AudioStreamBasicDescription(ASBD)的功能。整个班级受Apple的SpeakHere示例应用程序的影响很大。

用于在iOS设备上录制(特别是iPad Air,也在iPhone 6 Plus上测试)。

启动AudioQueue缓冲区进行录制时,设备日志中出现“AudioConverterNew返回-50”错误。显然,只是意味着某些地方不正确?我猜我的ASBD有问题。

- (void)setupAudioFormat
{ // setup AudioStreamBasicDescription
    memset(&mDataFormat, 0, sizeof(mDataFormat));

    int sampleSize = sizeof(float);

    AVAudioSession *session = [AVAudioSession sharedInstance];
    mDataFormat.mSampleRate = [session sampleRate]; //44100
    mDataFormat.mChannelsPerFrame = [session inputNumberOfChannels]; // why is this returning 0?

    if ( mDataFormat.mChannelsPerFrame <= 0 )
    {
        mDataFormat.mChannelsPerFrame = 1; // mono
    }

    mDataFormat.mFormatID = kAudioFormatLinearPCM;
    mDataFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsNonInterleaved;

    mDataFormat.mBitsPerChannel = 8 * sampleSize;
    mDataFormat.mBytesPerFrame = sampleSize * mDataFormat.mChannelsPerFrame;
    mDataFormat.mBytesPerPacket = mDataFormat.mBytesPerFrame;
    mDataFormat.mFramesPerPacket = 1;
    mDataFormat.mReserved = 0;

    NSLog(@"FORMAT sampleRate=%f, channels=%i, flags=%i, BPC=%i, BPF=%i", mDataFormat.mSampleRate, mDataFormat.mChannelsPerFrame, mDataFormat.mFormatFlags, mDataFormat.mBitsPerChannel, mDataFormat.mBytesPerFrame);
}

SpeakHere示例应用程序也使用线性PCM,但它使用带符号的16位little-endian而不是float进行设置。

最终我需要将音频缓冲区数据作为float数组传递给其他东西。我是否必须将此更改为使用带符号的16位little-endian并将结果转换为浮点值?

0 个答案:

没有答案