Android AudioRecord so với MediaRecorder để ghi âm thanh


91

Tôi muốn ghi lại giọng nói của con người trên điện thoại Android của mình. Tôi nhận thấy rằng Android có hai lớp để làm điều này: AudioRecordMediaRecorder . Ai đó có thể cho tôi biết sự khác biệt giữa hai và các trường hợp sử dụng thích hợp cho mỗi loại là gì?

Tôi muốn có thể phân tích giọng nói của con người trong thời gian thực để đo biên độ, v.v. Tôi hiểu rằng AudioRecord phù hợp hơn với tác vụ này có đúng không?

Tôi nhận thấy trên trang web hướng dẫn chính thức của Android để ghi âm , họ sử dụng MediaRecorder mà không đề cập đến AudioRecord.

Câu trả lời:


82

Nếu bạn muốn thực hiện phân tích của mình trong khi quá trình ghi vẫn đang diễn ra, bạn cần sử dụng AudioRecord, như MediaRecordertự động ghi vào một tệp. AudioRecordcó nhược điểm là sau khi gọi, startRecording()bạn cần tự mình thăm dò dữ liệu từ AudioRecordphiên bản. Ngoài ra, bạn phải đọc và xử lý dữ liệu đủ nhanh để bộ đệm bên trong không bị chạy quá mức (xem trong đầu ra logcat, AudioRecordsẽ cho bạn biết khi nào điều đó xảy ra).


Bạn có mã mẫu của AudioRecord không? Hầu hết những người tôi đã tìm thấy là MediaRecorder ...
Rommel Paras

@RommelParas tìm lớp này trong "telegram" cho nguồn android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David

@David Bạn có biết mẫu cơ bản hơn không? Một cái mà tự hoạt động?
nhà phát triển android

@androiddeveloper rất tiếc là không.
David

33

Như tôi hiểu MediaRecorderlà một hộp đen cung cấp tệp âm thanh nén ở đầu ra và chỉ AudioRecordercung cấp cho bạn luồng âm thanh thô và bạn phải tự nén nó.

MediaRecordercung cấp cho bạn cường độ tối đa từ lần gọi cuối cùng của getMaxAmplitude()phương thức để bạn có thể triển khai trình hiển thị âm thanh chẳng hạn.

Vì vậy, trong hầu hết các trường hợp MediaRecorderlà lựa chọn tốt nhất ngoại trừ những trường hợp bạn nên xử lý âm thanh phức tạp và bạn cần truy cập vào luồng âm thanh thô.


Cảm ơn bạn đã đề cập đến phương thức getMaxAmposystem (). Đó rất có thể là tất cả những gì tôi cần.
Dheeraj Bhaskar

Làm cách nào để triển khai trình hiển thị bằng MediaRecorder?
OnePunchMan

Chính xác thì getMaxAmpinity giúp gì ở đây? Bạn không cần phải tải thông tin hiện tại vào từng thời điểm cho trình hiển thị?
nhà phát triển android

18

AudioRecorderer trước tiên lưu dữ liệu trong minBuffer, sau đó nó được sao chép từ đó vào bộ đệm tạm thời, trong MediaRecorder, nó được sao chép vào các tệp. Trong AudioRecorder, chúng ta cần api setRecordPosition () để sao chép dữ liệu đã lưu ở vị trí cần thiết, trong khi trong MediaRecorder, con trỏ tệp thực hiện công việc này để đặt vị trí của điểm đánh dấu. AudioRecorder có thể được sử dụng cho những ứng dụng chạy trên trình giả lập, điều này có thể được thực hiện bằng cách cung cấp tốc độ lấy mẫu thấp, chẳng hạn như 8000, trong khi sử dụng MediaRecorder, âm thanh không thể được ghi lại bằng trình giả lập. Trong AudioRecord, màn hình sẽ ngủ sau một thời gian, trong khi trong MediaRecorder, màn hình không ngủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.