إدخال الميكروفون

عند التقاط الصوت، يتلقى 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.