Cấu hình âm thanh Bluetooth dựa trên Âm thanh Bluetooth năng lượng thấp (BLE) cho phép truyền trực tuyến âm thanh chất lượng cao hai chiều (ví dụ: âm thanh nổi với tốc độ lấy mẫu 32 kHz). Điều này có thể đạt được là nhờ việc tạo ra LE Kênh đồng thời (ISO). ISO tương tự như định hướng kết nối đồng bộ (SCO) Liên kết vì mạng này cũng sử dụng băng thông không dây dành riêng, nhưng băng thông quảng cáo đặt trước không còn bị giới hạn ở 64 Kb/giây và có thể điều chỉnh linh hoạt.
Thiết bị đầu vào âm thanh Bluetooth có thể sử dụng phiên bản API AudioManager cho hầu hết các mục đích sử dụng ngoại trừ các cuộc gọi điện thoại. Hướng dẫn này trình bày cách ghi âm thanh nổi từ Thiết bị nghe được Âm thanh BLE.
Định cấu hình ứng dụng
Trước tiên, hãy định cấu hình ứng dụng để nhắm đến đúng SDK trong build.gradle
:
targetSdkVersion 31
Đăng ký lệnh gọi lại âm thanh
Tạo một
AudioDeviceCallback
cho ứng dụng của bạn biết về bất kỳ thay đổi nào đối với chế độ đã kết nối hoặc đã ngắt kết nối
AudioDevices
.
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
Tìm thiết bị âm thanh BLE
Lấy danh sách tất cả thiết bị âm thanh được kết nối có hỗ trợ đầu vào rồi sử dụng
getType()
để xem
thiết bị là tai nghe sử dụng
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; } }
Hỗ trợ âm thanh nổi
Để kiểm tra xem micrô âm thanh nổi có được hỗ trợ trên thiết bị đã chọn hay không, hãy xem có hai kênh trở lên. Nếu thiết bị chỉ có một kênh, hãy đặt mặt nạ kênh thành đơn âm.
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; };
Thiết lập trình ghi âm
Bạn có thể thiết lập trình ghi âm bằng trình tạo AudioRecord
tiêu chuẩn.
Sử dụng mặt nạ kênh để chọn cấu hình âm thanh nổi hoặc đơn âm.
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();
Đặt thiết bị ưu tiên
Việc đặt thiết bị ưu tiên sẽ thông báo cho recorder
âm thanh biết thiết bị âm thanh nào
mà bạn muốn ghi cùng.
Kotlin
recorder.preferredDevice = audioDevice
Java
recorder.setPreferredDevice(bleInputDevice);
Giờ đây, bạn có thể ghi âm như nêu trong hướng dẫn MediaRecorder.