Profils audio Bluetooth basés sur l'audio Bluetooth à basse consommation (BLE) permettent un streaming bidirectionnel d'un son de haute qualité (par exemple, un son stéréo avec un taux d'échantillonnage de 32 kHz). C'est possible grâce à la création de la balise LE Canal isochronique (ISO). L'ISO est similaire à la norme de sécurité (SCO) Link, car il utilise aussi de la bande passante sans fil réservée, mais la bande passante n'est plus plafonnée à 64 Kbit/s et peut être ajustée de façon dynamique.
L'entrée audio Bluetooth peut utiliser les dernières API AudioManager pour presque toutes les utilisations à l'exception des appels téléphoniques. Ce guide explique comment enregistrer du contenu audio stéréo à partir de Écouteurs audio BLE.
Configurer votre application
Commencez par configurer votre application pour cibler le SDK approprié dans build.gradle
:
targetSdkVersion 31
Enregistrer un rappel audio
Créez un
AudioDeviceCallback
indiquant à votre application tout changement lié aux connexions et aux déconnexions
AudioDevices
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
Localiser un appareil audio BLE
Obtenez la liste de tous les appareils audio connectés avec une entrée compatible, puis utilisez
getType()
pour voir si
l'appareil est un casque utilisant
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; } }
Compatibilité stéréo
Pour vérifier si l'appareil sélectionné est compatible avec les micros stéréo, vérifiez si les l'appareil dispose de deux canaux ou plus. Si l'appareil ne dispose que d'un seul canal, définissez le masque de canal sur 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; };
Configurer l'enregistreur audio
Les enregistreurs audio peuvent être configurés à l'aide de l'outil de création AudioRecord
standard.
Utilisez le masque de canal pour sélectionner une configuration stéréo ou 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();
Définir l'appareil par défaut
La définition d'un appareil par défaut permet d'indiquer à l'recorder
audio quel appareil audio
avec lequel vous souhaitez enregistrer.
Kotlin
recorder.preferredDevice = audioDevice
Java
recorder.setPreferredDevice(bleInputDevice);
Vous pouvez désormais enregistrer du contenu audio comme indiqué dans le guide MediaRecorder.