Profile dźwięku Bluetooth oparte na technologii Bluetooth Low Energy (BLE) umożliwiają dwukierunkowe strumieniowanie dźwięku wysokiej jakości (na przykład dźwięk stereo) z częstotliwością próbkowania 32 kHz). Jest to możliwe dzięki utworzeniu grupy LE Kanał izochronologiczny (ISO). ISO jest podobny do synchronicznego połączenia zorientowanego na połączenie. ponieważ używa też zarezerwowanej przepustowości sieci bezprzewodowej. funkcja rezerwacji nie jest już ograniczona do 64 kb/s i można ją dynamicznie dostosowywać.
Wejście audio Bluetooth może korzystać z najnowszych Interfejs AudioManager API do użytku niemal we wszystkich przypadków, z wyłączeniem połączeń telefonicznych. Z tego przewodnika dowiesz się, jak nagrywać dźwięk stereo z Dźwięki BLE.
Konfigurowanie aplikacji
Najpierw skonfiguruj aplikację tak, aby była kierowana na odpowiedni pakiet SDK w interfejsie build.gradle
:
targetSdkVersion 31
Rejestrowanie wywołania zwrotnego
Utwórz
AudioDeviceCallback
, który informuje aplikację o wszelkich zmianach dotyczących połączenia lub rozłączenia
AudioDevices
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
Znajdź urządzenie BLE Audio
Zobacz listę wszystkich podłączonych urządzeń audio z obsługiwanym wejściem, a następnie użyj
getType()
, aby sprawdzić,
To zestaw słuchawkowy, który korzysta z
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; } }
Obsługa stereo
Aby sprawdzić, czy wybrane urządzenie obsługuje mikrofony stereo, urządzenia z co najmniej 2 kanałami. Jeśli urządzenie ma tylko 1 kanał, ustaw maskę kanału na 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; };
Konfigurowanie dyktafonu
Dyktafon można skonfigurować za pomocą standardowego kreatora AudioRecord
.
Użyj maski kanału, aby wybrać konfigurację stereo lub 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();
Ustaw preferowane urządzenie
Jeśli ustawisz preferowane urządzenie, recorder
będzie wiedzieć, które urządzenie audio
na którym chcesz nagrywać.
Kotlin
recorder.preferredDevice = audioDevice
Java
recorder.setPreferredDevice(bleInputDevice);
Teraz możesz nagrywać dźwięk zgodnie z instrukcjami w przewodniku po narzędziu MediaRecorder.