概略
- macOSのsayコマンドで話者を変えてファイルに落とすには一工夫して、soxでまとめる
詳細
$ awk '{system( "say -v ava " $1 " -o voice" 100+NR*2-1 ".aiff; say -v kyoko " $3 " -o voice" 100+NR*2 ".aiff") }' adv300.txt
- awkでNRは行数なので、100+NR*2-1で一行目の第一フィールドの音声ファイルがvoice100.aiffとなり、100_NR*2で一行目の第三フィールドの音声ファイルがvoice101.aiffとなる。なぜ、100を足しているかというと、そのままだと sox voice*.aiff...とする時に、voice1.aiff, voice10.aiff... といった順に処理されてしまうのを防ぐため。もうちょっとエレガントな処理がありそうだけど、とりあえずこれにしておいた。
- この後に、次のようにsoxコマンドを使えば一つの音声ファイルにまとめられる。soxは標準では入っていないのでhomebrewなどで入れておくとよい(brew install sox)。
$ sox voice*.aiff adv300_enjp.aiff
- ただ、basic300.txtのファイルを次のように変換すると↓のようにsoxでまとめようとする時に”Too many open files”というエラーを出す。
$ awk '{system( "say -v ava " $1 " -o voice" 100+NR*2-1 ".aiff; say -v kyoko " $3 " -o voice" 100+NR*2 ".aiff") }' basic300.txt`
$ sox voice*.aiff basic300_enjp.aiff
sox FAIL formats: can't open input file `voice447.aiff': Too many open files
progeigo.org
github.com