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.