2014-10-12

GNU/Linuxでコマンドラインから喋らせる方法

本の虫: Pingプログラムの話で、pingが通るたびに合成音声ソフトウェアにpingと喋らせた運用が紹介されている。実際にやってみたくなったので、方法を調べることにした。

まず、音声合成を行うコマンドラインのGNU/Linux用のソフトウェアを探さねばならない。調べると、espeakというソフトウェアが見つかった。

apt-get install espeak
espeak "Hello. I am espeak."

espeakは、何も引数を指定しない場合、stdinから読み取って音声合成していくれる。完璧だ。

さっそく、ためしてみた。

ping localhost | sed -e "s/.*/ping/g" | espeak

なぜか動かない。これはsedの出力がバッファされているためだった。

プログラムのバッファリングの外部から操作するには、stdbufが使える。これはGNUのcore utilsに入っているので、ほぼすべてのGNU/Linuxディストロには標準で入っているだろう。

ping localhost | stdbuf -oL sed -e "s/.*/ping/g" | espeak

と書いた後で、sedにもバッファリングを無効にするオプションがあることに気がついた。

ping localhost | sed -u -e "s/.*/ping/g" | espeak

No comments: