OpenJTalkで出力した音声ファイルに無音区間を追記したいので
soxをインストールしてみました。
http://sourceforge.jp/projects/sfnet_sox/releases/
cygwinのあるバージョンを探して、~/binにつっこんでみた。
そしたら、soxコマンドがたたけるようになりました。
こんな感じのインストールでいいのかな・・・・
今度は無音区間のwavファイルをつくらねば・・・
でも、今度は、何か挙動がおかしい感じになってしまった。
open_j_talkコマンドがたたけなくなった。
~/bash_profileの中の
if [ -d "${HOME}/bin" ] ; then
PATH="${HOME}/bin:${PATH}:"
fi
のコメントをはずしたのがいけなかったのかな。
ホームのbinが優先されるようになって、cygwinがうまく動かない。
だからHOMEのbinを優先させないようにしてみた
if [ -d "${HOME}/bin" ] ; then
PATH="${PATH}:${HOME}/bin"
fi
そんな感じでインストールはできたので
sox $1.wav -t raw $1.raw
cat $1.raw $1.raw > $1_$1.raw
sox -r 48000 -U -c 2 $1_$1.raw $1.wav
こんな感じで2回繰り返したwavファイルを作ろうとしたんですが・・・
音が割れて聞こえてしまう・・・なんでやろ・・
cygwinにてできるかな
Open JTalkというミドルをインストールしたい・・・
hts_engineの最新版(1.07)ダウンロードしてくる
gccのバージョンは4.5.3 ./configureは成功 ./makeでエラー
$ make
Making all in lib
make[1]: ディレクトリ `/home/tetsuya/teika/hts_engine_API-1.07/lib' に入ります
gcc -DPACKAGE_NAME=\"hts_engine_API\" -DPACKAGE_TARNAME=\"hts_engine_api\" -DPACKAGE_VERSION=\"1.07\" -DPACKAGE_STRING=\"hts_engine_API\ 1.07\" -DPACKAGE_BUGREPORT=\"hts-engine-users@lists.sourceforge.net\" -DHAVE_LIBM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_VPRINTF=1 -DHAVE_SQRT=1 -DHAVE_STRCHR=1 -DHAVE_STRRCHR=1 -DHAVE_STRSTR=1 -DHAVE_LIBWINMM=1 -I. -I../include -g -O2 -MT HTS_audio.o -MD -MP -MF .deps/HTS_audio.Tpo -c -o HTS_audio.o HTS_audio.c
mv -f .deps/HTS_audio.Tpo .deps/HTS_audio.Po
gcc -DPACKAGE_NAME=\"hts_engine_API\" -DPACKAGE_TARNAME=\"hts_engine_api\" -DPACKAGE_VERSION=\"1.07\" -DPACKAGE_STRING=\"hts_engine_API\ 1.07\" -DPACKAGE_BUGREPORT=\"hts-engine-users@lists.sourceforge.net\" -DHAVE_LIBM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_VPRINTF=1 -DHAVE_SQRT=1 -DHAVE_STRCHR=1 -DHAVE_STRRCHR=1 -DHAVE_STRSTR=1 -DHAVE_LIBWINMM=1 -I. -I../include -g -O2 -MT HTS_engine.o -MD -MP -MF .deps/HTS_engine.Tpo -c -o HTS_engine.o HTS_engine.c
mv -f .deps/HTS_engine.Tpo .deps/HTS_engine.Po
gcc -DPACKAGE_NAME=\"hts_engine_API\" -DPACKAGE_TARNAME=\"hts_engine_api\" -DPACKAGE_VERSION=\"1.07\" -DPACKAGE_STRING=\"hts_engine_API\ 1.07\" -DPACKAGE_BUGREPORT=\"hts-engine-users@lists.sourceforge.net\" -DHAVE_LIBM=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_VPRINTF=1 -DHAVE_SQRT=1 -DHAVE_STRCHR=1 -DHAVE_STRRCHR=1 -DHAVE_STRSTR=1 -DHAVE_LIBWINMM=1 -I. -I../include -g -O2 -MT HTS_misc.o -MD -MP -MF .deps/HTS_misc.Tpo -c -o HTS_misc.o HTS_misc.c
HTS_misc.c: In function 'HTS_ftell':
HTS_misc.c:251:26: error: request for member '__pos' in something not a structure or union
Makefile:260: recipe for target `HTS_misc.o' failed
make[1]: *** [HTS_misc.o] Error 1
make[1]: ディレクトリ `/home/tetsuya/teika/hts_engine_API-1.07/lib' から出ます
Makefile:247: recipe for target `all-recursive' failed
make: *** [all-recursive] Error 1
ソースの251行目周辺をみたが・・よくわからない。_WIN32は定義されていないようだが・・・ それでいいのかどうか良く分からないし。
#if defined(_WIN32) || defined(__APPLE__)
return (size_t) pos;
#else
return (size_t) pos.__pos;
#endif
/* _WIN32 || __APPLE__ */
ということで見事にハマル・・ cygwin苦手。
気を取り直して、 htsの過去バージョン
1.01は、OK。1.02もOK。1.03はOK、1.04はOK.1.05はOK.1.06はOK。 結局1.07以外は大丈夫のようだった。
とりあえず、hts_engineは1.06をインストールしてみた。
Open JTalk1.06とhts1.06の組み合わせを試す。 makeでエラーとなってしまった。
open_jtalk.c:91:4: error: too few arguments to function 'HTS_Engine_initialize'
/usr/local/include/HTS_engine.h:629:6: note: declared here
Open JTalk1.06とhts1.05の組み合わせを試す。 makeで同じエラーとなってしまった。
open_jtalk.c:91:4: error: too few arguments to function 'HTS_Engine_initialize'
/usr/local/include/HTS_engine.h:673:6: note: declared here
Open JTalk1.05とhts1.06の組み合わせにしてみよう。
Open JTalkの過去のバージョン すんなりmake通りました!!!
続いて、サンプルを動かすところをやってみよう。 test.txtに
今日はいい天気です
と入力して保存。
そして、辞書のダウンロードutf-8版を選ばねば。 1.05の辞書
そして、ボイスファイルのダウンロード こちらから
実行用シェルスクリプト①の作成。
#!/bin/bash
VOICE=VOICE=hts_voice_nitech_jp_atr503_m001-1.04
DIC=open_jtalk_dic_utf_8-1.05
open_jtalk \
-td $VOICE/tree-dur.inf \
-tf $VOICE/tree-lf0.inf \
-tm $VOICE/tree-mgc.inf \
-md $VOICE/dur.pdf \
-mf $VOICE/lf0.pdf \
-mm $VOICE/mgc.pdf \
-df $VOICE/lf0.win1 \
-df $VOICE/lf0.win2 \
-df $VOICE/lf0.win3 \
-dm $VOICE/mgc.win1 \
-dm $VOICE/mgc.win2 \
-dm $VOICE/mgc.win3 \
-ef $VOICE/tree-gv-lf0.inf \
-em $VOICE/tree-gv-mgc.inf \
-cf $VOICE/gv-lf0.pdf \
-cm $VOICE/gv-mgc.pdf \
-k $VOICE/gv-switch.inf \
-x $DIC \
-ow _hoge.wav \
そして実行
$ ./run_jtalk.sh
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: text2mecab() in text2mecab.c: Wrong character.
WARNING: strcat_voiced() in njd_set_unvoiced_vowel.c: Wrong pron.WARNING: strcat_voiced() in njd_set_unvoiced_vowel.c: Wrong pron.WARNING: strcat_voiced() in njd_set_unvoiced_vowel.c: Wrong pron.WARNING: strcat_voiced() in njd_set_unvoiced_vowel.c: Wrong pron.WARNING: strcat_voiced() in njd_set_unvoiced_vowel.c: Wrong pron.WARNING: strcat_voiced() in njd_set_unvoiced_vowel.c: Wrong pron../run_jtalk.sh: line 25: 328 Segmentation fault (コアダンプ) open_jtalk -td $VOICE/tree-dur.inf -tf $VOICE/tree-lf0.inf -tm $VOICE/tree-mgc.inf -md $VOICE/dur.pdf -mf $VOICE/lf0.pdf -mm $VOICE/mgc.pdf -df $VOICE/lf0.win1 -df $VOICE/lf0.win2 -df $VOICE/lf0.win3 -dm $VOICE/mgc.win1 -dm $VOICE/mgc.win2 -dm $VOICE/mgc.win3 -ef $VOICE/tree-gv-lf0.inf -em $VOICE/tree-gv-mgc.inf -cf $VOICE/gv-lf0.pdf -cm $VOICE/gv-mgc.pdf -k $VOICE/gv-switch.inf -x $DIC -ow _hoge.wav -ot _log.txt test.txt
コアダンプで落ちた。
なんだか、utf-8になっていないような気がしたのでOpen-JTalkのconfigureでutf-8を指定して make uninstall,make clean,configure,make,make installのやりなおし。
./configure --with-charset=UTF-8
そして再度、実行 $ ./run_jtalk.sh しぇべった!!!でも、なんか今日はいい天気に聞こえない??? へんだぞ。「今日は」はなんとなく聞こえるんですけど。
ログファイルをみてみるとちゃんと認識はされてそうだが・・・ _log.txt
[Text analysis result]
今日,名詞,副詞可能,*,*,*,*,今日,キョウ,キョー,1/2,C3,-1
は,助詞,係助詞,*,*,*,*,は,ハ,ワ,0/1,名詞%F1/動詞%F2@0/形容詞%F2@0,1
いい,動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,イイ,1/2,C1,0
天気,名詞,一般,*,*,*,*,天気,テンキ,テンキ,1/3,C1,0
です,助動詞,*,*,*,特殊・デス,基本形,です,デス,デス',0/2,名詞%F2@1/動詞%F1/形容詞%F2@0,1
で、ボイスファイルのINSTALLというファイルにJtalkを動かすサンプルがあり、 そちらを参照して、しぇべらせたらうまくしゃべってくれた!!!!!!!!!! 要するに、実行用シェル①を信じちゃいけないよってお話でした。
やっと環境が整いました。結構素直にインストールできたと思う。
私の書いた、実行用シェルはこんな感じになりましたのでのせときます。
#!/bin/bash
VOICE=hts_voice_nitech_jp_atr503_m001-1.04
DIC=open_jtalk_dic_utf_8-1.05
open_jtalk -s 48000 -p 240 -a 0.55 \
-td $VOICE/tree-dur.inf -tm $VOICE/tree-mgc.inf -tf $VOICE/tree-lf0.inf \
-tl $VOICE/tree-lpf.inf -md $VOICE/dur.pdf -mm $VOICE/mgc.pdf \
-mf $VOICE/lf0.pdf -ml $VOICE/lpf.pdf -dm $VOICE/mgc.win1 \
-dm $VOICE/mgc.win2 -dm $VOICE/mgc.win3 -df $VOICE/lf0.win1 \
-df $VOICE/lf0.win2 -df $VOICE/lf0.win3 -dl $VOICE/lpf.win1 \
-em $VOICE/tree-gv-mgc.inf -ef $VOICE/tree-gv-lf0.inf -cm $VOICE/gv-mgc.pdf \
-cf $VOICE/gv-lf0.pdf -k $VOICE/gv-switch.inf -ow output.wav \
-ot trace.txt \
-x $DIC test.txt
MojoliciousのコンフィグファイルをWebとバッチで共有したい
Mojoliciousのコンフィグプラグインを用いて、perlishな設定ファイルを読み込みますが。同じ設定ファイルをバッチからも読み込みたいってことは当然の欲求でして。どうやるのかアレコレCPANを探してはまりました。モジュールにあると考えたのが浅はかというか。
my $config = $self->plugin('Config', { file => 'hoge_web.conf' });
単にrequireすればいいというおちでした。
my $conf = require "$Bin/../hoge_web.conf";
いや。勉強になりました。
mojoliciousのクッキーは暗号化されているのか
ネット上には情報がいろいろあってよく分からなかったので自分で調べてみた。 こんな感じでindexメソッドを実装。
sub index {
my $self = shift;
$self->session(expire=>1);
$self->session('user'=>'abc');
$self->render();
}
firefoxへhttpfoxフラグインをいれて、クッキーの値を取得
base64のデコードツールにてデコード
なんと、結果は・・・ ---の前の部分をデコードにかけてみると・・・
eyJ1c2VyIjoiYWJjIiwiZXhwaXJlcyI6MTM1NjIwOTU0Nn0---8883a548c661cfe0290f41efb0657995919e864f
こんな感じで値が丸見えとなってしまっていた・・・
{"user":"abc","expires":1356209546}
暗号化されていないというのが正解のようです。
でも、そもそも論として、傍受を考えるとクッキーを使うときはhttpsが必須 なのだから、暗号化されてなくてもOKなのかもしれないが・・・ 私のサイトはhttps化するほどのヒットサイトにならないだろう・・・
いやーーはまりました。私の書こうとしていたソースが上とすると ゆーすけべーさんが下。
my $res = $validator->check(
zip => [ qw/NOT_NULL UINT LENGTH 7/] ],
);
my $res = $validator->check(
zip => [ 'NOT_NULL', 'UINT', [qw/LENGTH 7/] ],
);
LENGTHのときは、配列のリファレンスを配列の中にいれると いうことなんですね。 なるほど。いやー。勉強になりました。
Teng::Plugin::SearchBySQLAbstractMoreシリーズではまる
Teng::Plugin::SearchBySQLAbstractMore Teng::Plugin::SearchBySQLAbstractMore::Pager
なににはまったって、返却値です。
my $ite = $db->search_by_sql_abstract_more(・・・);
my ($row_array_ref, $pager) = $db->search_by_sql_abstract_more_with_pager(・・・);
上は、iteratorで下はrow配列の参照となっていたので混乱してしまいました。
このように配列で受けると配列で帰ってこないかなと思ったけど、 うまくとれなかった。
my @array = $db->search_by_sql_abstract_more(・・・);
Tengのソースでsearchbysqlのソースをみたら、 wantarrayという関数?がかまされていて、配列でも 受け取れる仕様となっています。
return wantarray ? $itr->all : $itr;
もしかしたら、 Teng::Plugin::SearchBySQLAbstractMore のsearchbysqlabstractmore関数の最後の行をTengのソース にあわせれば、同じように配列で受けられるようになるのではないかと おもった。 ということで、いつもつかわさせていただいているので 作者の方に報告してみよう。 対応していただけるとうれしいです。
vimもemacsも使いこなせない私としては Cygwin+サクラエディタを開発に使っています。
そんな私のPerl開発作業効率化作戦。
perltidyは使いたい。どうやるのかをまとめてみた。
Cygwin のコマンドをコマンドプロンプトから実行 の設定を行う。
そして、サクラエディタの「ツール」>「外部コマンド実行」
perl -I/home/hoge/perl5/lib/perl5 /home/hoge/perl5/bin/perltidy
標準入力に送るにチェック、標準出力リダイレクト先に編集中のウィンドウを指定して実行。
これで、だいぶ便利になりました。
サクラエディタでXMLを整形したい
HTMLの場合のtidyはtidyというバイナリがありました。tidypというほうが新しいようですが。バイナリは見つからない
これをc:\cygwin\binにコピーして使っています。
サクラエディタの外部コマンドの実行で 「tidy -xml -quiet -utf8 -i」 を入力してやればとりあえずは実行できました。 ただ、エラーになったときに行番号に飛べないので不便ではあります。 どうすればいいのかな。
サクラエディタでタグ閉じをしたい
cygwinでエクスプローラを開きたい
毎回毎回、エクスプローラーを開くのが面倒と思っていたら、 いいのがありました。これによって、Cygwinのターミナルを 開いた後に、start .をするだけで、すぐ開発に取り組めるってわけで いい感じだな。
cygwin使っているとたまに出るunable to remap *.dllの問題
以下を参考に、cygwinから以下のコマンドを実行すると治る
RebaseDebug=1 rebaseall -v
インターネット環境があるとついつい遊んでしまいたくなる
誘惑の多いこの世界。コードを書くことがプログラマーのスキル向上には欠かせない。 ゆーすけべー本の冒頭にも「グダグダ言ってないでソース書けよハゲ」という有名な言葉 がでてきます。
そして、私はインスパイヤーされたのであった。 GitHubに一定時間pushしないとこの名言を吐いてくれるWebアプリをつくろうと・・・
ソースの類はこちらにあります。 こちら
GitHubにWebHookという機能があり、その配信をWebアプリで受け取る設定をします。
受け取り先はwebhookにします。 http://yourdomein.com/webhook
そして、こちらのURLでは24時間受け取らないと、名言を吐き。24時間以内だと、ほめてくれるというつくりです。 http://yourdomein.com/
実際に私の借りてるさくらVPSで運用してみました。 私の今の状態はこんな感じです。
本当は、テキストでなくて、イラストにしたいんですが、絵心がないので・・・ どなたか作ってくれる人いないかな。。。
SQLで重複レコードを登録するとエラーになります。
エラー文字列はDB(MYSQL,SQLite)によって違うので ソースコードが汚くなるかもしれないが。まぁ。 あまり気にしないで、SQLiteの場合はunique、MySQLの場合は Duplicateで決めうちしちゃえばいいか。 とりあえず、動けばいい。
my $db = SpeakIt::DB->new(connect_info =>
['DBI:SQLite::memory:', '', '',
{sqlite_unicode => 1}
]);
$db->dbh->do('create table user (
user_id text primary key,
password text not null,
mail text not null unique,
key text not null unique,
active integer,
created_at datetime
)');
my $user = SpeakIt::Model::User->new($db);
$user->add_user({user_id => 'hoge', password =>'hogehoge',mail=>'hoge@hoge.com',key => '124'});
eval{
$user->add_user({user_id => 'hoge', password =>'hogehoge',mail=>'hoge@hoge.com',key => '124'});
};
if ($@ =~ /unique|Duplicate/ ){
pass;
}
else{
fail;
}

最近のコメント