heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

仮組み完成:SofTalkをシェルスクリプトから利用、ゆっくりしていってねー

目的

Ubuntu10.04 上で、読み上げ式クリッピングサービス(自分の指定したキーワードでの情報収集)を毎朝実行する。

【2016/12/23 追記 : 提供ファイルをdropboxのpublicフォルダから、googleドライブへ移行】

経過報告1(前回)

wine から softalk を利用できるようになった。

経過報告2

結論としては、目的を実行できるようになりました

追加の仕様と縛りは下記です。

  • コンテンツを追加できる(キーワード指定して…とはいきませんでしたが)
  • シェルスクリプトだけで作成する

☆テスト音声(音量注意)

SofTalk.mp3 - Google ドライブ

「雨の降る」が「うのふる」に。
音読み大好きだし、たまに謎の熟語を発します。

動作について

  1. PC 起動と同時に「朝の読み上げ予約」を入れる( softalk が特殊なGUIのため、cron、atが使えないため)
  2. 読み上げ時刻に「情報収集(気象庁など)」( BIOS自動起動が使えないため、8:00位までPCは起動)
  3. 読み上げ文章の作製
  4. 読み上げ実行、その後PC停止

「読み上げ文章作製」

読み上げ文章作製は備忘録も兼ねてるので、詳細に記載します。
コマンドを実行するたびに、文字種がシンプルになっていくのが分かると思います。


煩雑になった理由は下記のためです。

  • kakasiEUC のみ対応
  • softalkShift_JIS のみ対応で、ひらがなと特定の記号(,?など)だけにしないといけない。*1
  • おそらく UTF-8 は、経由しなくて良いがとりあえず放置(nkt -w で半角カナ→全角カナ変換できるため放置してたが、kakasi が優秀で形骸化)
  • 「英語からカタカナ読み辞書」は自作で EUC で作ったため
  • 数字は prefix をつける必要がある

コマンド文字コード記号ABC全角ABCabc全角abc123全角123カタカナカタカナひらがな漢字
sed & trEUC記号→削除ABC全角ABCabc全角abc123全角123カタカナカタカナひらがな漢字
nkf -wUTF-8ABC全角ABCabc全角abc123全角123カタカナカタカナひらがな漢字
sed 'y/AB(全)ab(全)ab(半)123(全)/ABABAB123/'UTF-8ABC全角→ABCABCabc全角→ABCabc→ABC123全角→123123カタカナカタカナひらがな漢字
mecab --node-format=%pS%f[8] --unk-format=%M --eos-format=,UTF-8ABC123カタカナカタカナひらがな→カタカナ今日→キョー
nkf -eEUCABC123カタカナカタカナ
mecab -d 英語からカタカナ読み辞書EUCABC→カタカナ123カタカナカタカナ
kakasi -KHEUC123カタカナ→ひらがなカタカナ→ひらがな
nkf -sS_JIS123ひらがな
sed -i -e "s/\([0-9]\+\)//g"S_JISひらがな

まとめ

フリーの日本語音声合成エンジンとしては OpenJTalk も
あったのですが、手軽感とある程度の人間らしさで Softalk に軍配
が上がったわけです。
Softalk はなんだかんだで Winアプリなので、将来的には OpenJTalk
使ってみたいですね。

しかし、文字コードとその変換コマンド、vimのノウハウが溜まったので
とても勉強になりましたね、作製期間中は :D

参考サイト

sed*2,*3,*4,*5
tr*6,*7
mecab*8,*9,*10
辞書作製*11,*12
英語→カタカナ読みデータ(GPLで公開されているBEPを利用)*13
nkf*14,*15,*16
cron*17,*18,*19
expr*20
if-then-else*21,*22
for*23,*24
ps*25
正規表現*26
vim文字コード自動認識*27
↑これがかなりお勧めです。KaWaZさんありがとうございます。


後日談

しかし、実は音声合成エンジンとしては株式会社アクエスト
さんの AquesTalk の評価版をダウンロードできるんですよね。(linux版も)
ソフトウェアはあくまで評価版ですし、自分は同サイトで
発売されている「音声合成LSI」を購入しようかと考えてます。
http://www.a-quest.com/products/aquestalkpicolsi.html


以上。

*1:http://www.a-quest.com/products/aquestalk.html

*2:http://linux.just4fun.biz/逆引きUNIXコマンド/キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド.html

*3:http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/command/c_sed.html

*4:http://www.ibm.com/developerworks/jp/linux/library/l-sed2/

*5:http://www001.upp.so-net.ne.jp/hata/sed_reference.html#seiki2

*6:http://linux.just4fun.biz/逆引きUNIXコマンド/テキストから改行を削除する.html

*7:http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230906/

*8:http://www.mwsoft.jp/programming/munou/mecab_command.html

*9:http://chasen.org/~taku/blog/archives/2006/01/autolink.html

*10:http://denspe.blog84.fc2.com/?mode=m&no=170

*11:http://mecab.googlecode.com/svn/trunk/mecab/doc/dic-detail.html

*12:http://d.hatena.ne.jp/mitaina/20090909/1252490920

*13:http://www.argv.org/bep/

*14:http://blog.layer8.sh/ja/2011/12/23/文字コード変換コマンドnkfの使い方まとめ-linux/

*15:http://d.hatena.ne.jp/rx7/20110205/p1

*16:http://d.hatena.ne.jp/takuya_1st/20100511/1273585953

*17:http://tsuttayo.jpn.org/crond/

*18:https://ja.wikipedia.org/wiki/Crontab

*19:http://www.linuxquestions.org/questions/linux-newbie-8/display%3D-0-0-vs-display%3Dlocalhost-0-0-a-933940/

*20:http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231170/

*21:http://www.pochinet.org/linuxX0204.htm

*22:http://linux.just4fun.biz/逆引きシェルスクリプト/ファイルサイズが0より大きいかを確認する.html

*23:http://sandhill.fc2web.com/tips/shell/shell_04.html

*24:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35752&forum=10

*25:http://isann.blog2.fc2.com/blog-entry-258.html

*26:http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231171/?ST=oss

*27:http://www.kawaz.jp/pukiwiki/?vim#cb691f26