از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
ویژگی Sound Trigger به برنامهها این امکان را میدهد که به رویدادهای صوتی خاص مانند کلمات کلیدی به روشی کم مصرف و حساس به حریم خصوصی گوش دهند. موارد استفاده مثال Sound Trigger عبارتند از Assistant و Now Playing.
این صفحه نمای کلی معماری Sound Trigger و رابط HAL (لایه انتزاعی سخت افزار) آن را ارائه می دهد.
پشته ماشه صدا
زیرسیستم Sound Trigger طبق شکل 1 به صورت لایه ای ساخته شده است:
شکل 1: پشته ماشه صدا
لیست زیر هر لایه نشان داده شده در شکل 1 را با جزئیات بیشتری شرح می دهد:
لایه HAL (به رنگ سبز) حاوی کد خاص فروشنده است که رابط Sound Trigger HAL (STHAL) را پیاده سازی می کند.
SoundTriggerMiddleware (به رنگ زرد) بالای رابط HAL قرار دارد. با HAL ارتباط برقرار می کند و مسئولیت عملکردهایی مانند اشتراک گذاری HAL بین کلاینت های مختلف، ورود به سیستم، اجرای مجوزها و سازگاری با نسخه های قدیمی HAL را بر عهده دارد.
سیستم SoundTriggerService (به رنگ آبی) بالای میان افزار قرار دارد. ادغام با سایر ویژگی های سیستم مانند رویدادهای تلفن و باتری را تسهیل می کند. همچنین پایگاه داده ای از مدل های صدا را که با شناسه های منحصر به فرد نمایه شده اند، نگهداری می کند.
در بالای لایه SoundTriggerService ، پشته (به رنگ قهوه ای) ویژگی های خاص دستیار و برنامه های عمومی را به طور جداگانه کنترل می کند.
عملکرد پشته Sound Trigger ارائه رویدادهای مجزا است که نشان دهنده رویدادهای آکوستیک و ماشه است. در بیشتر موارد، پشته Sound Trigger با صدا سروکار ندارد. پس از دریافت رویدادهای ماشه، برنامهها با باز کردن یک شی AudioRecord از طریق چارچوب صوتی، به جریان صوتی واقعی، در اطراف زمان رویدادها دسترسی پیدا میکنند. Sound Trigger HAL API ها دسته ای از رویداد راه اندازی شده را ارائه می دهند که در چارچوب صوتی استفاده می شود. از این رو، از آنجایی که Sound Trigger HAL و Audio HAL در زیر هود متصل هستند، معمولاً یک فرآیند مشترک دارند.
رابط HAL ماشه صدا
رابط Sound Trigger HAL (STHAL) بخش خاص فروشنده پشته Sound Trigger است و تشخیص سخت افزاری کلمات کلیدی و سایر صداها را انجام می دهد. STHAL یک یا چند موتور را ارائه می دهد که هر کدام الگوریتم متفاوتی را اجرا می کنند که برای تشخیص کلاس خاصی از صداها طراحی شده است. هنگامی که STHAL یک ماشه را شناسایی می کند، یک رویداد را به چارچوب ارسال می کند و سپس تشخیص را متوقف می کند.
رابط STHAL در زیر /hardware/interfaces/soundtrigger/ مشخص شده است.
رابط ISoundTriggerHw از توانایی اجرای یک یا چند جلسه تشخیص در یک زمان معین و گوش دادن به رویدادهای صوتی پشتیبانی می کند. فراخوانی به ISoundTriggerHw.getProperties() یک ساختار Properties حاوی توضیحات پیاده سازی و قابلیت ها را برمی گرداند.
جریان اصلی تنظیم یک جلسه به صورت زیر در شکل 2 توضیح داده شده است:
شکل 2: نمودار وضعیت STHAL
مراحل زیر هر حالت را با جزئیات بیشتری شرح می دهد:
سرویس گیرنده HAL یک مدل را با استفاده از loadSoundModel() یا loadPhraseSoundModel() بارگذاری می کند. شی مدل ارائه شده نشان می دهد که از کدام الگوریتم تشخیص خاص پیاده سازی (موتور) استفاده شود، و همچنین پارامترهای قابل اعمال برای این الگوریتم. پس از موفقیت، این روش ها دسته ای را برمی گردانند که برای ارجاع به این مدل در تماس های بعدی استفاده می شود.
هنگامی که مدل با موفقیت بارگذاری شد، کلاینت HAL برای شروع شناسایی startRecognition() فراخوانی می کند. تا زمانی که یکی از رویدادهای زیر رخ دهد، شناسایی در پسزمینه اجرا میشود:
یک stopRecognition() در این مدل فراخوانی شده است.
شناسایی رخ داده است.
شناسایی به دلیل محدودیت منابع متوقف می شود، برای مثال، زمانی که یک مورد استفاده با اولویت بالاتر آغاز شده باشد.
در دو مورد اخیر، یک رویداد شناسایی از طریق واسط تماس برگشتی ارسال میشود که توسط مشتری HAL هنگام بارگذاری ثبت میشود. در همه موارد، پس از وقوع هر یک از این رویدادها، تشخیص غیرفعال می شود و دیگر تماس های شناسایی مجاز نیستند.
همین مدل را می توان بعداً دوباره شروع کرد و این روند را می توان هر چند بار که لازم است تکرار کرد.
در نهایت، یک مدل غیرفعال که دیگر مورد نیاز نیست توسط سرویس گیرنده HAL از طریق unloadModel() بارگیری می شود.
خطاهای HAL را مدیریت کنید
برای اطمینان از رفتار قابل اعتماد و سازگار بین پیادهسازی درایورها، در Android 11، هر کد خطای غیرموفقیتی که از HAL برگردانده میشود به عنوان خطای برنامهنویسی تلقی میشود، که بازیابی آن مستلزم راهاندازی مجدد فرآیند HAL است. این آخرین راهبرد بازیابی است و انتظار این است که چنین مواردی در سیستمی که به درستی کار می کند رخ ندهد.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Sound Trigger\n\nThe Sound Trigger feature provides apps with the ability to listen for certain\nacoustic events, like hotwords, in a low-power and privacy-sensitive manner.\nExample use cases of Sound Trigger are Assistant and Now Playing.\n\nThis page gives an overview of the Sound Trigger architecture and its HAL\n(Hardware Abstraction Layer) interface.\n\nSound Trigger stack\n-------------------\n\nThe Sound Trigger subsystem is built in layers as shown in Figure 1:\n\n**Figure 1:** Sound Trigger stack\n\nThe following list describes each layer shown in Figure 1 in more detail:\n\n- The **HAL layer** (in green) contains the vendor specific code which\n implements the [Sound Trigger HAL](#sthal-interface) (STHAL) interface.\n\n | **Note:** A direct implementation of the STHAL interface is recommended rather than as an adapter around an implementation of a legacy HAL.\n- The **`SoundTriggerMiddleware`** (in yellow) resides above the HAL\n interface. It communicates with the HAL and is responsible for functionalities\n such as sharing the HAL between different clients, logging, enforcing\n permissions and handling compatibility with older HAL versions.\n\n- The **`SoundTriggerService`** (in blue) system resides above the middleware.\n It facilitates integration with other system features, such as telephony and\n battery events. It also maintains a database of sound models, indexed by unique\n IDs.\n\n- Above the `SoundTriggerService` layer, the stack (in brown) handles features\n specific to Assistant and generic apps separately.\n\nThe function of the Sound Trigger stack is to deliver discrete events that\nrepresent acoustic, trigger events. In most cases, the Sound Trigger stack does\nnot deal with audio. Upon receipt of the trigger events, apps get access to the\nactual audio stream, surrounding the time of the events, by opening an\n`AudioRecord` object via the Audio framework. The Sound Trigger HAL APIs provide\na handle with the triggered event that is used with the Audio Framework. Hence,\nsince the Sound Trigger HAL and Audio HAL are connected under the hood, they\ntypically share a process.\n| **Note:** Since models and data types are opaque to the framework in the Sound Trigger subsystem, it is expected that apps and the HAL implementation maintain a \"hidden contract\", that is, the actual contents, format and semantics of those data types are agreed upon. Hence, apps using Sound Trigger are intended to be vendor provided rather than by independent developers.\n\nSound Trigger HAL interface\n---------------------------\n\nThe Sound Trigger HAL (STHAL) interface is the vendor specific part of the Sound\nTrigger stack and it handles hardware recognition of hotwords and other sounds.\nSTHAL provides one or more engines with each one running a different algorithm\ndesigned to detect a specific class of sounds. When STHAL detects a trigger, it\nsends an event to the framework and then stops the detection.\n\nThe STHAL interface is specified under `/hardware/interfaces/soundtrigger/`.\n\nThe `ISoundTriggerHw` interface supports the ability to have one or more\ndetection sessions running at a given time and to listen to acoustic events.\nA call to `ISoundTriggerHw.getProperties()` returns a `Properties` structure\ncontaining implementation description and capabilities.\n\nThe basic flow of setting up a session is explained as follows in Figure 2:\n\n**Figure 2:** STHAL state diagram\n\nThe following steps describe each state in more detail:\n\n1. The HAL client loads a model using `loadSoundModel()` or\n `loadPhraseSoundModel()`. The provided model object indicates which\n implementation-specific detection algorithm (engine) to use, as well as the\n parameters applicable for this algorithm. Upon success, these methods return a\n handle which is used to reference this model in subsequent calls.\n\n2. Once the model has been successfully loaded, the HAL client calls\n `startRecognition()` to begin detection. Recognition continues to run in the\n background until one of the following events occurs:\n\n 1. A `stopRecognition()` has been called on this model.\n 2. A detection has occurred.\n 3. Detection is aborted due to resource constraints, for example, when a higher priority use case has been initiated.\n\n In the latter two cases, a recognition event is sent via the callback\n interface that is registered by the HAL client upon loading. In all cases,\n after any of these events occur, the detection becomes inactive and no more\n recognition callbacks are allowed.\n\n The same model can be started again at a later time, and this process can be\n repeated as many times as needed.\n3. Finally, an inactive model that is no longer needed is unloaded by the HAL\n client via `unloadModel()`.\n\n| **Note:** When a model is started, the HAL client can call `forceRecognitionEvent()` to generate a forced recognition event. The returned event is similar to a normal recognition event, but has its status field set to `FORCED`. Such recognition events do not automatically stop the recognition. Instead, the model state remains running even after the event has been delivered.\n\nHandle HAL errors\n-----------------\n\nTo ensure reliable and consistent behavior between driver implementations, in\nAndroid 11, any non-success error codes returned from\nthe HAL are treated as programming errors, recovery from which requires\nrestarting the HAL process. This is a last-resort recovery strategy and the\nexpectation is that such cases won't occur in a properly working system.\n| **Note:** Although these errors are being called out as valid in the HAL API documentation, there is ambiguity as to when and under what states these error codes are returned and what the expected error recovery procedure is. Hence, Android 11 mandates stricter conformance of Sound Trigger HAL implementations at runtime than the lower versions of Android."]]