android - 在 Android 中使用 MediaRecorder 和 NoiseSuppressor

标签 android audio microphone mediarecorder noise

我正在开始一个项目,使用如下代码试验 Android 麦克风:

    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setOutputFile(mFileName);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

之后,prepare() 和 start() 开始录制麦克风音频。

问题是,我还试图添加一些音频处理效果,例如 NoiseSuppressor。 API 文档声明 NoiseSuppressor 已完成此操作:

 NoiseSuppressor create (int audioSession)

初始化录制流并获取该流的 audioSession 的合适方法是什么?我很惊讶地发现我无法从 mediaRecorder 获取 audioSession。

为什么存在两种设置音频流的方法?我看到了 AudioRecord 方法,但 API 文档建议首选上述方法。

什么给了?

最佳答案

来自 Android 开发者:

To attach the NoiseSuppressor to a particular AudioRecord, specify the audio session ID of this AudioRecord when creating the NoiseSuppressor. The audio session is retrieved by calling AudioRecord.getAudioSessionId() on the AudioRecord instance.

这意味着 NoiseSuppressor 需要 audioSessionId 来创建这样的噪声抑制器实例

val suppressor = NoiseSuppressor.create(
            recorder!!.audioSessionId)

如果你看getaudiosessionid引用然后你会看到 Audio Session 只能由Media PlayerAudio Recorder 创建。

因此您不能将Noise SuppressorMedia Recorder一起使用。但是可以插入Noise Suppressor默认在采集路径中由平台开发者根据MediaRecorder.AudioSource使用。

无论如何,如果您仍想尝试录音机,那么我会说我已经尝试在 录音机 中启用 NS 并且当我调用 NoiseSuppressor.isAvailable() 时它总是返回 false

关于android - 在 Android 中使用 MediaRecorder 和 NoiseSuppressor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527810/

相关文章:

android - 如何在EditText中分割文本?

Android Studio,动画

java - 如何检查音乐何时结束

java - 内部类中访问的变量

android - 弹出堆栈抛出 "Fragment Already Added"异常

javascript - 当加载同名新歌时,Jquery 播放旧歌

javascript - 如何在 jquery 中使用音频标签自动播放音乐?

c# - 从麦克风捕获音频而不回放

java - 如何从 Java 中的麦克风获取 dB(或任何类型的音量)级别?

swift - 来自 AVAudioFile 的 AVAsset 的持续时间为 0