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