Wejście mikrofonu

Podczas rejestrowania dźwięku interfejs Audio HAL otrzymuje wywołanie openInputStream, które zawiera argument AudioSource wskazujący, jak przetwarzać dane wejściowe z mikrofonu.

Źródło VOICE_RECOGNITION oczekuje strumienia mikrofonu stereo z efektem redukcji echa (jeśli jest dostępny), ale bez żadnego innego przetwarzania.

Wielokanałowy mikrofon

Aby rejestrować dźwięk z urządzenia z więcej niż 2 kanałami (stereo), użyj maski indeksu kanału zamiast maski indeksu pozycyjnego (np. CHANNEL_IN_LEFT). Na 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 ustawisz zarówno setChannelMask, jak i setChannelIndexMask, AudioRecord będzie używać tylko wartości ustawionej przez setChannelMask (maksymalnie 2 kanały).

Równoczesne przechwytywanie

Od Androida 10 platforma Android obsługuje jednoczesne rejestrowanie danych wejściowych, ale z ograniczeniami, które chronią prywatność użytkownika. W ramach tych ograniczeń źródła wirtualne, takie jak AUDIO_SOURCE_FM_TUNER, są ignorowane i mogą być przechwytywane jednocześnie z normalnym źródłem wejściowym (np. mikrofonem). HwAudioSource nie jest uwzględniany w ograniczeniach jednoczesnego przechwytywania.

Aplikacje zaprojektowane do działania na urządzeniach AUDIO_DEVICE_IN_BUS lub na urządzeniach pomocniczych AUDIO_DEVICE_IN_FM_TUNER muszą wyraźnie identyfikować te urządzenia i wykorzystywać AudioRecord.setPreferredDevice(), aby obejść domyślną logikę wyboru źródła w Androidzie.