Audioaufnahme

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.