החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
קלט מיקרופון
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
כשמצלמים אודיו, ה-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 (שעון UTC).
[[["התוכן קל להבנה","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 (שעון UTC)."],[],[],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."]]