【问题标题】:Audio graph initialization error with kAudioUnitSubType_VoiceProcessingIO audio IO unit subtypekAudioUnitSubType_VoiceProcessingIO 音频 IO 单元子类型的音频图初始化错误
【发布时间】:2011-04-12 12:52:18
【问题描述】:

我正在开发一个需要消除回声的 iOS 项目,因此 kAudioUnitSubType_VoiceProcessingIO 子类型似乎是一个不错的选择。 以下是我的音频单元说明

//io unit description 
AudioComponentDescription ioUnitDescription;
ioUnitDescription.componentType = kAudioUnitType_Output;
ioUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
ioUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
ioUnitDescription.componentFlags = 0;
ioUnitDescription.componentFlagsMask = 0;

根据我对 RemoteIO 子类型的经验,我启用了输入元素:

UInt32  enable = 1;
AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enable, sizeof(enable));

但是,我在初始化音频图时出错。如果 VoiceProcessingIO 被 RemoteIO 替换,同样的音频图也能正常工作。

RemoteIO 和 VoiceProcessingIO 有什么区别需要特别注意的吗?

谢谢, 传凯

【问题讨论】:

  • 很抱歉只对一个问题发表评论,但您知道回声消除了吗?苹果文档一直提到具有此功能的语音处理 IO,但我在任何地方都找不到它的示例。我真的很感激它

标签: ios audio core-audio voip


【解决方案1】:

根据我的经验,VoiceProcessingIO 音频单元在缓冲区大小和采样率方面更加挑剔。尝试低于 32000 Hz 的采样率(可能从 8000 Hz 开始并向上)和相当大的缓冲区大小(比如 2048 个样本左右)。这没有记录。一旦我有机会提交一个 rdar 号码。

我在设置过程中使用以下格式:

    size_t bytesPerSample = sizeof(AudioSampleType);
    AudioStreamBasicDescription canonicalFormat;
    canonicalFormat.mSampleRate         = self.samplerate;
    canonicalFormat.mFormatID           = kAudioFormatLinearPCM;
    canonicalFormat.mFormatFlags        = kAudioFormatFlagsCanonical;
    canonicalFormat.mFramesPerPacket    = 1;
    canonicalFormat.mChannelsPerFrame   = 1;
    canonicalFormat.mBitsPerChannel     = 8 * bytesPerSample;
    canonicalFormat.mBytesPerPacket     = bytesPerSample;
    canonicalFormat.mBytesPerFrame      = bytesPerSample;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2016-12-22
    相关资源
    最近更新 更多