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.