כשמצלמים אודיו, ה-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.