Android AudioRecord เทียบกับ MediaRecorder สำหรับบันทึกเสียง


93

ฉันต้องการบันทึกเสียงของมนุษย์บนโทรศัพท์ Android ของฉัน ผมสังเกตเห็นว่า Android มีสองชั้นจะทำเช่นนี้: AudioRecordและMediaRecorder ใครช่วยบอกหน่อยได้ไหมว่าทั้งสองอย่างแตกต่างกันอย่างไรและอะไรคือกรณีการใช้งานที่เหมาะสมสำหรับแต่ละกรณี

ฉันต้องการวิเคราะห์คำพูดของมนุษย์แบบเรียลไทม์เพื่อวัดความกว้าง ฯลฯ ฉันเข้าใจถูกต้องหรือไม่ว่า AudioRecord เหมาะกับงานนี้มากกว่า

ฉันสังเกตเห็นในหน้าเว็บคู่มือ Android อย่างเป็นทางการสำหรับการบันทึกเสียงพวกเขาใช้ MediaRecorder โดยไม่มีการพูดถึง AudioRecord

คำตอบ:


84

หากคุณต้องการทำการวิเคราะห์ในขณะที่ยังดำเนินการบันทึกอยู่คุณต้องใช้AudioRecordเนื่องจากMediaRecorderจะบันทึกลงในไฟล์โดยอัตโนมัติ AudioRecordมีข้อเสียคือหลังจากโทรแล้วstartRecording()คุณต้องสำรวจข้อมูลด้วยตัวเองจากAudioRecordอินสแตนซ์ นอกจากนี้คุณต้องอ่านและประมวลผลข้อมูลเร็วพอที่บัฟเฟอร์ภายในจะไม่ถูกบุกรุก (ดูในเอาต์พุต logcat AudioRecordจะบอกคุณเมื่อเกิดเหตุการณ์นั้นขึ้น)


คุณมีโค้ดตัวอย่างของ AudioRecord หรือไม่? ส่วนใหญ่ที่ฉันพบคือ MediaRecorder ...
Rommel Paras

@RommelParas ดูในคลาสนี้ใน "โทรเลข" สำหรับแหล่งที่มาของ Android github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David

@ เดวิดคุณรู้จักตัวอย่างพื้นฐานมากขึ้นหรือไม่? หนึ่งที่ทำงานได้ด้วยตัวเอง?
นักพัฒนา Android

@androiddeveloper น่าเสียดายที่ไม่มี
เดวิด

34

ตามที่ฉันเข้าใจMediaRecorderคือกล่องดำที่ให้ไฟล์เสียงบีบอัดบนเอาต์พุตและAudioRecorderให้สตรีมเสียงดิบและคุณต้องบีบอัดด้วยตัวเอง

MediaRecorderให้แอมพลิจูดสูงสุดจากการเรียกgetMaxAmplitude()ใช้วิธีสุดท้ายเพื่อให้คุณสามารถใช้โปรแกรมสร้างภาพเสียงได้

ดังนั้นในกรณีส่วนใหญ่MediaRecorderจึงเป็นทางเลือกที่ดีที่สุดยกเว้นผู้ที่คุณควรทำการประมวลผลเสียงที่ซับซ้อนและคุณต้องเข้าถึงสตรีมเสียงดิบ


1
ขอขอบคุณที่กล่าวถึงเมธอด getMaxAmplitude () นั่นคือสิ่งที่ฉันต้องการมากที่สุด
Dheeraj Bhaskar

ฉันจะใช้ Visualizer โดยใช้ MediaRecorder ได้อย่างไร
OnePunchMan

1
getMaxAmplitude ช่วยอะไรได้ที่นี่? คุณไม่จำเป็นต้องรับข้อมูลปัจจุบันทุกช่วงเวลาสำหรับ Visualizer หรือไม่?
นักพัฒนา Android

18

AudioRecorderer บันทึกข้อมูลใน minBuffer ก่อนจากนั้นจะถูกคัดลอกจากที่นั่นไปยังบัฟเฟอร์ชั่วคราวใน MediaRecorder จะถูกคัดลอกไปยังไฟล์ ใน AudioRecorder เราต้องใช้ api setRecordPosition () เพื่อคัดลอกข้อมูลที่บันทึกไว้ในตำแหน่งที่ต้องการในขณะที่ MediaRecorder ตัวชี้ไฟล์จะทำหน้าที่นี้เพื่อกำหนดตำแหน่งของเครื่องหมาย AudioRecorder สามารถใช้กับแอปเหล่านั้นที่ทำงานบนโปรแกรมจำลองซึ่งสามารถทำได้โดยให้อัตราตัวอย่างต่ำเช่น 8000 ในขณะที่ใช้ MediaRecorder จะไม่สามารถบันทึกเสียงโดยใช้โปรแกรมจำลองได้ ใน AudioRecord หน้าจอจะเข้าสู่โหมดสลีปหลังจากนั้นในขณะที่ใน MediaRecorder หน้าจอจะไม่หลับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.