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