ব্লুটুথ লো এনার্জি (BLE) অডিওর উপর ভিত্তি করে ব্লুটুথ অডিও প্রোফাইল উচ্চ মানের অডিওর দ্বিমুখী স্ট্রিমিংয়ের অনুমতি দেয় (যেমন, ৩২ কিলোহার্টজ স্যাম্পলিং রেট সহ স্টিরিও অডিও)। LE Isochronous Channel (ISO) তৈরি হওয়ার কারণে এটি সম্ভব হয়েছে। ISO হল সিঙ্ক্রোনাস কানেকশন-ওরিয়েন্টেড (SCO) লিঙ্কের মতো, কারণ এটিও রিজার্ভ করা ওয়্যারলেস ব্যান্ডউইথ ব্যবহার করে, তবে ব্যান্ডউইথ রিজার্ভেশন আর ৬৪ কেবিপিএস-এ সীমাবদ্ধ থাকে না এবং ডায়নামিকভাবে অ্যাডজাস্ট করা যায়।
ফোন কল বাদ দিয়ে প্রায় সব ব্যবহারের ক্ষেত্রে, ব্লুটুথ অডিও ইনপুট লেটেস্ট AudioManager API ব্যবহার করতে পারে। BLE অডিও হিয়ারেবল থেকে কীভাবে স্টেরিও অডিও রেকর্ড করতে হয় তা এই গাইডে কভার করা হয়েছে।
আপনার অ্যাপ্লিকেশন কনফিগার করুন
প্রথমে, build.gradle-এ সঠিক SDK টার্গেট করার জন্য আপনার অ্যাপ্লিকেশন কনফিগার করুন:
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 ব্যবহার করা হেডসেট কিনা।
Kotlin
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; } }
স্টিরিও সাপোর্ট
বেছে নেওয়া ডিভাইসে স্টেরিও মাইক্রোফোন কাজ করে কিনা তা চেক করতে, ডিভাইসে দুই বা তার বেশি চ্যানেল আছে কিনা তা দেখুন। ডিভাইসে শুধুমাত্র একটি চ্যানেল থাকলে, চ্যানেল মাস্ক মনোতে সেট করুন।
Kotlin
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 বিল্ডার ব্যবহার করে অডিও রেকর্ডার সেট-আপ করা যেতে পারে।
স্টিরিও বা মোনো কনফিগারেশন বেছে নিতে চ্যানেল মাস্ক ব্যবহার করুন।
Kotlin
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-কে জানানো হয় যে আপনি কোন অডিও ডিভাইসের
মাধ্যমে রেকর্ড করতে চান।
Kotlin
recorder.preferredDevice = audioDevice
জাভা
recorder.setPreferredDevice(bleInputDevice);
এখন, আপনি MediaRecorder গাইডে উল্লেখ করা পদ্ধতি অনুযায়ী অডিও রেকর্ড করতে পারবেন।