Android AudioRecord vs. MediaRecorder untuk merekam audio

93

Saya ingin merekam suara manusia di ponsel Android saya. Saya perhatikan bahwa Android memiliki dua kelas untuk melakukan ini: AudioRecord dan MediaRecorder . Dapatkah seseorang memberi tahu saya apa perbedaan antara keduanya dan kasus penggunaan apa yang sesuai untuk masing-masing?

Saya ingin dapat menganalisis ucapan manusia secara waktu nyata untuk mengukur amplitudo, dll. Apakah saya benar dalam memahami bahwa AudioRecord lebih cocok untuk tugas ini?

Saya perhatikan di halaman web panduan Android resmi untuk merekam audio , mereka menggunakan MediaRecorder tanpa menyebutkan AudioRecord.

stackoverflowuser2010
sumber

Jawaban:

84

Jika Anda ingin melakukan analisis Anda saat perekaman masih berlangsung, Anda perlu menggunakan AudioRecord, karena MediaRecordersecara otomatis merekam ke dalam file. AudioRecordmemiliki kerugian, bahwa setelah memanggil startRecording()Anda perlu mengumpulkan data sendiri dari AudioRecordinstance. Selain itu, Anda harus membaca dan memproses data dengan cukup cepat sehingga buffer internal tidak dibanjiri (lihat di output logcat, AudioRecordakan memberi tahu Anda saat itu terjadi).

Stephan
sumber
Apakah Anda memiliki kode sampel AudioRecord? Sebagian besar yang saya temukan adalah MediaRecorder ...
Rommel Paras
@RommelParas lihat di kelas ini di "telegram" untuk sumber android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David
@ David Apakah Anda mengetahui contoh yang lebih mendasar? Salah satu yang berfungsi sendiri?
Pengembang android
@androidveloper sayangnya tidak ada.
David
34

Seperti yang saya pahami MediaRecorderadalah kotak hitam yang memberikan file audio terkompresi pada output dan AudioRecordermemberi Anda aliran suara mentah dan Anda harus mengompresnya sendiri.

MediaRecordermemberi Anda amptitude maksimal dari panggilan terakhir getMaxAmplitude()metode sehingga Anda dapat mengimplementasikan visualisator suara misalnya.

Jadi dalam banyak kasus MediaRecorderadalah pilihan terbaik kecuali di mana Anda harus membuat beberapa pemrosesan suara yang rumit dan Anda memerlukan akses ke aliran audio mentah.

Lampapos
sumber
1
Terima kasih telah menyebutkan metode getMaxAmplitude (). Kemungkinan besar itulah yang saya butuhkan.
Dheeraj Bhaskar
Bagaimana cara menerapkan visualizer menggunakan MediaRecorder?
OnePunchMan
1
Apa tepatnya yang dibantu getMaxAmplitude di sini? Tidakkah Anda perlu mendapatkan yang terbaru setiap saat untuk visualisator?
Pengembang android
18

AudioRecorderer pertama-tama menyimpan data di minBuffer kemudian disalin dari sana ke buffer sementara, di MediaRecorder data tersebut disalin ke file. Di AudioRecorder kita membutuhkan api setRecordPosition () untuk menyalin data yang disimpan pada posisi yang diperlukan, sedangkan di MediaRecorder file pointer melakukan tugas ini untuk mengatur posisi marker. AudioRecorder dapat digunakan untuk aplikasi yang berjalan di emulator. Hal ini dapat dilakukan dengan memberikan frekuensi sampel rendah seperti 8000, saat menggunakan MediaRecorder, audio tidak dapat direkam menggunakan emulator. Di AudioRecord, layar akan tidur setelah beberapa saat, sedangkan di MediaRecorder layar tidak tidur.

sanjeev51.dll
sumber