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 dimungkinkan berkat dibuatnya LE Saluran Isokronos (ISO). ISO mirip dengan Synchronous Connection-Oriented (SCO) karena menggunakan bandwidth nirkabel yang dicadangkan, tetapi tidak lagi dibatasi hingga 64 Kbps dan dapat disesuaikan secara dinamis.

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

Mengonfigurasi aplikasi Anda

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

targetSdkVersion 31

Daftarkan callback audio

Buat AudioDeviceCallback yang memberi tahu aplikasi tentang perubahan apa pun pada sambungan AudioDevices.

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

audioManager.registerAudioDeviceCallback(audioDeviceCallback);

Mencari Perangkat Audio BLE

Dapatkan daftar semua perangkat audio yang terhubung yang mendukung input, lalu gunakan getType() untuk mengetahui apakah perangkat adalah {i>headset<i} yang 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 pada 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 recorder perangkat audio mana yang ingin Anda rekam.

Kotlin

recorder.preferredDevice = audioDevice

Java

recorder.setPreferredDevice(bleInputDevice);

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