本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

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