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