Sesi yakalarken Audio HAL, mikrofon girişinin nasıl işlenmesi gerektiğini belirten bir AudioSource
bağımsız değişkeni içeren bir openInputStream
çağrısı alır.
VOICE_RECOGNITION
kaynağı, yankı giderme etkisine (varsa) sahip olan ancak kendisine başka bir işlem uygulanmayan bir stereo mikrofon akışı bekler.
Çok kanallı mikrofon girişi
İkiden fazla kanalı (stereo) olan bir cihazdan ses yakalamak için konumsal indeks maskesi yerine ( CHANNEL_IN_LEFT
gibi) bir kanal indeks 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 kullanır (maksimum iki kanal).
Eşzamanlı yakalama
Android 10'dan itibaren Android çerçevesi, girişlerin eşzamanlı yakalanmasını destekler, ancak kullanıcının gizliliğini korumak için kısıtlamalar vardır. Bu kısıtlamaların bir parçası olarak, AUDIO_SOURCE_FM_TUNER
gibi sanal kaynaklar göz ardı edilir ve normal bir girişle (mikrofon gibi) eş zamanlı olarak yakalanmalarına izin verilir. HwAudioSource
eşzamanlı yakalama kısıtlamalarının bir parçası olarak kabul edilmez.
AUDIO_DEVICE_IN_BUS
cihazlarıyla veya ikincil AUDIO_DEVICE_IN_FM_TUNER
cihazlarıyla çalışmak üzere tasarlanan uygulamalar, Android'in varsayılan kaynak seçimi mantığını atlamak için bu cihazları açıkça tanımlamaya ve AudioRecord.setPreferredDevice()
kullanmaya dayanmalıdır.