ऑडियो रिकॉर्डिंग

ब्लूटूथ कम ऊर्जा (BLE) ऑडियो पर आधारित ब्लूटूथ ऑडियो प्रोफ़ाइल अच्छी क्वालिटी के ऑडियो को दोनों तरफ़ से स्ट्रीम करने की अनुमति दें. उदाहरण के लिए, स्टीरियो ऑडियो सैंपल रेट 32 किलोहर्ट्ज़ (kHz) के साथ होना चाहिए. ऐसा एलई के निर्माण की वजह से मुमकिन हो सका आइसोक्रोनस चैनल (आईएसओ). आईएसओ, सिंक्रोनस कनेक्शन-ओरिएंटेड की तरह है (SCO) लिंक ऐसा इसलिए है, क्योंकि यह रिज़र्व किए गए वायरलेस बैंडविथ का भी इस्तेमाल करता है, लेकिन अब रिज़र्वेशन 64 केबीपीएस तक सीमित नहीं है और इसे डाइनैमिक तौर पर अडजस्ट किया जा सकता है.

ब्लूटूथ ऑडियो इनपुट नए वर्शन का इस्तेमाल कर सकता है करीब सभी तरह के इस्तेमाल के लिए 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.

KotlinJava
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;
  }
}

स्टीरियो की सुविधा

यह देखने के लिए कि चुने गए डिवाइस पर स्टीरियो माइक्रोफ़ोन काम करते हैं या नहीं, देखें कि क्या डिवाइस में दो या ज़्यादा चैनल हों. अगर डिवाइस में सिर्फ़ एक चैनल है, तो चैनल मास्क को मोनो पर सेट करें.

KotlinJava
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 बिल्डर का इस्तेमाल करके सेट अप किया जा सकता है. स्टीरियो या मोनो कॉन्फ़िगरेशन चुनने के लिए, चैनल मास्क का इस्तेमाल करें.

KotlinJava
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 को पता चलता है कि कौनसा ऑडियो डिवाइस जिसके साथ आपको रिकॉर्ड करना है.

KotlinJava
recorder.preferredDevice = audioDevice
recorder.setPreferredDevice(bleInputDevice);

अब MediaRecorder गाइड में बताए गए तरीके से ऑडियो रिकॉर्ड किया जा सकता है.