在我的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和使用它的自动关联的例子,所以它可能有所帮助。
说实话,我以前从未接触过声音,我不知道从哪里开始。我搜索了很多关于降噪技术,代码示例并没有发现任何内容。你们是我最后的希望
提前谢谢。
答案 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