gpt4 book ai didi

ios - 在iOS中使用多个语音处理IO音频单元

转载 作者:可可西里 更新时间:2023-11-01 06:11:54 25 4
gpt4 key购买 nike

我正在 iOS 上开发一个 VOIP 项目。根据 Apple 文档的建议,我使用 VoiceProcessingIO 音频单元来获得回声消除支持。

由于我的应用程序需要在渲染和捕获端进行单独操作(例如,关闭扬声器但让麦克风继续工作),所以我创建了两个音频单元,一个关闭捕获端口,另一个关闭渲染端口。

在我了解回声消除的工作原理之前,当前代码运行良好:它需要比较来自麦克风和扬声器的信号。所以我担心的是:像我的方法一样使用两个语音处理音频单元是否安全?此外,由于音频消除主要从捕获端进行,是否可以使用 RemoteIO 音频单元进行渲染(连接到扬声器)?

我不是100%有信心,因为我只是进入这个领域很短的时间。我也从 developer.apple.com 尝试过,但我从 developer.apple.com 找到的所有示例通常只使用一个音频单元。

谁能给点提示?我的方法对 VoiceProcessingIO 单元的功能有任何潜在影响吗?

谢谢,福州

最佳答案

首先,VoiceProcessingIO(在我写这篇文章时)只是回声抑制,而不是回声消除。如果输出太大声,它基本上只是关闭输入。这意味着例如在 VOIP 通话中,远端在通话时听不到您的声音。完全回声消除将保持输入打开,但会尝试减去输出的回声。

我建议只使用一个单元,并以编程方式自行处理“关闭扬声器”的情况。您的输出回调可能如下所示:

OSStatus output_callback(
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inInputBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
my_context_t *context = inRefCon;
audio_sample_t *dst = (audio_sample_t *)ioData->mBuffers[0].mData;

if (context->muted) {
memset(dst, 0, inNumberFrames * sizeof(audio_sample_t));
} else {
get_output_samples(context, dst, inNumberFrames);
}
return noErr;
}

对回声抑制给予沉默不应对其产生不利影响。

关于ios - 在iOS中使用多个语音处理IO音频单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com