Âm thanh được ghi bằng MediaRecorder.AudioSource.VOICE_COMMUNICATION trống trên một số thiết bị có Android 10


10

Tôi đang ghi âm thanh cho tin nhắn thoại trong ứng dụng bằng đoạn mã sau.

MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
audioRecorder.setOutputFile(audioRecordingFile);
audioRecorder.prepare();
audioRecorder.start();

Sử dụng MediaRecorder.AudioSource.VOICE_COMMUNICATION thay vì MediaRecorder.AudioSource.MIC) rất hữu ích trong việc ghi lại âm thanh sạch được xử lý trước.

Tuy nhiên, gần đây tôi thấy một số vấn đề trong đó các tệp được ghi trống đang được báo cáo trên một số thiết bị được cập nhật gần đây lên Android 10. Cần lưu ý rằng không phải tất cả các thiết bị Android 10 đều có những vấn đề này, chỉ một vài ví dụ như Nokia 6.1 và Mi A2.

Không có lỗi hoặc ngoại lệ mà chỉ là các tệp đầu ra âm thanh trống.

Nếu tôi sử dụng MediaRecorder.AudioSource.MIC) thì vấn đề không được nhìn thấy.

Tôi đã tìm thấy các thông tin sau liên quan đến Android 10 và VOICE_COMMUNICATION Bản phát hành Android 10 bao gồm các yêu cầu sau để chụp với VOICE_COMMUNICATION.

Dựa trên điều này, tôi đã kiểm tra tính khả dụng của AcousticEchoCanceler, AutomaticGainControl và NoiseSuppressor bằng mã sau đây.

AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()

Và đã tìm thấy kết quả tương tự trên Mi A2 và OnePlus 6 với Android 10. Cả hai thiết bị đều hiển thị AcousticEchoCanceler và NoiseSuppressor là có sẵn và AutomaticGainControl là không có sẵn.

Vì sự cố không có trên tất cả các thiết bị Android, tôi không muốn quay lại sử dụng MediaRecorder.AudioSource.MIC) . Đồng thời, không có lỗi, ngoại lệ hoặc yếu tố khác biệt nào cho tôi biết khi nào nên quay lại MediaRecorder.AudioSource.MIC) .

CẬP NHẬT: Vấn đề được giải quyết khi Google Assistant bị tắt trên Mi A2. Đây có thể là con trỏ: https://developer.android.com/guide/topics/media/shared-audio-input

Bất kỳ trợ giúp liên quan đến điều này được đánh giá cao.



1
Bài đăng bạn liên kết nói về MediaRecorder.AudioSource.VOICE_CALL. Những gì tôi đang sử dụng là MediaRecorder.AudioSource. ÂM THANH GIAO TIẾP. Tôi tin rằng có một số khác biệt trong đó. Ngoài ra, tôi không ghi âm cuộc gọi. Tôi đang ghi lại các tin nhắn âm thanh thông thường trong một ứng dụng nhắn tin. Ngoài ra, nó không bị lỗi trên tất cả các thiết bị Android 10 mà chỉ trên một số ít như tôi đã đề cập trước đó.
binaryKarmic

Câu trả lời:


1

Tôi đã kết thúc bằng MediaRecorder.AudioSource.VOICE_RECOGNITION thay vì MediaRecorder.AudioSource.VOICE_COMMUNICATION trên tất cả các phiên bản Android.

Chúng tôi đã kết thúc việc lấy mẫu trên 15 thiết bị khác nhau và phát hiện ra rằng MediaRecorder.AudioSource.VOICE_RECOGNITION hoạt động tốt nhất với các thiết bị đa số bao gồm cả điện thoại cao cấp và trung cấp.

Theo hiểu biết của tôi, sự cố ban đầu gặp phải trên một số thiết bị trên một số thiết bị có vẻ như là sự cố triển khai của các OEM đối với Android 10 và VOICE_COMMUNICATION https://source.android.com/devices/audio/im vây-pre-processing


Tôi đã đối mặt chính xác với cùng một vấn đề trên Nokia 6.1 và thực sự tắt Google Assistant. Nhưng nếu tôi thực sự muốn sử dụng nguồn âm thanh VOICE_COMMUNICATION thì sao? Tôi không thể yêu cầu khách hàng của mình tắt trợ lý của họ và tôi muốn có thể sử dụng các tính năng tiền xử lý âm thanh như khử tiếng vang. Có thể tôi có thể thiết lập âm thanh fx khác nhau theo cách thủ công, nhưng nếu bạn có lời khuyên nào khác, nó sẽ được đánh giá cao)
Alexey Ershov

1
Tôi hiểu bạn đến từ đâu. Vấn đề ở đây có vẻ như lỗi triển khai của các OEM mà họ có thể hoặc không thể khắc phục trong tương lai, vì vậy không có điểm nào dựa vào nó. Bạn có thể thực hiện một số sửa chữa tùy chỉnh như quan sát âm thanh được ghi sau vài giây. Nếu nó trống và phiên bản HĐH trên 10, hãy cung cấp cho người dùng tùy chọn tắt Trợ lý hoặc chuyển sang chất lượng hơi thấp bằng cách sử dụng VOICE_RECOGNITION.
binaryKarmic
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.