トップ «前月 最新 翌月»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2010/10/04(Mon) 明日もバイトー [長年日記] 編集 23:30現在 22℃

_ [Linux][Ubuntu][FC][Debian][Windows][研究関係][雑記]オープンソースの音声合成ソフトウェア「GalateaTalk」を使ってみる

Linux上で動かせるので非常に便利。(Windowsでも移植されたのがあるっぽい?)

所感としては、かなりいいと思います。

参考にさせていただいたページ:

http://lfll.blog73.fc2.com/blog-entry-140.html
http://ja.nishimotz.com/chasen
http://www.nilab.info/zurazure2/000800.html#20071115
http://hirokawa.netflowers.jp/entry/24386/
http://d.hatena.ne.jp/tokuhirom/20070328/1175075848
http://www.info.kindai.ac.jp/MediaPrjII/index.php?Gtalk

事前準備

以下のものをapt-get等でインストールしておく。

# apt-get install chasen
# apt-get install libxslt1-dev
# apt-get install libxml2-dev

ソースのDL

まず、GalateaTalk用のフォルダを作る。

$ mkdir galateatalk

で、ここ(http://sourceforge.jp/projects/galateatalk/)から以下のファイルをDLし、先ほどのフォルダに入れ解凍。

 chaone-1.3.0b2.1.zip
 gtalk-090225.tar.gz
 speakers-060820.tar.gz

さらに、辞書ファイルとして以下のどちらかを準備する。

UniDic(登録が必須)

こちら(http://www.tokuteicorpus.jp/dist/)から

 unidic-1.3.0_eucj.tar.gz

をDLし、解凍。

Naist-jdic(BSDライセンスのため使いやすい)

*naist-jdicはapt-getでも入るはずだが、どうもうまく動かなかったので、新たに準備した。

こちら(http://sourceforge.jp/projects/naist-jdic/)から

 naist-jdic-0.4.3.tar.gz

をDLし、解凍。さらに、解凍した先のフォルダに入り、

$ ./configure
$ make

を行う。

コンパイル

chaone-1.3.0b2に入り、

$ ./configure
$ make

同様に、gtalk-090225に入り、

$ ./configure
$ make

speakers-060820については解凍するだけでOK。

設定ファイルの調整

自分の環境に合わせて設定ファイルの修正が必要。

具体的には、gtalk-090225の、「ssm.conf」と「chasenrc」に手を加える。

自分の場合は以下のように書き換えた。

「ssm.conf」
# configuratiuon file for gtalk (GalateaTalk)

# path name of 'chasen'
#CHASEN: ../morph/chasen-2.3.3/chasen/chasen
CHASEN: /usr/bin/chasen

# configuration file for 'chasen'
CHASEN-RC: ./chasenrc

# command of running 'chaone'
CHAONE: ../chaone-1.3.0b2/chaone

# path name of 'chaone.xsl' (only for library-based version)
#CHAONE-XSL-FILE: ../chaone-1.2.0/chaone_t_EUC-JP.xsl

# default for numbers and alphabets
NUMBER: DECIMAL
ALPHABET: WORD
DATE: YMD
TIME: hms

# dictionary
DICTIONARY: ./gtalk-eucjp.dic

# automatic play of synthesized speech
AUTO-PLAY: NO

# time delay [msec] for autuomatic play
AUTO-PLAY-DELAY: 250

# file of phoneme list
PHONEME-LIST: mono.lst

# parameter files for each speaker
SPEAKER-ID: male01
GENDER: male
DUR-TREE-FILE:   ../speakers-060820/male01/tree-dur.inf
PIT-TREE-FILE:   ../speakers-060820/male01/tree-lf0.inf
MCEP-TREE-FILE:  ../speakers-060820/male01/tree-mcep.inf
DUR-MODEL-FILE:  ../speakers-060820/male01/duration.pdf
PIT-MODEL-FILE:  ../speakers-060820/male01/lf0.pdf
MCEP-MODEL-FILE: ../speakers-060820/male01/mcep.pdf

# parameter files for each speaker
SPEAKER-ID: female01
GENDER: female
DUR-TREE-FILE:   ../speakers-060820/female01/tree-dur.inf
PIT-TREE-FILE:   ../speakers-060820/female01/tree-lf0.inf
MCEP-TREE-FILE:  ../speakers-060820/female01/tree-mcep.inf
DUR-MODEL-FILE:  ../speakers-060820/female01/duration.pdf
PIT-MODEL-FILE:  ../speakers-060820/female01/lf0.pdf
MCEP-MODEL-FILE: ../speakers-060820/female01/mcep.pdf

*なお、文字コードはEUC-JPにしておくのが吉

「chasenrc」

;;
;;  chasenrc for unidic-1.3.0
;;  chaOne用
;;
;;unidic
(GRAMMAR ../unidic)
;;naist-jdic
;(GRAMMAR ../naist-jdic-0.4.3)
(DADIC chadic)

;;unidic
(UNKNOWN_POS (名詞 普通名詞 一般))
;;naist-jdic
;(UNKNOWN_POS (名詞 一般))

(OUTPUT_FORMAT "<W1 orth=\"%m\" kana=\"%?U/%m/%y0/\" pron=\"%?U/%m/%a0/\" pos=\"%U(%P-)\"%?T/ cType=\"%T \"//%?F/ cForm=\"%F \"//%?I/ %i0//>%m</W1>\n")

(OUTPUT_COMPOUND "SEG")

(BOS_STRING "<S>\n")
(EOS_STRING "</S>\n")

(DEF_CONN_COST 10000)
(POS_COST
	((*)       1)
	((UNKNOWN) 30000)
)

(CONN_WEIGHT 1)
(MORPH_WEIGHT 1)
(COST_WIDTH	  0)

(ANNOTATION
	(("<" ">") "%m\n")
	(("\"") "<cha:W1 orth=\"&#x22;\" kana=\"&#x22;\" pron=\"&#x22;\" pos=\"%U(%P-)\"%?T/ cType=\"%T \"//%?F/ cForm=\"%F \"//%?I/ %i//>%m</cha:W1>\n")
)

*なお、文字コードはEUC-JPにしておくのが吉

*「naist-jdic」を使う場合は、unidicの下の一行をコメントにし、naist-jdicの下の一行をコメントアウトとすればOK。

テスト

gtalk-090225の中に、「RUN」というスクリプトが入っているので、それで試してみる。

$ chmod 777 RUN
$ ./RUN

これで「この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。」という文章が流れればOK!

追加で実験

ファイルからテキストを読み込んでみる。

まあ、RUNで書き出される内容をそのままテキストに貼り付ければいいんだが。

ついでなので、ファイルへの書き出しと、女性声への変更を行ってみる。

まあ、READMEを見れば一目瞭然なうえ、よっぽど詳しく書いているので蛇足以外の何者でもない気がするがな!

「test.txt」(一つ上のディレクトリに置くこととした)

prop Text.text = NoAutoOutput
prop Text.pho = NoAutoOutput
prop Text.dur = NoAutoOutput
set Speaker = female01
set Log = CONSOLE
set Log.conf = YES
set Log.text = YES
set Log.arrangedText = YES
set Log.chasen = YES
set Log.tag = YES
set Log.phoneme = YES
set Log.mora = YES
set Log.morph = YES
set Log.aphrase = YES
set Log.breath = YES
set Log.sentence = YES
set Text = この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
set Save  = ../test.raw
set Speak = NOW
set Run = EXIT

で、端末から

$ ./gtalk -C ./ssm.conf < ../test.txt

として実行する。

これで、Rawファイルに女性声の音声が出力されたはず。

で、これを「sox」を使ってwavに変換する。

$ sox -r 16000 -w -s -x test.raw  test.wav

あとは適当なプレイヤーで聞いてみて問題が無ければOK!

これ以上のことはREADMEを読むべし!

*READMEではwavファイルも吐き出せるようなことも書いているが、自分はうまくできなかったので、とりあえずこの方法(raw→wav)を紹介しておく。

*見たら分かると思うが、「set Speaker = female01」を 「set Speaker = male01」にすれば男性声になる。


2010/10/13(Wed) 今日は研究会で学会発表の報告なり [長年日記] 編集 16:30現在 25℃

_ [Windows][FC][Ubuntu][Debian][Linux][Firefox][雑記]FirefoxのUserAgentを偽装するアドオン「User Agent Switcher」

これを使うことで、Firefoxから、IEの場合のホームページや、携帯の場合のホームページ等が確認できるようになる。

*応用としては、(UserAgentによる振り分けを行っているのであれば)携帯専用サイトや、IE専用サイトをFirefoxから利用できるようになる。

前(http://robotics.naist.jp/~akihiro-i/dialy/?date=20091001)に紹介した、「IETab」や「FireMobileSimulator」と同じような用途に使えると思う。

ただし、デフォルトの状態では、設定できるUserAgentが少ないため、本当に便利に使うには、追加で設定が必要。(iPhone3.0やIEが利用できる程度)

それぞれ個別に設定してもいいのだが、こちら(http://webpersons.jp/tips/2008/08/user-agent-switcher-import.html)で紹介されているXMLファイルを使えば、UserAgentを一括登録できるっぽい。

*ただ、自分としては、これを使って携帯専用サイトに登録するってのはちょっとグレーな気がする。

具体的には、iPhone3.0に設定することで、MHP3体験版のためのモンハン部登録に使えるできるらしい。

・・・これってありなんだろうか?

まあ、そんなの自己責任だし、自分には関係ないが。

以上!


2010/10/15(Fri) お腹空いたー [長年日記] 編集 17:30現在 23℃

_ [Matlab][Ubuntu][Debian][FC][Linux][Windows][Mac][研究関係] Matlabで使える、Wavelets and Signal Processingパッケージ「WAVELAB」

***** Warning!!!! *****

いつも以上に殴り書きなので、絶対に信用しないように!

***** Warning!!!! *****

まあ、HPやソフト自体がかなりわかりやすいので、こんなメモは不要という説もある。

*自分はMatlabをLinuxで動かしているので、Linuxの場合の使い方のみをメモっていく。

*ソフト自体はWindows,Linux,Macのすべてに対応。詳しくは公式HPを見るべし。

インストール

まず、こちら(http://www-stat.stanford.edu/~wavelab/)からDL。

で、解凍して出来た「Wavelab850」ディレクトリを、

 <MatlabToolBoxPath>/Wavelab850

にコピー。(自分の場合は /usr/local/MATLAB/R2009a/toolbox/Wavelab850 だった)

さらに、Matlab起動時にパスを自動で通してくれるように設定を行う。

まず、「<MatlabToolBoxPath>/Wavelab850/WavePath.m」を、「<MatlabToolBoxPath>/local/」以下にコピーする。

で、コピーした「WavePath.m」を「startup.m」にリネームする。(既に存在する場合は、上書きしないように注意!)

*すでに「<MatlabToolBoxPath>/local/」以下に「startup.m」というファイルがある場合は、そのファイルに、

WavePath;

という一行を書き加えるだけでOK。

(おまけ)自動でパスを通したくない場合

使いたい場合にのみ、以下の方法でパスを通せばいい。

適当なフォルダでMatlabを実行。

で、まずはtoolbox内の「Wavelab850」にパスを通す。

>> path(path,'/usr/local/MATLAB/R2009a/toolbox/Wavelab850');

さらに、

>> WavePath

として、「WavePath.m」を実行することで、各関数へパスが通り、関数が呼び出せるようになる。

Mexファイルのコンパイル

*これは別に必須ではない。

上記の設定を終えた状態で

>> InstallMEX

を実行。

使い方

ここまでで設定は終了。

実際の使い方は、「Wavelab850/Workouts」の中の.mファイルを見れば分かるはず。

*というか、それ以外に情報が無いかも?

各ディレクトリにある「Contents.m」というファイルに、それぞれ何を行うプログラムなのかが書いている。

以上!

おまけ

簡単に、自分に関係しそうな部分だけをメモっておく。(多分間違った情報なので信用しないように!)

・連続ウェーブレット変換については、「MFWork01.m」および「MFWork02.m」を参考にすればいい?

・1次元の(逆)ウェーブレット変換については、「toon0531.m」あたりを参考にすればいい?

 ・FWT_POへの入力は、2の倍数のデータ数をもつ1次元データでないとエラーが出る。

 ・「toon0532.m」はDCTの場合の結果を表示するので、DCTとWevelet変換の違いがわかりやすい?


2010/10/16(Sat) 冷凍ポテトを買ったが油が無い [長年日記] 編集 2:30現在 21℃

_ [Matlab][Ubuntu][Debian][FC][Linux][Windows][Mac][研究関係]MATLABのm-fileをコンパイルし、非Matlab環境でも動かせるようにする(基礎編)

参考:

http://robotics.naist.jp/~min-d/p/index.php?MATLAB#ydbfa970

http://www.mathworks.co.jp/support/solutions/ja/data/1-9M7VF7/index.html?product=CO&solution=1-9M7VF7

実行可能ファイルを生成する

hogehoge.mをコンパイルしたい場合、こんな感じでコマンドを打てばいい。

>> mcc -m hogehoge.m

これで、実行可能ファイル(./hogehoge)が生成される。

実行する

MATLAB環境,非MATLAB環境に関わらず、LD_LIBRARY_PATHの追加が必要となる。

MATLAB環境の場合

実行すると「./hogehoge: error while loading shared libraries: libmwmclmcrrt.so: cannot open shared object file: No such file or directory」てな感じでエラーが出るので、

$ find / -name libmwmclmcrrt.so

で、その共有ライブラリを探し、LD_LIBRARY_PATHの追加を行えばOK。(パスの通しかたは次の日記に記載)

何度か出てくることもあるが、それらをすべて追加すれば、無事に実行できるはず。

非MATLAB環境の場合

まず、以下のファイルを、すべて非MATLAB環境に移動させる必要がある。

mccコマンドで作成した実行ファイル「hogehoge」(拡張子無し)
実行ファイルと共に生成された「run_hogehoge.sh」
$MATLABROOT\toolbox\compiler\deploy\<Arch>\MCRInstaller.bin

ここで、「$MATLABROOT」は、MATLAB インストールディレクトリを、<Arch>はOSを示す。

その後、非MATLAB環境にて、MCRInstaller.binを実行しMCRInstallerのインストールを行う。

# ./MCRInstaller.bin

後は、MCRInstallerのインストールディレクトリを指定して「run_hogehoge.sh」を実行すれば、非MATLAB環境でも、スタンドアローンに実行できるはず。

$ ./run_hogehoge.sh MCRROOT/<MCRversion>

ここで、MCRROOTは、MCR Installerのインストールディレクトリを示し、<MCRversion> は、MCR のバージョンを示す。

自分の場合はこんな感じのコマンドで実行できた。

$ ./run_hogehoge.sh /opt/MATLAB/MATLAB_Compiler_Runtime/v710

以上!ガンバレ!

_ [Matlab][Ubuntu][Debian][FC][Linux][Windows][Mac]Linuxで、共有ライブラリにパスを通す方法(sh系)

参考:

http://pocketstudio.jp/linux/?%A5%D1%A5%B9%28PATH%29%A4%CE%B3%CE%C7%A7%A4%C8%C0%DF%C4%EA%CA%FD%CB%A1%A4%CF%A1%A9

http://www.geocities.co.jp/CollegeLife-Labo/1513/matlab.txt

こんな感じのコマンドを打てばOK。

$ export LD_LIBRARY_PATH="/usr/local/MATLAB/R2009a/bin/glnx86/"

ログインする度に自動で設定したい場合は、各ユーザのホームディレクトリ配下にある、「.bash_profile」を開き、上記の

export LD_LIBRARY_PATH="/usr/local/MATLAB/R2009a/bin/glnx86/"

と言うのを書き加えればOK!

もし同じ環境変数の設定をサーバ内の全ユーザに対して指定したい場合は、「/etc/profile」を開き、末尾に

export LD_LIBRARY_PATH="/usr/local/MATLAB/R2009a/bin/glnx86/"

を加えればOK!

*各ユーザの .bash_profile の中に、ログイン後に /etc/profile ファイルを読み込むような記述があるらしい。

*パスを「追加」する場合には、以下のようにする。

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/matlab/bin/glnx86
$ export LD_LIBRARY_PATH

2010/10/19(Tue) 研究がうまく進まないー [長年日記] 編集 0:00現在 19℃

_ [Matlab][研究関係][未まとめ]Matlabについてのメモ書き

カーネル密度推定「ksdensity」

この辺(http://www.damtp.cam.ac.uk/user/windows/Matlab-R2007a/toolbox/stats/ja/ksdensity.m)とか、この辺(http://www.mathworks.com/help/ja_JP/toolbox/stats/ksdensity.html)を見れ!


2010/10/26(Tue) このタイトルって意味あるのかね? [長年日記] 編集 15:30現在 16℃

_ [Ubuntu][Debian][FC][Linux][研究関係][OpenCV](gtk-recordmydesktopで出来た)ogvファイルをmencoderを使って変換

こんな感じで。

$ mencoder -idx org.ogv -ovc lavc -oac mp3lame -o converted.wmv

ffmpegでも出来そうだが、オプションが長くて覚えられないので、とりあえずこっちで。(もちろんwmv以外にも変換できる)


2010/10/29(Fri) この日記にリンク元を見る機能があったことに今気づいた [長年日記] 編集 14:00現在 18℃

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記] C言語(C++)でディレクトリ内に、ある名前を持ったファイルが存在するかを確認する(stat編)

前(http://robotics.naist.jp/~akihiro-i/dialy/?date=20100606#p03)は「opendir」を使ってファイルの有無を確認していたが、「stat」を使った方が簡単に出来るようだ。

こんな感じで書けばOK?

 #include <sys/types.h>
 #include <sys/stat.h>
 #include <time.h>
 #include <stdio.h>
 #include <stdlib.h>

 int check_exist(char* target)
 {
   struct stat sb;
   if (stat(target, &sb) == -1)
     return 1;
   else
     return 0;
 }

 int main(int argc, char **argv)
 {
   char* target = argv[1];
   if (argc != 2) {
     fprintf(stderr, "Usage: %s <targetname>\n", argv[0]);
     exit(EXIT_FAILURE);
   }
   if(check_exist(target) != 0)
   {
     perror("stat");
     exit(EXIT_SUCCESS);
   }
   else
   {
     printf("\"%s\" is found\n",target);
     exit(EXIT_SUCCESS);
   }
 }

statの詳しい使い方は、ここ(http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html)を見れば分かるはず。