با شروع اندروید 11، سازندگان دستگاه این توانایی را دارند که وقتی یک دستگاه صوتی خاص برای ضبط یا پخش صدا انتخاب میشود، بهطور خودکار جلوههای صوتی خاصی را متصل کرده و فعال کنند. یکی از پیشرفتهای عمده این است که جلوههای صوتی درج شده در یک مسیر صوتی که کاملاً در زیر HAL صوتی (اتصال مستقیم بین دستگاه ورودی و دستگاه خروجی) قرار داده شده است، توسط چارچوب جلوههای صوتی قابل کنترل است.
این ویژگی در درجه اول برای OEM های خودرو هدف گذاری شده است، اما می تواند در سایر عوامل فرم اندروید نیز مورد استفاده قرار گیرد. یک برنامه مثال، درج یک جلوه بهبود صدا در خروجی تیونر FM زمانی است که مستقیماً از طریق DSP صوتی به بلندگو متصل است.
پیش نیازها
- مانند هر جلوه صوتی دیگری، افکت باید توسط یک کتابخانه فروشنده پیادهسازی شود و در فایل پیکربندی
audio_effects.xml
فهرست شود. - افکت باید از نوع پیش پردازش یا پس پردازش باشد (پرچم
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
باشد. - اگر
session
AudioSessionConsts.DEVICE
باشدAudioIoHandle
نادیده گرفته می شود. - وقتی دستگاه در HAL صوتی با روش
IDevice::createAudioPatch()
انتخاب میشود،device
باAudioPortHandle
منحصربهفرد آن که توسط چارچوب صوتی اختصاص داده میشود، شناسایی میشود.
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
آن شناسایی میشود، که وقتی یک پچ صوتی با متد IDevice::createAudioPatch()
ایجاد میشود، استفاده میشود.
در صورت نیاز به هماهنگی بین HALهای صوتی و جلوهای هنگام فعال یا غیرفعال کردن یک افکت، میتوان از APIهای HAL صوتی توسط یک پیادهسازی استفاده کرد.
،با شروع اندروید 11، سازندگان دستگاه این توانایی را دارند که وقتی یک دستگاه صوتی خاص برای ضبط یا پخش صدا انتخاب میشود، بهطور خودکار جلوههای صوتی خاصی را متصل کرده و فعال کنند. یکی از پیشرفتهای عمده این است که جلوههای صوتی درج شده در یک مسیر صوتی که کاملاً در زیر HAL صوتی (اتصال مستقیم بین دستگاه ورودی و دستگاه خروجی) قرار داده شده است، توسط چارچوب جلوههای صوتی قابل کنترل است.
این ویژگی در درجه اول برای OEM های خودرو هدف گذاری شده است، اما می تواند در سایر عوامل فرم اندروید نیز مورد استفاده قرار گیرد. یک برنامه مثال، درج یک جلوه بهبود صدا در خروجی تیونر FM زمانی است که مستقیماً از طریق DSP صوتی به بلندگو متصل است.
پیش نیازها
- مانند هر جلوه صوتی دیگری، افکت باید توسط یک کتابخانه فروشنده پیادهسازی شود و در فایل پیکربندی
audio_effects.xml
فهرست شود. - افکت باید از نوع پیش پردازش یا پس پردازش باشد (پرچم
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
باشد. - اگر
session
AudioSessionConsts.DEVICE
باشدAudioIoHandle
نادیده گرفته می شود. - وقتی دستگاه در HAL صوتی با روش
IDevice::createAudioPatch()
انتخاب میشود،device
باAudioPortHandle
منحصربهفرد آن که توسط چارچوب صوتی اختصاص داده میشود، شناسایی میشود.
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
آن شناسایی میشود، که وقتی یک پچ صوتی با متد IDevice::createAudioPatch()
ایجاد میشود، استفاده میشود.
در صورت نیاز به هماهنگی بین HALهای صوتی و جلوهای هنگام فعال یا غیرفعال کردن یک افکت، میتوان از APIهای HAL صوتی توسط یک پیادهسازی استفاده کرد.