documents:os:freebsd:openjtalk:openjtalk-001
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン | |||
| documents:os:freebsd:openjtalk:openjtalk-001 [2026/05/07 22:19] – ↷ documents:freebsd:openjtalk:openjtalk-001 から documents:os:freebsd:openjtalk:openjtalk-001 へページを移動しました。 k896951 | documents:os:freebsd:openjtalk:openjtalk-001 [2026/05/30 18:40] (現在) – ↷ 移動操作に合わせてリンクを書き換えました。 k896951 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== FreeBSDでOpen JTalkを使う ====== | ||
| + | |||
| + | 音声合成ソフトウエアの Open JTalk を FreeBSD で実行させるまでの話。 | ||
| + | |||
| + | 2017/ | ||
| + | [[openjtalk-002|Ports作りました]] | ||
| + | |||
| + | 2014年10月06日\\ | ||
| + | 昔やりかけてた、Open JTalk のコンパイルを再挑戦。今回は音声合成までいけた。\\ | ||
| + | 今回の環境は、FreeBSD/ | ||
| + | |||
| + | 2015年6月21日\\ | ||
| + | open_jtalk-1.08だと以下でコンパイルが通るそうな。\\ | ||
| + | https:// | ||
| + | < | ||
| + | < | ||
| + | <script async src="// | ||
| + | </ | ||
| + | ===== 参照情報 ===== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | ===== 必要なファイル群の収集 ===== | ||
| + | |||
| + | Open JTalkは | ||
| + | * Open_JTalk - 本体 | ||
| + | * hts_engine - 音声合成エンジン | ||
| + | * HTS voice - 合成する音声情報 | ||
| + | * Dictionary - 日本語解析のための辞書 | ||
| + | |||
| + | で構成されます。 | ||
| + | |||
| + | ==== 本体、辞書、サンプル音声情報 ==== | ||
| + | http:// | ||
| + | * open_jtalk-1.07.tar.gz | ||
| + | * hts_voice_nitech_jp_atr503_m001-1.05.tar.gz | ||
| + | * open_jtalk_dic_utf_8-1.07.tar.gz | ||
| + | |||
| + | を取得し、作業用ディレクトリへコピー、展開しておきます。 | ||
| + | |||
| + | ==== 音声合成エンジン ==== | ||
| + | http:// | ||
| + | * hts_engine_API-1.08.tar.gz | ||
| + | |||
| + | を取得し、作業用ディレクトリへコピー、展開してきます。 | ||
| + | |||
| + | ==== サンプル音声(話者:Mei) ==== | ||
| + | http:// | ||
| + | * MMDAgent_Example-1.4.zip | ||
| + | |||
| + | を取得し、作業用ディレクトリへコピー、展開してきます。MMDAgent用の話者に女性(話者: | ||
| + | |||
| + | ===== コンパイルの前提 ===== | ||
| + | |||
| + | * FreeBSDでデフォルトのclangではコンパイルができないので、gccを導入しておく必要があります。筆者はgcc4.8をportsから導入しました。gmakeも使える必要があります。 | ||
| + | * libiconvを使っているため、こちらを導入する必要があります。 | ||
| + | * Open JTalkのビルドの仕方によっては、既存のMecabの辞書を上書きするかもしれません。再インストールの準備が必要です。 | ||
| + | |||
| + | ===== コンパイル ===== | ||
| + | |||
| + | ==== hts_engine_API ==== | ||
| + | |||
| + | 展開したディレクトリ hts_engine_API-1.08 で以下のコマンドラインを実行します。 | ||
| + | < | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | hts_engineのコンパイルに際しては LDFLAGS=" | ||
| + | ※これは、リンケージの際にgcc4.8のものを使うよ!と言う宣言ですね。 | ||
| + | |||
| + | |||
| + | 次に、HTS_misc.c に修正を加えます。FreeBSDでも fpos_t は構造体じゃないようです。あと、Androidでもコンパイルできるのかな?動きそうな感じがしますよねこのソースだと。 | ||
| + | <code c> | ||
| + | root@amane:/ | ||
| + | *** ./ | ||
| + | --- ./ | ||
| + | *************** | ||
| + | *** 245,251 **** | ||
| + | } else if (fp-> | ||
| + | fpos_t pos; | ||
| + | fgetpos((FILE *) fp-> | ||
| + | ! #if defined(_WIN32) || defined(__CYGWIN__) || defined(__APPLE__) || defined(__ANDROID__) | ||
| + | return (size_t) pos; | ||
| + | #else | ||
| + | return (size_t) pos.__pos; | ||
| + | --- 245,251 ---- | ||
| + | } else if (fp-> | ||
| + | fpos_t pos; | ||
| + | fgetpos((FILE *) fp-> | ||
| + | ! #if defined(_WIN32) || defined(__CYGWIN__) || defined(__APPLE__) || defined(__ANDROID__) || defined(__FreeBSD__) | ||
| + | return (size_t) pos; | ||
| + | #else | ||
| + | return (size_t) pos.__pos; | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | あとはコンパイルとインストール。こちらは結構すんなりといけます。 | ||
| + | < | ||
| + | root@amane:/ | ||
| + | <中略> | ||
| + | root@amane:/ | ||
| + | Making install in lib | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | test -z "/ | ||
| + | / | ||
| + | | ||
| + | gmake[2]: `install-data-am' | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | Making install in bin | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | test -z "/ | ||
| + | / | ||
| + | gmake[2]: `install-data-am' | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[2]: `install-exec-am' | ||
| + | test -z "/ | ||
| + | / | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | ==== open_jtalk ==== | ||
| + | |||
| + | 展開したディレクトリ open_jtalk-1.07 で以下のコマンドラインを実行します。 | ||
| + | < | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | open_jtalkのコンパイルに際しては LDFLAGS=" | ||
| + | < | ||
| + | Making all in mecab-naist-jdic | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | ../ | ||
| + | / | ||
| + | gmake[1]: *** [char.bin] エラー 1 | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake: *** [all-recursive] エラー 1 | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | のようなエラーが最後に発生してしまいます。 | ||
| + | |||
| + | 次に、iconv_utils.cpp に修正を加えます。ICONV_CONST の値が定義されていないので、iconv()の第二引数の型が const char * * にならないようです。結果、libiconvでインストールしたヘッダの定義とあわずコンパイルエラーとなります。\\ | ||
| + | おそらく、Mecabに喰わせる文字列変換の処理なのでしょう。面倒なので ICONV_CONST を const へ書き換えました。 | ||
| + | <code c> | ||
| + | root@amane:/ | ||
| + | *** open_jtalk-1.07/ | ||
| + | --- open_jtalk-1.07/ | ||
| + | *************** | ||
| + | *** 179,185 **** | ||
| + | size_t olen_org = olen; | ||
| + | iconv(ic_, 0, &ilen, 0, & | ||
| + | while (ilen != 0) { | ||
| + | ! if (iconv(ic_, (ICONV_CONST char **)& | ||
| + | == (size_t) -1) { | ||
| + | return false; | ||
| + | } | ||
| + | --- 179,185 ---- | ||
| + | size_t olen_org = olen; | ||
| + | iconv(ic_, 0, &ilen, 0, & | ||
| + | while (ilen != 0) { | ||
| + | ! if (iconv(ic_, (const char **)& | ||
| + | == (size_t) -1) { | ||
| + | return false; | ||
| + | } | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | あとはコンパイルとインストール。 | ||
| + | < | ||
| + | root@amane:/ | ||
| + | <中略> | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | ../ | ||
| + | reading ./unk.def ... 40 | ||
| + | emitting double-array: | ||
| + | ./model.def is not found. skipped. | ||
| + | reading ./ | ||
| + | emitting double-array: | ||
| + | reading ./ | ||
| + | emitting matrix | ||
| + | |||
| + | done! | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[1]: `all-am' | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | root@amane:/ | ||
| + | root@amane:/ | ||
| + | <中略> | ||
| + | gmake[2]: `install-exec-am' | ||
| + | test -z "/ | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[2]: `install-exec-am' | ||
| + | gmake[2]: `install-data-am' | ||
| + | gmake[2]: ディレクトリ `/ | ||
| + | gmake[1]: ディレクトリ `/ | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | もし、/ | ||
| + | |||
| + | ===== Open JTalkを実行してみる ===== | ||
| + | |||
| + | < | ||
| + | root@amane:/ | ||
| + | The Japanese TTS System "Open JTalk" | ||
| + | Version 1.07 (http:// | ||
| + | Copyright (C) 2008-2013 Nagoya Institute of Technology | ||
| + | All rights reserved. | ||
| + | |||
| + | The HMM-Based Speech Synthesis Engine " | ||
| + | Version 1.08 (http:// | ||
| + | Copyright (C) 2001-2013 Nagoya Institute of Technology | ||
| + | 2001-2008 Tokyo Institute of Technology | ||
| + | All rights reserved. | ||
| + | |||
| + | Yet Another Part-of-Speech and Morphological Analyzer " | ||
| + | Version 0.994 (http:// | ||
| + | Copyright (C) 2001-2008 Taku Kudo | ||
| + | 2004-2008 Nippon Telegraph and Telephone Corporation | ||
| + | All rights reserved. | ||
| + | |||
| + | NAIST Japanese Dictionary | ||
| + | Version 0.6.1-20090630 (http:// | ||
| + | Copyright (C) 2009 Nara Institute of Science and Technology | ||
| + | All rights reserved. | ||
| + | |||
| + | open_jtalk - The Japanese TTS system "Open JTalk" | ||
| + | |||
| + | usage: | ||
| + | | ||
| + | options: | ||
| + | -x dir : dictionary directory | ||
| + | -m htsvoice | ||
| + | -ow s : filename of output wav audio (generated speech) | ||
| + | -ot s : filename of output trace information | ||
| + | -s i : sampling frequency | ||
| + | -p i : frame period (point) | ||
| + | -a f : all-pass constant | ||
| + | -b f : postfiltering coefficient | ||
| + | -r f : speech speed rate | ||
| + | -fm f : additional half-tone | ||
| + | -u f : voiced/ | ||
| + | -jm f : weight of GV for spectrum | ||
| + | -jf f : weight of GV for log F0 | ||
| + | -z i : audio buffer size (if i==0, turn off) | ||
| + | infile: | ||
| + | text file [stdin] | ||
| + | |||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | 実は難しいオプションはいりません。hts_voice_nitech_jp_atr503_m001-1.05ディレクトリのINSTALLを参照するとコマンドラインの説明がありました。 | ||
| + | < | ||
| + | root@amane:/ | ||
| + | Installation Instructions | ||
| + | ************************* | ||
| + | |||
| + | 1. After unpacking the tar.gz file, cd to the HTS voice directory. | ||
| + | |||
| + | 2. Run engine with appropriate options. | ||
| + | |||
| + | % hts_engine -m nitech_jp_atr503_m001.htsvoice \ | ||
| + | -ow output.wav input.lab | ||
| + | |||
| + | % open_jtalk -m nitech_jp_atr503_m001.htsvoice \ | ||
| + | -ow output.wav -x dic_dir input.txt | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | -m オプションで音声情報、 -x オプションで辞書を指定するだけでとりあえず音声合成できます。 | ||
| + | < | ||
| + | root@amane:/ | ||
| + | 今日は台風がきていますね。電車の運行状況が、少し気になります。 | ||
| + | |||
| + | root@amane:/ | ||
| + | root@amane:/ | ||
| + | root@amane:/ | ||
| + | -rw-r--r-- | ||
| + | -rw-r--r-- | ||
| + | root@amane:/ | ||
| + | </ | ||
| + | |||
| + | test.txt はUTF-8で記述したテキストファイルです。 | ||
| + | open_jtalk_dic_utf_8-1.07ディレクトリにはUTF-8版のMecabの辞書が入っていますが、たぶんOpen JTalk用にカスタマイズされているでしょうから通常手順で導入したMecabの辞書を使うと何か問題があるかもしれません。 | ||
| + | |||
| + | MMDAgent_Example-1.4/ | ||
| + | |||
| + | Meiさん音声\\ | ||
| + | {{documents: | ||
| + | |||
| + | nitech defaultさん音声\\ | ||
| + | {{documents: | ||
| + | |||
| + | |||
| + | {{tag> 音声合成 FreeBSD Open_JTalk 技術資料}} | ||
documents/os/freebsd/openjtalk/openjtalk-001.txt · 最終更新: by k896951
