Perekaman audio

Profil audio Bluetooth berdasarkan Audio Bluetooth Hemat Energi (BLE) memungkinkan streaming dua arah audio berkualitas tinggi (misalnya, audio stereo dengan frekuensi sampling 32 kHz). Hal ini dapat dilakukan berkat pembuatan Channel LE Isokronus (ISO). ISO mirip dengan Link Synchronous Connection-Oriented (SCO) karena juga menggunakan bandwidth nirkabel yang dicadangkan, tetapi penyimpanan bandwidth tidak lagi dibatasi hingga 64 Kbps dan dapat disesuaikan secara dinamis.

Input audio Bluetooth dapat menggunakan AudioManager API terbaru untuk hampir semua kasus penggunaan, kecuali panggilan telepon. Panduan ini membahas cara merekam audio stereo dari Audio BLE yang dapat didengar.

Mengonfigurasi aplikasi Anda

Pertama, konfigurasi aplikasi Anda untuk menargetkan SDK yang benar di build.gradle:

targetSdkVersion 31

Daftarkan callback audio

Buat AudioDeviceCallback yang memungkinkan aplikasi Anda mengetahui perubahan apa pun pada AudioDevices yang terhubung atau terputus.

final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
  @Override
  public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
    };
  @Override
  public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
    // Handle device removal
  };
};

audioManager.registerAudioDeviceCallback(audioDeviceCallback);

Temukan Perangkat Audio BLE

Dapatkan daftar semua perangkat audio yang terhubung dengan input yang didukung, lalu gunakan getType() untuk melihat apakah perangkat tersebut adalah headset menggunakan 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
    }
  }

Java

AudioDeviceInfo[] allDeviceInfo = audioManager.getDevices(GET_DEVICES_INPUTS);
AudioDeviceInfo bleInputDevice = null;
for (AudioDeviceInfo device : allDeviceInfo) {
  if (device.getType() == AudioDeviceInfo.TYPE_BLE_HEADSET) {
    bleInputDevice = device;
    break;
  }
}

Dukungan stereo

Untuk memeriksa apakah mikrofon stereo didukung di perangkat yang dipilih, lihat apakah perangkat memiliki dua saluran atau lebih. Jika perangkat hanya memiliki satu saluran, setel mask saluran ke mono.

Kotlin

var channelMask: Int = AudioFormat.CHANNEL_IN_MONO
if (audioDevice.channelCounts.size >= 2) {
  channelMask = AudioFormat.CHANNEL_IN_STEREO
}

Java

if (bleInputDevice.getChannelCounts() >= 2) {
  channelMask = AudioFormat.CHANNEL_IN_STEREO;
};

Menyiapkan perekam audio

Perekam audio dapat disiapkan menggunakan builder AudioRecord standar. Gunakan mask saluran untuk memilih konfigurasi stereo atau mono.

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()

Java

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();

Tetapkan perangkat pilihan

Menyetel perangkat pilihan akan memberi tahu audio recorder perangkat audio mana yang ingin Anda gunakan untuk merekam.

Kotlin

recorder.preferredDevice = audioDevice

Java

recorder.setPreferredDevice(bleInputDevice);

Sekarang, Anda dapat merekam audio seperti yang dijelaskan dalam panduan MediaRecorder.