פרופילי אודיו של 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
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 } }
AudioDeviceInfo[] allDeviceInfo = audioManager.getDevices(GET_DEVICES_INPUTS); AudioDeviceInfo bleInputDevice = null; for (AudioDeviceInfo device : allDeviceInfo) { if (device.getType() == AudioDeviceInfo.TYPE_BLE_HEADSET) { bleInputDevice = device; break; } }
תמיכה בסטריאו
כדי לבדוק אם מיקרופונים של סטריאו נתמכים במכשיר שנבחר, צריך לבדוק אם יש שני ערוצים או יותר. אם למכשיר יש רק ערוץ אחד, מגדירים את מסיכת הערוץ למונו.
var channelMask: Int = AudioFormat.CHANNEL_IN_MONO if (audioDevice.channelCounts.size >= 2) { channelMask = AudioFormat.CHANNEL_IN_STEREO }
if (bleInputDevice.getChannelCounts() >= 2) { channelMask = AudioFormat.CHANNEL_IN_STEREO; };
הגדרה של מקליט האודיו
אפשר להגדיר את מכשירי ההקלטה באמצעות ה-builder הרגיל של AudioRecord
.
אפשר להשתמש במסכת הערוצים כדי לבחור הגדרות סטריאו או מונו.
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()
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
איזה מכשיר אודיו
שאיתם רוצים להקליט.
עכשיו אפשר להקליט אודיו כפי שמתואר במדריך של MediaRecorder.