Tôi gặp sự cố khi sử dụng MediaRecorder của Android để ghi âm từ micrô sang tệp .m4a (AAC-LC, vùng chứa MPEG-4). Bắt đầu từ mức API 18, tốc độ lấy mẫu mặc định giảm từ 44,1 hoặc 48 kHz (tùy thuộc vào thiết bị) xuống chỉ 8 Hz. Nếu tôi chỉ định tốc độ lấy mẫu bằng cách sử dụng MediaRecorder.setAudioSamplingRate, nó sử dụng tỷ lệ được chỉ định nhưng có rất nhiều tiếng ồn lạ trong bản ghi.Tỷ lệ lấy mẫu và nhiễu của Android MediaRecorder
Trong LogCat, cảnh báo sau đây đang xảy ra bất cứ lúc nào:
(1) Tag: AudioSource Text: AudioRecord báo cáo tràn ngập
(2) Tag: AudioFlinger Text: RecordThread: tràn bộ đệm
Dưới đây là các mã:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioChannels(2);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioSamplingRate(48000); // if not specified, defaults to 8kHz, if specified 44.1 or 48 kHz, lots of noise
recorder.setOutputFile("test.m4a");
try {
recorder.prepare();
recorder.start();
} catch (IOException ioe) {
Log.e(TAG, "IOException", ioe);
} catch (IllegalStateException ise) {
Log.e(TAG, "IllegalStateException", ise);
} catch (Exception e) {
Log.e(TAG, "Exception", e);
}
Bất kỳ trợ giúp nào được đánh giá cao.
Tại sao các bạn cách thiết lập số kênh âm thanh đến 2 khi ghi âm từ micro? – Squonk
Tốt Squonk, cảm ơn, nhưng nó không mattter. Ngay cả khi tôi sử dụng 1 kênh âm thanh, vấn đề vẫn còn đó. Mặc dù vậy, trong LogCat tôi thấy 2 cảnh báo sau xảy ra theo thời gian: (1) AudioSource - AudioRecord báo cáo quá tải (2) AudioFlinger - RecordThread: tràn bộ đệm – Justin
Thử nghiệm với bộ mã hóa và tốc độ khác (22050, 16000). Codec được liệt kê trong tài liệu android "định dạng phương tiện" –