ضبط هم‌زمان

‫Android 10 تجربه کاربری را بهبود می‌بخشد و به بیش‌از یک ضبط صدای فعال نیاز دارد تا به‌طور هم‌زمان انجام شود، برای مثال، اگر کاربر بخواهد تماس VoIP یا ضبط‌کننده ویدیو را با فرمان‌های گفتاری ارائه‌شده توسط خدمات دسترس‌پذیری کنترل کند.

چارچوب صوتی خط‌مشی‌ای را پیاده‌سازی می‌کند که فقط به برخی‌از برنامه‌های ممتاز اجازه می‌دهد به‌طور هم‌زمان با برنامه‌های معمولی صدا را ضبط کنند.

خط‌مشی هم‌زمان با بی‌صدا کردن صدای ضبط‌شده آن اجرا می‌شود، نه با جلوگیری از شروع ضبط توسط برنامه. این کار به چارچوب اجازه می‌دهد تا به‌طور پویا به تغییرات در تعداد و انواع موارد استفاده از ضبط فعال رسیدگی کند، بدون اینکه مانع از شروع ضبط توسط یک برنامه در شرایطی شود که می‌تواند پس‌از پایان ضبط توسط برنامه دیگر، دسترسی کامل به میکروفون را بازیابی کند.

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

الزامات CDD

برای اطلاع از الزامات پشتیبانی از ضبط هم‌زمان، به CDD مراجعه کنید.

ضبط موقعیت‌ها از HAL صوتی

سناریو ضبط هم‌زمان می‌تواند ازنظر تعداد جریان‌های ورودی فعال، انتخاب دستگاه ورودی، یا پیکربندی پیش‌پردازش به موقعیت‌های مختلفی منجر شود.

هم‌زمان بودن می‌تواند بین موارد زیر اتفاق بیفتد:

  • چندین جریان ورودی از پردازنده برنامه‌ها (AP)
  • جاری‌سازی‌های ورودی و تماس صوتی
  • جریان‌های ورودی و DSP صوتی که تشخیص کلیدگفته کم‌مصرف را پیاده‌سازی می‌کند

فعالیت هم‌زمان جاری‌سازی‌های ورودی AP

فایل پیکربندی خط‌مشی صدا audio_policy_configuration.xml توسط چارچوب صدا برای تعیین تعداد جاری‌سازی‌های ورودی که می‌توانند به‌طور هم‌زمان باز و فعال باشند استفاده می‌شود.

حداقل، «لایه انتزاع سخت‌افزار» صوتی باید حداقل یک نمونه از هر نمایه ورودی (mixPort از نقش sink) فهرست‌شده در فایل پیکربندی باز و فعال را پشتیبانی کند.

انتخاب دستگاه

وقتی چند کارخواه فعال به یک جاری‌سازی ورودی HAL متصل هستند، چارچوب دستگاه مناسب را برای این جاری‌سازی ورودی براساس اولویت مورد استفاده انتخاب می‌کند.

وقتی چندین جاری‌سازی ورودی فعال باشد، هر جاری‌سازی می‌تواند انتخاب دستگاه متفاوتی داشته باشد.

اگر فناوری سازگار باشد، توصیه می‌شود که HAL صوتی و زیرسیستم اجازه دهند جاری‌سازی‌های مختلف از دستگاه‌های مختلف، مانند هدست بلوتوث و میکروفون داخلی، ضبط کنند.

اگر ناسازگاری وجود داشته باشد (برای مثال دو دستگاه از یک رابط صوتی دیجیتال یا پس‌واحد استفاده کنند)، HAL صوتی باید انتخاب کند که کدام جاری‌سازی انتخاب دستگاه را کنترل کند.

در این مورد:

  • وضعیت حاصل باید یکسان باشد و وقتی سناریو یکسان تکرار می‌شود، انتخاب دستگاه یکسانی را ارائه دهد.
  • وقتی وضعیت هم‌زمان پایان می‌یابد، جاری‌سازی فعال باقی‌مانده باید به دستگاهی که در ابتدا در این جاری‌سازی درخواست شده بود هدایت شود.

اگر ترتیب اولویت توسط HAL صوتی بین موارد استفاده فعال تعریف شده است، همان ترتیبی را که در source_priority() در frameworks/av/services/audiopolicy/common/include/policy.h پیدا می‌شود دنبال کنید

انتخاب پیش‌پردازش

چارچوب صوتی می‌تواند بااستفاده از روش‌های addEffect() یا removeEffect() HAL، پیش‌پردازش را در جاری‌سازی ورودی درخواست کند.

برای پیش‌پردازش در یک جاری‌سازی ورودی معین، چارچوب صوتی فقط پیکربندی مربوط به مورد استفاده فعال با بالاترین اولویت را در جاری‌سازی ورودی فعال می‌کند. بااین‌حال، ممکن است درطول فعال‌سازی و غیرفعال‌سازی مورد استفاده هم‌پوشانی وجود داشته باشد که باعث می‌شود دو فرایند فعال هم‌زمان (برای مثال، دو نمونه از حذف‌کننده پژواک) روی یک جاری‌سازی ورودی اجرا شوند. در این حالت، پیاده‌سازی HAL انتخاب می‌کند کدام درخواست پذیرفته شود؛ درخواست‌های فعال را پیگیری می‌کند و وقتی هریک از فرایندها غیرفعال می‌شود، وضعیت صحیح را بازیابی می‌کند.

وقتی چندین جاری‌سازی ضبط هم‌زمان فعال باشند، ممکن است درخواست‌های پیش‌پردازش مختلفی روی جاری‌سازی‌های مختلف اجرا شود.

پیاده‌سازی‌های زیرسیستم صوتی و HAL باید امکان اعمال پیش‌پردازش‌های مختلف را برای جاری‌سازی‌های مختلف فراهم کنند، حتی اگر از دستگاه ورودی یکسانی استفاده کنند. یعنی پیش‌پردازش باید پس‌از جداسازی جریان‌ها از منبع ضبط اصلی اعمال شود.

اگر به‌دلایل فنی در یک زیرسیستم صوتی خاص امکان‌پذیر نباشد، HAL صوتی باید قوانین اولویت مشابه قوانین فهرست‌شده در انتخاب دستگاه را اعمال کند.

تماس صوتی هم‌زمان و ضبط از AP

ضبط از AP می‌تواند درحین فعال بودن تماس صوتی انجام شود. این وضعیت در Android 10 جدید نیست و مستقیماً با ویژگی ضبط هم‌زمان مرتبط نیست، اما بهتر است رهنمودهای این سناریو را ذکر کنیم.

درطول تماس، دو نوع مختلف ضبط از نقطه دسترسی لازم است.

ضبط کردن RX و TX تماس

ضبط تماس RX و TX بااستفاده از منبع صوتی AudioSource.VOICE_UPLINK یا AudioSource.VOICE_DOWNLINK، و/یا دستگاه AudioDevice.IN_TELEPHONY_RX راه‌اندازی می‌شود.

«لایه انتزاع سخت‌افزار» صوتی باید در نمایه ورودی (mixPort نقش sink) با مسیری دردسترس از دستگاه AudioDevice.IN_TELEPHONY_RX آشکار شود.

وقتی تماسی برقرار می‌شود (حالت صوتی AudioMode.IN_CALL است)، باید بتوان حداقل یک جاری‌سازی ضبط فعال از دستگاه AudioDevice.IN_TELEPHONY_RX داشت.

وقتی تماسی فعال است، از دستگاه‌های ورودی ضبط می‌شود

وقتی تماسی فعال است (حالت صوتی AudioMode.IN_CALL)، باید بتوان جریان‌های ورودی را از AP باز و فعال کرد، همان‌طور که در بخش فعالیت هم‌زمان جریان‌های ورودی AP مشخص شده است.

بااین‌حال، درصورت وجود تعارض با درخواست‌های جاری‌سازی ورودی AP، اولویت انتخاب دستگاه و پیش‌پردازش باید همیشه با تماس صوتی باشد.

ضبط هم‌زمان از DSP و AP

وقتی زیرسیستم صوتی حاوی DSP پشتیبان زمینه صوتی کم‌مصرف یا عملکردهای تشخیص کلیدگفته باشد، پیاده‌سازی باید از ضبط هم‌زمان از AP و DSP صوتی پشتیبانی کند. این شامل ضبط توسط DSP درطول مرحله تشخیص اولیه و ضبط توسط AP با AudioSource.HOTWORD پس‌از راه‌اندازی تشخیص توسط DSP می‌شود.

این باید با پرچم ضبط هم‌زمان گزارش‌شده توسط لایه انتزاع سخت‌افزاری محرک صدا ازطریق توصیفگر پیاده‌سازی منعکس شود: ISoundTriggerHw.Properties.concurrentCapture = true.

«لایه انتزاع سخت‌افزار» صدا نیز باید نمایه ورودی خاصی را برای ضبط کلمه کلیدی که با پرچم AudioInputFlag.HW_HOTWORD شناسایی می‌شود نمایان کند و وارد کند. پیاده‌سازی باید از باز کردن و فعال کردن تعدادی از جریان‌ها در این نمایه پشتیبانی کند که حداقل برابر با تعداد مدل‌های صوتی باشد که می‌توانند به‌طور هم‌زمان توسط لایه انتزاع سخت‌افزار محرک صدا بار شوند.

وقتی نمایه‌های ورودی دیگر فعال هستند، باید بتوان از این نمایه ورودی ضبط کرد.

پیامد برای پیاده‌سازی‌های «دستیار»

الزامات مربوط به استفاده از داده و اعلان کاربر

ازآنجاکه استفاده هم‌زمان از میکروفون، درصورت سوءاستفاده، می‌تواند باعث فاش شدن داده‌های خصوصی کاربر شود، باید شرایط و ضمانت‌های زیر برای برنامه‌های ازپیش بارگذاری‌شده دارای امتیاز که درخواست دارند نقش «دستیار» را داشته باشند اعمال شود.

  • داده‌های جمع‌آوری‌شده ازطریق میکروفون نباید از دستگاه خارج شود، مگراینکه کاربر درحال تعامل با «دستیار» باشد. برای مثال، پس‌از فعال شدن کلمه داغ.
  • برنامه‌هایی که هم‌زمان گوش می‌دهند باید پس‌از تشخیص کلمه کلیدی، نشان‌های دیداری به کاربر ارائه دهند. این کار به کاربران کمک می‌کند متوجه شوند که مکالمه‌های بعدی ازطریق برنامه دیگری، مثل «دستیار»، انجام خواهد شد.
  • کاربران باید بتوانند میکروفون یا راه‌اندازهای «دستیار» را خاموش کنند.
  • وقتی صداهای ضبط‌شده ذخیره می‌شوند، کاربران باید بتوانند در هر زمانی به صداهای ضبط‌شده دسترسی داشته باشند، آن‌ها را مرور کنند، و حذف کنند.

بهبودهای عملکردی برای Android 10

دستیارها یکدیگر را مسدود نمی‌کنند

در Android 9 یا نسخه‌های پایین‌تر، وقتی دو «دستیار» همیشه روشن در دستگاه وجود داشته باشد، فقط یکی از آن‌ها می‌تواند به کلمه فعال گوش دهد. بنابراین، لازم بود بین این دو «دستیار» جابه‌جا شوید. در Android 10، «دستیار» پیش‌فرض می‌تواند هم‌زمان با «دستیار» دیگر گوش دهد. این کار باعث می‌شود کاربران با هر دو «دستیار» تجربه‌ای بسیار روان‌تر داشته باشند.

برنامه‌هایی که میکروفون را باز نگه داشته‌اند

وقتی برنامه‌هایی مثل Shazam یا Waze میکروفون را باز نگه می‌دارند، «دستیار» پیش‌فرض همچنان می‌تواند منتظر شنیدن کلمه کلیدی باشد.

برای برنامه‌های «دستیار» غیرپیش‌فرض، هیچ تغییری در عملکرد Android 10 وجود ندارد.

پیاده‌سازی لایه انتزاع سخت‌افزار نمونه صوتی

نمونه‌ای از پیاده‌سازی HAL صوتی که از دستورالعمل‌های این سند پیروی می‌کند را می‌توانید در AOSP پیدا کنید.