【发布时间】:2011-02-22 08:18:04
【问题描述】:
我正在编写一个 iPhone 应用程序,该应用程序使用 Apple's recommendations 的 I/O 音频单元同时录制和播放音频。
我想在播放之前对录制的音频应用一些音效(混响等)。为了使这些效果正常工作,我需要样本是浮点数,而不是整数。通过在mFormatFlags 上设置kAudioFormatFlagIsFloat 来创建AudioStreamBasicDescription,这似乎应该是可能的。这是我的代码的样子:
AudioStreamBasicDescription streamDescription;
streamDescription.mSampleRate = 44100.0;
streamDescription.mFormatID = kAudioFormatLinearPCM;
streamDescription.mFormatFlags = kAudioFormatFlagIsFloat;
streamDescription.mBitsPerChannel = 32;
streamDescription.mBytesPerFrame = 4;
streamDescription.mBytesPerPacket = 4;
streamDescription.mChannelsPerFrame = 1;
streamDescription.mFramesPerPacket = 1;
streamDescription.mReserved = 0;
OSStatus status;
status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &streamDescription, sizeof(streamDescription));
if (status != noErr)
fprintf(stderr, "AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input) returned status %ld\n", status);
status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &streamDescription, sizeof(streamDescription));
if (status != noErr)
fprintf(stderr, "AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output) returned status %ld\n", status);
但是,当我运行这个(在运行 iPhoneOS 3.1.3 的 iPhone 3GS 上)时,我得到了这个:
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input) returned error -10868
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output) returned error -10868
(-10868 是kAudioUnitErr_FormatNotSupported 的值)
我在 Apple 的文档中没有发现任何有价值的东西,除了 recommendation 坚持使用 16 位小端整数。但是,aurioTouch 示例项目至少包含一些与kAudioFormatFlagIsFloat 相关的支持代码。
那么,是我的流描述不正确,还是 iPhoneOS 根本不支持 kAudioFormatFlagIsFloat?
【问题讨论】: