電子竹林:Blog2

Tech関係、はてなダイアリーから移転済み...

プログラミング英語検定の単語リストで遊んでみる (3) 発話続き

概略

  • 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
  • ググるsoxのこの”Too many open files”は謎が多く、rawファイルにした方がいいという意見があったので試すが変わらず。数の問題だけではなく、イマイチ理由が分からない。とりあえず200個ずつ統合してさらに統合した。
  • それぞれを音声ファイルにしたものを GitHub - zom-1/Programming_English に入れておいた。

    Links

progeigo.org

github.com