Ses kaydetme

Bluetooth Düşük Enerji (BDE) Ses'e dayalı Bluetooth ses profilleri Yüksek kaliteli sesin (örneğin, stereo ses) iki yönlü akışına izin verilir 32 kHz örnekleme hızıyla). Bu, LE'nin oluşturulması sayesinde mümkün İki kronik kanal (ISO). ISO, Eşzamanlı Bağlantı Yönelimli ile benzerdir (SCO) Bağlantı, ayrılmış kablosuz bant genişliğine rağmen rezervasyon artık 64 Kb/sn ile sınırlı değildir ve dinamik olarak ayarlanabilir.

Bluetooth ses girişi en yeni cihazı kullanabilir Neredeyse tüm kullanımlar için AudioManager API kılıfları (telefon aramaları hariç). Bu kılavuzda, BDE Audio duyulabilir.

Uygulamanızı yapılandırma

İlk olarak, uygulamanızı build.gradle içinde doğru SDK'yı hedefleyecek şekilde yapılandırın:

targetSdkVersion 31

Sesli geri arama kaydet

Bir metin oluştur: AudioDeviceCallback uygulamanızın bağlı veya bağlantısı kesik durum değişikliklerini öğrenmesini sağlayan AudioDevices.

final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() {
  @Override
  public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
    };
  @Override
  public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
    // Handle device removal
  };
};

audioManager.registerAudioDeviceCallback(audioDeviceCallback);

BDE Ses Cihazı Bul

Desteklenen tüm bağlı ses cihazlarının listesini al, ardından şunu kullan: Kontrol etmek için getType() Bu cihaz, 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;
  }
}

Stereo destek

Seçilen cihazda stereo mikrofonların desteklenip desteklenmediğini kontrol etmek için cihazın iki veya daha fazla kanalı varsa Cihazın yalnızca bir kanalı varsa kanal maskesini mono olarak ayarlayın.

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

Ses kaydediciyi kurma

Ses kaydediciler, standart AudioRecord oluşturucu kullanılarak ayarlanabilir. Stereo veya mono yapılandırmayı seçmek için kanal maskesini kullanın.

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();

Tercih edilen cihazı ayarlayın

Tercih edilen bir cihazın ayarlanması, sese recorder ses sistemiyle ilgili bilgi verir yanındaki kutuyu işaretleyin.

Kotlin

recorder.preferredDevice = audioDevice

Java

recorder.setPreferredDevice(bleInputDevice);

Artık MediaRecorder kılavuzunda özetlendiği şekilde ses kaydedebilirsiniz.