问题描述
我在AcousticEchoCanceler功能在我的Google Pixel 3a和设置中无法正常工作(实际上是减去回声)时遇到了麻烦。我的设置包括一部电话(在本例中为我的Pixel)和台式计算机,它们通过网络相互交换音频数据包。最终目标是双向音频应用程序。双向音频发生并且起作用,但是正如我之前提到的,存在回声。
我已经搜索过SO,但是在需要启用/禁用的内容以及即使它们确实起作用的情况下,我发现了相互矛盾的结果。
通过搜索,我发现我需要启用InCommunication:
AudioManager am = (AudioManager)this.GetSystemService(Context.AudioService);
am.Mode = Mode.InCommunication;
但是尚不清楚是否需要通过会话ID将AudioTrack和AudioRecord绑在一起,尽管在我看来,似乎无关紧要,因为我仍然得到回声:
int bufferSize = AudioRecord.GetMinBufferSize(SampleRate,ChannelIn.Mono,Android.Media.Encoding.Pcm16bit);
AudioRecord record = new AudioRecord(
AudioSource.VoiceCommunication,//44100,SampleRate,Android.Media.Encoding.Pcm16bit,bufferSize);
if (EchoCancellationAvailable)
{
AcousticEchoCanceler aec = AcousticEchoCanceler.Create(record.AudioSessionId);
if (!aec.Enabled)
{
aec.SetEnabled(true);
}
}
int numBytesToWrite = AudioTrack.GetMinBufferSize(SampleRate,ChannelOut.Mono,Android.Media.Encoding.Pcm16bit);
AudioTrack play = new AudioTrack(
Android.Media.Stream.Music,numBytesToWrite,AudioTrackMode.Stream,record.AudioSessionId);
然后我在两个单独的线程中使用AudioRecord和AudioTrack。我是否将两个对象正确关联在一起?我需要吗?关于回声消除为什么没有真正减去回声,是否还有其他问题值得关注?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)