Ses HAL'i, ses kaydederken mikrofon girişinin nasıl işleneceğini belirten bir AudioSource
bağımsız değişkeni içeren bir openInputStream
çağrısı alır.
VOICE_RECOGNITION
kaynağı, yankı iptali efekti (varsa) olan ancak başka bir işleme uygulanmamış bir stereo mikrofon akışı bekler.
Çok kanallı mikrofon girişi
İkiden fazla kanala (stereo) sahip bir cihazdan ses yakalamak için konumsal dizin maskesi yerine kanal dizini maskesi (CHANNEL_IN_LEFT
gibi) 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 (en fazla iki kanal).
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 uygulanır. Bu kısıtlamalar kapsamında, AUDIO_SOURCE_FM_TUNER
gibi sanal kaynaklar yoksayılır ve normal bir girişle (ör. mikrofon) birlikte 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 tasarlanmış uygulamalar, bu cihazları açıkça tanımlamalı ve Android'in varsayılan kaynak seçim mantığını atlamak için AudioRecord.setPreferredDevice()
kullanmalıdır.