Bluetooth Low Energy(BLE)オーディオに基づく Bluetooth オーディオ プロファイル 高品質の音声(ステレオ音声など)の双方向ストリーミングを可能にする 32 kHz のサンプリング レートで 1 つずつ)。これが可能になるのは、LE の作成です。 アイソクロナス チャネル(ISO)。ISO は Synchronous Connection-Oriented の (SCO)リンク。予約されたワイヤレス帯域幅も使用するため、帯域幅が 64 Kbps に制限されなくなったため、動的に調整できます。
Bluetooth オーディオ入力では最新の 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; } }
ステレオのサポート
選択したデバイスでステレオマイクがサポートされているかどうかを確認するには、 デバイスに 2 つ以上のチャネルがある。デバイスにチャンネルが 1 つしかない場合は、チャンネル マスクをモノラルに設定します。
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 ガイドの手順に沿って音声を録音できるようになりました。