צילום בו-זמנית

ב-Android 10 יש שיפור בחוויית המשתמש במקרים שבהם נדרשת יותר מהתקנת הקלטת אודיו אחת בו-זמנית, למשל אם המשתמש רוצה לשלוט בשיחה ב-VoIP או במצלמת וידאו באמצעות פקודות קוליות שמספק שירות נגישות.

כשמשתמשים ב-framework של אודיו, המדיניות הזו מאפשרת רק לאפליקציות מסוימות שיש להן הרשאות לצלם. בו-זמנית עם אפליקציות רגילות.

מדיניות בו-זמניות (concurrency) מוטמעת על ידי השתקה של האודיו המוקלט במקום על ידי מניעת החל מהתחלת הצילום. כך המערכת יכולה להתייחס באופן דינמי שינויים במספר ובסוגים של התרחישים לדוגמה של תיעוד פעיל, בלי למנוע מהאפליקציה מתחיל לצלם במקרה שבו הוא יכול לשחזר גישה מלאה למיקרופון לאחר שאפליקציה אחרת הסתיים הצילום.

כתוצאה מכך, ל-HAL ולמערכת המשנה של האודיו חייבת להיות תמיכה בכמה קלט פעיל משודרת בו-זמנית, גם אם במקרים מסוימים, רק שידור אחד מספק אודיו לא שקט לקוח פעיל.

דרישות לגבי CDD

בדרישות בCDD מפורטות הדרישות לתמיכה בצילום בו-זמנית.

תיעוד מצבים מאודיו HAL

תרחיש של צילום בו-זמנית יכול להוביל למצבים שונים מבחינת מספר הפעילות שידורי קלט, בחירת מכשיר לקליטת נתונים או הגדרות של עיבוד מראש.

יכול להיות אירוע בו-זמנית בין האירועים הבאים:

  • כמה שידורי קלט ממעבד האפליקציות (AP)
  • מקורות קלט ושיחה קולית
  • שידורי קלט ו-DSP של אודיו שמטמיעים זיהוי של מילות הפעלה בעוצמה נמוכה

פעילות בו-זמנית בסטרימינג של קלט AP

מסגרת האודיו משתמשת בקובץ התצורה של מדיניות האודיו audio_policy_configuration.xml כדי לקבוע כמה מקורות קלט אפשר לפתוח ולהפעיל בו-זמנית.

לפחות, HAL האודיו צריך לתמוך במכונה אחת לפחות של כל פרופיל קלט (mixPort של התפקיד sink) שמופיע בקובץ התצורה הפתוח והפעיל.

בחירת מכשיר

כשמספר לקוחות פעילים מצורפים לאותו זרם קלט HAL, ה-framework בוחר את המכשיר המתאים לשידור הקלט הזה על סמך העדיפות של תרחיש לדוגמה.

כשיש כמה מקורות קלט פעילים, לכל מקור קלט יכולה להיות בחירת מכשיר שונה.

אם הטכנולוגיה תואמת, מומלץ שה-HAL של האודיו והתת-מערכת יאפשרו לצלם סטרימינגים שונים ממכשירים שונים, כמו אוזניות Bluetooth ומיקרופון מובנה.

אם יש אי-תאימות (לדוגמה, שני מכשירים משתפים את אותו ממשק אודיו דיגיטלי או את אותו קצה עורפי), ה-HAL של האודיו צריך לבחור איזה סטרימינג ישלוט בבחירת המכשיר.

במקרה כזה:

  • המצב שמתקבל חייב להיות עקבי ולהציע את אותה בחירת מכשיר אם אותו שהתרחיש חוזר על עצמו.
  • לאחר סיום מצב בו-זמניות (concurrency), השידור הפעיל שנותר צריך לנתב אל במכשיר המבוקש לשידור הזה.

אם ה-HAL של האודיו מגדיר סדר עדיפות בין תרחישי שימוש פעילים, צריך לפעול לפי אותו סדר שמופיע ב-source_priority() בקטע frameworks/av/services/audiopolicy/common/include/policy.h.

בחירת עיבוד מקדים

ה-framework של האודיו יכול לבקש עיבוד מראש בסטרימינג קלט באמצעות שיטות HAL addEffect() או removeEffect().

לעיבוד מראש בשידור קלט נתון, מסגרת האודיו מפעילה רק את התצורה שתואמת לתרחיש השימוש הפעיל בעדיפות הגבוהה ביותר של קלט זרם. עם זאת, יכול להיות חפיפה מסוימת במהלך ההפעלה וההשבתה של תרחיש לדוגמה, וכתוצאה מכך שני תהליכים פעילים בו-זמנית (לדוגמה, שני מופעים של ביטול הדהוד) יפעלו באותו מקור קלט. במקרה הזה, הטמעת ה-HAL בוחרת את הבקשה התקבל; הוא עוקב אחרי הבקשות הפעילות ומשחזר את המצב הנכון כאשר התהליך מושבת.

כאשר מספר שידורי תיעוד פעילים בו-זמנית, בקשות שונות לעיבוד מראש עשויות להיות להפעיל בשידורים שונים.

יישומי מערכת המשנה HAL ומערכות האודיו אמורים לאפשר תהליכים שונים של עיבוד מראש הוחל על שידורים שונים, גם אם הם חולקים את אותו מכשיר קלט. כלומר, עיבוד מראש יש להחיל לאחר הפיכת הזרמים ממקור הלכידה הראשי.

אם אי אפשר לעשות זאת מסיבות טכניות במערכת משנה מסוימת של אודיו, ה-HAL של האודיו צריך להחיל כללי תעדוף דומים לאלה שמפורטים בקטע בחירת מכשיר.

שיחה קולית והקלטה בו-זמנית מ-AP

הצילום מ-AP יכול להתרחש במהלך שיחה קולית פעילה. המצב הזה לא חדש ב-Android 10 והוא לא קשור ישירות לתכונה של צילום בו-זמנית, אבל כדאי לציין את ההנחיות לגבי התרחיש הזה.

במהלך שיחה נדרשים שני סוגים שונים של תיעוד מה-AP.

תיעוד של שיחות RX ו-TX

לכידת השיחה RX ו-TX מופעלת על ידי השימוש במקור האודיו 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.

צריכה להיות אפשרות להקליט מפרופיל הקלט הזה בזמן שפרופילי קלט אחרים פעילים.

ההשלכות על הטמעות של Assistant

דרישות לגבי שימוש בחבילת הגלישה ושליחת הודעות למשתמשים

מכיוון ששימוש בו-זמנית במיקרופון עלול להדליף נתונים פרטיים של משתמשים במקרים של ניצול לרעה, אנחנו זקוקים לדברים הבאים תנאים ואחריות שיחולו על האפליקציות בעלות הרשאות שנטענו מראש שמבקשות להחזיק תפקיד של Assistant.

  • הנתונים שנאספים דרך המיקרופון לא אמורים לצאת מהמכשיר, אלא אם המשתמש מבצע אינטראקציה עם Assistant. לדוגמה, אחרי שמילת ההפעלה מופעלת.
  • אפליקציות שמאזין בו-זמנית צריכות לספק למשתמש סימנים ויזואליים אחרי מילת ההפעלה כשמתבצע זיהוי. כך המשתמשים יוכלו להבין ששיחות נוספות יעברו למשל Assistant.
  • יש לאפשר למשתמשים לכבות את המיקרופון או את הטריגר של Assistant.
  • כשהקלטות אודיו נשמרות, המשתמשים צריכים להיות מסוגלים לגשת להקלטות, לבדוק אותן ולמחוק אותן בכל שלב.

שיפורים בפונקציונליות של Android 10

Assistant לא חוסמת אחת את השנייה

ב-Android מגרסה 9 ומטה, כשיש במכשיר שתי תוכנות Assistant שפועלות תמיד, רק אחת מהן יכולה להאזין למילות הפקודה שלה. לכן, היה צורך לעבור בין שתי Assistant. ב-Android 10, אפשר להשתמש ב-Assistant כברירת מחדל להאזנה בו-זמנית עם האסיסטנט האחר. כך המשתמשים יכולים ליהנות מחוויה חלקה יותר עם שתי העוזרות.

אפליקציות שמשאירות את המיקרופון פתוח

כשאפליקציות כמו Shazam או Waze משאירות את המיקרופון פתוח, Assistant שמוגדרת כברירת מחדל עדיין יכולה להקשיב למילות ההפעלה.

באפליקציות Assistant שאינן ברירת המחדל, אין שינוי בהתנהגות ב-Android 10.

הטמעת HAL של אודיו לדוגמה

דוגמה להטמעת HAL של אודיו שתואמת להנחיות שבמסמך הזה נמצאים ב-AOSP.