אפקטי אודיו

החל מ-Android 11, יצרני המכשירים יכולים לצרף ולהפעיל אפקטי אודיו מסוימים באופן אוטומטי כשהתקן אודיו מסוים נבחר להקלטת אודיו או להפעלה. שיפור חשוב אחד הוא ההוספה של אפקטים קוליים בנתיב אודיו שמוטמע במלואו מתחת ל-HAL של אודיו (חיבור ישיר בין קלט מכשיר ומכשיר פלט) יכולים לשלוט באמצעות המסגרת של אפקטים קוליים.

התכונה הזו מיועדת בעיקר ליצרני ציוד מקורי לכלי רכב, אבל אפשר להשתמש בה גם במכשירים אחרים עם Android. גורמי צורה. אפליקציה לדוגמה מכניסה אפקט לשיפור הקול לטיונר ה-FM כאשר הוא מחובר ישירות לרמקול דרך ה-DSP של האודיו.

דרישות מוקדמות

  • כמו בכל אפקט אודיו אחר, יש להטמיע את האפקט באמצעות ספריית ספקים בקובץ התצורה audio_effects.xml.
  • האפקט חייב להיות מסוג עיבוד מראש או לאחר עיבוד (סימון TYPE_PRE_PROC או TYPE_POST_PROC מוגדר ב-EffectDescriptor.flags).
  • אם יישום האפקט מואץ באמצעות HW (סימון HW_ACC_TUNNEL הוגדר בטווח EffectDescriptor.flags), אפשר לצרף אותו לנתיב אודיו שמחובר במלואו מתחת ל-HAL (אין הפעלה או להקליט שידור אודיו שנפתח ב‐HAL של האודיו).

יצירה והפעלה של אפקט במכשיר

ניתן ליצור אפקטים של אודיו שספציפיים למכשיר באחת משתי השיטות הבאות:

שימוש בקובץ תצורה של אפקטים קוליים

השיטה הזו מאפשרת ליצור אפקט אודיו סטטי שמחובר באופן שיטתי היא מופעלת בכל נתיב אודיו שבוחרים מכשיר ספציפי כ-sink או כמקור.

כדי לעשות זאת, צריך להוסיף קטע ספציפי בקובץ audio_effects.xml באופן הבא:

<deviceEffects>
<devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
      	<apply effect="agc"/>
      </devicePort>
  </deviceEffects>
  

שימוש ב-API של המערכת

בנאי חדש של @SystemApi נוסף אל מחלקה android.media.audiofx.AudioEffect כדי ליצור ולהפעיל אפקט למכשיר:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

אחרי יצירת האפקט, מציינים את המזהה הייחודי של אפקט האודיו ואת מתאר התקן האודיו. אפשר להפעיל או להשבית אותו באמצעות ממשקי API קיימים של AudioEffective API.

ממשק API זמין גם לשליחת שאילתות אם הטמעה תומכת בשילוב נתון של מכשיר ואפקט.

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

ממשקי API חדשים עם HAL

אפקט אודיו HAL

לאפקט האודיו HAL V6.0 יש חתימה חדשה ל-method createEffect() מאפשרת ליצור אפקט שמחובר למכשיר:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • הערך AudioSession שצוין חייב להיות AudioSessionConsts.DEVICE.
  • המערכת מתעלמת מ-AudioIoHandle אם session AudioSessionConsts.DEVICE.
  • המכשיר device מזוהה באמצעות ערך ה-AudioPortHandle הייחודי שהוקצה על ידי מסגרת האודיו כשהמכשיר נבחר ב- אודיו HAL עם השיטה IDevice::createAudioPatch().

אודיו HAL

כדי לתמוך בתכונת אפקט המכשיר, תכונת ה-HAL של האודיו חייבת להטמיע ניתוב אודיו שליטה באמצעות ה-API של IDevice::createAudioPatch(). הערך הזה מצוין באמצעות שיטה IDevice::supportsAudioPatches() לדיווח true.

שתי שיטות API חדשות: IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) והקבוצה IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) מיידעים את הטמעת ה-HAL שאפקט המכשיר הופעל או הושבת מכשיר נתון.

המכשיר מזוהה באמצעות המזהה שלו ב-AudioPortHandle, שמשמש להשמעת אודיו התיקון נוצר באמצעות ה-method IDevice::createAudioPatch().

אפשר להשתמש בממשקי API של Audio HAL בהטמעה אם נדרש תיאום בין אודיו ואפקט HAL כאשר אפקט מופעל או מושבת.