質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

1625閲覧

スマホにはデフォルトで音声読み上げエンジンが入っていないの?

teraha

総合スコア59

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

3クリップ

投稿2021/04/11 00:56

編集2021/04/11 01:18

Javascript

1const utter = new SpeechSynthesisUtterance(); 2utter.text = 'hello world'; 3window.speechSynthesis.speak(utter);

上記のようなコードで音声読み上げ機能を使おうとしたところ、
PCのChromeブラウザでは「ハローワールド」という音声が流れるが
AndroidスマホのChromeブラウザでは音声が流れませんでした。

Javascript

1alert(window.speechSynthesis.getVoices());

getVoices()の結果、PCだと配列で複数個の[object SpeechSynthesisVoice]というのが表示されます。
スマホではgetVoices()で何も返ってきません。

スマホで読み上げ音声が流れないのは、読み上げエンジンがそもそも入っていないのが原因でした。

GooglePlayストアで「Googleテキスト読み上げ」というアプリをインストールしたところ、
window.speechSynthesis.speak()を使って、スマホでも音声が再生できるようになりました。

ここで疑問なのですが、AndroidやiPhoneでは、初期状態で「音声読み上げエンジン」は入っていないのでしょうか?
(自分のandroidの場合、もともと入っていないのか、プリインストールされていたものを自分が削除したのか定かではない)

Androidの
設定 > 言語と入力 > テキスト読み上げの出力
を見るとエンジンが選べるようになっています。

Androidのスペック的にはAndroidバージョン11.0以降ならば「テキスト読み上げ対応」のようです。
しかし、「テキスト読み上げ対応」だったとしても「読み上げエンジン」を別途インストールが必要となると、
Javascriptでwindow.speechSynthesis.speak()の機能は使いにくいなと感じます。

・最新機種のAndroid、iOSでも、「読み上げエンジン」は別途インストールが必要になっているのでしょうか?
もしも、最新機種では読み上げエンジンがデフォルトでインストールされている場合は
・いつ頃から「読み上げエンジン」がプリインストールされるようになったのか?
・プリインストールされているかは、OSのバージョンではなく、スマホのメーカーによる違いだったりするのか?
などご存知の方がいれば教えてください。

もしくは、window.speechSynthesis.speak()以外に
Javascriptで音声読み上げを行う良い方法があれば教えてください。

DBにセリフのテキストが大量に登録してあり、ブラウザでクリックした拍子に音声を流す
というような機能を想定しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teraha

2021/04/11 05:29

kyoya0819様から 「ユーザーの操作なしに音声の再生が行えない仕様」との情報を頂きました。 自分の環境ではボタンクリック時に読み上げ音声が流れる状態にしているので、この点はクリアしています。
jbpb0

2021/04/11 09:27

Pixel 4aを借りて、Chromeで下記Webページの「シンプルなデモ」を試したら、音声が再生されました https://www.codegrid.net/articles/2016-web-speech-api-1/ 設定を調べたら「Googleテキスト読み上げエンジン」が入ってましたけど、Pixelの持ち主に聞いたら、自分で入れた心当たりは無い、とのことでした
teraha

2021/04/11 09:58

情報ありがとうございます。 Pixel 4aは2020年8月発売のAndroid端末。 比較的最近の機種だと、読み上げエンジンがプリインストールされていて、SpeechSynthesisも動作すると想定してよさそうですね。
guest

回答1

0

結論

ブラウザ, OSの仕様なのでは?

検証

以下の2端末で検証を行いました。

  • macOS(11.2.3) & Chrome(89.0.4389.114)
  • iPadOS(14.3) & Safari

結論

ご提示のコードでは、macOS & Chromeだと動作しましたが、iPadOS & Safariでは動作しませんでした。
おそらく、質問者さんの挙動と同じ状況です。

考察

iOS, iPadOS, Androidには、ユーザーの操作なしに音声の再生が行えない仕様がある。
それが原因では?

考察を元にした実験

html

1<!--略--> 2<button id="read">READ</button> 3<script> 4 document.getElementById('read').onclick = () => { 5 let utter = new SpeechSynthesisUtterance(); 6 utter.text = 'hello world'; 7 window.speechSynthesis.speak(utter); 8 }; 9</script>

考察を元にした実験の結果

両方再生された。

推測

JavaScriptから操作することに制限がかかっているのであって、OS固有の機能では操作なしに利用できるのでは?と言う推測も最後に置いておきます。

投稿2021/04/11 02:48

編集2021/04/11 02:50
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teraha

2021/04/11 05:22

検証ありがとうございます。 >ユーザーの操作なしに音声の再生が行えない仕様 質問文では省略してしまいましたが、自分の環境でもクリック時に読み上げ音声が流れるようにしています。 >OS固有の機能では操作なしに利用できるのでは? 自分のAndroid端末の場合、OS固有の機能でも読み上げができない状態でした。 OSおよびブラウザのバージョン的には読み上げに対応しているはずなのにです。 ボイスデータがないことが原因なのも分かっています。 テキストでいうと「テキストエディタ」があっても「フォントデータが1つもないので文字が表示できない」みたいな状態です。 OSにテキストエディタがプリインストールされていたら、フォントデータも普通は同梱されているじゃないですか? OSが読み上げ機能に対応しているのに、読み上げエンジン(ボイスデータ)が1つも入っていないなんてありえるのかと疑問に思う次第です。 iPadOS(14.3) & Safari ではクリック時に読み上げ音声が再生されるとのことなので、 少なくともiPadOS(14.3)では読み上げエンジン(ボイスデータ)がプリインストールされていると考えてよさそうですね。
kyoya0819

2021/04/11 11:37

残念ながら当方はAndroid環境が一切ないので検証等できず申し訳ございません。 例えば、OS固有の方法等は「存在する」のでしょうか?また、それは「初期で利用可能」なのでしょうか? この二点をもしも調査可能でしたら調査してみると、原因推定が進むと思います。 もしくは以下のようなAndroid公式フォーラムに投げてみるのも良いかもしれません。 お力になれず申し訳ございません。 https://issuetracker.google.com/issues
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問