【Raspberry Pi 】正月だし百人一首やろうぜ【OpenJTalk 】

## 【前文】
お正月企画。

## 【環境】
Pi Zero WH + Raspbian Buster Lite + USBスピーカだけど、基本 Linux環境なら同じと思われ。

## 【音声合成環境構築】
音声合成は鉄板 OpenJTalk を使用。

```shell-session
pi@raspberrypiz:~ $ sudo apt-get install open-jtalk
```

辞書ファイル、音響モデルも必要なので入れる。

```shell-session
pi@raspberrypiz:~ $ sudo apt-get install open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
```

取り合えず喋らせてみる。

```shell-session
pi@raspberrypiz:~ $ echo "これはテストです" | open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow ./open_jtalk_tmp.wav
pi@raspberrypiz:~ $ sudo aplay open_jtalk_tmp.wav
```

上記のように原則音声合成は以下の 2ステップからなる。
1. テキストから WAVファイルのレンダリング
2. WAVファイル再生

パラメータも煩雑だしで、スクリプト化となる訳だけど、WAVファイルを噛ませない方法を公開している方が居るので真似させていただく。
スクリプトもこちらから借用。
[合成音声(Open Jtalk)でwavファイルを作成しないで再生する](https://qiita.com/sukesuke/items/be2a4562bd809ccc0fab "合成音声(Open Jtalk)でwavファイルを作成しないで再生する - Qiita")

音響モデルは探せば色々と公開されているのでお好みで追加。

```shell-session
pi@raspberrypiz:~ $ cd /usr/share/hts-voice/
pi@raspberrypiz:/usr/share/hts-voice $ sudo git clone https://github.com/icn-lab/htsvoice-tohoku-f01.git
```

## 【百人一首】
問題は歴史的仮名遣いをどう読み上げさせるか。「てふてふ」と書かれていたら「ちょうちょう」と読み上げて欲しい。
[【「てふてふ」の謎】歴史的仮名遣いを現代仮名遣いに変換すると？](https://mimizuku-edu.com/tutor/koten/815 "【「てふてふ」の謎】歴史的仮名遣いを現代仮名遣いに変換すると？ – みみずく戦略室")

法則性はある訳だからそれに乗っ取れば何とかなりそうだけど、そのような仕組みは用意されていないようだし、自力で作り上げるのも大変。
ベタだけど、現代仮名遣いに置き換えたテキストを用意することにした。

```shell-session
pi@raspberrypiz:~ $ cat hyakunin
アキノタノ　カリオノイオノ　トマオアラミ　ワガコロモデワ　ツユニヌレツツ
ハルスギテ　ナツキニケラシ　シロタエノ　コロモホスチョー　アマノカグヤマ
アシビキノ　ヤマドリノオノ　シダリオノ　ナガナガシヨオ　ヒトリカモネン
タゴノウラニ　ウチイデテミレバ　シロタエノ　フジノタカネニ　ユキワフリツツ
オクヤマニ　モミジフミワケ　ナクシカノ　コエキクトキゾ　アキワカナシキ
カササギノ　ワタセルハシニ　オクシモノ　シロキオミレバ　ヨゾフケニケル
アマノハラ　フリサケミレバ　カスガナル　ミカサノヤマニ　イデシツキカモ
ワガイオワ　ミヤコノタツミ　シカゾスム　ヨオウジヤマト　ヒトワユーナリ
ハナノイロワ　ウツリニケリナ　イタズラニ　ワガミヨニフル　ナガメセシマニ
コレヤコノ　ユクモカエルモ　ワカレテワ　シルモシラヌモ　オーサカノセキ
ワタノハラ　ヤソシマカケテ　コギイデヌト　ヒトニワツゲヨ　アマノツリブネ
アマツカゼ　クモノカヨイジ　フキトジヨ　オトメノスガタ　シバシトドメン
ツクバネノ　ミネヨリオツル　ミナノガワ　コイゾツモリテ　フチトナリヌル
ミチノクノ　シノブモジズリ　タレユエニ　ミダレソメニシ　ワレナラナクニ
キミガタメ　ハルノノニイデテ　ワカナツム　ワガコロモデニ　ユキワフリツツ
タチワカレ　イナバノヤマノ　ミネニオール　マツトシキカバ　イマカエリコン
チハヤブル　カミヨモキカズ　タツタガワ　カラクレナイニ　ミズククルトワ
スミノエノ　キシニヨルナミ　ヨルサエヤ　ユメノカヨイジ　ヒトメヨクラン
ナニワガタ　ミジカキアシノ　フシノマモ　アワデコノヨオ　スグシテヨトヤ
ワビヌレバ　イマハタオナジ　ナニワナル　ミオツクシテモ　アワントゾオモー
イマコント　イイシバカリニ　ナガツキノ　アリアケノツキオ　マチイデツルカナ
フクカラニ　アキノクサキノ　シオルレバ　ムベヤマカゼオ　アラシトユーラン
ツキミレバ　チジニモノコソ　カナシケレ　ワガミヒトツノ　アキニワアラネド
コノタビワ　ヌサモトリアエズ　タムケヤマ　モミジノニシキ　カミノマニマニ
ナニシオワバ　オーサカヤマノ　サネカズラ　ヒトニシラレデ　クルヨシモガナ
オグラヤマ　ミネノモミジバ　ココロアラバ　イマヒトタビノ　ミユキマタナン
ミカノハラ　ワキテナガルル　イズミガワ　イツミキトテカ　コイシカルラン
ヤマザトワ　フユゾサビシサ　マサリケル　ヒトメモクサモ　カレヌトオモエバ
ココロアテニ　オラバヤオラン　ハツシモノ　オキマドワセル　シラギクノハナ
アリアケノ　ツレナクミエシ　ワカレヨリ　アカツキバカリ　ウキモノワナシ
アサボラケ　アリアケノツキト　ミルマデニ　ヨシノノサトニ　フレルシラユキ
ヤマガワニ　カゼノカケタル　シガラミワ　ナガレモアエヌ　モミジナリケリ
ヒサカタノ　ヒカリノドケキ　ハルノヒニ　シズゴコロナク　ハナノチルラン
タレオカモ　シルヒトニセン　タカサゴノ　マツモムカシノ　トモナラナクニ
ヒトワイサ　ココロモシラズ　フルサトワ　ハナゾムカシノ　カニニオイケル
ナツノヨワ　マダヨイナガラ　アケヌルオ　クモノイズクニ　ツキヤドルラン
シラツユニ　カゼノフキシク　アキノノワ　ツラヌキトメヌ　タマゾチリケル
ワスラルル　ミオバオモワズ　チカイテシ　ヒトノイノチノ　オシクモアルカナ
アサジウノ　オノノシノハラ　シノブレド　アマリテナドカ　ヒトノコイシキ
シノブレド　イロニイデニケリ　ワガコイワ　モノヤオモート　ヒトノトーマデ
コイスチョー　ワガナワマダキ　タチニケリ　ヒトシレズコソ　オモイソメシカ
チギリキナ　カタミニソデオ　シボリツツ　スエノマツヤマ　ナミコサジトワ
アイミテノ　ノチノココロニ　クラブレバ　ムカシワモノオオモワザリケリ
オーコトノ　タエテシナクワ　ナカナカニ　ヒトオモミオモ　ウラミザラマシ
アワレトモ　ユーベキヒトワ　オモオエデ　ミノイタズラニ　ナリヌベキカナ
ユラノトオ　ワタルフナビト　カジオタエ　ユクエモシラヌ　コイノミチカナ
ヤエムグラ　シゲレルヤドノ　サビシキニ　ヒトコソミエネ　アキワキニケリ
カゼオイタミ　イワウツナミノ　オノレノミ　クダケテモノオ　オモーコロカナ
ミカキモリ　エジノタクヒノ　ヨルワモエ　ヒルワキエツツ　モノオコソオモエ
キミガタメ　オシカラザリシ　イノチサエ　ナガクモガナト　オモイケルカナ
カクトダニ　エヤワイブキノ　サシモグサ　サシモシラジナ　モユルオモイオ
アケヌレバ　クルルモノトワ　シリナガラ　ナオウラメシキ　アサボラケカナ
ナゲキツツ　ヒトリヌルヨノ　アクルマワ　イカニヒサシキ　モノトカワシル
ワスレジノ　ユクスエマデワ　カタケレバ　キョーオカギリノ　イノチトモガナ
タキノオトワ　タエテヒサシク　ナリヌレド　ナコソナガレテ　ナオキコエケレ
アラザラン　コノヨノホカノ　オモイデニ　イマヒトタビノ　オーコトモガナ
メグリアイテ　ミシヤソレトモ　ワカヌマニ　クモガクレニシ　ヨワノツキカナ
アリマヤマ　イナノササハラ　カゼフケバ　イデソヨヒトオ　ワスレヤワスル
ヤスラワデ　ネナマシモノオ　サヨフケテ　カタブクマデノ　ツキオミシカナ
オーエヤマ　イクノノミチノ　トーケレバ　マダフミモミズ　アマノハシダテ
イニシエノ　ナラノミヤコノ　ヤエザクラ　キョーココノエニ　ニオイヌルカナ
ヨオコメテ　トリノソラネワ　ハカルトモ　ヨニオーサカノ　セキワユルサジ
イマワタダ　オモイタエナン　トバカリオ　ヒトズテナラデ　ユーヨシモガナ
アサボラケ　ウジノカワギリ　タエダエニ　アラワレワタル　セゼノアジロギ
ウラミワビ　ホサヌソデダニ　アルモノオ　コイニクチナン　ナコソオシケレ
モロトモニ　アワレトオモエ　ヤマザクラ　ハナヨリホカニ　シルヒトモナシ
ハルノヨノ　ユメバカリナル　タマクラニ　カイナクタタン　ナコソオシケレ
ココロニモ　アラデウキヨニ　ナガラエバ　コイシカルベキ　ヨワノツキカナ
アラシフク　ミムロノヤマノ　モミジバワ　タツタノカワノ　ニシキナリケリ
サビシサニ　ヤドオタチイデテ　ナガムレバ　イズクモオナジ　アキノユーグレ
ユーサレバ　カドタノイナバ　オトズレテ　アシノマロヤニ　アキカゼゾフク
オトニキク　タカシノハマノ　アダナミワ　カケジヤソデノ　ヌレモコソスレ
タカサゴノ　オノエノサクラ　サキニケリ　トヤマノカスミ　タタズモアラナン
ウカリケル　ヒトオハツセノ　ヤマオロシヨ　ハゲシカレトワ　イノラヌモノオ
チギリオキシ　サセモガツユオ　イノチニテ　アワレコトシノ　アキモイヌメリ
ワタノハラ　コギイデテミレバ　ヒサカタノ　クモイニマゴー　オキツシラナミ
セオハヤミ　イワニセカルル　タキガワノ　ワレテモスエニ　アワントゾオモー
アワジシマ　カヨーチドリノ　ナクコエニ　イクヨネザメヌ　スマノセキモリ
アキカゼニ　タナビククモノ　タエマヨリ　モレイズルツキノ　カゲノサヤケサ
ナガカラン　ココロモシラズ　クロカミノ　ミダレテケサワ　モノオコソオモエ
ホトトギス　ナキツルカタオ　ナガムレバ　タダアリアケノ　ツキゾノコレル
オモイワビ　サテモイノチワ　アルモノオ　ウキニタエヌハ　ナミダナリケリ
ヨノナカヨ　ミチコソナケレ　オモイイル　ヤマノオクニモ　シカゾナクナル
ナガラエバ　マタコノゴロヤ　シノバレン　ウシトミシヨゾ　イマワコイシキ
ヨモスガラ　モノオモーコロワ　アケヤラヌ　ネヤノヒマサエ　ツレナカリケリ
ナゲケトテ　ツキヤワモノオ　オモワスル　カコチガオナル　ワガナミダカナ
ムラサメノ　ツユモマダヒヌ　マキノハニ　キリタチノボル　アキノユーグレ
ナニワエノ　アシノカリネノ　ヒトヨユエ　ミオツクシテヤ　コイワタルベキ
タマノオヨ　タエナバタエネ　ナガラエバ　シノブルコトノ　ヨワリモゾスル
ミセバヤナ　オジマノアマノ　ソデダニモ　ヌレニゾヌレシ　イロワカワラズ
キリギリス　ナクヤシモヨノ　サムシロニ　コロモカタシキ　ヒトリカモネン
ワガソデワ　シオヒニミエヌ　オキノイシノ　ヒトコソシラネ　カワクマモナシ
ヨノナカワ　ツネニモガモナ　ナギサコグ　アマノオブネノ　ツナデカナシモ
ミヨシノノ　ヤマノアキカゼ　サヨフケテ　フルサトサムク　コロモウツナリ
オオケナク　ウキヨノタミニ　オオーカナ　ワガタツソマニ　スミゾメノソデ
ハナサソー　アラシノニワノ　ユキナラデ　フリユクモノワ　ワガミナリケリ
コヌヒトオ　マツオノウラノ　ユーナギニ　ヤクヤモシオノ　ミモコガレツツ
カゼソヨグ　ナラノオガワノ　ユーグレワ　ミソギゾナツノ　シルシナリケル
ヒトモオシ　ヒトモウラメシ　アジキナク　ヨオオモーユエニ　モノオモーミワ
モモシキヤ　フルキノキバノ　シノブニモ　ナオアマリアル　ムカシナリケリ
```
力業ですな。

## 【百人一首読み上げ】
スクリプトは前述のサイトから `myjtalk.sh` を借用。 

```shell-session
pi@raspberrypiz:~ $ cat hyakunin | xargs -L1 ./myjtalk.sh
```

百人一首を格納したテキストファイル `hyakunin` を一行ずつスクリプトに渡すことにより読み上げを行う。
ランダムなら以下。

```shell-session
pi@raspberrypiz:~ $ cat hyakunin | sort -R | xargs -L1 ./myjtalk.sh
```

良いお正月を。

## 【参考サイト】
[Raspberry Piでテキストを音声化する (Open JTalk)](https://www.taneyats.com/entry/raspi-open-jtalk "Raspberry Piでテキストを音声化する (Open JTalk) - たねやつの木")