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.