אפקטי אודיו

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

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

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

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

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

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

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

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

זה נעשה על ידי הוספת קטע ספציפי בקובץ 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 קיימים של AudioEffect.

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

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

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

אפקט שמע HAL

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

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

אודיו HAL

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

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

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

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