Iphone 谁知道我为什么能’;对于音频流基本描述,是否使用kAudioFormatFlagIsFloat而不是KaudioFormatFlagIsSignedIntegrater?

Iphone 谁知道我为什么能’;对于音频流基本描述,是否使用kAudioFormatFlagIsFloat而不是KaudioFormatFlagIsSignedIntegrater?,iphone,Iphone,为什么这样做有效 - (void)setupAudioFormat:(AudioStreamBasicDescription*)format { format->mSampleRate = 44100; format->mFormatID = kAudioFormatLinearPCM; format->mFramesPerPacket = 1; format->mChannelsPerFrame = 1; format->

为什么这样做有效

- (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);
我确信问题在于格式标志,因为只有当我尝试使用float标志时才会发生错误,有没有办法绕过它


非常感谢。

简单,但很难回答,而且花费了很多时间,但看起来不支持浮动。谢谢。

简单,但很难回答,而且花费了很多时间,但看起来不支持浮动。谢谢。

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

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

您可以声明导致错误的更改常量,但由于您没有实际指定要执行的操作,因此几乎不可能给出超出猜测范围的答案。您调用的函数实际上会导致错误。谢谢,我已经更新了postYou状态,您更改了导致错误的常量,但是由于您没有实际指定您正在执行的操作,因此几乎不可能给出答案,这不仅仅是猜测。你调用的是什么函数导致了错误。谢谢,我已经更新了帖子