やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

OpenJTalkで台本をよみあげる

 デモあり。好きに会話させて遊んでみた。

成果物

前提

 OpenJTalkをインストールして設定しておくこと。

  1. OpenJTalkをビルド&インストールする
  2. 音響モデルを配置する: *.htsvoice
  3. 今回のスクリプトを入手する: git clone https://github.com/ytyaru/Shell.OpenJTalk.Daihon.20210130092306
  4. 2があるルートディレクトリパスをjtalk.shOPENJTALK_VOICE_DIR変数に指定する

 これで準備完了。

流れ

  1. 台本をTSVで作成する
  2. コマンドの引数に台本パスを渡す
  3. 読み上げる

コマンド

コマンド 概要
daihon.sh リアルタイム読み上げ
daihon_dump.sh mp3ファイル作成してから読み上げ

 以下のように実行する。TSVファイルパスを引数に渡す。

daihon.sh /tmp/daihon.tsv
daihon_dump.sh /tmp/daihon.tsv
daihon_dump.sh -s /tmp/daihon.tsv

 daihon_dump.shはカレントディレクトリにmp3ファイルを出力する。0.mp3などの名前で連番になる。オプションフラグ-sをつけるとファイル生成をスキップする。二回目以降に再生させるときはこれを使うとすぐ再生できる。

TSV

 書式はつぎの通り。

  • 1列目: VoiceID(*.htsvoiceファイル名)
  • 2列目: セリフ

課題

音響モデルつくりたい(.htsvoice)

 めっちゃくちゃ大変そう。死を覚悟せねばならない。

  1. ART503文を人がよみあげる
  2. 音声ファイルにする
  3. なんやかんやする(ファイル名、正規化など)
  4. 半日かけて計算させる
  5. 音響モデル完成

 調査だけはしたい。実践できるかどうかはともかく。

再生中に作成したかったのにできなかった

 現状はすべてのファイル作成が完了してから再生している。そのせいで遅い。コールバックのしくみがないからできなかった。

 ファイル作成だけは非同期にやっている。ただしwaitで完了を待たないとプロセス自体が完了してしまい、ファイルがないまま再生しようとして何も再生されず、終わってしまう。なので、すべてのファイル作成が完了するまでwaitするしかない。

  1. 0番の作成完了したら0番を再生する
  2. 1番の作成を開始する
  3. 1番の作成完了したら1番を再生する
  4. ...

 みたいな感じにしたかった。できれば3ファイルくらい先まで作成できたら途中で途切れる心配もないと思う。

 でもbashでコールバック実装する方法がわからなかった。できるかどうかもわからなかった。なので妥協した。

html5<audio>でプレイリストが作れない

 HTML5<audio>タグでプレイリストができないことに愕然とした。え、そんなこともできないの? 仕方なく自前で実装した。

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux