Bluetooth-Audioprofile basierend auf Bluetooth Low Energy (BLE) Audio Bidirektionales Streaming von Audioqualität (z. B. Stereo-Audio) ermöglichen mit einer Abtastrate von 32 kHz). Möglich ist dies dank der LE Isochroner Kanal (ISO). ISO ist ähnlich wie das synchrone verbindungsorientierte (SCO) Verbindung, da ebenfalls reservierte WLAN-Bandbreite genutzt wird, Reservierung ist nicht mehr auf 64 Kbit/s begrenzt und kann dynamisch angepasst werden.
Die Bluetooth-Audioeingabe kann die neueste AudioManager API für fast alle Anwendungsfälle Anfragen, ausgenommen Telefonanrufe. In diesem Leitfaden erfahren Sie, wie Sie Stereo-Audiodaten BLE Audio-Hearables
Anwendung konfigurieren
Konfigurieren Sie zuerst Ihre Anwendung so, dass sie auf das richtige SDK in build.gradle
ausgerichtet ist:
targetSdkVersion 31
Audiorückruf registrieren
Erstellen:
AudioDeviceCallback
der Ihre Anwendung über Änderungen an verbundenen oder
AudioDevices
.
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
BLE Audio-Gerät suchen
Rufen Sie eine Liste aller verbundenen Audiogeräte mit unterstützter Eingabe ab und verwenden Sie dann
getType()
, um zu sehen, ob
das Gerät ein Headset ist und
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; } }
Stereo-Unterstützung
Um herauszufinden, ob Stereomikrofone auf dem ausgewählten Gerät unterstützt werden, sehen Sie nach, ob das Gerät zwei oder mehr Kanäle hat. Wenn das Gerät nur einen Kanal hat, stelle die Kanalmaske auf 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; };
Audiorekorder einrichten
Audiorekorder können mit dem standardmäßigen AudioRecord
-Builder eingerichtet werden.
Verwenden Sie die Kanalmaske, um die Stereo- oder Mono-Konfiguration auszuwählen.
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();
Bevorzugtes Gerät festlegen
Durch Festlegen eines bevorzugten Geräts wird dem Audio-recorder
mitgeteilt, welches Audiogerät
mit dem du aufnehmen möchtest.
Kotlin
recorder.preferredDevice = audioDevice
Java
recorder.setPreferredDevice(bleInputDevice);
Jetzt kannst du Audioinhalte wie im MediaRecorder-Leitfaden beschrieben aufzeichnen.