نمایههای صوتی بلوتوث مبتنی بر صدای کم انرژی بلوتوث (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
صوتی اطلاع می دهد که می خواهید با کدام دستگاه صوتی ضبط کنید.
اکنون، می توانید صدا را همانطور که در راهنمای MediaRecorder ذکر شده است ضبط کنید.