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.

KotlinJava
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
    }
  }
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.

KotlinJava
var channelMask: Int = AudioFormat.CHANNEL_IN_MONO
if (audioDevice.channelCounts.size >= 2) {
  channelMask = AudioFormat.CHANNEL_IN_STEREO
}
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.

KotlinJava
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()
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.

KotlinJava
recorder.preferredDevice = audioDevice
recorder.setPreferredDevice(bleInputDevice);

Ora puoi registrare audio come descritto nella guida di MediaRecorder.