Dane wejściowe z mikrofonu

Podczas przechwytywania 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 usuwania echa (jeśli jest dostępny), ale nie jest poddawany żadnemu innemu przetwarzaniu.

Wejście mikrofonu wielokanałowego

Aby przechwytywać 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);

Gdy ustawione są zarówno setChannelMask, jak i setChannelIndexMask, AudioRecord używa tylko wartości ustawionej przez setChannelMask (maksymalnie 2 kanały).

Jednoczesne przechwytywanie

Od Androida 10 framework Androida obsługuje jednoczesne przechwytywanie danych wejściowych, ale z ograniczeniami mającymi na celu ochronę prywatności użytkownika. W ramach tych ograniczeń źródła wirtualne, takie jak AUDIO_SOURCE_FM_TUNER, są ignorowane i mogą być przechwytywane jednocześnie ze zwykłym wejściem (np. mikrofonem). HwAudioSource nie jest objęty ograniczeniami dotyczącymi jednoczesnego przechwytywania.

Aplikacje zaprojektowane do współpracy z urządzeniami AUDIO_DEVICE_IN_BUS lub z urządzeniami dodatkowymi AUDIO_DEVICE_IN_FM_TUNER muszą polegać na wyraźnym identyfikowaniu tych urządzeń i używaniu AudioRecord.setPreferredDevice() w celu obejścia domyślnej logiki wyboru źródła w Androidzie.