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.