Perfiles de audio Bluetooth basados en audio Bluetooth de bajo consumo (BLE) Permite la transmisión bidireccional de audio de alta calidad (por ejemplo, audio estéreo). con una tasa de muestreo de 32 kHz). Esto es posible gracias a la creación de la LE Canal isócrono (ISO). ISO es similar al modelo síncrono orientado a la conexión (SCO), ya que también usa el ancho de banda inalámbrico reservado, pero el ancho de ya no tiene un límite de 64 Kbps y puede ajustarse de forma dinámica.
la entrada de audio Bluetooth puede usar la API de AudioManager para casi todos los usos casos, excepto las llamadas telefónicas. En esta guía, se explica cómo grabar audio estéreo en Auriculares de audio BLE:
Configura tu aplicación
Primero, configura tu aplicación para que se oriente al SDK correcto en build.gradle
:
targetSdkVersion 31
Registrar devolución de llamada de audio
Crea un
AudioDeviceCallback
que informa a tu aplicación sobre cualquier cambio en la conexión o desconexión
AudioDevices
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
Cómo buscar un dispositivo de audio BLE
Obtén una lista de todos los dispositivos de audio conectados compatibles con la entrada y, luego, úsalos
getType()
para ver si
El dispositivo es un auricular que usa
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; } }
Compatibilidad con estéreo
Para comprobar si el dispositivo seleccionado admite micrófonos estéreo, comprueba si el el dispositivo tiene dos o más canales. Si el dispositivo solo tiene un canal, establece la máscara de canal en 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; };
Configura la grabadora de audio
Las grabadoras de audio se pueden configurar con el compilador AudioRecord
estándar.
Usa la máscara de canal para seleccionar la configuración estéreo 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();
Establece el dispositivo preferido
Cuando configuras un dispositivo preferido, se le informa al audio recorder
qué dispositivo de audio
que quieras usar para la grabación.
Kotlin
recorder.preferredDevice = audioDevice
Java
recorder.setPreferredDevice(bleInputDevice);
Ahora, puedes grabar audio como se describe en la guía de MediaRecorder.