【问题标题】:Multichannel Mixer + Voice-Processing IO Unit多通道混音器 + 语音处理 IO 单元
【发布时间】:2015-03-23 18:49:39
【问题描述】:

我有一个 AUGraph 设置和工作,它由一个多通道混音器(带有单个单声道输入)组成,为 RemoteIO (kAudioUnitSubType_RemoteIO) 单元提供输出到扬声器。我实现了单输入混音器,以便能够在左右硬件输出通道之间平移我的音频源。这工作得很好。

由于这是一个 VOIP 应用程序,我一直在尝试使用语音处理 IO 单元 (kAudioUnitSubType_VoiceProcessingIO) 代替远程 IO 单元 (kAudioUnitSubType_RemoteIO)。根据 Apple 的描述,该单元的行为应该类似于具有一些额外功能的远程 IO 单元...

语音处理 I/O 单元(子类型kAudioUnitSubType_VoiceProcessingIO)具有远程 I/O 单元的特性,并为双向双工通信增加了回声抑制。它还增加了自动增益校正、语音处理质量调整和静音。这是用于 VoIP(互联网协议语音)应用的正确 I/O 单元。

但我注意到,当我切换到语音处理 IO 单元时,我无法使用混音器进行平移。关于这里发生了什么的任何想法?语音处理 IO 单元本身是单声道的吗?

【问题讨论】:

  • 您的流格式是什么?我不认为 VP I/O 单元本质上是单音的
  • 混音器输入格式如下:AudioStreamBasicDescription audioFormat = { 0 };音频格式.mSampleRate = 16000.00; audioFormat.mFormatID = kAudioFormatLinearPCM; audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; audioFormat.mFramesPerPacket = 1; audioFormat.mChannelsPerFrame = 1; audioFormat.mBitsPerChannel = 16; audioFormat.mBytesPerPacket = 2; audioFormat.mBytesPerFrame = 2;
  • 好的,看起来不错。如果您在 github/gist 上有代码,我可以看一下,但如果没有更多上下文或信息,很难看到发生了什么。比如失去平移能力是什么意思?是否抛出错误或平移停止工作?
  • 关于“失去平移能力”...使用 RemoteIO 给我一个立体声信号给耳机,它响应左/右平衡调整,无论是在多声道混音器还是 iOS/设置/常规/辅助功能/平衡滑块。当我简单地将子类型切换到 VPIO 单元时,信号不再响应平衡调整。信号在左/右声道中似乎是相等的,与平衡(又名声像)无关,所以我假设输出必须是单声道的。

标签: core-audio voip audiounit mixer remoteio


【解决方案1】:

对于我的特定 AUGraph,为 IO 单元提供多通道混合器输出,为 IO 单元的输入范围转储 ASBD 始终显示每帧 2 个通道。据我从文档中了解到,多声道混音器的输出是立体声。

我为 RemoteIO 单元的输出范围转储了 ASBD,实际上 ASBD 每帧显示 2 个通道。尝试将此覆盖到 1 个通道会导致 kAudioUnitErr_PropertyNotWritable 错误。

然后我将子类型切换为 VPIO 单元。为输出范围转储 ASBD 显示每帧 1 个通道。如上所述,尝试将其覆盖到 2 个通道也会导致相同的 property-not-writable 错误。

因此,至少对于我的特定 AUGraph,我必须得出结论,VPIO 单元本质上是单声道的。

【讨论】:

  • 这真的很不幸,因为 VPIO 单元是唯一能很好地消除回声的东西
猜你喜欢
  • 1970-01-01
  • 2018-07-10
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
相关资源
最近更新 更多