โปรไฟล์เสียงบลูทูธอิงตามเสียงบลูทูธพลังงานต่ำ (BLE) ทำให้สามารถสตรีมเสียงคุณภาพสูงแบบ 2 ทิศทาง (เช่น เสียงสเตอริโอ ด้วยอัตราการสุ่มตัวอย่าง 32 kHz) ซึ่งเป็นไปได้ด้วยการสร้าง LE ช่องสีแบบไอโซโครน (ISO) ISO จะคล้ายกับรูปแบบการเชื่อมต่อแบบซิงโครนัส (SCO) ลิงก์เพราะใช้แบนด์วิดท์ไร้สายที่จองไว้ด้วย แต่ใช้แบนด์วิดท์ การจองจะไม่ถูกจำกัดไว้ที่ 64 Kbps อีกต่อไปและสามารถปรับเปลี่ยนแบบไดนามิกได้
อินพุตเสียงบลูทูธใช้รุ่นล่าสุดได้ AudioManager API สำหรับการใช้งานเกือบทั้งหมด เคส ไม่รวมการโทร คู่มือนี้ครอบคลุมวิธีบันทึกเสียงสเตอริโอจาก เสียง BLE ที่ได้ยิน
กำหนดค่าแอปพลิเคชันของคุณ
ก่อนอื่น ให้กำหนดค่าแอปพลิเคชันให้กำหนดเป้าหมาย SDK ที่ถูกต้องใน build.gradle
ดังนี้
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 ช่องขึ้นไป หากอุปกรณ์มีเพียงช่องเดียว ให้ตั้งค่ามาสก์ช่องทางเป็นโมโน
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 ได้แล้ว