2

在我的 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 编写,所以我看不到任何其他音频编码器,但 AMR 窄带。也许这就是我在录音中听到的可怕噪音的原因。

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

4

3 回答 3

8

看看这篇文章

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

这个解决方案的伟大之处在于,它可以与 AudioRecord 和 MediaRecorder 类一起使用。

于 2015-06-19T06:18:27.537 回答
1

For audio capture you can use the AudioRecord class. This lets you record raw audio, i.e. you are not restricted to "narrow band" and you can also measure the volume.

于 2012-06-19T16:30:56.893 回答
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

于 2013-01-26T23:37:21.803 回答