هنگام ضبط صدا، 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 تکیه کنند.