2010-10-16 71 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); 

當我設置這些值時,文件大小和質量都增加了,但仍然沒有達到我想要的水平。也許剩下的噪音來自我設備上的麥克風,但我沒有使用外接麥克風進行測試或與其他設備進行過比較。