از 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
(حداکثر دو کانال) استفاده می کند.
ضبط همزمان
از اندروید 10، چارچوب اندروید از ضبط همزمان ورودیها پشتیبانی میکند، اما با محدودیتهایی برای محافظت از حریم خصوصی کاربر. بهعنوان بخشی از این محدودیتها، منابع مجازی مانند AUDIO_SOURCE_FM_TUNER
نادیده گرفته میشوند و اجازه دارند همزمان با یک ورودی معمولی (مانند میکروفون) ضبط شوند. HwAudioSource
بخشی از محدودیتهای ضبط همزمان در نظر گرفته نمیشود.
برنامههایی که برای کار با دستگاههای AUDIO_DEVICE_IN_BUS
یا دستگاههای AUDIO_DEVICE_IN_FM_TUNER
ثانویه طراحی شدهاند، باید به شناسایی صریح آن دستگاهها و استفاده از AudioRecord.setPreferredDevice()
برای دور زدن منطق انتخاب منبع پیشفرض Android تکیه کنند.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و 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."]]