語音互動

整合語音辨識和文字轉換語音 (也稱為 TTS,或語音合成) 直接整合到應用程式的使用者體驗。

語音辨識將使用者所說的單字轉換為文本,以用於表單輸入、文字聽寫、指定操作或命令以及完成任務。 支持針對自由文字聽寫和網頁搜尋預先定義的文法,以及使用語音識別文法規格 (SRGS) 1.0 版撰寫的自訂文法。

TTS TTS 使用語音合成引擎 (語音) 將文字字串轉換成口語文字。 輸入字串可以是基本、未經處理的文字或更複雜的語音合成標記語言 (SSML)。 SSML 提供標準方法來控制語音輸出的特性,例如發音、音量、音調、速率或速度,以及強調。

其他與語音相關的元件:Windows 應用程式中的 Cortana 使用自訂語音命令 (口頭或輸入) 將應用程式啟動到前台 (應用程式獲得焦點,就像從「開始」功能表啟動一樣) 或作為後台服務啟動 (Cortana 保留焦點,但提供應用程式的結果)。 如果您要在 Cortana UI 中公開應用程式功能,請參閱 Cortana 語音命令 (VCD) 指南

語音互動設計

精心設計和實施,語音可以成為使用者與您應用程式互動的可靠又有趣方式,可補充或甚至取代鍵盤、滑鼠、觸控和手勢。

這些指南和建議說明如何將語音辨識和 TTS 整合到您應用程式的互動體驗中。

如果您正在考慮在應用程式中支援語音互動:

  • 可以透過語音採取哪些動作? 使用者能否在頁面之間瀏覽、呼叫命令或以文字欄位、簡短註釋或長訊息輸入資料?
  • 語音輸入是否適合用來完成工作?
  • 使用者如何知道語音輸入何時可用?
  • 應用程式是否始終在監聽,或者使用者是否需要執行操作才能讓應用程式進入監聽模式?
  • 哪些片語引發動作或行為? 是否需要在螢幕上列舉片語和動作?
  • 是否需要提示、確認和釐清螢幕或 TTS?
  • 應用程式和使用者之間的互動對話為何?
  • 您的應用程式的內容是否需要自訂或受限詞彙 (例如醫學、科學或語言環境)?
  • 是否需要網路連線?

文字輸入

文字輸入的語音範圍可以從短格式 (單一單字或片語) 到長形式 (連續聽寫)。 簡短的表單輸入長度必須小於 10 秒,而長表單輸入會話的長度最多可達 2 分鐘。 (只要使用者介入即可重新啟動長窗體輸入,以給人留下連續聽寫的印象。)

您應該提供視覺提示來指示語音辨識受支援且可供使用者使用,以及使用者是否需要開啟它。 例如,帶有麥克風字形的命令列按鈕 (請參閱命令列) 可用於顯示可用性和狀態。

提供持續辨識回饋,以將執行辨識時任何明顯的回應不足降到最低。

讓使用者使用鍵盤輸入、釐清提示、建議或其他語音辨識來修改辨識文字。

如果從語音辨識以外的裝置偵測到輸入,例如觸控或鍵盤,請停止辨識。 這可能表示使用者已移至另一個工作,例如更正辨識文字或與其他表單域互動。

指定沒有語音輸入指出辨識結束的時間長度。 在此時間段之後不要自動重新啟動識別,因為這通常表示使用者已停止與您的應用程式互動。

如果網路連線不可用,則停用所有連續識別 UI 並終止識別工作階段。 連續辨識需要網路連線。

命令

語音輸入可以起始動作、叫用命令,以及完成工作。

如果空間允許,請考慮顯示目前應用程式內容支持的回應,以及有效輸入的範例。 這可減少應用程式必須處理的潛在回應,並消除使用者的混淆。

嘗試提出您的問題,以便引起盡可能具體的答案。 例如,「您今天想要做什麼?」是非常開放式的,而且會因為回應可能有何差異而需要非常大的文法定義。 或者,「您要玩遊戲或聽音樂嗎?」會將回應限制為具有相對小型文法定義的兩個有效答案之一。 小型文法更容易撰寫,併產生更精確的辨識結果。

當語音辨識信賴度很低時,要求使用者進行確認。 如果使用者的意圖不清楚,最好是獲得澄清,而不是發起無意的操作。

您應該提供視覺提示來指示語音辨識受支援且可供使用者使用,以及使用者是否需要開啟它。 例如,帶有麥克風字形的命令列按鈕 (請參閱命令列指南) 可用於顯示可用性和狀態。

如果語音辨識開關通常不在檢視中,請考慮在應用程式的內容區域中顯示狀態指示器。

如果識別是由使用者發起的,請考慮使用內建識別體驗以保持一致性。 內建體驗包括可自訂的螢幕,其中包含提示、範例、消歧、確認和錯誤。

螢幕根據指定的約束而變化:

  • 預先定義的文法 (聽寫或網路搜尋)

    • 聽力螢幕。
    • 思考畫面。
    • 聽到您說出畫面或錯誤畫面。
  • 單字或片語清單,或 SRGS 文法文件

    • 聽力螢幕。
    • 如果使用者所說的話可以解釋為多個潛在結果,則您說的是畫面。
    • 聽到您說出畫面或錯誤畫面。

接聽畫面上,您可以:

  • 自訂標題文字。
  • 提供使用者可以說的話的範例文字。
  • 指定是否顯示聽到您說出畫面。
  • 聽到您說出畫面上,將辨識的字串讀回使用者。

以下是使用 SRGS 定義的約束的語音辨識器的內建辨識流程的範例。 在此範例中,語音辨識成功。

initial recognition screen for a constraint based on a sgrs grammar file

intermediate recognition screen for a constraint based on a sgrs grammar file

final recognition screen for a constraint based on a sgrs grammar file

一律接聽

您的應用程式啟動後即可偵聽和識別語音輸入,無需使用者干預。

您應該根據應用程式內容自訂文法約束。 這使得語音識別體驗非常有針對性並且與目前任務相關,並最大限度地減少錯誤。

「我可以說什麼?」

啟用語音輸入後,幫助使用者發現可以理解的內容以及可以執行的操作非常重要。

如果使用者啟用了語音識別,請考慮使用命令列或功能表命令來顯示目前內容中支援的所有單字和片語。

如果語音辨識一律開啟,請考慮將「我可以說什麼?」片語新增至每一頁。 當使用者說出此片語時,顯示目前內容中支援的所有單字和片語。 使用此片語可讓使用者以一致的方式探索整個系統的語音功能。

辨識失敗

語音辨識將會失敗。 當音訊品質不佳、只辨識片語部分,或完全沒有偵測到任何輸入時,就會發生失敗。

妥善處理失敗,幫助使用者了解識別失敗的原因並進行復原。

您的應用程式應該通知使用者他們不被理解並且需要重試。

考慮提供一個或多個受支援片語的範例。 使用者可能會重複建議的片語,這會增加識別的成功率。

您應該顯示潛在配對清單,供使用者選擇。 這比再次進行識別過程要高效得多。

您應該一律支援替代輸入類型,這對於處理重複的識別失敗特別有幫助。 例如,您可以建議使用者嘗試使用鍵盤,或使用觸控或滑鼠從潛在配對項清單中進行選擇。

使用內建語音辨識體驗,因為它包括通知使用者識別未成功,並讓使用者再次嘗試識別的螢幕。

接聽並嘗試更正音訊輸入中的問題。 語音辨識器可以偵測對語音辨識精確度造成負面影響的音訊質量問題。 您可以使用語音辨識器提供的資訊來通知使用者問題,並盡可能讓他們採取更正動作。 例如,如果麥克風上的音量設定太低,您可以提示使用者大聲說話,或將音量調高。

條件約束

約束或文法定義了語音辨識器可以配對的口語單字和片語。 您可以指定預先定義的 Web 服務文法之一,也可以建立隨應用程式一起安裝的自訂文法。

預先定義的文法

預先定義的聽寫和網路搜尋文法為您的應用程式提供語音識別,無需您編寫文法。 使用這些文法時,語音辨識會由遠端 Web 服務執行,並將結果傳回至裝置

  • 預設的自由文字聽寫文法可以識別使用者可以用特定語言說出的大多數單字和片語,並且經過最佳化以識別片語。 當您不想限制使用者可以說的內容時,自由文字聽寫非常有用。 一般用途包括建立筆記或聽寫訊息的內容。
  • 網頁搜尋文法,例如聽寫文法,包含使用者可能會說的大量文字和片語。 但是,這已經過最佳化,可以識別人們在搜尋網路時通常使用的術語。

注意

由於預先定義的聽寫和網路搜尋文法可能很大,而且是透過線上 (不在裝置上),因此效能可能不如裝置上安裝的自訂文法快。

這些預先定義的文法可用於識別長達 10 秒的語音輸入,並且不需要您進行任何創作。 但是,它們確實需要連接到網路。

自訂文法

自訂文法由您設計和創作,並隨您的應用程式一起安裝。 使用自訂約束的語音識別是在裝置上執行的。

  • 程式設計清單約束提供了一種使用單字或片語清單建立簡單文法的輕量級方法。 清單約束非常適合識別簡短且不同的片語。 明確指定文法中的所有單字還可以提高辨識準確性,因為語音辨識引擎只需處理語音即可確認配對。 該清單也可以透過程式設計更新。

  • SRGS 文法是靜態文件,與程式清單約束不同,它使用 SRGS 版本 1.0 定義的 XML 格式。 SRGS 文法可讓您在一次識別中捕獲多個語義,從而提供對語音辨識體驗的最大控制。

    以下是撰寫 SRGS 文法的一些秘訣:

    • 保持每個文法較小。 包含較少片語的文法往往比包含許多片語的較大文法提供更準確的識別。 針對特定場景使用多個較小的文法,比為整個應用程式使用單一文法更好。
    • 讓使用者知道每個應用程式內容要說什麼,並視需要啟用和停用文法。
    • 設計每種文法,以便使用者可以透過多種方式說出命令。 例如,您可以使用 GARBAGE 規則來比對文法未定義的語音輸入。 這可讓使用者說出對您的應用程式沒有意義的其他字詞。 例如,「給我」、「和」、「呃」、「也許」等等。
    • 使用 sapi:subset 元素來幫助匹配語音輸入。 這是 Microsoft 對 SRGS 規範的擴展,可協助匹配部分短語。
    • 請嘗試避免在您的文法中定義只包含一個音節的片語。 對於包含兩個或多個音節的詞組,辨識往往更準確。
    • 避免使用聽起來類似的片語。 例如,諸如「hello」、「bellow」和「fellow」之類的片語可能會混淆識別引擎並導致識別精度較差。

注意

您使用哪種類型的約束類型取決於您想要建立的識別體驗的複雜性。 任何都可能是特定識別任務的最佳選擇,並且您可能會在應用程式中找到所有類型的約束的用途。

自訂發音

如果您的應用程式包含具有不常見或虛構單字的專業詞彙,或具有不常見發音的單字,您可以透過定義自訂發音來提高這些單字的辨識效能。

對於一小部分單字和短語或不常用的單字和短語清單,您可以在 SRGS 語法中建立自訂發音。 如需詳細資訊,請參閱權杖元素

對於較大的單字和短語清單或常用單字和短語,您可以建立單獨的發音字典文件。 有關詳細資訊,請參閱關於字典和音標

測試

與應用程式的目標受眾一起測試語音識別準確性和任何支援 UI。 這是確定應用程式中語音互動體驗有效性的最佳方法。 例如,使用者是否會因為您的應用程式未偵聽常用短語,而獲得較差的識別結果?

修改語法以支援該短語或向使用者提供支援的短語清單。 如果您已經提供支援的片語清單,請確定它很容易探索。

文字轉換語音 (TTS)

TTS 會從純文本或 SSML 產生語音輸出。

嘗試設計有禮貌和鼓勵性的提示。

考慮是否應該閱讀長字串。 聽簡訊是一回事,但聽一長串難以記住的搜尋結果則完全是另一回事。

您應該提供媒體控制來讓使用者暫停或停止 TTS。

您應該聆聽所有 TTS 字串,以確保它們清晰易懂且聽起來自然。

  • 將不尋常的單字序列串在一起或說出零件編號或標點符號,可能會導致短語變得難以理解。
  • 當韻律或節奏與母語人士說短語的方式不同時,語音聽起來可能不自然。

這兩個問題都可以透過使用 SSML 而不是純文字作為語音合成器的輸入來解決。 有關 SSML 的詳細資訊,請參閱使用 SSML 控制合成語音語音合成標記語言參考

主題 說明
語音辨識 使用語音辨識來提供輸入、指定動作或命令,以及完成工作。
指定語音辨識器語言 了解如何選擇用於語音辨識的已安裝語言。
訂定自訂識別約束 了解如何定義和使用語音辨識的自訂條件約束。
啟用連續聽寫 了解如何擷取和辨識長格式、連續聽寫語音輸入。
管理音訊輸入的問題 了解如何管理音訊輸入品質所引起的語音辨識準確性問題。
設置語音辨識超時 設定語音辨識器忽略靜音或無法辨識的聲音 (含糊不清) 並繼續偵聽語音輸入的時間長度。

 範例