2010-10-16 67 views
6

我遇到问题,当我尝试录制并播放刚才录制的文件时。我可以录制和播放声音,但质量很差。它不仅不好听,而且听起来有点像电脑产生的声音。我使用andriod SDK仿真器。设置录音的代码如下所示;录制/播放声音时音质不好 - Android 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(); 

我不知道是什么,使音频文件听起来很不好或部分,如果它只是使它不好,它会真正的手机上运行的模拟器。

+0

我有一个.WAV文件,在我的电脑上听起来不错,但在Android中播放时听起来像是地狱。你有没有解决你的问题?我正在使用与上述相同的播放设置。 – 2014-09-18 15:21:17

回答

1

您正在谈论两种不同的Object,AudioRecorder和MediaRecorder。

0

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); 
+0

非常感谢,但有这个问题,根据; http://developer.android.com/reference/android/media/MediaRecorder。html#MediaRecorder() 应该有这样的功能,例如“setAudioSamplingRate(int samplingRate)”,但我不能用我的录音机,它只是不存在...你能给一个代码示例如何定义这个? 非常感谢! – Nick3 2010-10-19 05:25:41

+0

采样率是您第一次初始化记录仪时应设置的值。我的答案中的所有参数都应在构造函数中设置,然后在记录会话期间单独放置。 – 2010-10-19 19:31:32

4

尝试这些

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。

+0

recorder.setAudioSamplingRate(44100);在上面的代码中绰绰有余 – 2016-10-15 10:20:40

2

它不只是模拟器;在我的Nexus 10上听起来也不错。

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

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

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