Podczas rejestrowania dźwięku HAL audio otrzymuje wywołanie openInputStream, które zawiera argument AudioSource wskazujący, jak należy przetwarzać dane wejściowe z mikrofonu.
Źródło VOICE_RECOGNITION oczekuje strumienia z mikrofonu stereo, który ma efekt anulowania echa (jeśli jest dostępny), ale nie jest poddawany żadnemu innemu przetwarzaniu.
Wielokanałowe wejście mikrofonowe
Aby przechwycić dźwięk z urządzenia z więcej niż 2 kanałami (stereo), użyj maski indeksu kanału zamiast maski indeksu pozycji (np. CHANNEL_IN_LEFT). Przykład:
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);
Jeśli ustawione są zarówno setChannelMask, jak i setChannelIndexMask, AudioRecord używa tylko wartości ustawionej przez setChannelMask (maksymalnie 2 kanały).
Równoczesne rejestrowanie
Od Androida 10 platforma Androida obsługuje jednoczesne rejestrowanie danych wejściowych, ale z ograniczeniami, które chronią prywatność użytkownika. W ramach tych ograniczeń wirtualne źródła, takie jak AUDIO_SOURCE_FM_TUNER, są ignorowane i mogą być przechwytywane jednocześnie ze zwykłym wejściem (np. mikrofonem).
HwAudioSource nie jest uznawane za część ograniczeń dotyczących jednoczesnego rejestrowania.
Aplikacje przeznaczone do współpracy z AUDIO_DEVICE_IN_BUS urządzeniami lub urządzeniami dodatkowymiAUDIO_DEVICE_IN_FM_TUNER muszą opierać się na wyraźnym identyfikowaniu tych urządzeń i używać AudioRecord.setPreferredDevice(), aby pominąć domyślną logikę wyboru źródła w Androidzie.