2008年08月26日

青空文庫のテキストを音声ファイルにするWSHスクリプト2

以前作ったWSHスクリプトの青空文庫のテキストファイルを音声ファイルに変換するプログラムの改良版。

aozoravoice2 を作ってみました。

興味のある方は、どうぞ使ってください。
下記リンクからダウンロード後、解凍ソフトを使って解凍してください。

問題が起きても当方責任は持てませんので、自己責任でお使いください。また設定次第では耳障りなノイズが起きる可能性があります。特殊な設定を試す場合は、十分気をつけてお使いください。

最新版はここに置いています。
http://et-dev.main.jp/index.php?AozoraVoice

※ 2.3.2:日本語以外の文字コードに対応しました。
※ 2.3.0:設定ウィンドウからいろいろできるようにしました。
※ 2.2.3:WAVファイルの音声フォーマットができるようにしました。
※ 2.2.2:青空文庫形式のチェックを少しゆるくしました。
※ 2.2.1:音声の設定をタグを使わない方法にしたので、タグのせいで起きていたエラーには解決したはずです。
※ 2.2:グローバルな外部辞書の名前をglobal.txtに変えました。既に言葉を登録している場合は、お手数ですがファイル名を書き換えてください。


先日、コメント欄でaさんに青空文庫の変換プログラムをいろいろ教えてもらったので、そのプログラムの動作を参考にして、ルビ辞書と踊り字変換機能などを追加してみました。

大きく変わったところはどこかというと(詳しくは同梱のreadme.txtを見てください)、

・二文字以上の漢字のルビを内部の読み辞書に登録して変換
・外部の変換辞書
・踊り字の変換
・簡単設定
・音声の指定
・zipファイルもそのまま変換対象に(要 7-zip)

※ 7-zipはhttp://www.7-zip.org/で入手できます。



ルビ変換は「くの字点」以外はうまく変換できると思います。「くの字点」は、どこまで繰り返せばいいのかの判断を完全にしようとすると、日本語の構文解析をしないといけません。でも何もしないのもなんなので、今回は文字種だけの情報から断定できるものを変換してみました。これでも不得意な文体もあります。万が一そんな作品があったなら、該当スイッチをオフにして対処願うしかありません。

以前のものは、200行に満たないプログラムでしたが、今回は1000行を越える大きなものになってしまいました。正規表現での検索を何度も繰り返して、以前よりかなり複雑なことをやっているので、ちょっと時間がかかるようになってしまいました。でも時間をくっているのが音声出力の部分なので、極端に遅くなっているわけではないと思いますが、どうでしょう。メモリはたくさんあった方がいいですが。


今回新たな設定項目を付け足したついでに設定ファイルを分離してみました。以下は、配布時の設定ファイルの内容です。
設定項目をメインのプログラムから切り離して、以前より分かりやすくしたと言っても、初心者にtrueやfalseを書いてもらうのは申し訳ないので、メニューで項目を選べるようにしてみました。

「aozoravoice2.hta」をダブルクリックしてください。現れた画面で、目的に合わせて、メニューを選んだり、テキスト欄に記入して、ページ一番下の「設定ファイルを作成」ボタンを押すと、「aozoravoice2.hta」と同じ場所に設定ファイル「config.txt」が作られます。


踊り字は実際に使われているものが自然に変換できるように解釈されます。変換動作を言葉で説明しても分かりにくいでしょうから、例を示します。最初は適当な例文です。最後の部分は青空文庫で見つけた特異な例です。できれば、予想しながら変換結果を見てください。
毎晩々々
馬鹿々々しい

皆一人々々
結局後手々々

民主々義

続々
続々々
続々々々

づゝ
はゝゝゝ
たゞゝゞ

とう/\
つく/″\
ぢり/\
とぼ/\
地震だ/\
離れ/″\
たゞ/\
バタ/\/\
トン/\/″\/″\

折口信夫 偶人信仰の民俗化並びに伝説化せる道
阿知女々々々於々々
アヂメアヂメオヽヽ

種田山頭火 遍路の正月-
南無大師遍照金剛々々々々々々々々

島崎藤村 破戒
是非々々々々

夏目漱石 それから
痛快だ々々々と評してゐたが
これは次のように変換されます。
同の字点 毎晩々々→毎晩毎晩 :同数
同の字点 馬鹿々々→馬鹿馬鹿 :同数
同の字点 皆一人々々→皆一人一人 :区切
同の字点 結局後手々々→結局後手後手 :区切
同の字点 民主々→民主主 :区切
同の字点 続々→続続 :同数
同の字点 続々々→続続続 :文字
同の字点 続々々々→続続続続 :文字
一の字点 づゝ→づつ
一の字点 はゝゝゝ→はははは
一の字点 たゞゝゞ→ただただ
くの字点 :とう/\→とうとう
くの字点 :つく/″\→つくづく
くの字点 :ぢり/\→ぢりぢり
くの字点 :とぼ/\→とぼとぼ
くの字点 :地震だ/\→地震だ地震だ
くの字点 :離れ/″\→離れ離れ
くの字点 :たゞ/\→たゞたゞ
一の字点 たゞ→ただ
一の字点 たゞ→ただ
くの字点 :バタ/\/\→バタバタバタ
くの字点 :トン/\/″\/″\→トントンドンドン
同の字点 阿知女々々々→阿知女阿知女 :同数
同の字点 於々々→於於於 :文字
一の字点 オヽヽ→オオオ
同の字点 南無大師遍照金剛々々々々々々々々
    →南無大師遍照金剛南無大師遍照金剛 :同数
同の字点 是非々々々々→是非是非是非 :倍数
同の字点 痛快だ々々々→痛快だ痛快だ :同数


バージョンアップにともない修正 2008.09.07 02:45


posted by takayan at 04:20 | Comment(33) | TrackBack(0) | aozoraVoice | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
最近、落語などの 喋り系音源にハマっています。
Misakiさんで変換してiPodで聞きまくってみます。
Posted by Whick at 2008年08月27日 16:37
Whickさん、コメントありがとうございます。
落語は良いですね。
それにしても、Misakiさん、人気ですね。。
Posted by takayan at 2008年08月28日 03:35
こんばんは。ありがとうございました。

それで、
// 文書冒頭の情報を削除するかどうかのスイッチ (true/false)"botodel_flag" : true,

の件なんですが、消し過ぎだと思います。タイトル名とか、著者名まで消えてしまっています。

『吾輩は猫である 夏目漱石

-------------------------------------------------------
【テキスト中に現れる記号について】
《》:ルビ
(例)吾輩《わがはい》は猫である
|:ルビの付く文字列の始まりを特定する記号
(例)一番|獰悪《どうあく》な種族であった
-------------------------------------------------------
        一
 吾輩《わがはい》は猫である。名前はまだ無い。』

だったら、↓のようにして頂けるとありがたいです。
『吾輩は猫である 夏目漱石
        一
 吾輩《わがはい》は猫である。名前はまだ無い。』

現状だといきなり、
『        一
 吾輩《わがはい》は猫である。名前はまだ無い。』

になっていますので。お手数ですが、宜しくお願いします。
Posted by a at 2008年08月29日 22:26
aさんどうも、ご指摘ありがとうございます。
タイトルまで削除するつもりはありませんでしたが、分割するときを中心に作ってました。こういうところは詰めが甘かったです。
早速、どのような場合でも文書の作品情報は必ず出力するように修正してみました。
Posted by takayan at 2008年08月30日 02:14
こんばんは。お礼が遅くなりました。

ありがとございました。作業がかなり楽になりました。
外部辞書機能をかなり便利に使わせて頂いています。

また、あちこち紹介させて頂きました。

ところで原因が掴めていないのですが、作品によってはwav変換中に
エラーが発生しましたと出るような症状が出ています。

1.0.4では問題がないのですが、何が考えれられるでしょうか?
色んな作品の色んな所でエラーが出るので、特定出来ないんですよね。
ルビ処理とか全く関係がない所で落ちるので、よぐわがんにゃいて感じです。
Posted by a at 2008年09月02日 22:19
いつもありがとうございます。
はい、エラーが出ているようです。本文中に、引用符や正規表現文字列が含まれているとき、問題が起きるようです。こういうのは処理前に内部で置き換えてないといけなかったものです。他の理由もあるかもしれません。今夜には修正できると思います。
Posted by takayan at 2008年09月03日 12:56
ありがとございました。

設定もがかなり簡単になりました。

それで、wav変換中にポップアップが出るようですが、
あれはconfig辺りで切り替え式に出来ませんか?

というのはエラーで落ちてしまったのかと
ビックリしてしまったので。

タスクマネージャを起動したら流れていたので、
エラーで止まったのでは無いというのは理解できるのですが。
初心者の方(初めての方)は戸惑うと思います。

それと、config辺りでその意図の説明もお願いしたいと思います。
Posted by a at 2008年09月05日 21:34
これは要望なのですが、音声合成速度を
もうちょっと細分化できませんか?

例えば、設定出来るのが1から99までで、50が今の0に規定するみたいな。

英語の勉強やら、参考書をテキスト変換して読ませたりと色んな使い方が
あるので、もうちょっと細かく設定できればありがたいかなと。

特に、1系の方。文字数で切るのが便利なようで、textvoiceの方でなく、
1系を使っておられるようです。2系もお願いします。

くれぐれも無理をなさらぬよう、程々に健康第一でお願いします。
Posted by a at 2008年09月05日 21:38
バグ報告です。

< >の注釈が削除されなくなっています。2.1.2では
削除されていたものが、(音声)削除されていません。

ルビ処理される作品とされない作品があります。
お渡しした黎明の分がされない分です。

もうひとつ、mp3まで変換はしてはいますが、
文章の最後まで行かずに終わってしまいます。
試したのは黎明のやつです。.out.txtは最後まで流れているようですが。

ざっと気づいた点です。
Posted by a at 2008年09月05日 21:57
いろいろとありがとうございます。助かります。
サンプルは結局ダウンロードできませんでした。

音声設定の処理がうまくいっていないみたいですね。タグで情報を与える方式だと限界があるようです。別な方法にかえるべきかもしれません。

ポップアップというのは「OK」ボタンを押すやつですよね。でしたら、その時点で音声出力のエラーが発生しています。これはエラー確認のために入れたポップアップでした。そのまま残っていました。そのあとに終了処理を入れてなかったので、残りの処理を続けてしまってますね。
Posted by takayan at 2008年09月06日 04:14
音声合成関連の設定が怪しかったので、ちょっと書き換えてみました。ついでに今まで手作業で書き込んでいたものを、音声名のリストを表示して選ぶように選択方法を変えてみました。

< >の注釈というのは、台詞の文字列の中に挿入して速度や音声名を変更するタグのことではないかと思われます。実際それを使って音声の切り替えなどをやっていました。そういうわけでタグを使わない方法で音声を設定するようにプログラムを変えてみました。どうでしょうか。

音声速度の件ですが、いろいろやってみましたが、これは現在の21段階より細かくできませんでした。SAPI5の仕様のようです。
Posted by takayan at 2008年09月07日 03:36
色々とありがとうござます。
サンプルをあげました。そちらをご確認下さい。
http://uproda11.2ch-library.com/src/11116334.zip.shtml

パスは前と同じです。
Posted by a at 2008年09月07日 12:08
aさん、原因分かりました。
この文書は青空文庫のテキストではなく、青空文庫風のテキストですね。第一行目がタイトルではなかったり、空行が多かったりしています。新しいスクリプトの方が少し厳密に判断するようになったので、動作していなかったわけです。このくらいの違いではじいてしまうのもいけないので、今度対応しようと思います。
現状での対処方法ですが、手作業で<>タグの行、テキストの冒頭にある記号についての部分を削除し、そして設定で「青空文庫形式を考慮しません」に切り替えると、うまくいくはずです。
Posted by takayan at 2008年09月08日 01:47
お時間のある時に、お手数ですが宜しくお願いします。
Posted by a at 2008年09月08日 21:31
時間があったので、やってみました。
いままでは空行が三行並んだら、本文終わりという判断にしていたんですが、対応できるように、空行が三行並んで、その次の行頭が「底本」と書いてなければ、本文終わりにはならないという判断に変えました。これで今回の問題は解決できると思います。

文書中に含まれる<〜>型のタグを削除というのもつけました。それで削除してみてください。
Posted by takayan at 2008年09月09日 01:37
ありがとうございました。大変便利になりました。
処理が軽くて、速いので重宝します。

Textaloudを試用した事があるのですが、処理が重く、
wav変換中はパソコンがフリーズ状態でした。

それに変わる何か、出来ればフリーソフトでというのが
ここを知るきっかけになりました。当時、検索しまくってましたよ。

辞書機能付V2シリーズまで作って頂いて、本当にありがとうございました。
Posted by a at 2008年09月09日 22:57
どういたしまして。
自分一人で使っているときは最初に作ったもので満足してしまってましたが、発展させる切っ掛けを作ってもらって、こちらも良かったです。
Posted by takayan at 2008年09月11日 01:51
おはようございます。

さっき気づいたのですが、音声がモノラルになっています。
これは、wav作成の時にモノラルになっているからなんですが、
ステレオに出来ませんか?
出来れば、lameみたいに指定出来れば嬉しいのですが。

現状では352kbps (22khz) MONOになっています。
それを705kbps (22khz) STEREO辺りにしたいと思っています。

ちなみに、1152Kbpsがwavの上限らしいです。
Posted by a at 2008年09月14日 09:04
aさん、どうも。
今のところ、音声合成で出てくるデータをそのまま標準設定でファイルに保存しているだけで何もしていません。簡単にできるかどうか調べてみます。
現状でできる方法を調べてみたら、SoundEngine Freeというフリーソフトで、wav音声を読み込んだ後、チャンネルを1chから2chにフォーマット変換すると簡単にできるようですね。
Posted by takayan at 2008年09月15日 01:55
aさん、こんばんわ。意外に簡単に設定できたので、バージョン2.2.3で、出力音声の設定が変えられる機能を追加しました。周波数、ビット、チャンネルの組み合わせで音声フォーマットを決めてください。
Posted by takayan at 2008年09月16日 02:36
おお、ありがとうございます。音も良くなりました。

以前の分だとAMラジオ並らしく、調べて見てちょっとびっくりしました。
たまたま、mp3のプレイヤーをGSPlayerに変えたら、mono表示になってて気付いたのですが。

今まではWMPを使っていたのですが、重くて別なのを探している最中です。
Posted by a at 2008年09月16日 20:12
お時間のある時に、1系の方もお願い出来ないでしょうか?
1系もニーズがありますので。

『要素を組み合わせて標準的なフォーマットを選択します』の方だけで、十分過ぎるのですが。

あと、『注意 音声出力の設定を作りましたが、設定によっては耳障りなノイズが発生するかもしれません。通常は周波数、ビット、チャンネル数だけでフォーマットを決めてください。』を このページの 『問題が起きても当方責任は持てませんので、自己責任でお使いください。』 の下辺りに追記して頂きたいのですが。
↓のページを知らない人がいらっしゃると思うので。ここにも記載しないとマズイと思います。
http://et-dev.main.jp/index.php?AozoraVoice
Posted by a at 2008年09月16日 20:27
度々すみません。小さい小さいバグです。

『音声ファイルに出力 しません 。』にすると、音声ファイルフォーマットと、音声合成は
選択出来なくなっていますが、lame の設定は選択出来ます。

私は4パターンを作成しています。
ルビ変換、ルビ削除、音声テキスト作成、音声テキストMP3変換という具合に。
4つ作っても、2.5M程です、脅威的な小ささです。

あと、AozoraVoiceのお勧めの使い方は、時間差2個連続処理です。
1個をテキストを送って、もう1個送るという時間差処理。

時間差2個連続処理の処理時間が1個のみの処理時間の倍になっていなければ、
処理は当然速く出来ます。私の環境下ではそれほど大きくは変わりません。
1個の時間+10分ぐらいでしょうか。
Posted by a at 2008年09月16日 20:52
今回もありがとうございます。
フォームの無効化は見落としがちですね。
耳障りなノイズはやはり問題だと思って、特殊なフォーマットは選べなくしました。それでも、音を使うソフトですから注意書きは必要でしょうね。

aozoravoice2を書くためにいろいろ覚えましたから、aozoravoice1系列やtextvoiceにも、反映していきたいとは思ってます。
Posted by takayan at 2008年09月17日 00:57
こんばんは。

前から気になっていて、ようやっと原因が分かったのですが、
wavには2Gという制限があります。
http://seraphy.fam.cx/~seraphy/cgi-bin/cbbs.cgi?mode=res&namber=692&page=&no=0
ちょっと古いかも↓
http://classicrec.samplitude.info/log/log023.htm

しかし、中には4Gまで扱えるソフトも存在します。
http://www14.big.or.jp/~kawamura/wvknife2.htm

aozoravoiceにも2Gという壁があるようです。『我輩は猫である』の
wav処理が終わろうとする所?で、エラーで落ちています。
aozoravoice2 version 2.2.3のエラー内容です。
行 527 文字 6 デバイスI/O(入出力)エラーです コード 800A0039
aozoravoice1 version 1.4もエラーを確認しました。

まぁ早い話は分割をすれば良い(2Gを超えないようにする)のでしょうが、
何とかなりますでしょうか?

PS
version 2.2.4のDL数が凄く増えていますね。
Posted by a at 2008年09月18日 22:23
参考になるのか分かりませんが、こういうのを見付けました。
http://noah0.blog119.fc2.com/blog-entry-58.html#more

恐らく、wavの2G越えだと思うのですが。
向こうのソフトでは、wavの2Gの問題はクリアされています。
音声出力はこれからのようですが。
Posted by a at 2008年09月21日 11:59
ごめんなさい。↑は違うそうです。
Posted by a at 2008年09月21日 21:05
こんな壁があったんですね。でもこの壁はかなり難しいです。

僕もダウンロード数が増えてびっくりしましたが、窓の杜のアップデート情報で紹介されたからみたいです。
http://www.forest.impress.co.jp/article/2008/09/17/other.html
Posted by takayan at 2008年09月24日 03:17
クスクス、犯人は私だ。窓の杜に他薦で紹介したんだよね。
http://www.forest.impress.co.jp/info/about/release.html
イタズラ目的があるのか心配していたんだけど、そうじゃないみたいだね。

普通にやると駄目だろうから、誤魔化してやってやるしかないかなと考えています。
無理しない程度にちょっと考えて見て下さい。
Posted by a at 2008年09月24日 20:02
はじめまして。
aozoravoice2を使わせていただいています。

一つお願いがあります。
単なるテキストファイルを大量に変換したいのですが、D&Dすると途中で音声出力エラーとなってしまいます。
また、ファイル名と中身(音声)が一致していません。

数十行程度のテキストファイルなのですが、数百ある(法律の条文を一条ずつMP3にしています)ので一つずつ手作業となると少しつらくて....

ご検討いただけると幸いです。
Posted by cat at 2009年01月09日 23:26
catさん、エラーの報告ありがとうございます。
すぐには原因は分かりませんので、ちょっと調べてみます。
Posted by takayan at 2009年01月10日 00:41
申し訳ありません。
>ファイル名と中身(音声)が一致していません。
は、私の分割プログラムが原因でした。
お騒がせいたしました。

という訳で、報告は、
>単なるテキストファイルを大量に変換したいのですが、
>D&Dすると途中で音声出力エラーとなってしまいます。
の方だけです。

よろしくお願いします。
Posted by cat at 2009年01月10日 23:47
The question isn't hat to wear using Ugg Boots?? it more like, s there anything it is possible to wear with Ugg " booties "?? This popular style connected with boot is so versatile and can be worn with almost everything.
Posted by アグ ブーツ 正規品 at 2013年10月22日 14:10
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック