نمایههای صوتی بلوتوث براساس «صدای بلوتوث کممصرف» (BLE) امکان جاریسازی دوطرفه صدای باکیفیت (برای مثال، صدای استریو با نرخ نمونهبرداری ۳۲ کیلوهرتز) را فراهم میکند. این امر بهلطف ایجاد «کانال همزمان» (ISO) در LE امکانپذیر شده است. ISO شبیه به پیوند «اتصال همگامگرا» (SCO) است زیرا از پهنای باند بیسیم رزروشده نیز استفاده میکند، اما رزرو پهنای باند دیگر به ۶۴ کیلوبیت در ثانیه محدود نمیشود و میتواند بهصورت پویا تنظیم شود.
ورودی صوتی بلوتوث میتواند از جدیدترین میانای برنامهسازی کاربردی AudioManager برای تقریباً همه موارد استفاده، بهاستثنای تماسهای تلفنی، استفاده کند. این راهنما نحوه ضبط صدای استریو از سمعکهای BLE Audio را پوشش میدهد.
پیکربندی برنامه
ابتدا، برنامهتان را پیکربندی کنید تا کیت توسعه نرمافزار صحیح را در 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);
یافتن دستگاه صوتی مجهز به بلوتوث کممصرف
فهرستی از همه دستگاههای صوتی متصلشده با ورودی پشتیبانیشده دریافت کنید، سپس از
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 آمده است ضبط کنید.