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

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