Ses kaydetme

Bluetooth Düşük Enerji (BDE) Ses'i temel alan Bluetooth ses profilleri, yüksek kaliteli sesin (ör. 32 kHz örnekleme hızına sahip stereo ses) çift yönlü yayınına olanak tanır. LE Isochronous Channel (ISO) oluşturulması sayesinde bu mümkün olabilir. ISO, ayrılmış kablosuz bant genişliği kullandığı ancak bant genişliği rezervasyonu artık 64 Kb/sn ile sınırlı olmadığı ve dinamik olarak ayarlanabileceği için Eşzamanlı Bağlantı Odaklı (SCO) Link'e benzer.

Bluetooth ses girişi, telefon aramaları hariç neredeyse tüm kullanım alanları için en yeni AudioManager API'yi kullanabilir. Bu kılavuzda, BLE Audio dinleyici seslerinden nasıl stereo ses kaydedileceği açıklanmaktadır.

Uygulamanızı yapılandırma

Öncelikle, uygulamanızı build.gradle ürününde doğru SDK'yı hedefleyecek şekilde yapılandırın:

targetSdkVersion 31

Sesli geri aramayı kaydet

Bağlı veya bağlı olmayan AudioDevices ile ilgili tüm değişiklikleri uygulamanıza bildiren bir AudioDeviceCallback oluşturun.

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

Girişin desteklendiği tüm bağlı ses cihazlarının listesini görün, ardından cihazın AudioDeviceInfo.TYPE_BLE_HEADSET kullanan bir mikrofonlu kulaklık olup olmadığını görmek için getType() simgesini kullanın.

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 cihazda iki veya daha fazla kanal olup olmadığına bakın. Cihazda 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 kayıt cihazları, standart AudioRecord oluşturucu kullanılarak kurulabilir. 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 ayarlamak, ses kaydetmek istediğiniz ses cihazını recorder bildirir.

Kotlin

recorder.preferredDevice = audioDevice

Java

recorder.setPreferredDevice(bleInputDevice);

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