試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

日本語の文字列をオーディオデータに変換するOpen JTalkのGNU/Linuxへの導入に関する追加メモ(2012年1月中旬時点)

日本語の文字列をオーディオデータに変換するOpen JTalkの概要とインストール(2012年1月上旬時点)」に関連して、GNU/LinuxへのOpen JTalkの導入に関する幾つかの追加メモについてを扱う。

  1. 受け付けるエンコーディングについて
  2. GNU/Linux向けの手動でのビルド/インストール作業例
    1. hts_engine API
    2. Open JTalk
    3. 声データ(NIT ATR503 M001とMei)

受け付けるエンコーディングについて

2011-2012年の時点では、GNU/Linuxのディストリにおいては(OS内の)日本語環境や(ユーザが読み書きする)テキストファイルのエンコーディングにはUTF-8が標準で用いられている(もちろんCP932やEUC-JPのファイルも読み書きできるエディタは存在する)。
Open JTalkは変換したい文字列を(プレーン)テキストファイルで渡すことになるが、GNU/Linuxではその入力が標準ではUTF-8エンコーディングとなることになる。
Open JTalkが受け付けるテキストファイルのエンコーディングOpen JTalkのconfigureスクリプトのオプション--with-charsetの値によって(ビルドの前に)決まり、このオプションで指定したエンコーディングと(入力)テキストファイルのエンコーディングが異なると正常にオーディオファイルを出力することはできない。
--with-charsetオプションの値は

のいずれかをとるが、手元の環境(x86_64版Ubuntu 11.10)では、EUC-JPやCP932のエンコーディングのテキストファイルを用意してこのオプションをテキストファイルのエンコーディングに合わせて変更しても、音声合成(変換)時に一部がうまく処理されなかった(UTF-8指定時のみ正常動作)。その場合、端末には

WARING: convert_pos() in njd2jpcommon.c: 記号 一般 * * are not appropriate POS.
WARING: convert_pos() in njd2jpcommon.c: 名詞 固有名詞 組織 * are not appropriate POS.

といったメッセージが表示されていた。

GNU/Linux向けの手動でのビルド/インストール作業例

以下の作業例は[ホームディレクトリ]/openjtalk/というディレクトリ以下にファイルをインストールするものとなる。作業にはunzipwgetを用いている。

[ホーム]+-[openjtalk]-+-[bin]-+-open_jtalk     (Open JTalkのコマンド)
        |             |       +-hts_engine     (使用しないので削除してもOK)
        |             +-[include]-HTS_engine.h (hts_engine APIのヘッダ)
        |             +-[lib]-libHTSEngine.a   (hts_engine APIの静的リンクライブラリ)
        |             +-[dic]-+-char.binなど              (Open JTalkの辞書ファイル群)
        |             +-[voice]-+-[nitech-jp-atr503-m001] (NIT ATR503 M001の声データ)
        |                       +-[mei_normalなど]        (Meiの各種声データ)

これを使う際には環境変数PATHに[ホームディレクトリ]/openjtalk/bin/を含めるか、パス名でopen_jtalkコマンドを実行する。辞書のディレクトリについてはこのdicディレクトリを実行時に指定する。
アンインストールをしたい場合はこの[ホームディレクトリ]/openjtalk/以下を全て消す。

hts_engine API

(ダウンロード)
$ wget downloads.sourceforge.net/hts-engine/hts_engine_API-1.06.tar.gz

(展開)
$ tar zxf hts_engine_API-1.06.tar.gz

(作業ディレクトリを移動)
$ cd hts_engine_API-1.06/

(configureスクリプトを実行)
[hts_engine_API-1.06]$ ./configure --prefix=${HOME}/openjtalk

(ビルド)
[hts_engine_API-1.06]$ make -j $(egrep -c "^processor\s:\s[0-9]+$" /proc/cpuinfo)

(インストール)
[hts_engine_API-1.06]$ make install-strip

(作業ディレクトリを戻す)
[hts_engine_API-1.06]$ cd -

(後始末)
$ rm hts_engine_API-1.06 hts_engine_API-1.06.tar.gz -fr

Open JTalk

(ダウンロード)
$ wget downloads.sourceforge.net/open-jtalk/open_jtalk-1.05.tar.gz

(展開)
$ tar zxf open_jtalk-1.05.tar.gz

(作業ディレクトリを移動)
$ cd open_jtalk-1.05/

(configureスクリプトを実行)
[open_jtalk-1.05]$ ./configure --prefix=${HOME}/openjtalk --with-hts-engine-header-path=${HOME}/openjtalk/include --with-hts-engine-library-path=${HOME}/openjtalk/lib --with-charset=utf-8

(ビルド)
[open_jtalk-1.05]$ make -j $(egrep -c "^processor\s:\s[0-9]+$" /proc/cpuinfo)

(インストール)
[open_jtalk-1.05]$ make install-strip

(作業ディレクトリを戻す)
[open_jtalk-1.05]$ cd -

(後始末)
$ rm open_jtalk-1.05 open_jtalk-1.05.tar.gz -fr

声データ(NIT ATR503 M001とMei)
声データについては端末を使った必須の作業はないため、それぞれのファイル(作業例内のwgetの行の引数)を任意のソフトウェアでダウンロード・展開した後でGUI環境で配置してもよい。

(ディレクトリを作成)
$ mkdir ~/openjtalk/voice

(NIT ATR503 M001をダウンロード)
$ wget downloads.sourceforge.net/open-jtalk/hts_voice_nitech_jp_atr503_m001-1.04.tar.gz

(NIT ATR503 M001を展開)
$ tar zxf hts_voice_nitech_jp_atr503_m001-1.04.tar.gz

(NIT ATR503 M001をインストール)
$ mv hts_voice_nitech_jp_atr503_m001-1.04 ~/openjtalk/voice/nitech-jp-atr503-m001

(NIT ATR503 M001の後始末)
$ rm hts_voice_nitech_jp_atr503_m001-1.04.tar.gz -f

(Meiを含むパッケージをダウンロード)
$ wget sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.1/MMDAgent_Example-1.1.zip

(Meiを抽出)
$ unzip MMDAgent_Example-1.1.zip "MMDAgent_Example-1.1/Voice/*"

(Meiをインストール)
$ mv MMDAgent_Example-1.1/Voice/* ~/openjtalk/voice/

(Meiの後始末)
$ rm MMDAgent_Example-1.1 -fr

使用したバージョン:

  • GCC 4.6.1
  • hts_engine API 1.06
  • Open JTalk 1.05
  • NIT ATR503 M001 1.04
  • MMDAgent Sample Script 1.1