نمایههای صوتی بلوتوث مبتنی بر صدای کم انرژی بلوتوث (BLE) امکان پخش دو طرفه صدای با کیفیت بالا را فراهم میکنند (به عنوان مثال، صدای استریو با نرخ نمونهبرداری 32 کیلوهرتز). این به لطف ایجاد کانال LE Isochronous (ISO) امکان پذیر است. ISO شبیه پیوند اتصال گرا (SCO) همزمان است زیرا از پهنای باند بی سیم رزرو شده نیز استفاده می کند، اما رزرو پهنای باند دیگر روی 64 کیلوبیت بر ثانیه محدود نمی شود و می تواند به صورت پویا تنظیم شود.
ورودی صوتی بلوتوث میتواند از آخرین API AudioManager برای تقریباً همه موارد استفاده، به استثنای تماسهای تلفنی، استفاده کند. این راهنما نحوه ضبط صدای استریو از دستگاه های شنیداری BLE Audio را پوشش می دهد.
برنامه خود را پیکربندی کنید
ابتدا، برنامه خود را برای هدف قرار دادن SDK صحیح در build.gradle
پیکربندی کنید:
targetSdkVersion 31
ثبت تماس صوتی
یک AudioDeviceCallback
ایجاد کنید که به برنامه شما اجازه می دهد از هرگونه تغییر در AudioDevices
متصل یا قطع شده مطلع شود.
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
دستگاه صوتی BLE را پیدا کنید
فهرستی از همه دستگاههای صوتی متصل با ورودی پشتیبانی شده دریافت کنید، سپس از getType()
استفاده کنید تا ببینید آیا دستگاه با استفاده از AudioDeviceInfo.TYPE_BLE_HEADSET
هدست است یا خیر.
کاتلین
val allDeviceInfo = audioManager.getDevices(GET_DEVICES_INPUTS) var bleInputDevice: AudioDeviceInfo? = null for (device in allDeviceInfo) { if (device.type == AudioDeviceInfo.TYPE_BLE_HEADSET) { bleInputDevice = device break } }
جاوا
AudioDeviceInfo[] allDeviceInfo = audioManager.getDevices(GET_DEVICES_INPUTS); AudioDeviceInfo bleInputDevice = null; for (AudioDeviceInfo device : allDeviceInfo) { if (device.getType() == AudioDeviceInfo.TYPE_BLE_HEADSET) { bleInputDevice = device; break; } }
پشتیبانی از استریو
برای بررسی اینکه آیا میکروفونهای استریو در دستگاه انتخابی پشتیبانی میشوند، ببینید آیا دستگاه دارای دو یا چند کانال است. اگر دستگاه فقط یک کانال دارد، ماسک کانال را روی تک تنظیم کنید.
کاتلین
var channelMask: Int = AudioFormat.CHANNEL_IN_MONO if (audioDevice.channelCounts.size >= 2) { channelMask = AudioFormat.CHANNEL_IN_STEREO }
جاوا
if (bleInputDevice.getChannelCounts() >= 2) { channelMask = AudioFormat.CHANNEL_IN_STEREO; };
ضبط کننده صدا را تنظیم کنید
ضبط کننده های صوتی را می توان با استفاده از سازنده AudioRecord
استاندارد راه اندازی کرد. از ماسک کانال برای انتخاب پیکربندی استریو یا مونو استفاده کنید.
کاتلین
val recorder = AudioRecord.Builder() .setAudioSource(MediaRecorder.AudioSource.MIC) .setAudioFormat(AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(32000) .setChannelMask(channelMask) .build()) .setBufferSizeInBytes(2 * minBuffSizeBytes) .build()
جاوا
AudioRecord recorder = new AudioRecord.Builder() .setAudioSource(MediaRecorder.AudioSource.MIC) .setAudioFormat(new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(32000) .setChannelMask(channelMask) .build()) .setBufferSizeInBytes(2*minBuffSizeBytes) .build();
دستگاه برگزیده را تنظیم کنید
تنظیم یک دستگاه ترجیحی به recorder
صوتی اطلاع می دهد که می خواهید با کدام دستگاه صوتی ضبط کنید.
کاتلین
recorder.preferredDevice = audioDevice
جاوا
recorder.setPreferredDevice(bleInputDevice);
اکنون، میتوانید صدا را همانطور که در راهنمای MediaRecorder ذکر شده است ضبط کنید.