ブラウザをJavaScriptで対話させる方法

ブラウザをJavaScriptで対話させる方法

1. 最も単純な例

言いたい単語やフレーズを受け取ってブラウザに読み上げさせる基本的な関数を作成しましょう。ほとんどの最新ブラウザで利用可能なネイティブの speechSyntehsis API を利用します。

関数speak(文){
    const utterance = 新しい SpeechSynthesisUtterance(sentence)
    window.speechSynthesis.speak(発話)
}

//テスト
話す('hello world');

信じられないかもしれませんが、ほとんどのブラウザに文章を読み上げさせるには、上記のコードだけが必要です。ここで何が起こっているのか見てみましょう。

単語をパラメータとして受け取るspeak()関数を作成しました。サウンド オブジェクトを作成します。これは実際には、何を言うか、どのように言うかに関するすべてのデータを含む言語要求オブジェクトです。

2. 音声の速度とピッチをカスタマイズする

もう少し複雑な例を作って、話される言葉の速度とピッチを変更してみましょう。

/**
 * @param sentence: 発音する文 * @param pitch: ピッチ、値の範囲 (0 - 2) デフォルト値: 1
 * @param rate: 発話速度、値の範囲 (0.1 - 10) デフォルト値: 1
 */
関数speak(文, ピッチ, 速度) {
    const utterance = 新しい SpeechSynthesisUtterance(sentence)

    発話率 = 率
    utterance.pitch = ピッチ

    window.speechSynthesis.speak(発話)
}

上記の例では、元の関数に基づいて、ピッチと話す速度の 2 つのパラメーターを追加しました。サウンド オブジェクトを作成した後、サウンド オブジェクトの特定のプロパティを直接変更できます。ただし、現時点ではコンストラクターまたはセッター メソッドを通じて変更することはできません。

pitch は 0 から 2 までの範囲の浮動小数点数で、デフォルト値は 1 です。この値の効果は、エンジンやサウンドによって制限される場合があります。

rate は 0.1 から 10 までの範囲の浮動小数点数で、デフォルト値は 1 です。

ここで、上記のコードを簡単な文章で呼び出すと、ブラウザは通常の発話速度とトーンで次のように話します。

話す('Hello world', 1, 1)

3. 音量の調整方法

ピッチやテンポを調整するのと同じように、音量も調整できます。その方法を簡単に見てみましょう。

/**
 * @param sentence: 発音する文 * @param volume: 音量、値の範囲 (0 - 1) デフォルト値: 0.5
 */
関数speak(文, 音量) {
    const utterance = 新しい SpeechSynthesisUtterance(sentence)

    発話.音量 = 音量

    window.speechSynthesis.speak(発話)
}

前のコードを変更して、ボリューム パラメータを渡します。音量も 0 から 1 までの浮動小数点数で、デフォルト値は 0.5 です。

同様に、現在のところ、コンストラクターまたはセッター メソッドを介してボリュームを設定する方法はありません。これで、必要な文と音量をこの関数に渡し、希望する結果を聞くことができます。

4. よく使われる機能

speechSynthesis オブジェクトには、役に立つ関数がいくつかあります。言語の学習の進行を一時停止、再開、またはキャンセルすることもできます。簡単に見てみましょう:

const utterance = new SpeechSynthesisUtterance('Hello world');
window.speechSynthesis.speak(発話);

// 一時停止 window.speechSynthesis.pause();
// 再開 window.speechSynthesis.resume();
// キャンセル window.speechSynthesis.cancel();

上記のコードは必要な文章を読み上げ、音声は一時停止、再開され、最後にキャンセルされます。上記のコードをブラウザで試すこともできます。

また、speechSynthesis オブジェクトの paused プロパティを通じてオーディオが一時停止されているかどうかを直接判断することもできます。このプロパティは、オーディオが一時停止されているかどうかを示すブール値を返します。

window.speechSynthesis.paused // ブール値

まだ読んでいない文章が残っている場合はどうすればよいでしょうか?また、pending というプロパティもあり、これは発話待ちの音声があるかどうかを確認するために使用されます。処理が保留中の音声があるかどうかを示すブール値を返します。

const utterThis = new SpeechSynthesisUtterance('Hello world');
const utterThat = new SpeechSynthesisUtterance('Hello JavaScript');

window.speechSynthesis.speak(utterThis);
window.speechSynthesis.speak(utterThat);
ウィンドウの音声合成が保留中。

上記のコードを実行すると、2 つの音声クリップがキューに入れられ、順番に再生されます。 pending プロパティを取得すると、再生を待機している 2 番目の音声があるため、この値は true を返します。

注: 音声が 1 つしかない場合は、再生する音声がキューに登録されていないため、pending プロパティは常に false を返します。

5. イベント監視

SpeechSynthesisUtteranceapi を使用すると、いくつかの便利なイベントをリッスンできます。一緒に見てみましょう:

const utterance = new SpeechSynthesisUtterance('Hello world')

utterance.addEventListener('start', () => console.log('発話の開始'))
utterance.addEventListener('pause', () => console.log('発話が一時停止されました'))
utterance.addEventListener('resume', () => console.log('発話が再開されました'))
utterance.addEventListener('end', () => console.log('発話終了'))

window.speechSynthesis.speak(発話)

6. 結論

この記事が、ブラウザで合成音声を使い始めるのに十分であることを願っています。これで、スピーチを開始、停止、一時停止する方法と、スピーチの速度、ピッチ、音量を調整する方法がわかりました。

上記は、JavaScript を使用してブラウザに音声を発声させる方法の詳細です。JavaScript の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JS を使用して Web ページ上のテキストを読み上げる方法の詳細な説明
  • jsはWeChatの音声再生実装のアイデアを模倣します
  • 音声認識にJavaScriptを使用する方法の簡単な分析
  • Node.js を使用してビープ音(システムアラーム音)を作成する方法
  • JSウェブページのサウンド再生コードはさまざまなブラウザと互換性があります
  • Javascript でマウスが通過したときにサウンドを再生する

<<:  Linuxシステムはポート3306、8080などを外部に開放します。ファイアウォール設定の詳しい説明

>>:  Mysql通信プロトコルの詳細な説明

推薦する

SQLはLeetCodeを実装します(180.連続した数字)

[LeetCode] 180. 連続した数字少なくとも 3 回連続して出現するすべての数字を検索す...

MySql エラー 1698 (28000) の解決策

1. 問題の説明: MysqlERROR1698 (28000) の解決方法、新しくインストールされ...

Centos7のホスト名を変更する3つの方法

方法 1: hostnamectl の変更ステップ1 ホスト名を確認するホスト名ステップ2 ホスト名...

入力が正しいにもかかわらず、MySQL 8.0 でアクセスが拒否される問題を解決する

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

ReactにおけるRefの相互利用の詳細な説明

目次1. まずRefとは何かを説明しましょう2. フックでのrefの使用1. HTMLDomフックで...

Nginx 運用保守ドメイン名検証方法例

インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...

MySQL 検査スクリプト (必読)

以下のように表示されます。 #!/usr/bin/env python3.5 psutilをインポー...

フックを使用して React コンポーネントを書くときに注意すべき 5 つの点

目次01. レンダリングが不要な場合はuseStateを使用する02. リンクの代わりにrouter...

ブリージングカルーセルを実装するネイティブJS

今日は、ネイティブ JS で実装されたブリージング カルーセルを紹介します。効果は次のとおりです。 ...

DockerでPrometheusをインストールする詳細なチュートリアル

目次1. Node Exporterをインストールする2. cAdvisorをインストールする3. ...

MySQL での正規表現の使用に関する詳細

目次1. はじめに2. 製品テーブルを準備する2.1 ステートメントの順序2.2 大文字と小文字の区...

Vue+SpringBoot で Alipay サンドボックス決済を実装するためのサンプルコード

まず、Alipay サンドボックスから一連のものをダウンロードします。多くのブログで取り上げられてお...

Vue印刷機能を実装する2つの方法の概要

方法1: npm経由でプラグインをインストールする1. npm install vue-print-...