অডিও রেকর্ডিং

ব্লুটুথ লো এনার্জি (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 গাইডে উল্লেখ করা পদ্ধতি অনুযায়ী অডিও রেকর্ড করতে পারবেন।