כשמבצעים הקלטה של אודיו, שכבת ה-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 לבחירת מקור.