HTML/JavaScriptで音声読み上げを173種類試してみた


JavaScript Advent Calendar 2023　11日目の投稿です。

https://qiita.com/advent-calendar/2023/javascript


## 動機

独自で収集した英熟語リストをちゃんとした英語の発音で読んでほしいときがあったので調べてみました。これで単語帳をWebに公開とかサービス使えそうでした。

## 結果

スピーチのテストは、このページで試せると思います。

https://ykhirao.github.io/qiita/adv2023/

中身は CDN版 Vue.js で書いてます。ソースコードはこちらのGitHubです。

https://github.com/ykhirao/qiita/tree/master/adv2023


英語圏内だとAaron, Nicky, Samantha, Google US Englishが問題なく使えそうでした。

bubblesが溺れそうな声でなんか変な気持ちになりました。

* 表の見方　defaultがtrueのものが基本使われる
* localServiceがfalseのgoogle系の読み上げはネットワーク環境ないと使えない
* ダウンロードはできません

以下はMacOSで確認した結果なのですが、スマホやWindowsなどでみるときに値が変わるはずなので

https://ykhirao.github.io/qiita/adv2023/

Qiitaには動画をアップロードできないのでTwitterリンクを貼っておきます。

イヤホンだと音量注意です。

https://twitter.com/ykhirao/status/1733779701691478188


|name|lang|default|localService|
|--|--|--|--|
|Kyoko (日本語（日本）)|ja-JP|TRUE|TRUE|
|Aaron|en-US|FALSE|TRUE|
|Albert|en-US|FALSE|TRUE|
|Alice|it-IT|FALSE|TRUE|
|Alva|sv-SE|FALSE|TRUE|
|Amélie|fr-CA|FALSE|TRUE|
|Amira|ms-MY|FALSE|TRUE|
|Anna|de-DE|FALSE|TRUE|
|Arthur|en-GB|FALSE|TRUE|
|Bad News|en-US|FALSE|TRUE|
|Bahh|en-US|FALSE|TRUE|
|Boing|en-US|FALSE|TRUE|
|Bubbles|en-US|FALSE|TRUE|
|Carmit|he-IL|FALSE|TRUE|
|Catherine|en-AU|FALSE|TRUE|
|Cellos|en-US|FALSE|TRUE|
|Damayanti|id-ID|FALSE|TRUE|
|Daniel (英語（イギリス）)|en-GB|FALSE|TRUE|
|Daniel (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Daria|bg-BG|FALSE|TRUE|
|Eddy (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Eddy (英語（イギリス）)|en-GB|FALSE|TRUE|
|Eddy (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Eddy (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Eddy (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Eddy (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Eddy (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Eddy (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Eddy (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Eddy (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Ellen|nl-BE|FALSE|TRUE|
|Flo (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Flo (英語（イギリス）)|en-GB|FALSE|TRUE|
|Flo (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Flo (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Flo (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Flo (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Flo (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Flo (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Flo (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Flo (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Fred|en-US|FALSE|TRUE|
|Good News|en-US|FALSE|TRUE|
|Gordon|en-AU|FALSE|TRUE|
|Grandma (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Grandma (英語（イギリス）)|en-GB|FALSE|TRUE|
|Grandma (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Grandma (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Grandma (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Grandma (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Grandma (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Grandma (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Grandma (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Grandma (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Grandpa (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Grandpa (英語（イギリス）)|en-GB|FALSE|TRUE|
|Grandpa (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Grandpa (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Grandpa (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Grandpa (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Grandpa (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Grandpa (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Grandpa (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Grandpa (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Hattori|ja-JP|FALSE|TRUE|
|Helena|de-DE|FALSE|TRUE|
|Ioana|ro-RO|FALSE|TRUE|
|Jacques|fr-FR|FALSE|TRUE|
|Joana|pt-PT|FALSE|TRUE|
|Junior|en-US|FALSE|TRUE|
|Kanya|th-TH|FALSE|TRUE|
|Karen|en-AU|FALSE|TRUE|
|Kathy|en-US|FALSE|TRUE|
|Kyoko (日本語（日本）)|ja-JP|FALSE|TRUE|
|Lana|hr-HR|FALSE|TRUE|
|Laura|sk-SK|FALSE|TRUE|
|Lekha|hi-IN|FALSE|TRUE|
|Lesya|uk-UA|FALSE|TRUE|
|Li-Mu|zh-CN|FALSE|TRUE|
|Linh|vi-VN|FALSE|TRUE|
|Luciana|pt-BR|FALSE|TRUE|
|Majed|ar-001|FALSE|TRUE|
|Marie|fr-FR|FALSE|TRUE|
|Martha|en-GB|FALSE|TRUE|
|Martin|de-DE|FALSE|TRUE|
|Meijia|zh-TW|FALSE|TRUE|
|Melina|el-GR|FALSE|TRUE|
|Milena|ru-RU|FALSE|TRUE|
|Moira|en-IE|FALSE|TRUE|
|Montse|ca-ES|FALSE|TRUE|
|Mónica|es-ES|FALSE|TRUE|
|Nicky|en-US|FALSE|TRUE|
|Nora|nb-NO|FALSE|TRUE|
|O-Ren|ja-JP|FALSE|TRUE|
|Paulina|es-MX|FALSE|TRUE|
|Ralph|en-US|FALSE|TRUE|
|Reed (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Reed (英語（イギリス）)|en-GB|FALSE|TRUE|
|Reed (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Reed (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Reed (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Reed (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Reed (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Reed (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Reed (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Rishi|en-IN|FALSE|TRUE|
|Rocko (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Rocko (英語（イギリス）)|en-GB|FALSE|TRUE|
|Rocko (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Rocko (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Rocko (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Rocko (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Rocko (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Rocko (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Rocko (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Rocko (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Samantha|en-US|FALSE|TRUE|
|Sandy (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Sandy (英語（イギリス）)|en-GB|FALSE|TRUE|
|Sandy (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Sandy (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Sandy (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Sandy (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Sandy (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Sandy (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Sandy (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Sandy (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Sara|da-DK|FALSE|TRUE|
|Satu|fi-FI|FALSE|TRUE|
|Shelley (ドイツ語（ドイツ）)|de-DE|FALSE|TRUE|
|Shelley (英語（イギリス）)|en-GB|FALSE|TRUE|
|Shelley (英語（アメリカ合衆国）)|en-US|FALSE|TRUE|
|Shelley (スペイン語（スペイン）)|es-ES|FALSE|TRUE|
|Shelley (スペイン語（メキシコ）)|es-MX|FALSE|TRUE|
|Shelley (フィンランド語（フィンランド）)|fi-FI|FALSE|TRUE|
|Shelley (フランス語（カナダ）)|fr-CA|FALSE|TRUE|
|Shelley (フランス語（フランス）)|fr-FR|FALSE|TRUE|
|Shelley (イタリア語（イタリア）)|it-IT|FALSE|TRUE|
|Shelley (ポルトガル語（ブラジル）)|pt-BR|FALSE|TRUE|
|Sinji|zh-HK|FALSE|TRUE|
|Tessa|en-ZA|FALSE|TRUE|
|Thomas|fr-FR|FALSE|TRUE|
|Ting-Ting|zh-CN|FALSE|TRUE|
|Tünde|hu-HU|FALSE|TRUE|
|Xander|nl-NL|FALSE|TRUE|
|Yelda|tr-TR|FALSE|TRUE|
|Yu-shu|zh-CN|FALSE|TRUE|
|Yuna|ko-KR|FALSE|TRUE|
|Zarvox|en-US|FALSE|TRUE|
|Zosia|pl-PL|FALSE|TRUE|
|Zuzana|cs-CZ|FALSE|TRUE|
|ささやき声|en-US|FALSE|TRUE|
|オルガン|en-US|FALSE|TRUE|
|スーパースター|en-US|FALSE|TRUE|
|トリノイド|en-US|FALSE|TRUE|
|ベル|en-US|FALSE|TRUE|
|道化|en-US|FALSE|TRUE|
|震え|en-US|FALSE|TRUE|
|Google Deutsch|de-DE|FALSE|FALSE|
|Google US English|en-US|FALSE|FALSE|
|Google UK English Female|en-GB|FALSE|FALSE|
|Google UK English Male|en-GB|FALSE|FALSE|
|Google español|es-ES|FALSE|FALSE|
|Google español de Estados Unidos|es-US|FALSE|FALSE|
|Google français|fr-FR|FALSE|FALSE|
|Google हिन्दी|hi-IN|FALSE|FALSE|
|Google Bahasa Indonesia|id-ID|FALSE|FALSE|
|Google italiano|it-IT|FALSE|FALSE|
|Google 日本語|ja-JP|FALSE|FALSE|
|Google 한국의|ko-KR|FALSE|FALSE|
|Google Nederlands|nl-NL|FALSE|FALSE|
|Google polski|pl-PL|FALSE|FALSE|
|Google português do Brasil|pt-BR|FALSE|FALSE|
|Google русский|ru-RU|FALSE|FALSE|
|Google 普通话（中国大陆）|zh-CN|FALSE|FALSE|
|Google 粤語（香港）|zh-HK|FALSE|FALSE|
|Google 國語（臺灣）|zh-TW|FALSE|FALSE|

## 参考

https://qiita.com/hmmrjn/items/be29c62ba4e4a02d305c

https://www.cyokodog.net/blog/web-speechi-api/


## 後書

結局この作った音声はダウンロードできないのがわかったので、以下のようなサービスを使うと思います。

* AWS/Polly
* 音読さん


https://ondoku3.com/ja/