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