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

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