适当的音频捕获和降噪

Sir*_*gio 1 android server-side audio-recording noise-reduction

在我的android应用程序中,我需要从麦克风捕获用户的语音,然后将其传递给服务器。目前,我使用MediaRecorder该类。但是,它不能满足我的需要,因为我想基于当前输入声音的音量来产生发光效果,所以我需要一个AudioStream或类似的东西。当前,我使用以下内容:

    this.recorder = new MediaRecorder();
    this.recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    this.recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    this.recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    this.recorder.setOutputFile(FILENAME);
Run Code Online (Sandbox Code Playgroud)

我正在使用API​​级别7进行编写,因此看不到任何其他AudioEncoders,但是看不到AMR Narrow Band。也许这就是我在录音中听到的可怕声音的原因。

我面临的第二个问题是音质差,噪音小,所以我想减少(取消,抑制)它,因为它确实很糟糕,尤其是在我的中文平板电脑上。这应该是服务器端的,因为据我所知,它需要大量资源,而且并非所有现代小工具(尤其是没有名字的中国平板电脑)都可以尽可能快地做到这一点。我可以自由选择要在服务器上使用的平台,因此可以是ASP.NET,PHP,JSP或任何可以帮助我改善声音的东西。说到ASP.NET,我遇到了一个名为NAudio的库,也许它可以在某种程度上帮助我。我知道,该库中没有内置任何降噪解决方案,但是我发现了一些使用它进行FFT和自动迭代的示例,因此可能会有所帮助。
老实说,我从来没有这么近的声音过,我也不知道从哪里开始。我在Google上搜索了很多有关降噪技术,代码示例的内容,但一无所获。你们是我最后的希望。
提前致谢。

Mia*_*LiD 5

看一下这篇文章

长话短说,它使用MediaRecorder.AudioSource.VOICE_RECOGNITION而不是AudioSource.MIC,这给了我很好的效果,并且背景噪音确实减少了很多。

此解决方案的最大优点是,它可以与AudioRecord和MediaRecorder类一起使用。