配置 Mac OS X AudioUnit 以提供 SignedInteger 示例

Posted

技术标签:

【中文标题】配置 Mac OS X AudioUnit 以提供 SignedInteger 示例【英文标题】:configure Mac OS X AudioUnit to provide SignedInteger samples 【发布时间】:2013-04-01 21:26:39 【问题描述】:

我正在编写一个 Mac OS X 应用程序,通过带有回声消除功能的麦克风捕获一些音频。我正在创建一个 VoiceProcessingIO 类型的 AudioUnit。我想将音频输出为有符号整数线性 PCM。但是,当我指出我希望输出示例格式记录为 SignedInteger 时,我收到“不支持的格式”错误。

如何配置 AudioUnit 以有符号整数格式输出数据?这是我现在如何配置它。如果我尝试用 kAudioFormatFlagIsSignedInteger 替换 kAudioFormatFlagIsFloat,则会收到错误消息:(

AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;

AudioComponent comp = AudioComponentFindNext(NULL, &desc);

OSStatus status = AudioComponentInstanceNew(comp, &_audioUnit);

...

const int sampleSize = 2;
const int eight_bits_per_byte = 8;
AudiostreamBasicDescription streamFormat;
streamFormat.mSampleRate = 16000;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
streamFormat.mBytesPerPacket = sampleSize;
streamFormat.mFramesPerPacket = 1;
streamFormat.mBytesPerFrame = sampleSize;
streamFormat.mChannelsPerFrame = 1;
streamFormat.mBitsPerChannel = sampleSize * eight_bits_per_byte;

status = AudioUnitSetProperty(_audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &streamFormat, sizeof(streamFormat));

// 状态 = UnsupportedFormatError

【问题讨论】:

【参考方案1】:

我决定我不能这样做。我使用 AudioConverter 类将浮点格式转换为有符号整数。从好的方面来说,AudioConverter 非常容易使用!

【讨论】:

以上是关于配置 Mac OS X AudioUnit 以提供 SignedInteger 示例的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式配置 Mac OS X MIDI

如何配置 Mac OS X 术语以使 git 具有颜色? [关闭]

OS X AudioUnit:在生成器上设置杂项属性时出现 kAudio_ParamError

Mac OS X 配置 Apache+Mysql+PHP 详细教程

如何在 Mac OS X 10.10 上安装 Java

在Mac OS X中配置Apache + PHP + MySQL