اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
إدخال الميكروفون
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
عند تسجيل الصوت، يتلقّى 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.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-09 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-09 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Microphone input\n\nWhen capturing audio, the Audio HAL receives an `openInputStream` call that\nincludes an `AudioSource` argument to indicate how microphone input should be\nprocessed.\n\nThe `VOICE_RECOGNITION` source expects a stereo microphone stream that has an\necho cancellation effect (if available) but no other processing applied to it.\n\nMulti-channel microphone input\n------------------------------\n\nTo capture audio from a device with more than two channels (stereo), use a\nchannel index mask instead of positional index mask (such as `CHANNEL_IN_LEFT`).\nFor example: \n\n final AudioFormat audioFormat = new AudioFormat.Builder()\n .setEncoding(AudioFormat.ENCODING_PCM_16BIT)\n .setSampleRate(44100)\n .setChannelIndexMask(0xf /* 4 channels, 0..3 */)\n .build();\n final AudioRecord audioRecord = new AudioRecord.Builder()\n .setAudioFormat(audioFormat)\n .build();\n audioRecord.setPreferredDevice(someAudioDeviceInfo);\n\nWhen both `setChannelMask` and `setChannelIndexMask` are set, `AudioRecord` uses\nonly the value set by `setChannelMask` (maximum of two channels).\n\nConcurrent capture\n------------------\n\nAs of Android 10, the Android framework supports\n[Concurrent capture](/docs/core/audio/concurrent) of inputs, but with\nrestrictions to protect the user's privacy. As part of these restrictions,\nvirtual sources such as `AUDIO_SOURCE_FM_TUNER` are ignored, and are allowed to\nbe captured concurrently along with a regular input (such as the microphone).\n`HwAudioSource` is not considered part of the concurrent capture restrictions.\n\nApps designed to work with `AUDIO_DEVICE_IN_BUS` devices or with secondary\n`AUDIO_DEVICE_IN_FM_TUNER` devices must rely on explicitly identifying those\ndevices and using `AudioRecord.setPreferredDevice()` to bypass the Android\ndefault source selection logic."]]