Registrazione audio

Profili audio Bluetooth basati su Bluetooth Low Energy (BLE) Audio Consenti lo streaming bidirezionale di audio di alta qualità (ad esempio, audio stereo con una frequenza di campionamento di 32 kHz). Ciò è possibile grazie alla creazione dell'interfaccia Canale sincrono (ISO). L'ISO è simile alla connessione sincrona orientata (SCO) Link perché utilizza anch'essa una larghezza di banda wireless riservata, non è più limitato a 64 Kbps e può essere regolata dinamicamente.

L'input audio Bluetooth può utilizzare la versione più recente API AudioManager per quasi tutti gli utilizzi casi, escluse le telefonate. Questa guida spiega come registrare audio in stereo da Ascoltabili BLE Audio.

Configura la tua applicazione

Innanzitutto, configura l'applicazione in modo che abbia come target l'SDK corretto in build.gradle:

targetSdkVersion 31

Registra callback audio

Crea un AudioDeviceCallback che informa l'applicazione di eventuali modifiche alla connessione o alla disconnessione AudioDevices.

final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
  @Override
  public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
    };
  @Override
  public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
    // Handle device removal
  };
};

audioManager.registerAudioDeviceCallback(audioDeviceCallback);

Trova dispositivo audio BLE

Recupera un elenco di tutti i dispositivi audio connessi con ingresso supportato, quindi usa getType() per verificare se il dispositivo è un paio di cuffie 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;
  }
}

Supporto stereo

Per controllare se i microfoni stereo sono supportati sul dispositivo selezionato, verifica se le dispositivo ha due o più canali. Se il dispositivo ha un solo canale, imposta la maschera del canale su 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;
};

Configurare il registratore audio

I registratori audio possono essere configurati utilizzando lo strumento per la creazione di AudioRecord standard. Utilizza la maschera del canale per selezionare la configurazione stereo o 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();

Imposta dispositivo preferito

L'impostazione di un dispositivo preferito comunica all'audio recorder quale dispositivo audio con cui vuoi registrare.

Kotlin

recorder.preferredDevice = audioDevice

Java

recorder.setPreferredDevice(bleInputDevice);

Ora puoi registrare audio come descritto nella guida di MediaRecorder.