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