diff --git a/files/ja/web/api/web_speech_api/using_the_web_speech_api/index.md b/files/ja/web/api/web_speech_api/using_the_web_speech_api/index.md index 5a206f5e361515..298f1bfa80a7fc 100644 --- a/files/ja/web/api/web_speech_api/using_the_web_speech_api/index.md +++ b/files/ja/web/api/web_speech_api/using_the_web_speech_api/index.md @@ -2,63 +2,66 @@ title: ウェブ音声 API の使用 slug: Web/API/Web_Speech_API/Using_the_Web_Speech_API l10n: - sourceCommit: d169fd2b21950bc0c0976ebbee74054692e33162 + sourceCommit: 26fb7eaa7b398a35c2463fa15ab6ccfa46a9e06d --- {{DefaultAPISidebar("Web Speech API")}} -ウェブ音声 API は、音声認識と音声合成(text to speech または tts としても知られています)という 2 つの異なる分野の機能を提供しており、アクセシビリティと制御メカニズムに興味深い新しい可能性をもたらします。この記事では、両方の分野の簡単な紹介とデモを提供します。 + +ウェブ音声 API は、音声認識と音声合成(text to speech または TTS としても知られています)という 2 つの異なる分野の機能を提供しており、アクセシビリティと制御に興味深い新しい可能性をもたらします。この記事では、両方の分野の紹介とデモを提供します。 ## 音声認識 -音声認識では、端末のマイクを通して音声を受信し、音声認識サービスによって文法のリスト(基本的には特定のアプリで認識させたい語彙)と照合されます。単語や句が正常に認識されると、結果(または結果のリスト)がテキスト文字列として返され、その結果としてさらなるアクションを開始することができます。 +音声認識では、端末のマイク(または音声トラック)から音声を受け取り、それを音声認識サービスで調べます。サービスが単語やフレーズを正しく認識すると、さらなる操作を起動するために使用できるテキスト文字列(または文字列のリスト)が返されます。 -ウェブ音声 API には、このための中心的な制御インターフェイスである {{domxref("SpeechRecognition")}} と、文法や結果などを表現するためのいくつかの密接に関連したインターフェイスがあります。一般的に、音声認識には端末上で利用可能な既定の音声認識システムが使用されます。最近のほとんどの OS には音声コマンドを発行するための音声認識システムが搭載されています。macOS の Dictation、iOS の Siri、Windows 10 の Cortana、Android の Speech などを想像してください。 +ウェブ音声 API には、このための中心的な制御インターフェイスである {{domxref("SpeechRecognition")}} と、文法や結果などを表現するためのいくつかの密接に関連したインターフェイスがあります。 -> [!NOTE] -> Chrome などの一部のブラウザーでは、ウェブページで音声認識を使用するためにサーバーベースの認識エンジンが必要です。音声が認識処理のためにウェブサービスに送信されるため、オフラインでは機能しません。 +通常、音声認識には、ユーザーの端末に搭載されている音声認識システムが使用されます。現行のオペレーティングシステムのほとんどには、macOS の **Dictation** や Windows の **Copilot** など、音声コマンドを実行するための音声認識システムが備わっています。 -### デモ +一部のブラウザーでは、ウェブページで音声認識を使用するためにサーバーベースの認識エンジンが必要です。音声が認識処理のためにウェブサービスに送信されるため、オフラインでは機能しません。 -ウェブ音声認識の簡単な使い方を示すために、 [Speech color changer](https://github.com/mdn/dom-examples/tree/main/web-speech-api/speech-color-changer) というデモを書いてみました。画面をタップ/クリックし、HTML の色のキーワードを言うと、アプリの背景色がその色に変わります。 +プライバシーとパフォーマンスを改善するため、音声認識を端末上で実行するように指定します。これにより、音声データも文字起こしされた会話も、処理のためにサードパーティのサービスに送信されることはなくなります。端末上での機能については、[端末上での音声認識](#on-device_speech_recognition)の節で詳しく取り上げます。 -![Speech Color changer というタイトルのアプリの UI。画面を内側へタップして色を言うと、アプリの背景をその色に変えてくれるというアプリです。この例では、背景を赤に変えています。](speech-color-changer.png) +### デモ -デモを実行するには、 Chrome 等の対応しているモバイルブラウザーで[ライブデモの URL](https://mdn.github.io/dom-examples/web-speech-api/speech-color-changer/) に移動してください。 +ウェブ音声認識の簡単な使い方を示すために、 [Speech color changer](https://mdn.github.io/dom-examples/web-speech-api/speech-color-changer) というデモを書いてみました。画面をタップ/クリックし、HTML の色のキーワードを言うと、アプリの背景色がその色に変わります。 -### ブラウザーの対応状況 +![Speech Color changer というタイトルのアプリの UI。画面を内側へタップして色を言うと、アプリの背景をその色に変えてくれるというアプリです。この例では、背景を赤に変えています。](speech-color-changer.png) -ウェブ音声 API の音声認識のサポートは、通常 Chrome for Desktop と Android に限られています — Chrome はバージョン 33 付近からサポートしていますが、接頭辞付きのインターフェイスを使用しているため、 `webkitSpeechRecognition` などの接頭辞付きバージョンを含める必要があります。 +デモを実行するには、[ライブデモの URL](https://mdn.github.io/dom-examples/web-speech-api/speech-color-changer/) に[対応しているブラウザー](/ja/docs/Web/API/SpeechRecognition#ブラウザーの互換性)でアクセスしてください。 ### HTML と CSS -アプリの HTML と CSS は本当に簡単です。タイトル、説明段落、診断メッセージを出力する div があるだけです。 +このアプリの HTML と CSS は基本的なものです。タイトル、説明文の段落 ({{htmlelement("p")}})、制御ボタン ({{htmlelement("button")}})、そしてアプリが認識した単語を含む診断メッセージを表示させる出力用段落があります。 ```html

Speech color changer

-

Tap/click then say a color to change the background color of the app.

-
-

…diagnostic messages

-
+ +

+ + + +

...diagnostic messages

``` -この CSS では、他の端末でも問題なく見えるように、非常にシンプルなレスポンシブのスタイル付けをしています。 +この CSS では、他の端末でも問題なく見えるように、基本的なレスポンシブのスタイル付けをしています。 ### JavaScript JavaScript をもう少し詳しく見てみましょう。 -#### Chrome 対応 +#### 接頭辞付きプロパティ -前述したように、Chrome は現在接頭辞付きのプロパティで音声認識に対応しているので、適切なオブジェクトを Chrome に供給し、そして将来的な実装で接頭辞なしの機能をサポートする可能性も踏まえ、以下の行をコードの最初に追加しています。 +現在、一部のブラウザーでは、接頭辞つきプロパティで音声認識に対応しています。 +そのため、コードの冒頭で、接頭辞をつけたプロパティと、接頭辞のないバージョンの両方を扱うことができるように、以下の行を記述します。 ```js -const SpeechRecognition = window.SpeechRecognition || webkitSpeechRecognition; -const SpeechGrammarList = window.SpeechGrammarList || webkitSpeechGrammarList; +const SpeechRecognition = + window.SpeechRecognition || window.webkitSpeechRecognition; const SpeechRecognitionEvent = - window.SpeechRecognitionEvent || webkitSpeechRecognitionEvent; + window.SpeechRecognitionEvent || window.webkitSpeechRecognitionEvent; ``` -#### 文法 +#### 色リスト コードの次の部分では、アプリが認識する文法を定義します。次の変数は文法を保持するために定義されています。 @@ -72,44 +75,27 @@ const colors = [ "blue", "brown", "chocolate", - "coral" /* … */, + "coral", + // … ]; -const grammar = `#JSGF V1.0; grammar colors; public = ${colors.join( - " | ", -)};`; ``` -使用されている文法形式は [JSpeech Grammar Format](https://www.w3.org/TR/jsgf/) (**JSGF**) です — それについての詳細はリンク先の仕様書を参照してください。しかし、今のところは手っ取り早く実行してみましょう。 - -- 行の区切りは JavaScript と同じようにセミコロンで区切られています。 -- 最初の行 — `#JSGF V1.0;` — は、使用されているフォーマットとバージョンを示します。これは常に最初に含める必要があります。 -- 2 行目は認識したい用語の種類を示します。`public` はパブリックルールであることを宣言し、角括弧内の文字列はこの用語の認識名 (`color`) を定義し、等号の後に続く項目のリストは、用語の適切な値として認識され受け入れられる代替値です。それぞれがパイプ文字で区切られていることに注意してください。 -- 上記の構造に従ってそれぞれの行に好きなだけ多くの用語を定義することができ、かなり複雑な文法定義を記載することができます。この基本的なデモでは、単純にしています。 +#### 音声認識インスタンスの作成 -#### 文法を音声認識にプラグインする - -次にやるべきことは、アプリケーションの認識を制御する音声認識インスタンスを定義することです。これは {{domxref("SpeechRecognition.SpeechRecognition()","SpeechRecognition()")}} コンストラクターを使用して行います。また、{{domxref("SpeechGrammarList.SpeechGrammarList()","SpeechGrammarList()")}} コンストラクターを使用して、文法を含む新しい音声文法リストも作成します。 +次にやるべきことは、アプリケーションの認識を制御する音声認識インスタンスを定義することです。これは {{domxref("SpeechRecognition.SpeechRecognition()","SpeechRecognition()")}} コンストラクターを使用して行います。 ```js const recognition = new SpeechRecognition(); -const speechRecognitionList = new SpeechGrammarList(); ``` -{{domxref("SpeechGrammarList.addFromString()")}} メソッドを使ってリストに `grammar` を追加します。 このメソッドは追加したい文字列を引数として受けとり、さらにオプションで、リスト内で利用可能な他の文法との関係においてこの文法の重要度を指定する重み値を受け取ります(0 から 1 までの範囲で指定できます)。追加された文法は{{domxref("SpeechGrammar")}} オブジェクトのインスタンスとしてリスト内で利用できます。 - -```js -speechRecognitionList.addFromString(grammar, 1); -``` - -次に、 {{domxref("SpeechGrammarList")}} を {{domxref("SpeechRecognition.grammars")}} プロパティの値として設定して、音声認識インスタンスに追加しています。他にも、認識インスタンスのプロパティをいくつか設定してから、次に移ります。 +次に、認識インスタンスのいくつかのプロパティを設定します。 - {{domxref("SpeechRecognition.continuous")}}: 認識が開始されるたびに連続した結果をキャプチャする (`true`) か、または単一の結果だけをキャプチャする (`false`) かを制御します。 -- {{domxref("SpeechRecognition.lang")}}: 認識の言語を設定します。これを設定することは良い習慣であるため、推奨されます。 -- {{domxref("SpeechRecognition.interimResults")}}: 音声認識システムが中間的な結果を返すか、最終的な結果だけを返すか定義します。このシンプルなデモでは最終的な結果で十分です。 -- {{domxref("SpeechRecognition.maxAlternatives")}}: 結果ごとに返される代替候補数を設定します。これは、結果が完全に明確ではなく、ユーザーが正しいものを選択できるように代替候補のリストを表示したい場合などに便利な場合があります。しかし、このシンプルなデモでは必要ないのでここでは 1 つだけ指定します(これは実際にはデフォルトです)。 +- {{domxref("SpeechRecognition.lang")}}: 認識の言語を設定します。このことを明示的に設定することが、推奨される最善の手法です。 +- {{domxref("SpeechRecognition.interimResults")}}: 音声認識システムが中間的な結果を返すか、最終的な結果だけを返すか定義します。このデモでは、最終的な結果で十分です。 +- {{domxref("SpeechRecognition.maxAlternatives")}}: 結果ごとに返される代替候補数を設定します。これは、たとえば結果が完全には明確ではなく、ユーザーが選択できる候補の一覧を表示したい場合などに役立つことがあります。しかし、このデモでは必要ないため、ここでは 1 つだけ指定します(これはデフォルトの設定です)。 ```js -recognition.grammars = speechRecognitionList; recognition.continuous = false; recognition.lang = "en-US"; recognition.interimResults = false; @@ -118,21 +104,20 @@ recognition.maxAlternatives = 1; #### 音声認識の開始 -出力先の {{htmlelement("div")}} と HTML 要素への参照を取得(診断メッセージを出力したり、後でアプリの背景色を更新したりできるようにするため)した後、画面がタップ/クリックされたときに音声認識サービスが開始されるように onclick ハンドラーを実装します。これは {{domxref("SpeechRecognition.start()")}} を呼び出すことで実現しています。 `forEach()` メソッドは何色を言っているかを示す色付きインジケーターを出力するために使われています。 +出力段落、`` 要素、説明文、および `