シュシュポポと汽笛を鳴らしながら走り抜けるslコマンドにしておく

蒸気機関車の映像を観ていると心に染み入る。力強く上がる真っ黒な煙、シュシュポポと噴き出す蒸気の音、遠くに響く悲しげな汽笛の音などなど、映像を見ていると癒され、心地良さを感じる。いつまでも飽きない。なぜだろう?
石炭を燃やして蒸気から動力を取り出す、という仕組みは、それなりの規模が必要。安定稼働させるまで手間もかかる。黒煙などの排出物も多い。そして動作音も盛大である。現在のエンジンやモーターと比べると、最もコントロールしにくい動力なのかもしれない。しかし、様々な要因を調和させて安定稼働させることができると、蒸気機関車は見事に走り始める。煙の勢い、蒸気の吹き出し、ピストンと車輪の動き、それらが発する盛大な音、それらは全て蒸気機関車を動かすために必要なものであり、どれか一つでも欠けると、たぶん動けなくなってしまう。
蒸気機関車が走っている時の姿とは、最もコントロールしにくい動力機関を高いレベルで調和させて稼働させている状態なのだ。高いレベルで調和された動きを見ると、人は感動する。そして時折人為的に発せられるあの汽笛、あれにやられる。鳴らしているのは人間だが、その音はまるで蒸気機関車が叫んでいるようだ。必死に何かを伝えようとしている気がしてしまう。哀愁を感じる。

この蒸気機関車の感動を、愛すべきslコマンドにも追加したい衝動に駆られた。slコマンドとは、ターミナルでslと打ち込んで実行すると、アスキーアートのSLが走り抜ける癒しコマンドである。

  • そもそもはlsを間違えてslと打ち込んでしまった時に備えたコマンドらしいのだが、自分はslと打ち間違えたことは多分ない。
  • OSXバージョンをインストールすると、アスキーアートのSLはターミナル画面を飛び出して、デスクトップ全体を駆け抜ける!

サウンド作り

実は(だいぶ間が空いてしまったが)前回のなるべく理解したいffmpegは、上記映像の中からお気に入りの特定の部分のサウンドを切り出したいために調べたことだった。

そして、出来上がったサウンドファイルはこんな感じ。

slサウンドを再生

slコマンドにサウンドを再生させる方法をいくつか考えてみた。

$ afplay sl.mp3 & sl
  • OSXには標準でafplayコマンドがインストールされている。
  • これを使って好みのサウンドを再生することができるのだ。
  • しかし、slコマンドとラッパースクリプトに分かれてしまうのがちょっと気に入らない...。
  • という訳で、slコマンドの中でafplayを実行するようにしてみた。


+ NSTask *task = [[NSTask alloc] init];
+ [task setLaunchPath: @"/bin/sh"];
+ [task setArguments: [NSArray arrayWithObjects: @"-c", @"cd $(dirname `which sl`); set sl.m*; afplay $1 &>/dev/null", nil]];
+ [task launch];
+ [task release];

  • 上記コードによって、slコマンドの中で以下のコマンドを実行するのだ。
$ /bin/sh -c "cd $(dirname `which sl`); set sl.m*; afplay $1 &>/dev/null"

これで、slコマンドと同じ階層にsl.mp3とか、sl.m4aなどが存在すれば、それらのファイルをafplayで再生しながら、slコマンドの本来の処理に進む。

ソースコード

作り方と使い方

  • ダウンロードしたら、ターミナルで~/Downloads/SLMacOSXVersion-dev/に移動して、makeコマンドを実行する。
  • コンパイルされたslコマンドを任意のディレクトリに移動する。(推奨:/usr/local/bin/sl)
  • サウンドファイルsl.mp3も同じディレクトリに移動する。(推奨:/usr/local/bin/sl.mp3)
  • ターミナルでslと入力して実行すると...

シュシュポポと汽笛を鳴らしながらアスキーアートのSLがデスクトップを駆け抜けるのだ!