Khi ghi âm thanh, Audio HAL sẽ nhận được lệnh gọi openInputStream
bao gồm đối số AudioSource
để cho biết cách xử lý đầu vào micrô.
Nguồn VOICE_RECOGNITION
dự kiến một luồng micrô âm thanh nổi có hiệu ứng loại bỏ tiếng vọng (nếu có) nhưng không có quy trình xử lý nào khác được áp dụng cho luồng đó.
Đầu vào micrô nhiều kênh
Để ghi âm từ một thiết bị có nhiều hơn hai kênh (âm thanh nổi), hãy sử dụng mặt nạ chỉ mục kênh thay vì mặt nạ chỉ mục vị trí (chẳng hạn như CHANNEL_IN_LEFT
). Ví dụ:
final AudioFormat audioFormat = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(44100)
.setChannelIndexMask(0xf /* 4 channels, 0..3 */)
.build();
final AudioRecord audioRecord = new AudioRecord.Builder()
.setAudioFormat(audioFormat)
.build();
audioRecord.setPreferredDevice(someAudioDeviceInfo);
Khi bạn đặt cả setChannelMask
và setChannelIndexMask
, AudioRecord
chỉ sử dụng giá trị do setChannelMask
đặt (tối đa là hai kênh).
Chụp đồng thời
Kể từ Android 10, khung Android hỗ trợ tính năng Ghi đồng thời dữ liệu đầu vào, nhưng có các hạn chế để bảo vệ quyền riêng tư của người dùng. Trong số các quy định hạn chế này, các nguồn ảo như AUDIO_SOURCE_FM_TUNER
sẽ bị bỏ qua và được phép ghi lại đồng thời với một đầu vào thông thường (chẳng hạn như micrô).
HwAudioSource
không được coi là một phần của các quy tắc hạn chế chụp đồng thời.
Các ứng dụng được thiết kế để hoạt động với thiết bị AUDIO_DEVICE_IN_BUS
hoặc với thiết bị AUDIO_DEVICE_IN_FM_TUNER
phụ phải dựa vào việc xác định rõ ràng các thiết bị đó và sử dụng AudioRecord.setPreferredDevice()
để bỏ qua logic lựa chọn nguồn mặc định của Android.