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

ব্লুটুথ লো এনার্জি (BLE) অডিওর উপর ভিত্তি করে ব্লুটুথ অডিও প্রোফাইলগুলি উচ্চ মানের অডিওর দ্বিমুখী স্ট্রিমিংয়ের অনুমতি দেয় (উদাহরণস্বরূপ, 32 kHz স্যাম্পলিং রেট সহ স্টেরিও অডিও)। এলই আইসোক্রোনাস চ্যানেল (আইএসও) তৈরির জন্য এটি সম্ভব হয়েছে। আইএসও সিঙ্ক্রোনাস কানেকশন-ওরিয়েন্টেড (SCO) লিঙ্কের অনুরূপ কারণ এটি সংরক্ষিত ওয়্যারলেস ব্যান্ডউইথও ব্যবহার করে, কিন্তু ব্যান্ডউইথ রিজার্ভেশন আর 64 Kbps এ ক্যাপ করা হয় না এবং গতিশীলভাবে সামঞ্জস্য করা যায়।

ব্লুটুথ অডিও ইনপুট ফোন কল ব্যতীত প্রায় সমস্ত ব্যবহারের ক্ষেত্রে সর্বশেষ অডিও ম্যানেজার API ব্যবহার করতে পারে। এই নির্দেশিকাটি বিএলই অডিও শ্রবণযোগ্য থেকে স্টেরিও অডিও কীভাবে রেকর্ড করতে হয় তা কভার করে।

আপনার আবেদন কনফিগার করুন

প্রথমে, 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 অডিও ডিভাইস খুঁজুন

ইনপুট সমর্থিত সমস্ত সংযুক্ত অডিও ডিভাইসের একটি তালিকা পান, তারপর AudioDeviceInfo.TYPE_BLE_HEADSET ব্যবহার করে ডিভাইসটি একটি হেডসেট কিনা তা দেখতে getType() ব্যবহার করুন।

কোটলিন

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 গাইডে বর্ণিত অডিও রেকর্ড করতে পারেন।