בעת לכידת אודיו, ה- 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.