Wejście mikrofonu

Podczas przechwytywania dźwięku warstwa Audio HAL odbiera wywołanie openInputStream zawierające argument AudioSource wskazujący, w jaki sposób sygnał wejściowy z mikrofonu powinien być przetwarzany.

Źródło VOICE_RECOGNITION oczekuje strumienia z mikrofonu stereofonicznego z efektem eliminacji echa (jeśli jest dostępny), ale nie zastosowano wobec niego żadnego innego przetwarzania.

Wielokanałowe wejście mikrofonowe

Aby przechwycić dźwięk z urządzenia z więcej niż dwoma kanałami (stereo), użyj maski indeksu kanału zamiast maski indeksu pozycyjnego (takiej jak 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 ustawione są zarówno setChannelMask , jak i setChannelIndexMask , AudioRecord używa tylko wartości ustawionej przez setChannelMask (maksymalnie dwa kanały).

Równoczesne przechwytywanie

Począwszy od systemu Android 10, platforma Android obsługuje współbieżne 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 sygnałem wejściowym (takim jak mikrofon). HwAudioSource nie jest uważany za część ograniczeń jednoczesnego przechwytywania.

Aplikacje zaprojektowane do współpracy z urządzeniami AUDIO_DEVICE_IN_BUS lub dodatkowymi urządzeniami AUDIO_DEVICE_IN_FM_TUNER muszą polegać na jawnej identyfikacji tych urządzeń i użyciu AudioRecord.setPreferredDevice() w celu ominięcia domyślnej logiki wyboru źródła Androida.