ویژگی‌های میکسر ترجیحی در دستگاه‌های USB

اندروید ۱۴ رابط‌های برنامه‌نویسی کاربردی (API) توسعه‌دهندگان را ارائه می‌دهد که برنامه‌ها می‌توانند از آنها برای پرس‌وجو و پیکربندی ویژگی‌های میکسر ترجیحی برای پخش صدای USB استفاده کنند. این ویژگی‌های میکسر ترجیحی با اجازه دادن به برنامه‌ها برای تنظیم فرمت صدا، ماسک کانال، نرخ نمونه‌برداری و رفتار میکسر، تجربه پخش صدای USB را بهبود می‌بخشند. با استفاده از APIهای میکسر ترجیحی در دستگاه‌های USB پشتیبانی‌شده، کاربران می‌توانند پخش صدا با تأخیر کمتر و محتوای صوتی با وضوح بالاتر را دریافت کنند.

این ویژگی همچنین از عملکرد میکسر پخش بیت-پرفکت اختیاری برای دستگاه‌های USB پشتیبانی می‌کند. حالت بیت-پرفکت امکان پخش فرمت‌های مستر-کیفیت تایید شده (MQA) و دیجیتال استریم مستقیم (DSD) را روی مبدل‌های دیجیتال به آنالوگ (DAC) سازگار فراهم می‌کند.

رابط

مدیر سیاست صوتی (Audio Policy Manager) ویژگی‌های میکسر را در چارچوب مدیریت می‌کند. کلاس AudioMixerAttributes نشان‌دهنده ویژگی‌های میکسر است. کلاس AudioMixerAttributes شامل یک شیء AudioFormat است که فرمت داده‌های صوتی، ماسک کانال و نرخ نمونه‌برداری را برای میکسر توصیف می‌کند. به طور پیش‌فرض، چارچوب، رفتار میکسر را تعیین می‌کند که تمام منابع صوتی را میکس می‌کند و کنترل صدا و جلوه‌ها را اعمال می‌کند.

اگر رفتار میکسر از حالت BIT_PERFECT استفاده کند، سیستم محتوای صوتی را بدون تغییر از طریق چارچوب صوتی، HAL و پردازنده سیگنال دیجیتال (DSP) اختیاری، از API به دستگاه USB ارسال می‌کند. حالت BIT_PERFECT از فرمت‌های رمزگذاری شده مانند MQA یا DSD پشتیبانی می‌کند که هرگونه تغییر در میزان صدا یا میکس می‌تواند معنای داده‌ها را از بین ببرد.

وقتی برنامه‌ها ویژگی‌های میکسر را پیکربندی می‌کنند، چارچوب در صورت نیاز، جریان خروجی را با ویژگی‌های جدید بازگشایی می‌کند. شکل زیر رابط بین برنامه، چارچوب و HAL را هنگام تنظیم ویژگی‌های میکسر نشان می‌دهد:

preferred-mixer-attr

شکل 1. رابط بین برنامه، چارچوب و HAL.

پیاده‌سازی

پیاده‌سازی ویژگی‌های میکسر ترجیحی، غیر از ویژگی BIT_PERFECT ، برای صدای USB برای اندروید ۱۴ الزامی است.

ویژگی‌های میکسر ترجیحی

برای پشتیبانی از ویژگی‌های ترجیحی میکسر، فروشندگان باید از مسیریابی دستگاه‌های USB به پورت میکس پویا، به شرح زیر، پشتیبانی کنند:

  1. پورت میکس پویا را در usb_audio_policy_configuration.xml تعریف کنید.

  2. قابلیت مسیریابی دستگاه‌های USB به پورت‌های میکس پویا را چه در پیکربندی سیاست صوتی و چه در متدهای getAudioPorts و getAudioRoutes AIDL اعلام کنید.

پیاده‌سازی مرجع برای HAL صوتی USB را در hardware/libhardware/modules/usbaudio ببینید. نمونه‌ای از یک پورت میکس پویا را در frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml ببینید.

ویژگی پخش بیت-کامل

ویژگی پخش بیت-کامل اختیاری است و فقط در پیاده‌سازی AIDL از Audio HAL پشتیبانی می‌شود. برای پشتیبانی از پخش بیت-کامل، فروشندگان باید پرچم خروجی بیت-کامل AUDIO_OUTPUT_FLAG_BIT_PERFECT را به پورت میکس پویا که می‌تواند به دستگاه USB هدایت شود، اضافه کنند.

نمونه کد زیر نحوه استفاده از فلگ AUDIO_OUTPUT_FLAG_BIT_PERFECT را در usb_audio_policy_configuration.xml نشان می‌دهد:

<module name="usb" halVersion="2.0">
    <mixPorts>
        <mixPort name="hifi_output"
                 role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
        </mixPort>
    </mixPorts>
    <devicePorts>
        <devicePort tagName="USB Device Out"
                    type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
        </devicePort>
    </devicePorts>
    <routes>
        <route type="mix" sink="USB Device Out"
               sources="hifi_output"/>
    </routes>
</module>

اگر ویژگی پخش بیت-کامل مشخص شده باشد، HAL باید اطمینان حاصل کند که جریان صوتی بدون هیچ گونه تغییری به دستگاه USB ارسال می‌شود، یعنی جریان صوتی نباید هیچ گونه مقیاس‌بندی صدا، تبدیل نرخ نمونه یا جلوه‌های پردازش صدا داشته باشد و نباید در DSP میکس شود. در این حالت، سخت‌افزار صدا را کنترل می‌کند زیرا چارچوب هیچ کنترل نرم‌افزاری برای صدا ارائه نمی‌دهد.

اعتبارسنجی

تست‌های CTS را در PreferredMixerAttributesTestActivity.java اجرا کنید تا پشتیبانی از ویژگی‌های میکسر ترجیحی برای دستگاه‌های USB را تأیید کنید.

برای اعتبارسنجی پیاده‌سازی ویژگی BIT_PERFECT ، از مبدل‌های دیجیتال به آنالوگ USB استفاده کنید که از فرمت‌های صوتی MQA و DSD روی مدولاسیون کد پالس (PCM) پشتیبانی می‌کنند.