저전력 블루투스 (BLE) 오디오를 기반으로 하는 블루투스 오디오 프로필을 사용하면 고품질 오디오 (예: 32kHz 샘플링 레이트의 스테레오 오디오)의 양방향 스트리밍을 사용할 수 있습니다. 이는 LE 등시 채널 (ISO)을 만들었기 때문에 가능합니다. ISO는 예약된 무선 대역폭을 사용하기도 하지만 대역폭 예약이 더 이상 64Kbps로 제한되지 않고 동적으로 조정할 수 있다는 점에서 동기 연결 지향(SCO) 링크와 유사합니다.
블루투스 오디오 입력은 전화 통화를 제외한 거의 모든 사용 사례에 최신 AudioManager API를 사용할 수 있습니다. 이 가이드에서는 BLE 오디오 히어러블에서 스테레오 오디오를 녹음하는 방법을 설명합니다.
애플리케이션 구성
먼저 build.gradle
에서 올바른 SDK를 타겟팅하도록 애플리케이션을 구성합니다.
targetSdkVersion 31
오디오 콜백 등록
연결되었거나 연결 해제된 AudioDevices
의 변경사항을 애플리케이션에 알리는 AudioDeviceCallback
를 만듭니다.
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
};
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
// Handle device removal
};
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback);
BLE 오디오 기기 찾기
입력이 지원되는 연결된 모든 오디오 기기의 목록을 가져온 다음 getType()
를 사용하여 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; } }
스테레오 지원
선택한 기기에서 스테레오 마이크가 지원되는지 확인하려면 기기에 채널이 두 개 이상 있는지 확인하세요. 기기에 채널이 하나만 있으면 채널 마스크를 모노로 설정합니다.
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; };
오디오 녹음기 설정
오디오 녹음기는 표준 AudioRecord
빌더를 사용하여 설정할 수 있습니다.
채널 마스크를 사용하여 스테레오 또는 모노 구성을 선택합니다.
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();
기본 기기 설정
기본 기기를 설정하면 녹음하려는 오디오 기기를 오디오 recorder
에 알립니다.
Kotlin
recorder.preferredDevice = audioDevice
Java
recorder.setPreferredDevice(bleInputDevice);
이제 MediaRecorder 가이드에 설명된 대로 오디오를 녹음할 수 있습니다.