音訊錄音內容

基於藍牙低功耗 (BLE) 音訊技術的藍牙音訊設定檔 允許以雙向串流的方式提供高品質音訊 (例如立體聲音訊) 取樣率為 32 kHz)。這要歸功於 LE 的創作 不連續的頻道 (ISO)。ISO 與同步連線導向 (SCO) 連結因為使用保留的無線頻寬,但是頻寬 預留項目大小上限為 64 Kbps,而且可以動態調整。

藍牙音訊輸入可以使用最新的 AudioManager API 幾乎完全適用 案例,不包括來電本指南說明如何錄製下列語言的立體聲音訊: 可聽的 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
    }
  }

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 指南中的說明錄製音訊。