Les profils audio Bluetooth basés sur l'audio Bluetooth à basse consommation (BLE) permettent un streaming bidirectionnel de contenus audio de haute qualité (par exemple, audio stéréo avec un taux d'échantillonnage de 32 kHz). Cela est possible grâce à la création de LE Isochronous Channel (ISO). L'ISO est semblable au lien SCO (Synchronous Connection-Oriented), car il utilise également la bande passante sans fil réservée, mais la réservation de bande passante n'est plus limitée à 64 kbit/s et peut être ajustée dynamiquement.
L'entrée audio Bluetooth peut utiliser la dernière API AudioManager pour presque tous les cas d'utilisation, à l'exception des appels téléphoniques. Ce guide explique comment enregistrer un son stéréo à partir d'é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 une AudioDeviceCallback
qui informe votre application de toute modification apportée aux AudioDevices
connectés ou déconnectés.
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 disposant d'une entrée compatible, puis utilisez getType()
pour vérifier si l'appareil est un casque à l'aide de 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 les micros stéréo sont compatibles avec l'appareil sélectionné, vérifiez si celui-ci dispose de deux canaux ou plus. Si l'appareil ne possède qu'un seul canal, définissez le masque de canaux 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
Le fait de définir un appareil par défaut permet d'indiquer à la recorder
audio l'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 de MediaRecorder.