本文へスキップ
Yappy ダウンロード
言語: ja

誰も見せない仕掛け

書いた言葉を、話す言葉に。

読み上げは復唱ではない。解釈だ。「1492」は「せんよんひゃくきゅうじゅうに」と読む。「Henry VIII」は「ヘンリー8世」だが、フランス語の「Louis XIV」は「ルイ・カトルズ」。「EL CID」はローマ数字ではない。FBIは一字ずつ、NASAはひとことで読む。Yappyは最初の音を合成する前に、テキストを読み上げ台本に変換する。声がこれから本当に言うことの、楽譜だ。

台本メーカー

ここで試せる。アプリと同じRustを、ブラウザ向けにコンパイルしたものだ。

台本がここに表示されます。変換された部分には下線が付きます。

一度の処理で、12の仕事。

日付

「24/5/1533」は最後まで読み上げます。語順も文法も、その言語の流儀どおりに。

時刻

「14:05」は、時計の読み方ではなく、人の言い方で読み上げます。

通貨

「3.50 €」は「三ユーロ五十」と言葉になります。複数形も、その言語の規則どおり。

パーセント

「7%」は「7パーセント」と読む。「0.5%」がただの「0.5」のままになることはない。

単位

「230 °C」は「摂氏230度」と読む。

序数

「3.ª」は「tercera」と読む。性や格変化のある言語では、そこまで含めて。

ローマ数字の読み分け

「20世紀」は基数、「ヘンリー8世」は序数、「EL CID」は数ではない。

音で決まる頭字語

FBIはつづって読み、NASAは一語として読む。決めるのは音の響きであって、リストではない。

略語

「etc.」「pág.」「S. XIX」――各言語に、その言語の表がある。

大きな数

Unicode CLDRのRBNF文法による。性も格変化も含めて。

31言語

規則は同じ、文法は各言語のもの。手書きのリストは使わない。

リズム

見出しは読み終えてから息をつく。箇条書きは拍を刻む。間は台本の一部で、偶然ではない。

よくある質問

RBNF文法とは何か。
RBNFとはRule-Based Number Formatの略。Unicode CLDRが、各言語で数をどう読むかを記述するための規則だ。千語の表ではなく、一つの文法である。だからスペイン語が「doscientas páginas」であって「doscientos páginas」ではないと分かるし、ロシア語が数詞を格変化させること、フランス語が90まで二十進法で数えることも分かる。YappyはこれをRustだけで解釈する。手書きのリストは使わない。
なぜ台本化が必要なのか。声だけでは足りないのか。
足りない。しかも意図してそう作ってある。Yappyの音声モデルは文字単位で動き、書かれた通りをそのまま発音する。おかげで速く、軽い。ただし「1492」が来れば、それを一文字ずつ読もうとする。この種のモデルでは、正規化こそが発音だ。台本化機能は、数字も頭字語も記号も、人間ならこう言うはずという言葉へ変換する部品である。
何言語で動くのか。
声が話す31言語すべてで、しかも各言語に専用の規則がある。日付の順序、通貨のつなぎ方、序数、略語、ローマ数字。15世紀はスペイン語で「siglo quince」、英語では「fifteenth century」。「Louis XIV」は「Louis quatorze」であって「Louis fourteenth」ではない。同じ12の仕事を、31の文法でこなす。
なぜカラオケ表示は、いつもぴったりその単語の上に乗るのか。
スクリプトは、ただテキストを変換しただけのものではありません。書かれた形と読みの対応を記した地図を持っています。声が「千四百九十二」と読むとき、スクリプトはその読みが「1492」という4つの数字から来ていることを知っています。だから下線はずれず、正しい位置にぴたりと乗ります。テキストを照らすのと、当て推量で追うのとの違いです。
単語の発音がおかしいとき、直せますか?
現時点では、ユーザーが編集できる発音辞書はありません。モデルは文字を読むので、手っ取り早いのは、その単語を発音どおりのつづりでエディタに書いて、もう一度聞いてみることです。おかしいのが一般的なパターン(略語、頭字語、単位など)なら、GitHubのIssuesで知らせてください。スクリプト生成のテーブルは、そうした事例とともに育っていきます。
このページのスクリプト生成は、アプリのものと同じですか?
同じコードを、ブラウザで動くようにWebAssemblyへコンパイルしたものです。ここに入力した内容は、タブの外に出ません。そしてプロジェクト全体がオープンなので、リポジトリでルールを一つずつ読むこともできます。

台本は物語の半分。もう半分は、耳の担当だ。

サンプルを聞く