回声消除和噪声抑制似乎不适用于 Android

问题描述

我正在尝试编写一个 Android 语音聊天应用程序,该应用程序需要同时具有回声消除 (AEC) 和噪声抑制 (NS)。我遵循了我在网上找到的任何文档,但 Pixel 4、Pixel 4a 或 Nexus S 模拟器似乎都没有任何功能

  1. 我做错了什么吗?
  2. 这些功能是否有可能仅在实际设备上可用而在模拟器上不可用?我没有实际的设备。但我知道麦克风可以在模拟器上工作并且可以捕捉声音。
  3. 有没有人遇到过这个问题并找到了解决方案?

感谢任何帮助!

这是我的代码

int sample_rate = 16000;
int audio_format = AudioFormat.ENCODING_PCM_16BIT;
int buffer_size_byes = (int)(sample_rate * 0.06 * 2); // 60ms assuming ENCODING_PCM_16BIT
int audio_source = MediaRecorder.AudioSource.VOICE_COMMUNICATION;
//    int audio_source = AudioManager.MODE_IN_CALL; 
int channel_config = AudioFormat.CHANNEL_IN_MONO;
AudioRecord recorder;
byte[] read_buffer = new byte[buffer_size_byes];

recorder = new AudioRecord(audio_source,sample_rate,channel_config,audio_format,buffer_size_byes);

int session_id = recorder.getAudioSessionId();

if( AcousticEchoCanceler.isAvailable() ) {

    AcousticEchoCanceler aec = AcousticEchoCanceler.create(session_id);
    if (aec != null) { aec.setEnabled(true); }
    else{ Log.i("Tag1","aec instance is null"); }

}
else{ Log.i("Tag1","AEC is NOT available"); }

if( NoiseSuppressor.isAvailable() ) {
    
    NoiseSuppressor ns = NoiseSuppressor.create(session_id);
    if (ns != null) { ns.setEnabled(true); }
    else{ Log.i("Tag1","ns instance is null"); }
}
else{ Log.i("Tag1","NS is NOT available"); }

我还确保满足以下权限:

AndroidMnifext.xml

<uses-permission android:name="android.permission.RECORD_AUdio" />
<uses-permission android:name="android.permission.MODIFY_AUdio_SETTINGS" />

在主要活动中:

int perm = ContextCompat.checkSelfPermission(this,Manifest.permission.RECORD_AUdio);
if( perm != PackageManager.PERMISSION_GRANTED ){
    Log.i("AudioRecorder","Permission to record denied. Going to ask permission again");
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUdio},1234);
}

perm = ContextCompat.checkSelfPermission(this,Manifest.permission.MODIFY_AUdio_SETTINGS);
if( perm != PackageManager.PERMISSION_GRANTED ){
    Log.i("AudioRecorder","Permission to MODIFY_AUdio_SETTINGS denied. Going to ask permission again");
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.MODIFY_AUdio_SETTINGS},1234);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)