اندروید ۱۰ تجربه کاربری را که نیاز به ضبط همزمان بیش از یک صدای فعال دارد، بهبود میبخشد، برای مثال، اگر کاربر بخواهد یک تماس VoIP یا ضبط ویدیو را با دستورات صوتی ارائه شده توسط یک سرویس دسترسی کنترل کند.
چارچوب صوتی، سیاستی را پیادهسازی میکند که به فقط برنامههای دارای امتیاز خاص اجازه میدهد همزمان با برنامههای معمولی ضبط صدا انجام دهند.
سیاست همزمانی با بیصدا کردن صدای ضبطشدهی آن پیادهسازی میشود، نه با جلوگیری از شروع ضبط توسط یک برنامه. این امر به چارچوب اجازه میدهد تا به صورت پویا تغییرات در تعداد و انواع موارد استفاده از ضبط فعال را برطرف کند، بدون اینکه مانع از شروع ضبط توسط یک برنامه در موردی شود که میتواند پس از اتمام ضبط توسط برنامهی دیگر، دسترسی کامل به میکروفون را بازیابی کند.
نتیجه برای HAL صوتی و زیرسیستم صوتی این است که آنها باید چندین جریان ورودی فعال را به طور همزمان پشتیبانی کنند، حتی اگر در برخی موارد، فقط یک جریان، صدای غیر صامت را به یک کلاینت فعال ارائه دهد.
الزامات CDD
برای الزامات پشتیبانی از ضبط همزمان، به CDD مراجعه کنید.
ضبط موقعیتها از HAL صوتی
یک سناریوی ضبط همزمان میتواند از نظر تعداد جریانهای ورودی فعال، انتخاب دستگاه ورودی یا پیکربندی پیشپردازش، منجر به موقعیتهای مختلفی شود.
همزمانی میتواند بین موارد زیر اتفاق بیفتد:
- چندین جریان ورودی از پردازنده برنامه (AP)
- جریانهای ورودی و تماس صوتی
- جریانهای ورودی و یک DSP صوتی که تشخیص کلمات کلیدی کممصرف را پیادهسازی میکند
فعالیت همزمان جریانهای ورودی AP
فایل پیکربندی سیاست صوتی audio_policy_configuration.xml توسط چارچوب صوتی برای تعیین اینکه چند جریان ورودی میتوانند همزمان باز و فعال باشند، استفاده میشود.
حداقل، HAL صوتی باید حداقل از یک نمونه از هر پروفایل ورودی ( mixPort یا role sink ) که در فایل پیکربندی باز و فعال ذکر شده است، پشتیبانی کند.
انتخاب دستگاه
وقتی چندین کلاینت فعال به یک جریان ورودی HAL متصل باشند، چارچوب، دستگاه مناسب برای این جریان ورودی را بر اساس اولویت مورد استفاده انتخاب میکند.
وقتی چندین جریان ورودی فعال هستند، هر جریان میتواند انتخاب دستگاه متفاوتی داشته باشد.
اگر این فناوری سازگار باشد، توصیه میشود که HAL صوتی و زیرسیستم آن اجازه دهند جریانهای مختلف از دستگاههای مختلف، مانند هدست بلوتوث و میکروفون داخلی، ضبط شوند.
اگر ناسازگاری وجود داشته باشد (برای مثال دو دستگاه رابط صوتی دیجیتال یا بکاند یکسانی را به اشتراک بگذارند)، HAL صوتی باید انتخاب کند که کدام جریان، انتخاب دستگاه را کنترل کند.
در این مورد:
- حالت حاصل باید سازگار باشد و در صورت تکرار سناریوی مشابه، انتخاب دستگاه یکسانی را ارائه دهد.
- وقتی حالت همزمانی به پایان میرسد، جریان فعال باقیمانده باید به دستگاه درخواستشده اولیه روی این جریان هدایت شود.
اگر ترتیب اولویت توسط HAL صوتی بین موارد استفاده فعال تعریف شده است، همان ترتیبی را که در source_priority() در frameworks/av/services/audiopolicy/common/include/policy.h یافت میشود، دنبال کنید.
انتخاب پیشپردازش
چارچوب صوتی میتواند با استفاده از متدهای addEffect() یا removeEffect() HAL، پیشپردازش را روی یک جریان ورودی درخواست کند.
برای پیشپردازش روی یک جریان ورودی مشخص، چارچوب صوتی فقط پیکربندی مربوط به مورد استفاده فعال با بالاترین اولویت را در جریان ورودی فعال میکند. با این حال، ممکن است در طول فعالسازی و غیرفعالسازی مورد استفاده، همپوشانی وجود داشته باشد و باعث شود دو فرآیند فعال همزمان (به عنوان مثال، دو نمونه از حذفکننده اکو) روی یک جریان ورودی اجرا شوند. در این حالت، پیادهسازی HAL انتخاب میکند که کدام درخواست پذیرفته شود. درخواستهای فعال را پیگیری میکند و هنگامی که هر یک از فرآیندها غیرفعال میشود، وضعیت صحیح را بازیابی میکند.
وقتی چندین جریان ضبط همزمان فعال هستند، ممکن است درخواستهای پیشپردازش متفاوتی روی جریانهای مختلف اجرا شود.
پیادهسازیهای HAL و زیرسیستمهای صوتی باید امکان اعمال پیشپردازشهای مختلف بر روی جریانهای مختلف را فراهم کنند، حتی اگر دستگاه ورودی یکسانی داشته باشند. یعنی، پیشپردازش باید پس از حذف نویز جریانها از منبع ضبط اولیه اعمال شود.
اگر به دلایل فنی در یک زیرسیستم صوتی مشخص امکان پذیر نباشد، HAL صوتی باید قوانین اولویتی مشابه آنچه در انتخاب دستگاه ذکر شده است را اعمال کند.
تماس صوتی همزمان و ضبط از AP
ضبط صدا از طریق AP میتواند در حین فعال بودن تماس صوتی اتفاق بیفتد. این وضعیت در اندروید ۱۰ چیز جدیدی نیست و ارتباط مستقیمی با ویژگی ضبط همزمان ندارد، اما ذکر دستورالعملهای مربوط به این سناریو مفید است.
دو نوع مختلف ضبط از نقطه دسترسی (AP) در طول یک تماس مورد نیاز است.
ضبط تماس گیرنده و فرستنده
ضبط تماس گیرنده و فرستنده با استفاده از منبع صوتی AudioSource.VOICE_UPLINK یا AudioSource.VOICE_DOWNLINK و/یا دستگاه AudioDevice.IN_TELEPHONY_RX انجام میشود.
HAL های صوتی باید روی پروفایل ورودی ( 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 میشود.
این باید توسط پرچم ضبط همزمان گزارش شده توسط تریگر صدا HAL از طریق توصیفگر پیادهسازی منعکس شود: ISoundTriggerHw.Properties.concurrentCapture = true .
HAL صوتی همچنین باید نمایه ورودی مخصوص ضبط کلمات کلیدی را که با پرچم AudioInputFlag.HW_HOTWORD مشخص شده است، در معرض نمایش قرار دهد. این پیادهسازی باید از باز کردن و فعال کردن تعدادی از جریانها در این نمایه، حداقل برابر با تعداد مدلهای صوتی که میتوانند همزمان توسط تریگر صدا HAL بارگیری شوند، پشتیبانی کند.
ضبط از این پروفایل ورودی باید در حالی که سایر پروفایلهای ورودی فعال هستند، امکانپذیر باشد.
پیامدها برای پیادهسازیهای دستیار
الزامات مربوط به استفاده از داده و اطلاعرسانی به کاربر
از آنجا که استفاده همزمان از میکروفون، در صورت سوءاستفاده، میتواند دادههای خصوصی کاربر را فاش کند، ما به شرایط و ضمانتهای زیر نیاز داریم تا برای برنامههای از پیش نصبشدهی دارای امتیاز که درخواست ایفای نقش دستیار را دارند، اعمال شود.
- دادههای جمعآوریشده از طریق میکروفون نباید دستگاه را ترک کنند، مگر اینکه کاربر در حال تعامل با دستیار باشد. برای مثال، پس از فعال شدن کلید واژه.
- برنامههایی که به طور همزمان در حال گوش دادن هستند، باید پس از شناسایی کلمه کلیدی، نشانههای بصری را به کاربر ارائه دهند. این به کاربران کمک میکند تا درک کنند که مکالمات بیشتر از طریق برنامه دیگری مانند دستیار صوتی انجام خواهد شد.
- کاربران باید بتوانند میکروفون یا محرکهای دستیار را خاموش کنند.
- وقتی فایلهای صوتی ذخیره میشوند، کاربران باید بتوانند در هر زمانی به آنها دسترسی داشته باشند، آنها را بررسی و حذف کنند.
بهبودهای عملکردی برای اندروید ۱۰
دستیارانی که یکدیگر را مسدود نمیکنند
در اندروید ۹ یا پایینتر، وقتی دو دستیار همیشه روشن روی دستگاه وجود دارد، فقط یکی از آنها میتواند به کلمه کلیدی خود گوش دهد. از این رو، نیاز به جابجایی بین دو دستیار وجود داشت. در اندروید ۱۰، دستیار پیشفرض میتواند همزمان با دستیار دیگر در حال گوش دادن باشد. این امر منجر به تجربه بسیار روانتری برای کاربرانی میشود که از هر دو دستیار استفاده میکنند.
برنامههایی که میکروفون را باز نگه میدارند
وقتی برنامههایی مانند Shazam یا Waze میکروفون را باز نگه میدارند، دستیار پیشفرض هنوز میتواند در حال گوش دادن به کلمه کلیدی باشد.
برای برنامههای دستیار غیر پیشفرض، هیچ تغییری در رفتار اندروید ۱۰ ایجاد نشده است.
نمونه پیادهسازی HAL صوتی
نمونهای از پیادهسازی HAL صوتی که با دستورالعملهای این سند مطابقت دارد را میتوانید در AOSP بیابید.