פרופילי אודיו של Bluetooth על סמך Bluetooth עם צריכת אנרגיה נמוכה (BLE) Audio לאפשר סטרימינג דו-כיווני של אודיו באיכות גבוהה (לדוגמה, אודיו בסטריאו) עם תדירות דגימה של 32 kHz). זה מתאפשר בזכות היצירה של ה-LE ערוץ Isochronous (ISO). ISO דומה ל'חיבור סינכרוני' (SCO) קישור כי הוא משתמש גם ברוחב פס אלחוטי שמור, אבל רוחב הפס כבר לא מוגבלת ל- 64 Kbps ואפשר להתאים אותה באופן דינמי.
קלט אודיו של Bluetooth יכול להשתמש בגרסה האחרונה AudioManager API לשימוש כמעט מלא במקרים שונים, לא כולל שיחות טלפון. במדריך הזה מוסבר איך להקליט אודיו בסטריאו מכשירי שמיעה מסוג BLE Audio.
הגדרת האפליקציה
קודם כול צריך להגדיר את האפליקציה כך שיטרגט את ה-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 Audio
קבלת רשימה של כל התקני האודיו המחוברים שיש בהם תמיכה בקלט, ולאחר מכן להשתמש
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; } }
תמיכה בסטריאו
כדי לבדוק אם מיקרופונים של סטריאו נתמכים במכשיר שנבחר, צריך לבדוק אם יש שני ערוצים או יותר. אם למכשיר יש רק ערוץ אחד, מגדירים את מסיכת הערוץ למונו.
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; };
הגדרה של מקליט האודיו
אפשר להגדיר את מכשירי ההקלטה באמצעות ה-builder הרגיל של 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.