如何解决使用AcousticEchoCanceler时,是否需要为AudioTrack和AudioRecord分配相同的AudioSessionId?
我在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 举报,一经查实,本站将立刻删除。