有人可以與我分享一個可靠的方式來記錄使用MediaRecorder的所有設備的音頻?我只是試圖記錄一個低比特率的AMR格式音頻文件,根據谷歌是所有設備的標準。這是一堆廢話。Android:可靠的音頻錄製,所有設備
根據我的經驗,有許多非品牌設備,平板電腦等在使用默認AudioEncoder.AMR_NB時會發生可怕的失敗。我的解決方法是使用反射來輪詢超類中的編碼器,然後使用errorlistener循環每個編碼器以查看哪個不會失敗。這不僅不夠優雅,而且不能捕捉所有設備。我也嘗試將AudioEncoder和OutputFormat選項(常量0)設置爲默認值,並且在某些設備上也會出現可怕的錯誤。
這裏是我使用什麼,如果默認AMR編碼器不工作:
Class encoderClass = MediaRecorder.AudioEncoder.class;
Field[] encoders = encoderClass.getFields();
然後我遍歷每個編碼器,設置一個錯誤監聽。如果它成功結束,我將它設置爲默認編碼器。
for (int i = j; i < encoders.length; i++) {
try {
int enc = encoders[i].getInt(null);
recorder.reset();
recorder.setAudioSource(AudioSource.MIC);
recorder.setOutputFormat(OutputFormat.THREE_GPP);
recorder.setAudioEncoder(enc); //testing the encoder const here
recorder.setOutputFile(amrPath);
recorder.setMaxDuration(3000);
recorder.setOnInfoListener(new OnInfoListener() {
我繼續循環,如果監聽器捕獲了一個錯誤:
if (arg1 == MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN) {
這種技術適用於大多數設備。其餘的呢? 我仍然有裝置,通過裂縫下降,坦率地說,我想 幾乎所有設備的東西可靠?
你爲什麼不試試[this](http://www.benmccann.com/dev-blog/android-audio-recording-tutorial/)? – Praveenkumar
@SpK:感謝您的鏈接,但他的代碼遵循設置AMR_NB的正常路徑,就像我說的在許多設備上失敗一樣。 – ThumbsDP