عند التقاط الصوت، يتلقى Audio HAL استدعاء openInputStream
يتضمن وسيطة AudioSource
للإشارة إلى كيفية معالجة إدخال الميكروفون.
يتوقع مصدر VOICE_RECOGNITION
تدفق ميكروفون استريو له تأثير إلغاء الصدى (إذا كان متاحًا) ولكن لا يتم تطبيق أي معالجة أخرى عليه.
إدخال ميكروفون متعدد القنوات
لالتقاط الصوت من جهاز يحتوي على أكثر من قناتين (ستيريو)، استخدم قناع فهرس القناة بدلاً من قناع الفهرس الموضعي (مثل CHANNEL_IN_LEFT
). على سبيل المثال:
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);
عند تعيين كل من setChannelMask
و setChannelIndexMask
، يستخدم AudioRecord
فقط القيمة التي تم تعيينها بواسطة setChannelMask
(بحد أقصى قناتين).
الالتقاط المتزامن
اعتبارًا من Android 10، يدعم إطار عمل Android الالتقاط المتزامن للمدخلات، ولكن مع قيود لحماية خصوصية المستخدم. وكجزء من هذه القيود، يتم تجاهل المصادر الافتراضية مثل AUDIO_SOURCE_FM_TUNER
، ويُسمح بالتقاطها بشكل متزامن مع الإدخال العادي (مثل الميكروفون). لا يعتبر HwAudioSource
جزءًا من قيود الالتقاط المتزامنة.
يجب أن تعتمد التطبيقات المصممة للعمل مع أجهزة AUDIO_DEVICE_IN_BUS
أو مع أجهزة AUDIO_DEVICE_IN_FM_TUNER
الثانوية على تحديد تلك الأجهزة بشكل صريح واستخدام AudioRecord.setPreferredDevice()
لتجاوز منطق تحديد المصدر الافتراضي لنظام Android.