适当的音频捕获和降噪

时间:2012-06-18 17:07:15

标签: 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);

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

我面临的第二个问题是声音质量差,噪音很大,所以我想减少(取消,抑制)它,因为它非常糟糕,特别是在我的noname中文平板电脑上。这应该是服务器端的,因为据我所知,需要大量的资源,而不是所有的现代小工具(特别是noname中文平板电脑)都可以尽快完成。我可以自由选择在服务器上使用哪个平台,因此它可以是ASP.NET,PHP,JSP,或任何帮助我改善声音的东西。谈到ASP.NET,我遇到了一个名为NAudio的图书馆,它可能会以某种方式帮助我。我知道,库中没有内置任何降噪解决方案,但是我已经找到了一些关于FFT和使用它的自动关联的例子,所以它可能有所帮助。
 说实话,我以前从未接触过声音,我不知道从哪里开始。我搜索了很多关于降噪技术,代码示例并没有发现任何内容。你们是我最后的希望 提前谢谢。

3 个答案:

答案 0 :(得分:5)

查看this article

长话短说,它使用MediaRecorder.AudioSource.VOICE_RECOGNITION代替AudioSource.MIC,这给了我非常好的结果,背景中的噪音确实减少了很多。

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

答案 1 :(得分:1)

对于音频捕获,您可以使用AudioRecord类。这使您可以录制原始音频,即您不限于“窄带”,也可以测量音量。

答案 2 :(得分:0)

许多智能手机都有两个麦克风,一个是您正在使用的MIC,另一个是靠近摄像头进行视频拍摄,称为CAMCORDER。您可以从两者中获取数据以降低噪音。有很多论文都在谈论用多个麦克风降低音频噪音。

参考:http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html

https://www.google.com/search?q=noise+reduction+algorithm+with+two+mic