Wejście mikrofonu

Podczas przechwytywania dźwięku HAL audio otrzymuje wywołanie openInputStream, które powoduje zawiera argument AudioSource, który wskazuje sposób działania wejścia z mikrofonu. przetworzono.

Źródło VOICE_RECOGNITION oczekuje strumienia mikrofonu stereo o efekt usuwania echa (jeśli jest dostępny), ale nie są do niego stosowane żadne inne metody przetwarzania.

Wielokanałowe wejście mikrofonu

Aby przechwytywać dźwięk z urządzenia, które ma więcej niż 2 kanały (stereo), użyj maska indeksu kanału zamiast pozycjonalnej maski indeksu (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);

Jeśli są skonfigurowane zarówno setChannelMask, jak i setChannelIndexMask, AudioRecord używa tylko wartość ustawioną przez funkcję setChannelMask (maksymalnie dwa kanały).

Jednoczesne przechwytywanie

Od wersji Androida 10 platforma obsługuje Jednoczesne przechwytywanie wejść, ale przy użyciu ograniczeń chroniących prywatność użytkownika. W ramach tych ograniczeń źródła wirtualne, takie jak AUDIO_SOURCE_FM_TUNER, są ignorowane i mogą być rejestrowany równolegle ze zwykłym wejściem (takim jak mikrofon). Element HwAudioSource nie jest objęty równoczesnym ograniczeniem przechwytywania.

Aplikacje przeznaczone do działania na urządzeniach AUDIO_DEVICE_IN_BUS lub z urządzeniami pomocniczymi Urządzenia (AUDIO_DEVICE_IN_FM_TUNER) muszą polegać na jednoznacznej identyfikacji tych urządzeń za pomocą AudioRecord.setPreferredDevice() do omijania zabezpieczeń Androida domyślna logika wyboru źródła.