【问题标题】:Bad sound quality when recording/playing sounds - Android SDK录制/播放声音时音质不佳 - Android SDK
【发布时间】:2010-10-16 19:07:30
【问题描述】:

当我尝试录制然后播放刚刚录制的文件时,我遇到了问题。我可以录制和播放声音,但质量很差。它不仅不好听,而且听起来有点像计算机生成的声音。我使用安卓 SDK 模拟器。设置录音的代码如下所示;

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();

而后面播放文件的代码是这样的;

MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(path);
mp.prepare();
mp.start();

我不知道是什么部分让音频文件听起来真的很糟糕,或者它是否只是模拟器让它变得糟糕并且它可以在真正的手机上运行。

【问题讨论】:

  • 我有一个 .WAV 文件,在我的 PC 上听起来不错,但在 Android 中播放时听起来很糟糕。你有没有解决过你的问题?我使用的播放设置与您上面描述的完全相同。

标签: android android-emulator audiorecord


【解决方案1】:

试试这些

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);   
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);     
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);   
recorder.setAudioChannels(2);
recorder.setAudioEncodingBitRate(128);
recorder.setAudioSamplingRate(44100);

如果您在低端 Android 设备上发现此代码崩溃,请尝试删除 setAudioChannels 和 setAudioSamplingRate。

【讨论】:

  • recorder.setAudioSamplingRate(44100);在上面的代码中足以使语音变得更好
【解决方案2】:

不仅仅是模拟器;在我的 Nexus 10 上听起来也很糟糕。

类似于 Mohit marwal 的回答,您可以设置采样率和比特率。 44100 是标准的 CD 质量采样率。大多数商业音频下载的编码至少为每秒 128000 位(不是每秒千位,如 Mohit 的回答所示)。所以这些将是很好的起始值。此外,您应该只使用一个通道,将文件大小减半,除非您有立体声麦克风并且需要以立体声录制。

recorder.setAudioChannels(1);
recorder.setAudioEncodingBitRate(128000);
recorder.setAudioSamplingRate(44100);

当我设置这些值时,文件大小和质量都增加了,但仍然没有达到我想要的水平。可能剩余的噪音来自我设备上的麦克风性能不佳,但我没有使用外接麦克风进行测试或比较其他设备。

【讨论】:

    【解决方案3】:

    您说的是两个不同的对象,AudioRecorder 和 MediaRecorder。

    【讨论】:

      【解决方案4】:

      AudioRecord 接受各种会影响录音质量的参数。

      尝试在构造函数中设置这些:

      • 音频来源:MIC
      • 采样率:16000
      • 通道数:CHANNEL_CONFIGURATION_MONO
      • 格式:ENCODING_PCM_16BIT
      • 缓冲区大小:16000 * 30(30 秒缓冲区)

      代码示例:

      recorder = new AudioRecord(
                                MediaRecorder.AudioSource.MIC,
                                16000,
                                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                AudioFormat.ENCODING_PCM_16BIT,
                                16000*30);
      

      【讨论】:

      • 非常感谢,但是遇到了问题,根据; developer.android.com/reference/android/media/… 应该有这方面的功能,例如“setAudioSamplingRate(int samplingRate)”,但我不能在我的录音机上使用它,它只是不存在......你能给出一个代码示例如何定义它吗?非常感谢!
      • 采样率是你第一次初始化记录器时应该设置的。我的答案中的所有参数都应该在构造函数中设置,然后在录制会话期间保持不变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      相关资源
      最近更新 更多