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
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; } }
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.
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; };
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.
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();
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.
Ahora, puedes grabar audio como se describe en la guía de MediaRecorder.