使用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 (将#修改为@)