wavをcygwinのzshから聴こう


cat wavのパス >> /dev/dsp
で聴くことができるが、使い勝手は良くない。
何よりもパスを把握しなくてはいけないので人間向きではない。
よって、簡易的なコマンドで実用的に近づけた。

.zshrc
function lMusic() {
    if [[ $# -eq 0 ]] ; then
        cd f:/Music_Movie > /dev/null
        ls **/*wav
        cd $OLDPWD > /dev/null
        return
    fi

    ls f:/Music_Movie/**/*wav | grep $1
}

alias play='tee /dev/tty |sed -e "s/^/cat /" -e "s:$: >>/dev/dsp:" | sh'

聴くことのできるwavファイルをListするのに使うのがlMusicだ。
lMusic 単体でwavのあるパスを一覧表示する。
argument があればgrepで搾る。
最小限の表示にするために一瞬cdで移動して、lsの自動整形に任せている。つまり、
パスの共通部分の f:/Music_Movie の出力を控えて、lsの文字組みを2段・3段など
画面一杯に自動で段組してくれる機能を利用する。
/dev/null はcd の後にls を自動でしている便利設定の無効化である。

lMusic LaFollia | play
のように、パスを実行するのがplayで、実装はsed で前後に cat, >>/dev/dsp を挟んでsh で実行である。
このうち、tee で画面にプレイする音楽を出力させている。

動作は、grepで複数当たれば1つずつ演奏していく。
CTRL-C で終了。
ランダム演奏は sort の R オプションで。

ファイルの削除も次のように書けば同様の構文で使える
lMusic LaFollia | perl -lne 'unlink'