任何人都知道为什么我不能使用kAudioFormatFlagIsFloat而不是kAudioFormatFlagIsSignedInteger用于AudioStreamBasicDescription?

时间:2009-08-08 16:43:29

标签: iphone

为什么这样做?

- (void)setupAudioFormat:(AudioStreamBasicDescription*)format 
{
    format->mSampleRate = 44100;
    format->mFormatID = kAudioFormatLinearPCM;
    format->mFramesPerPacket = 1;
    format->mChannelsPerFrame = 1;
    format->mBytesPerFrame = 2;
    format->mBytesPerPacket = 2;
    format->mBitsPerChannel = 32;
    format->mReserved = 0;

    format->mFormatFlags = kLinearPCMFormatFlagIsBigEndian |
    kLinearPCMFormatFlagIsSignedInteger |
    kLinearPCMFormatFlagIsPacked;
}

但是当我改变mFormatFlag它没有,我得到一个kAudioFileUnsupportedDataFormatError。

format->mFormatFlags = kAudioFormatFlagIsFloat |
    kLinearPCMFormatFlagIsBigEndian |
    kAudioFormatFlagIsPacked;

我在收到电话时收到错误...

OSStatus    status = AudioQueueNewInput(&recordState.dataFormat,
                        AudioInputCallback,
                        self,
                        CFRunLoopGetCurrent(),
                            kCFRunLoopCommonModes,
                        0,
                        &recordState.queue);

我确定问题在于格式标志,因为错误只发生在我尝试使用浮动标志时,任何想法如何解决它?

非常感谢。

2 个答案:

答案 0 :(得分:1)

很简单,但很难回答并花了很多时间,但看起来不支持花车。感谢。

答案 1 :(得分:0)

可接受的答案可能适用于iOS 2.x,但对于任何最新的(64位)iOS设备,32位浮点数实际上是音频单元样本的本机格式。