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.