2013-02-01 23 views
6

hello , tôi muốn sử dụng mediaRecorder để ghi âm giọng nói. tôi muốn lưu định dạng là amr.những gì là tốt setAudioEncodingBitRate trên giọng nói kỷ lục

this.mediaRecorder = new MediaRecorder(); 
this.mediaRecorder.setAudioChannels(1); 
this.mediaRecorder.setAudioSamplingRate(8000); 

this.mediaRecorder.setAudioEncodingBitRate(16); 
this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
this.mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); 
this.mediaRecorder.setOutputFile(this.file.getAbsolutePath()); 

this.mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

i sử dụng this.mediaRecorder.setAudioEncodingBitRate (16), một số thiết bị là ok

mediaRecorder.setAudioEncodingBitRate (12500), somedevice là ok

nhưng tôi xóa mediaRecorder.setAudioEncodingBitRate một số thiết bị ok

để câu hỏi của tôi cách nhận mặc định AudioEncodingBitRate. thông số nào tôi cần sử dụng?

Trả lời

22

Bạn đặt AudioEncodingBitRate quá thấp. Tôi đã sai lầm tương tự :-)

Điều này dường như làm việc:

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
if (Build.VERSION.SDK_INT >= 10) { 
    recorder.setAudioSamplingRate(44100); 
    recorder.setAudioEncodingBitRate(96000); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
} else { 
    // older version of Android, use crappy sounding voice codec 
    recorder.setAudioSamplingRate(8000); 
    recorder.setAudioEncodingBitRate(12200); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
} 
recorder.setOutputFile(file.getAbsolutePath()); 
try { 
    recorder.prepare(); 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} 

ý tưởng này xuất phát từ here

cộng: đọc các tài liệu. Tài liệu của setAudioSamplingRate nói như sau:

Tốc độ lấy mẫu thực sự phụ thuộc vào định dạng cho bản ghi âm cũng như khả năng của nền tảng. Ví dụ, tốc độ lấy mẫu được hỗ trợ bởi chuẩn mã hóa âm thanh AAC dao động từ 8 đến 96 kHz, tốc độ lấy mẫu được AMRNB hỗ trợ là 8kHz và tốc độ lấy mẫu được AMRWB hỗ trợ là 16kHz.

+0

nhưng tôi muốn lưu các định dạng amr – pengwang

+0

tốt, sau đó chỉ cần loại bỏ nếu chi nhánh và Ust mã từ phần khác. AMR_NB = Thu hẹp, điều đó có nghĩa là bạn không thể sử dụng mẫu lấy mẫu cao hơn 8k dẫn đến chất lượng ghi kém hơn. Khi sử dụng bộ mã hóa AMR, bạn nên sử dụng định dạng THREE_GPP. –

+1

Tôi vẫn nghĩ rằng vấn đề chính của bạn là phương thức setAudioEncodingBitRate. bạn cần chỉ định tốc độ bit ở đây. Tốc độ bit = bit/giây. 12 bit/giây không phải là giá trị mà bạn có thể sử dụng để mã hóa tín hiệu âm thanh. [ở đây] (http://en.wikipedia.org/wiki/Bit_rate) bạn tìm thấy bitrate chung cho Audio. Ví dụ. 800 bit/giây là tối thiểu cần thiết để nhận ra lời nói. –

1

Tôi đang sử dụng cấu hình dưới đây và cho đầu ra ghi rõ ràng tuyệt vời.

localFileName = getFileName()+".wav"; 
localFile = new File(localdir, localFileName); 
mRecorder = new MediaRecorder(); 
mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
mRecorder.setOutputFormat(AudioFormat.ENCODING_PCM_16BIT); 
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
mRecorder.setAudioChannels(1); 
mRecorder.setAudioEncodingBitRate(128000); 
mRecorder.setAudioSamplingRate(44100); 
mRecorder.setOutputFile(localFile.getPath()); 

tuy nhiên nếu bạn đang ghi âm cùng lúc phát âm thanh thì có một số vấn đề trong thiết bị samsung.

[nhưng một lần nữa chỉ khi bạn đang chơi âm thanh và ghi lại cả hai cùng nhau cùng một lúc]

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