Bagikan melalui


Beberapa Asisten Suara

Platform Beberapa Asisten Suara menyediakan dukungan untuk asisten suara tambahan di Windows. Ini memungkinkan asisten lain tersedia di perangkat Windows seperti PC dan wearable seperti HoloLens. Beberapa asisten suara dapat aktif pada perangkat yang sama menggunakan serangkaian pola kata kunci yang didukung.

Catatan

Beberapa Asisten Suara didukung dimulai dengan Windows 10 Versi 1903.

Untuk informasi tentang menerapkan Windows Cortana, lihat Aktivasi Suara.

Aktivasi Suara

Aktivasi suara adalah fitur yang memungkinkan pengguna memanggil mesin pengenalan ucapan dari berbagai status daya perangkat dengan mengucapkan frasa tertentu.

Menerapkan aktivasi suara adalah proyek yang signifikan dan merupakan tugas yang diselesaikan oleh vendor SoC. OEM dapat menghubungi vendor SoC mereka untuk informasi tentang implementasi SoC aktivasi suara mereka.

Aktivasi suara memungkinkan pengguna untuk dengan cepat melibatkan pengalaman asisten suara di luar konteks aktif mereka (yaitu, apa yang saat ini ada di layar) dengan menggunakan suara mereka. Pengguna sering ingin dapat langsung mengakses pengalaman tanpa harus berinteraksi secara fisik atau menyentuh perangkat. Untuk pengguna Xbox, ini mungkin dari tidak ingin menemukan dan menyambungkan pengontrol. Untuk pengguna PC, mereka mungkin menginginkan akses cepat ke pengalaman tanpa harus melakukan beberapa tindakan mouse, sentuhan dan/atau keyboard, seperti dalam kasus komputer di dapur.

Aktivasi suara didukung oleh spotter kata kunci (KWS) yang bereaksi jika frasa kunci terdeteksi. Frasa kunci dapat mencakup kata-kata kunci seperti "Hey Contoso." Deteksi kata kunci menjelaskan deteksi kata kunci oleh perangkat keras atau perangkat lunak.

Frasa kunci dapat diucapkan sendiri ("Hey Contoso") sebagai perintah bertahap, atau diikuti dengan tindakan ucapan yang menyusun perintah berantai ("Hey Contoso, di mana pertemuan saya berikutnya?")

Microsoft menyediakan spotter kata kunci default OS (spotter kata kunci perangkat lunak) untuk memberikan pengalaman asisten suara jika deteksi kata kunci perangkat keras tidak tersedia. Meskipun saat ini tersedia untuk Cortana, konfigurasi Microsoft tambahan mungkin diperlukan untuk onboarding asisten suara lain untuk melakukan deteksi kata kunci dua tahap. Untuk informasi selengkapnya, hubungi AskMVA@Microsoft.com.

Jika KWS membangunkan perangkat dari status bertenaga rendah, solusinya dikenal sebagai Wake-on-Voice (WoV). Untuk informasi selengkapnya, lihat Wake on Voice nanti di artikel ini.

Glosarium Ketentuan

Glosarium ini meringkas istilah yang terkait dengan aktivasi suara.

Term Contoh/definisi
Perintah Bertahap Contoh: Hey Contoso <jeda, tunggu asisten UI> Apa cuacanya? Ini terkadang disebut sebagai "perintah dua bidikan" atau "khusus kata kunci".
Perintah Berantai Contoh: Hey Contoso bagaimana cuacanya? Ini kadang-kadang disebut sebagai "perintah satu tembakan".
Aktivasi Suara Contoh: "Hey Contoso" Skenario di mana kata kunci terdeteksi dalam frasa kunci aktivasi yang telah ditentukan sebelumnya.
Wake-on-Voice (WoV) Teknologi yang memungkinkan aktivasi suara dari layar mati, status daya yang lebih rendah, ke layar pada status daya penuh.
WoV dari Siaga Modern Wake-on-Voice dari status mati layar Siaga Modern (S0ix) ke layar pada status daya penuh (S0).
Siaga Modern Infrastruktur Windows Low Power Idle - penerus siaga Koneksi (CS) di Windows 10. Status pertama siaga modern adalah ketika layar mati. Status tidur terdalam adalah ketika berada di DRIPS/Ketahanan. Untuk informasi selengkapnya, lihat Siaga Modern.
KWS Spotter kata kunci - algoritma yang menyediakan deteksi "Hey Contoso".
SW KWS Spotter kata kunci perangkat lunak - implementasi KWS yang berjalan pada host (CPU). Untuk "Hey Cortana", SW KWS disertakan sebagai bagian dari Windows.
HW KWS Spotter kata kunci perangkat keras – implementasi KWS yang berjalan offload pada perangkat keras.
Buffer burst Buffer melingkar yang digunakan untuk menyimpan data PCM yang dapat meledak jika terjadi deteksi KWS, sehingga semua audio yang memicu deteksi KWS disertakan.
Adaptor OEM pendeteksi peristiwa Komponen mode pengguna yang bertindak sebagai perantara antara tumpukan asisten suara Windows dan driver.
Model File data model akustik yang digunakan oleh algoritma KWS. File data statis. Model dilokalkan, satu per lokal.
MVA Beberapa Agen Suara - HWKWS DDI yang mendukung beberapa agen.
SVA Agen Suara Tunggal - HWKWS DDI sebelumnya yang hanya mendukung satu agen (Cortana).

Mengintegrasikan Spotter Kata Kunci Perangkat Keras

Untuk menerapkan spotter kata kunci perangkat keras (HW KWS) Vendor SoC harus menyelesaikan tugas-tugas berikut.

Persyaratan WoV spotter kata kunci yang dilepas perangkat keras (HW KWS)

  • HW KWS WoV didukung selama status Kerja S0 dan status tidur S0 juga dikenal sebagai Siaga Modern.
  • HW KWS WoV tidak didukung dari S3.

AEC

AEC dapat dilakukan oleh DSP pada saat audio ledakan ditangkap, atau dapat dilakukan di lain waktu melalui APO perangkat lunak. Untuk melakukan perangkat lunak AEC dengan data ledakan KWS, perlu memiliki audio loopback yang sesuai sejak data ledakan diambil. Untuk melakukan ini, format audio kustom untuk output ledakan dibuat yang menghubungkan audio loopback ke dalam data audio ledakan.

Dimulai dengan Windows versi 20H1, Microsoft AEC APO mengetahui format yang terjalin ini dan dapat menggunakannya untuk melakukan AEC. Untuk informasi selengkapnya, lihat KSPROPERTY_INTERLEAVEDAUDIO_FORMATINFORMATION.

Validasi

Validasi dukungan HW untuk properti KSPROPSETID_SoundDetector2 dengan pengujian Voice Activation Manager 2.

Gambaran Umum Kode Sampel

Ada kode sampel untuk driver audio yang mengimplementasikan aktivasi suara di GitHub sebagai bagian dari sampel adaptor audio virtual SYSVAD. Disarankan untuk menggunakan kode ini sebagai titik awal.

Untuk informasi selengkapnya tentang driver audio sampel SYSVAD, lihat Contoh Driver Audio.

Informasi Sistem Pengenalan Kata Kunci

Dukungan Tumpukan Audio Aktivasi Suara

Antarmuka eksternal tumpukan audio untuk mengaktifkan Aktivasi Suara berfungsi sebagai alur komunikasi untuk platform ucapan dan driver audio. Antarmuka eksternal dibagi menjadi tiga bagian.

  • Antarmuka Pengandar Perangkat Pendeteksi Peristiwa (DDI). Antarmuka Driver Perangkat Pendeteksi Peristiwa bertanggung jawab untuk mengonfigurasi dan mempersenjatai HW Keyword Spotter (KWS). Ini juga digunakan oleh driver untuk memberi tahu sistem peristiwa deteksi.
  • DLL Adaptor OEM Detektor IEvent. DLL ini mengimplementasikan antarmuka COM untuk menyesuaikan data buram khusus driver untuk digunakan oleh OS untuk membantu deteksi kata kunci.
  • Peningkatan WaveRT. Penyempurnaan memungkinkan driver audio untuk melakukan streaming data audio yang di-buffer dari deteksi kata kunci.

Properti Titik Akhir Audio

Bangunan grafik titik akhir audio terjadi secara normal. Grafik disiapkan untuk menangani lebih cepat daripada pengambilan real time. Tanda waktu pada buffer yang diambil tetap benar. Secara khusus, tanda waktu akan dengan benar mencerminkan data yang diambil di masa lalu dan di-buffer, dan sekarang meledak.

Teori streaming audio bypass Bluetooth

Driver mengekspos filter KS untuk perangkat penangkapannya seperti biasa. Filter ini mendukung beberapa properti KS dan peristiwa KS untuk mengonfigurasi, mengaktifkan, dan memberi sinyal peristiwa deteksi. Filter ini juga menyertakan pabrik pin tambahan yang diidentifikasi sebagai pin spotter kata kunci (KWS). Pin ini digunakan untuk mengalirkan audio dari spotter kata kunci.

Properti ini adalah: KSPROPSETID_SoundDetector2

Semua properti KSPROPSETID_SoundDetector2 dipanggil dengan struktur data KSSOUNDDETECTORPROPERTY. Struktur data ini berisi KSPROPERTY dan id peristiwa agar kata kunci dipersenjatai, diatur ulang, terdeteksi, dll.

  • Jenis kata kunci yang didukung - KSPROPERTY_SOUNDDETECTOR_PATTERNS. Properti ini diatur oleh sistem operasi untuk mengonfigurasi kata kunci yang akan terdeteksi.
  • Daftar GUID pola kata kunci - KSPROPERTY_SOUNDDETECTOR_SUPPORTEDPATTERNS. Properti ini digunakan untuk mendapatkan daftar GUID yang mengidentifikasi jenis pola yang didukung.
  • Bersenjata - KSPROPERTY_SOUNDDETECTOR_ARMED. Properti baca/tulis ini adalah status Boolean sederhana yang menunjukkan apakah detektor dipersenjatai. OS mengatur ini untuk melibatkan detektor kata kunci. OS dapat menghapus ini untuk melepaskan. Driver secara otomatis menghapus ini ketika pola kata kunci diatur dan juga setelah kata kunci terdeteksi. (OS harus bersenjata ulang.)
  • Hasil pencocokan - KSPROPERTY_SOUNDDETECTOR_RESET digunakan untuk mengatur ulang detektor suara pada waktu mulai.

Pada waktu deteksi kata kunci, pemberitahuan PNP yang berisi KSNOTIFICATIONID_SoundDetector dikirim. CATATAN: ini bukan KSEvent, melainkan peristiwa PNP yang dikirim, dengan payload, melalui IoReportTargetDeviceChangeAsynchronous.

KSNOTIFICATIONID_SoundDetector didefinisikan dalam ksmedia.h seperti yang ditunjukkan di sini.

// The payload of this notification is a SOUNDDETECTOR_PATTERNHEADER
#define STATIC_KSNOTIFICATIONID_SoundDetector\
    0x6389d844, 0xbb32, 0x4c4c, 0xa8, 0x2, 0xf4, 0xb4, 0xb7, 0x7a, 0xfe, 0xad
DEFINE_GUIDSTRUCT("6389D844-BB32-4C4C-A802-F4B4B77AFEAD", KSNOTIFICATIONID_SoundDetector);
#define KSNOTIFICATIONID_SoundDetector DEFINE_GUIDNAMED(KSNOTIFICATIONID_SoundDetector)

Urutan Operasi

Startup Sistem

  1. OS mengirimkan KSPROPERTY_SOUNDDETECTOR_RESET untuk menghapus status detektor sebelumnya, mengatur ulang semua detektor untuk melucuti dan menghapus kumpulan pola sebelumnya.
  2. Kueri OS KSPROPERTY_SOUNDDETECTOR_PATTERNS untuk mengambil clsid untuk adaptor OEM pendeteksi peristiwa.
  3. OS menggunakan adaptor oem detektor peristiwa untuk mengambil daftar kata kunci dan bahasa yang didukung.
  4. OS mendaftar untuk pemberitahuan PNP kustom yang dikirim oleh driver
  5. OS mengatur pola kata kunci yang diperlukan.
  6. OS mempersenjatai detektor

Pengandar Internal dan Operasi Perangkat Keras

Saat detektor dipersenjatai, perangkat keras dapat terus menangkap dan menyangga data audio dalam buffer FIFO kecil. (Ukuran buffer FIFO ini ditentukan oleh persyaratan di luar dokumen ini, tetapi biasanya mungkin ratusan milidetik hingga beberapa detik.) Algoritma deteksi beroperasi pada streaming data melalui buffer ini. Desain driver dan perangkat keras sedemtik sehingga sementara bersenjata tidak ada interaksi antara driver dan perangkat keras dan tidak ada gangguan pada prosesor "aplikasi" sampai kata kunci terdeteksi. Ini memungkinkan sistem untuk mencapai status daya yang lebih rendah jika tidak ada aktivitas lain.

Ketika perangkat keras mendeteksi kata kunci, perangkat keras akan menghasilkan gangguan. Saat menunggu driver melayani gangguan, perangkat keras terus mengambil audio ke dalam buffer, memastikan tidak ada data setelah kata kunci hilang, dalam batas buffering.

Tanda Waktu Kata Kunci

Setelah mendeteksi kata kunci, semua solusi aktivasi suara harus menyangga semua kata kunci lisan, termasuk 1,6 sebelum dimulainya kata kunci. Driver audio harus menyediakan tanda waktu yang mengidentifikasi awal dan akhir frasa kunci di aliran.

Untuk mendukung tanda waktu mulai/akhir kata kunci, perangkat lunak DSP mungkin perlu memberi tanda waktu peristiwa secara internal berdasarkan jam DSP. Setelah kata kunci terdeteksi, perangkat lunak DSP berinteraksi dengan driver untuk menyiapkan peristiwa KS. Driver dan perangkat lunak DSP perlu memetakan tanda waktu DSP ke nilai penghitung kinerja Windows. Metode melakukan ini khusus untuk desain perangkat keras. Salah satu solusi yang mungkin adalah bagi driver untuk membaca penghitung kinerja saat ini, mengkueri tanda waktu DSP saat ini, membaca penghitung kinerja saat ini lagi, lalu memperkirakan korelasi antara penghitung kinerja dan waktu DSP. Kemudian mengingat korelasi, driver dapat memetakan tanda waktu DSP kata kunci ke tanda waktu penghitung kinerja Windows.

Antarmuka Adaptor OEM Detektor IEvent

OEM menyediakan implementasi objek COM yang bertindak sebagai perantara antara OS dan driver, membantu menghitung atau mengurai data buram yang ditulis dan dibaca ke driver audio melalui KSPROPERTY_SOUNDDETECTOR_PATTERNS dan KSPROPERTY_SOUNDDETECTOR_MATCHRESULT.

CLSID objek COM adalah GUID jenis pola detektor yang dikembalikan oleh KSPROPERTY_SOUNDDETECTOR_SUPPORTEDPATTERNS. OS memanggil CoCreateInstance yang meneruskan GUID jenis pola untuk membuat instans objek COM yang sesuai yang kompatibel dengan jenis pola kata kunci dan memanggil metode pada antarmuka IEventDetectorOemAdapter objek.

Persyaratan Com Threading Model

Implementasi OEM dapat memilih salah satu model utas COM.

IEventDetectorOemAdapter

Desain antarmuka mencoba menjaga implementasi objek tetap stateless. Dengan kata lain, implementasi tidak boleh memerlukan status untuk disimpan di antara panggilan metode. Bahkan, kelas C++ internal kemungkinan tidak memerlukan variabel anggota apa pun di luar yang diperlukan untuk mengimplementasikan objek COM secara umum.

Metode

Terapkan metode berikut.

Peningkatan WAVERT

Antarmuka miniport didefinisikan untuk diimplementasikan oleh driver miniport WaveRT. Antarmuka ini menyediakan metode untuk menyederhanakan driver audio, meningkatkan performa dan keandalan alur audio OS, atau mendukung skenario baru. Properti antarmuka perangkat PnP didefinisikan yang memungkinkan driver untuk memberikan ekspresi statis dari batasan ukuran buffernya ke OS.

Ukuran Buffer

Driver beroperasi di bawah berbagai batasan saat memindahkan data audio antara OS, driver, dan perangkat keras. Kendala ini mungkin disebabkan oleh transportasi perangkat keras fisik yang memindahkan data antara memori dan perangkat keras, dan/atau karena modul pemrosesan sinyal dalam perangkat keras atau DSP terkait.

Solusi HW-KWS harus mendukung ukuran pengambilan audio setidaknya 100ms dan hingga 200ms.

Driver mengekspresikan batasan ukuran buffer dengan mengatur properti perangkat DEVPKEY_KsAudio_PacketSize_Constraints2 pada antarmuka perangkat PnP KSCATEGORY_AUDIO filter KS yang memiliki pin streaming KS. Properti ini harus tetap valid dan stabil saat antarmuka filter KS diaktifkan. OS dapat membaca nilai ini kapan saja tanpa harus membuka handel ke driver dan memanggil driver.

DEVPKEY_KsAudio_PacketSize_Constraints2

Nilai properti DEVPKEY_KsAudio_PacketSize_Constraints2 berisi struktur KSAUDIO_PACKETSIZE_CONSTRAINTS2 yang menjelaskan batasan perangkat keras fisik (yaitu karena mekanisme mentransfer data dari buffer WaveRT ke perangkat keras audio). Struktur ini mencakup array 0 atau lebih struktur KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT yang menjelaskan batasan khusus untuk mode pemrosesan sinyal apa pun. Driver mengatur properti ini sebelum memanggil PcRegisterSubdevice atau mengaktifkan antarmuka filter KS untuk pin streamingnya.

IMiniportWaveRTInputStream

Driver mengimplementasikan antarmuka ini untuk koordinasi aliran data audio yang lebih baik dari driver ke OS. Jika antarmuka ini tersedia pada aliran pengambilan, OS menggunakan metode pada antarmuka ini untuk mengakses data di buffer WaveRT. Untuk informasi selengkapnya lihat, IMiniportWaveRTInputStream::GetReadPacket

IMiniportWaveRTOutputStream

Miniport WaveRT secara opsional mengimplementasikan antarmuka ini untuk disarankan untuk menulis kemajuan dari OS dan untuk mengembalikan posisi streaming yang tepat. Untuk informasi selengkapnya, lihat IMiniportWaveRTOutputStream::SetWritePacket, IMiniportWaveRTOutputStream::GetOutputStreamPresentationPosition dan IMiniportWaveRTOutputStream::GetPacketCount.

Tanda waktu penghitung kinerja

Beberapa rutinitas driver mengembalikan tanda waktu penghitung kinerja Windows yang mencerminkan waktu pengambilan sampel atau disajikan oleh perangkat.

Dalam perangkat yang memiliki alur DSP yang kompleks dan pemrosesan sinyal, menghitung tanda waktu yang akurat mungkin menantang dan harus dilakukan dengan cermat. Tanda waktu tidak boleh hanya mencerminkan waktu di mana sampel ditransfer ke atau dari OS ke DSP.

  • Dalam DSP, lacak stempel waktu sampel menggunakan beberapa jam dinding DSP internal.
  • Antara driver dan DSP, hitung korelasi antara penghitung kinerja Windows dan jam dinding DSP. Prosedur untuk ini dapat berkisar dari sangat sederhana (tetapi kurang tepat) hingga cukup kompleks atau baru (tetapi lebih tepat).
  • Faktor dalam setiap penundaan konstanta karena algoritma pemrosesan sinyal atau transportasi alur atau perangkat keras, kecuali jika penundaan ini diperhitungkan.

Operasi Baca Burst

Bagian ini menjelaskan interaksi OS dan driver untuk pembacaan burst. Burst read dapat terjadi di luar skenario aktivasi suara selama driver mendukung model WaveRT streaming berbasis paket, termasuk fungsi IMiniportWaveRTInputStream::GetReadPacket.

Dua contoh skenario baca burst dibahas. Dalam satu skenario, jika miniport mendukung pin yang memiliki kategori pin KSNODETYPE_AUDIO_KEYWORDDETECTOR maka driver akan mulai menangkap dan menyangga data secara internal ketika kata kunci terdeteksi. Dalam skenario lain, driver dapat secara opsional menyangga data di luar buffer WaveRT jika OS tidak membaca data dengan cukup cepat dengan memanggil IMiniportWaveRTInputStream::GetReadPacket.

Untuk meluaskan data yang telah diambil sebelum transisi ke KSSTATE_RUN, driver harus menyimpan informasi tanda waktu sampel yang akurat bersama dengan data pengambilan yang di-buffer. Tanda waktu mengidentifikasi instan pengambilan sampel sampel yang diambil.

  1. Setelah streaming beralih ke KSSTATE_RUN, driver segera mengatur peristiwa pemberitahuan buffer karena sudah memiliki data yang tersedia.

  2. Pada kejadian ini, OS memanggil GetReadPacket() untuk mendapatkan informasi tentang data yang tersedia.

    a. Driver mengembalikan nomor paket data yang diambil yang valid (0 untuk paket pertama setelah transisi dari KSSTATE_STOP ke KSSTATE_RUN), tempat OS dapat memperoleh posisi paket dalam buffer WaveRT serta posisi paket relatif terhadap awal aliran.

    b. Driver juga mengembalikan nilai penghitung kinerja yang sesuai dengan instan pengambilan sampel pertama dalam paket. Perhatikan bahwa nilai penghitung kinerja ini mungkin relatif lama, tergantung pada berapa banyak data pengambilan yang telah di-buffer dalam perangkat keras atau driver (di luar buffer WaveRT).

    c. Jika ada lebih banyak data buffer yang belum dibaca, driver juga tersedia: i. Segera mentransfer data tersebut ke ruang buffer WaveRT yang tersedia (yaitu ruang yang tidak digunakan oleh paket yang dikembalikan dari GetReadPacket), mengembalikan true untuk MoreData, dan mengatur peristiwa pemberitahuan buffer sebelum kembali dari rutinitas ini. Atau, ii. Program perangkat keras untuk meledakkan paket berikutnya ke ruang yang tersedia dari buffer WaveRT, mengembalikan false untuk MoreData, dan kemudian mengatur peristiwa buffer ketika transfer selesai.

  3. OS membaca data dari buffer WaveRT menggunakan informasi yang dikembalikan oleh GetReadPacket().

  4. OS menunggu peristiwa pemberitahuan buffer berikutnya. Penantian mungkin segera berakhir jika driver mengatur pemberitahuan buffer di langkah (2c).

  5. Jika driver tidak segera mengatur peristiwa di langkah (2c), driver mengatur peristiwa setelah mentransfer lebih banyak data yang diambil ke dalam buffer WaveRT dan membuatnya tersedia bagi OS untuk dibaca

  6. Buka (2).

Untuk KSNODETYPE_AUDIO_KEYWORDDETECTOR pin detektor kata kunci, driver harus mengalokasikan buffering ledakan internal yang cukup untuk setidaknya 5000ms data audio. Jika OS gagal membuat aliran pada pin sebelum buffer meluap, driver dapat mengakhiri aktivitas buffering internal dan sumber daya terkait gratis.

Bangun dengan Suara

Wake-on-Voice (WoV) memungkinkan pengguna mengaktifkan dan mengkueri mesin pengenalan ucapan dari status daya rendah ke status daya penuh dengan layar aktif dengan mengatakan kata kunci tertentu, seperti "Hey Contoso."

Fitur ini memungkinkan perangkat untuk selalu mendengarkan suara pengguna saat perangkat diam dan layar mati. Hal ini disebabkan oleh mode mendengarkan yang menggunakan daya yang jauh lebih sedikit dibandingkan dengan perekaman mikrofon normal. WoV memungkinkan frasa ucapan berantai seperti "Hey Contoso, kapan janji saya berikutnya" untuk memanggil respons dari asisten suara dengan cara hands-free.

Tumpukan audio bertanggung jawab untuk mengomunikasikan data bangun (ID pembicara, pemicu kata kunci, informasi konteks pada tingkat keyakinan) serta memberi tahu klien yang tertarik bahwa kata kunci telah terdeteksi.

Validasi pada Sistem Siaga Modern

WoV dari status diam sistem dapat divalidasi pada sistem Siaga Modern menggunakan Modern Standby Wake on Voice Basic Test pada Ac-power Source dan Modern Standby Wake on Voice Basic Test pada DC-power Source di HLK. Pengujian ini memeriksa bahwa sistem memiliki spotter kata kunci perangkat keras (HW-KWS), dapat memasuki Deepest Runtime Idle Platform State (DRIPS) dan dapat bangun dari Modern Standby pada perintah suara dengan latensi resume sistem kurang dari atau sama dengan satu detik.

ACX dan MVA

Kelas Audio eXtension (ACX) mendefinisikan ekstensi kelas Windows Driver Framework (WDF) untuk domain audio. Untuk informasi selengkapnya tentang ACX, lihat Ringkasan ekstensi kelas audio ACX dan Ringkasan objek ACX. Bagian ini menjelaskan cara mengimplementasikan MVA menggunakan ACX.

ACX menggunakan infrastruktur KS yang sama untuk spotter kata kunci, menambahkan lapisan abstraksi untuk menyederhanakan implementasi driver. Dengan ACX, DLL OEM yang sama digunakan seperti yang dijelaskan di atas, dan tetap tidak berubah. ACX dan Portcls memerlukan antarmuka IEventDetectorOEMAdapter, dan tidak ada perbedaan dalam implementasi antara keduanya untuk adaptor OEM.

Fungsi AcxKeywordSpotterCreate digunakan untuk membuat objek buram spotter kata kunci ACX (ACXKEYWORDSPOTTER) yang akan dikaitkan dengan induk objek perangkat sirkuit.

Objek ACXKEYWORDSPOTTER digunakan untuk mengganti semua panggilan KSPROPERTY_SOUNDDETECTOR, menyederhanakan implementasi KWS. Ini digunakan dalam proses menambahkan elemen KWS dan pin KWS ke sirkuit ACX. Panggilan balik terkait mengurus mendapatkan pola, mempersenjatai, melucuti, dan mengatur ulang. Ini menggunakan struktur ACX_KEYWORDSPOTTER_CONFIG yang diinisialisasi yang menjelaskan konfigurasi spotter kata kunci.

Struktur ACX_KEYWORDSPOTTER_CONFIG mengambil struktur ACX_KEYWORDSPOTTER_CALLBACKS yang menentukan panggilan balik berikut.

EvtAcxKeywordSpotterRetrieveArm - Panggilan balik ACX_KEYWORDSPOTTER_RETRIEVE_ARM .

EvtAcxKeywordSpotterAssignArm - Panggilan balik ACX_KEYWORDSPOTTER_ASSIGN_ARM .

EvtAcxKeywordSpotterAssignPatterns - Panggilan balik ACX_KEYWORDSPOTTER_ASSIGN_PATTERNS .

EvtAcxKeywordSpotterAssignReset - Panggilan balik ACX_KEYWORDSPOTTER_ASSIGN_RESET .

Peristiwa PNP ACX

Peristiwa PNP ACX menggantikan KSNOTIFICATIONID_SoundDetector, menyederhanakan peristiwa pemberitahuan deteksi. Fungsi ACX_PNPEVENT_CONFIG_INIT menginisialisasi struktur ACX_PNPEVENT_CONFIG. Tidak ada input yang digunakan dengan fungsi ini.

Kode Sampel ACX KWS

Kode sampel ACX KWS menunjukkan inisialisasi panggilan balik, elemen kata kunci, dan pembuatan spotter kata kunci.

{
    NTSTATUS                        status;
    WDF_OBJECT_ATTRIBUTES           attributes;
    ACX_KEYWORDSPOTTER_CALLBACKS    keywordSpotterCallbacks;
    ACX_KEYWORDSPOTTER_CONFIG       keywordSpotterCfg;
    PCODEC_KEYWORDSPOTTER_CONTEXT   keywordSpotterCtx;
    ACX_PNPEVENT_CONFIG             keywordEventCfg;
    ACXPNPEVENT                     keywordEvent;

    PAGED_CODE();

    ACX_KEYWORDSPOTTER_CALLBACKS_INIT(&keywordSpotterCallbacks);
    keywordSpotterCallbacks.EvtAcxKeywordSpotterRetrieveArm = CodecC_EvtAcxKeywordSpotterRetrieveArm;
    keywordSpotterCallbacks.EvtAcxKeywordSpotterAssignArm = CodecC_EvtAcxKeywordSpotterAssignArm;
    keywordSpotterCallbacks.EvtAcxKeywordSpotterAssignPatterns = CodecC_EvtAcxKeywordSpotterAssignPatterns;
    keywordSpotterCallbacks.EvtAcxKeywordSpotterAssignReset = CodecC_EvtAcxKeywordSpotterAssignReset;
    
    ACX_KEYWORDSPOTTER_CONFIG_INIT(&keywordSpotterCfg);
    keywordSpotterCfg.Pattern = &CONTOSO_KEYWORDCONFIGURATION_IDENTIFIER2;
    keywordSpotterCfg.Callbacks = &keywordSpotterCallbacks;
    
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, CODEC_KEYWORDSPOTTER_CONTEXT);
    attributes.ParentObject = Circuit;

Selanjutnya fungsi AcxKeywordSpotterCreate digunakan untuk membuat objek spotter kata kunci ACX dan mengaitkannya dengan sirkuit yang ada.

    status = AcxKeywordSpotterCreate(Circuit, &attributes, &keywordSpotterCfg, Element);
    if (!NT_SUCCESS(status))
    {
        ASSERT(FALSE);
        goto exit;
    }

Kemudian konteks spotter kata kunci ditentukan dan digunakan untuk membuat KeywordDetector dalam memori NonPagedPoolNx.

    
    keywordSpotterCtx = GetCodecKeywordSpotterContext(*Element);
    ASSERT(keywordSpotterCtx);
    
    keywordSpotterCtx->KeywordDetector = (PVOID) new(NonPagedPoolNx, DRIVER_TAG) CKeywordDetector();
    if (keywordSpotterCtx->KeywordDetector == NULL)
    {
        status = STATUS_INSUFFICIENT_RESOURCES;
        ASSERT(FALSE);
        goto exit;
    }

Dalam kode sampel ini, kelas CKeywordDetector yang ditambahkan ke konteks hanya disediakan sebagai contoh implementasi yang mensimulasikan spot kata kunci dalam driver sampel. Kelas CKeywordDetector bukan bagian dari kerangka kerja ACX atau bagian yang diperlukan dari implementasi MVA pada ACX, tetapi dapat memberikan titik awal yang baik untuk pengembangan spotter kata kunci yang sebenarnya.

Terakhir, Peristiwa PnP ACX dikonfigurasi dan dibuat.

   
    ACX_PNPEVENT_CONFIG_INIT(&keywordEventCfg);
    
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, CODEC_PNPEVENT_CONTEXT);
    attributes.ParentObject = *Element;
    status = AcxPnpEventCreate(Device, *Element, &attributes, &keywordEventCfg, &keywordEvent);
    if (!NT_SUCCESS(status))
    {
        ASSERT(FALSE);
        goto exit;
    }

    keywordSpotterCtx->Event = keywordEvent;

    //
    // Done. 
    //
    status = STATUS_SUCCESS;

}

Sirkuit dengan perilaku pin yang kompleks termasuk KWS

Untuk sirkuit dengan perilaku pin kompleks seperti sirkuit dengan mesin host dan/atau KWS, driver harus menonaktifkan ACX agar tidak melakukan penanganan stream-bridge dan sebagai gantinya, membuat stream-bridge tanpa inmode. Pendekatan ini akan mencegah ACX mengaitkan aliran secara otomatis ke stream-bridge.

Lihat juga

Aktivasi Suara