ずんだもんの声をBPM120に乗せる。日本語ラップの制約と、削除した英語版
AIで作った落語のラップの動画を見た。 むちゃくちゃ面白い。 ラップなので、当たり前のように韻を踏んでいる。
前日に自分の声を複製してBPM120のビートに乗せる検証をやったばかりだった。 文の頭を小節の頭にそろえるところは、もう動いている。 足りないのは韻のほうだ。
声を替えても同じテンポで乗るか
まず声を替えて、同じことをやらせた。 前回は自分の声を複製したもの、今回はVOICEVOXのずんだもんにする。 自分の声である必要はないので、ナレーターの声でいいと伝えた。 UIも配置ロジックも前回のページを流用させ、2つを並べて聞き比べられるようにした。 途中でモデルをFable 5に切り替えて、同じ指示をもう一度考え直させている。
出てきた数字はこうなった。
- ずんだもんの素の話速は383モーラ/分(前回の自分の声は356モーラ/分)
- BPM120(480モーラ/分)に合わせる speedScale は 1.24986、再合成後の実測はBPM119.89
- 12文すべてが小節の頭に乗り、ズレは0ms
速さの調整では、合成した音をffmpegで伸び縮みさせない。 VOICEVOXにspeedScaleを渡して、その速さのまま合成しなおす。 音質が落ちない。 文の前後に入る無音は0にしておいて、間は自分で設計する。
読みが1か所だけ崩れた。 「一小節」が「イチショオセツ」と読まれる。 表示は漢字のまま、渡す読みだけ「いっしょうせつ」に差し替えて直した。
韻と日本語の文末
原稿は、普通の解説として読めるのに2文ずつ文末の母音がそろう12文にさせた。
この声は、ボイスボックスのキャラクター、ずんだもん。
話す速さも、文のあいだも、ぜんぶ数値で組んだもん。
「ずんだもん/組んだもん」で、う-ん-あ-お-んの5モーラが完全に一致する。 以下、「先頭/連動」「音声合成/音の構成」「一小節/直結」「検証/テンポ」「解説/配列」と続く。
聞きながら気づいた。 12文の文末が全部名詞で終わっている。 当たり前だ。 韻は文末で踏むのに、日本語の丁寧語は全部「です」「ます」で終わってしまう。 「〜しています」の文を2つ並べても、韻を踏んだことにはならない。 同じ語尾が並んだだけだ。 日本語でラップをやるなら、少なくとも丁寧語は捨てることになる。今回は体言止めでそろえた。
では英語はどうなのか。 英語は単語の終わりと次の単語の頭がつながって発音される。 文末の縛りが日本語ほどきつくないなら、そのぶん自然にラップへ乗るのではないか。
英語なら楽なのか
先に、VOICEVOXへ英文をそのまま入れたら何が起きるかを実測させた。 返ってきた結論は「本物の英語発音は出せないが、カタカナ英語のラップなら実用レベルで可能」だった。
それならと、音がつながるネイティブ寄りの発音のほうで作らせた。 「チェケラ」「ゲラップ」「スターツォンダワン」のように、リンキングしたまま片仮名に落とす書き方だ。 8行、各行16モーラ以内で1小節に収め、毎小節のキックの1拍目から声が立ち上がる設計にさせた。
数字はまたきれいにそろった。
- BPM120に対して実測119.99
- 8行すべてズレ0ms
- 行間の息継ぎは0.08〜0.47秒
再生した。 何を言っているのか分からなかった。 英語として聞き取れず、日本語としても意味が取れない。 ズレ0msは「ビートに乗っている」ことしか保証しない。 言葉として耳に届くかどうかは、別に確かめるしかない。
英語版はやめると決めた。 「これはもう全部削除でいい」と言ったあとで、日本語版まで消えると気づいて「英語だけ」と言い直している。 削除の途中では再帰削除のガードに止められ、ファイルを1件ずつ消す形に切り替えさせた。 そのとき「関係ないファイルが1件リストから消えている」と報告が上がってきた。 確認させたところ、これは自分が別件で削除を頼んだものだった。
日本語のずんだもん版だけが残った。 それだけをコミットしてプッシュさせた(学習ゲートはスキップ)。
→ ずんだもん版の検証ページ(波形にビートと文頭のズレを重ねて表示)
残ったもの
- 韻を踏む原稿は、文末をそろえる設計とセットになる。少なくとも日本語では丁寧語をあきらめることになる
- 検証ページの数値がそろっても、意味が伝わるかは自分の耳で聞くまで分からない
- カタカナ英語は、音の並びをどれだけ丁寧に写しても英語には聞こえなかった
丁寧に喋りながら韻を踏む方法は、まだ思いついていない。 体言止めだけで12文書くと、解説としては少し硬い。 英語をやるなら英語を喋れるエンジンに替えることになるが、そこまでして英語版が要るのかは決めていない。