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.