오디오 녹음

저전력 블루투스 (BLE) 오디오를 기반으로 하는 블루투스 오디오 프로필 고품질 오디오 (예: 스테레오 오디오)의 양방향 스트리밍 허용 (샘플링 레이트 32kHz) 이는 LE API를 사용한 덕분에 가능해졌습니다. 등시 채널 (ISO). ISO는 동기 연결 지향적 프로토콜과 유사함 (SCO) 예약된 무선 대역폭도 사용하지만 대역폭은 예약이 더 이상 64Kbps로 제한되지 않으며 동적으로 조정할 수 있습니다.

블루투스 오디오 입력은 최신 거의 모든 용도에 적합한 AudioManager API 전화 통화는 제외됩니다. 이 가이드에서는 YouTube TV에서 스테레오 오디오를 녹음하는 방법을 BLE 오디오 히어러블입니다.

애플리케이션 구성

먼저 build.gradle에서 올바른 SDK를 타겟팅하도록 애플리케이션을 구성합니다.

targetSdkVersion 31

오디오 콜백 등록

만들기 AudioDeviceCallback 드림 애플리케이션에 연결 또는 연결 해제의 변경사항을 AudioDevices입니다.

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
    }
  }

자바

AudioDeviceInfo[] allDeviceInfo = audioManager.getDevices(GET_DEVICES_INPUTS);
AudioDeviceInfo bleInputDevice = null;
for (AudioDeviceInfo device : allDeviceInfo) {
  if (device.getType() == AudioDeviceInfo.TYPE_BLE_HEADSET) {
    bleInputDevice = device;
    break;
  }
}

스테레오 지원

선택한 기기에서 스테레오 마이크가 지원되는지 확인하려면 기기에 두 개 이상의 채널이 있습니다. 기기에 채널이 1개만 있는 경우 채널 마스크를 모노로 설정합니다.

Kotlin

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;
};

오디오 녹음기 설정

표준 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()

자바

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

자바

recorder.setPreferredDevice(bleInputDevice);

이제 MediaRecorder 가이드에 설명된 대로 오디오를 녹음할 수 있습니다.