2010-10-16 44 views
6

Tôi gặp sự cố, khi tôi cố gắng ghi và sau đó phát tệp vừa được ghi lại. Tôi có thể ghi lại và phát âm thanh nhưng chất lượng stinks. Nó không chỉ xấu là thực sự khó nghe và âm thanh một chút giống như một giọng nói máy tính của nó tạo ra. Tôi sử dụng bộ giả lập SDK andriod. Mã thiết lập bản ghi trông giống như thế này;Chất lượng âm thanh kém khi ghi/phát âm thanh - 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(); 

Và mã đang phát tệp sẽ trông như sau;

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

Tôi không biết phần nào làm cho tệp âm thanh thực sự tệ hoặc nếu nó chỉ là trình giả lập khiến nó xấu và nó hoạt động trên điện thoại thực.

+0

Tôi có tệp .WAV có vẻ ổn trên PC nhưng có vẻ như là địa ngục khi được phát lại trong Android. Bạn đã từng giải quyết vấn đề của mình chưa? Tôi đang sử dụng chính xác thiết lập phát lại giống như bạn đã mô tả ở trên. –

Trả lời

1

Bạn đang nói về hai Object, AudioRecorder và MediaRecorder khác nhau.

0

AudioRecord có nhiều đối số có thể ảnh hưởng đến chất lượng ghi.

Hãy thử đặt chúng trong các nhà xây dựng:

  • Âm thanh Nguồn: MIC
  • Tốc độ mẫu: 16000
  • Số kênh: CHANNEL_CONFIGURATION_MONO
  • Format: ENCODING_PCM_16BIT
  • kích thước đệm: 16000 * 30 (30 bộ đệm thứ hai)

Ví dụ về mã:

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

Cảm ơn rất nhiều, nhưng có một vấn đề với điều này, theo; http://developer.android.com/reference/android/media/MediaRecorder.html # MediaRecorder() nên có chức năng cho điều này, ví dụ "setAudioSamplingRate (int samplingRate)", nhưng tôi không thể sử dụng nó với máy ghi âm của tôi, nó chỉ không tồn tại ... Bạn có thể đưa ra một ví dụ mã như cách bạn xác định điều này? Cảm ơn rất nhiều! – Nick3

+0

Tốc độ lấy mẫu là điều gì đó nên được thiết lập khi bạn khởi tạo Đầu ghi lần đầu tiên. Tất cả các tham số trong câu trả lời của tôi nên được đặt trong hàm tạo và sau đó để lại một mình trong suốt thời gian của phiên ghi âm của bạn. –

4

Hãy thử những

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

Trong trường hợp nếu bạn tìm thấy mã này sụp đổ trên các thiết bị Android cấp thấp sau đó cố gắng loại bỏ setAudioChannels và setAudioSamplingRate.

+0

recorder.setAudioSamplingRate (44100); là quá đủ để làm cho giọng nói tốt trong mã trên –

2

Nó không chỉ là trình giả lập; nó cũng có vẻ tệ trên Nexus 10 của tôi.

Tương tự như câu trả lời của Mohit marwal, bạn có thể đặt tốc độ lấy mẫu và tốc độ bit. 44100 là tỷ lệ lấy mẫu chất lượng CD tiêu chuẩn. Hầu hết các bản tải xuống âm thanh thương mại được mã hóa ít nhất 128000 bit mỗi giây (không phải kilobits mỗi giây, như được hiển thị trong câu trả lời của Mohit). Vì vậy, đó sẽ là những giá trị bắt đầu tốt. Ngoài ra, bạn chỉ nên sử dụng một kênh, để giảm kích thước tệp của mình xuống một nửa, trừ khi bạn có micrô âm thanh nổi và cần ghi âm bằng âm thanh nổi.

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

Khi tôi đặt các giá trị này, kích thước và chất lượng tệp đều tăng nhưng vẫn không ở mức tôi muốn. Có lẽ tiếng ồn còn lại là từ một microphone kém trên thiết bị của tôi, nhưng tôi chưa thử nghiệm với micrô bên ngoài hoặc so sánh các thiết bị khác.

Các vấn đề liên quan