Ses yakalanırken Audio HAL, mikrofon girişinin nasıl işlenmesi gerektiğini belirten bir AudioSource
bağımsız değişkenini içeren bir openInputStream
çağrısı alır.
VOICE_RECOGNITION
kaynağı, yankı giderme efekti (varsa) olan ancak başka bir işlem uygulanmamış bir stereo mikrofon akışı bekler.
Çok kanallı mikrofon girişi
İkiden fazla kanalı (stereo) olan bir cihazdan ses yakalamak için konumsal dizin maskesi (ör. CHANNEL_IN_LEFT
) yerine kanal dizin maskesi kullanın.
Örneğin:
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);
Hem setChannelMask
hem de setChannelIndexMask
ayarlandığında AudioRecord
yalnızca setChannelMask
tarafından ayarlanan değeri (en fazla iki kanal) kullanır.
Eşzamanlı yakalama
Android 10'dan itibaren Android çerçevesi, girişlerin eşzamanlı olarak yakalanmasını destekler ancak kullanıcının gizliliğini korumak için kısıtlamalar getirir. Bu kısıtlamalar kapsamında, AUDIO_SOURCE_FM_TUNER
gibi sanal kaynaklar yoksayılır ve normal bir girişle (ör. mikrofon) eşzamanlı olarak yakalanmasına izin verilir.
HwAudioSource
, eşzamanlı yakalama kısıtlamalarının bir parçası olarak kabul edilmez.
AUDIO_DEVICE_IN_BUS
cihazlarla veya ikincil AUDIO_DEVICE_IN_FM_TUNER
cihazlarla çalışmak üzere tasarlanan uygulamalar, bu cihazları açıkça tanımlamaya ve Android'in varsayılan kaynak seçme mantığını atlamak için AudioRecord.setPreferredDevice()
kullanmaya dayanmalıdır.