シェルスクリプトだけでMP3プレイヤーを作りました

シェルスクリプトだけでMP3プレイヤーを作りました

MP3プレイヤーって今や店頭から消え去っているのをご存じですか? スマホに取って代わられたのでしょうが、ワタシはスマホとは分離した状態で持ちたかったので自分で作ってみました。

MPi3 Player

車でBGMを流すために作ったので、リンク先にはラズパイ上でサービス稼働させるためのセットアップ手順を記載しています。 劣化版iPod shuffleというと分かりやすいでしょうか。 指定ディレクトリ内のMP3ファイルをランダムに再生します。

ただ運用上、ランダム再生だけでは厳しいことが分かりました。 気分じゃない音楽はせめてスキップしたい、という場面があまりにも多かったのです。 思っていた以上に音楽と気分は密接な関係のようです。

スキップ機能も準備していますが、ラズパイにタクトスイッチの実装が必要になります。 詳しくはリンク先をご参照ください。

仕組み

メインとなる仕組みはたったこれだけ。 find, grep, shufコマンドでMP3ファイルを探してシャッフルし、mpg321コマンドで再生します。

while true; do
  LIST=($(find $(printf %q "${DIR}") -name "*.mp3" | grep -i mp3 | shuf))
  for f in "${LIST[@]}"; do
    ${CMD} $(printf %q "${f}")
  done
done

学び

電気の状態は+と-だけじゃない

スキップ機能を実装するにあたって(ほぼ)初めて電子工作に手を出したのですが、+/-が不規則に現れる「不定」という状態があることを初めて知りました。 電気の流れを正しく制御できていないと、このようなノイジーな状態になるようです。 プルアップ抵抗/プルダウン抵抗という回路を使って制御する必要があります。

image

シェルスクリプトの全能感やばい

自動化全般に言えることではありますが、簡単な手順で目的が果たせるプログラムが書けたときの全能感はすごいものがあります。 業務システムの実装が順調に終わった時よりも格段に気持ちいい。 この感覚分かりますか?ワタシだけですか?

特にLinuxってCUI基準でコマンド群が整理されているものが多く、CUIで一通りの操作が行える場合がほとんどです。 シェルスクリプトはこれらの高度な(CUI)アプリケーションをつなぎ合わせることができるので、記述量に対する仕事量?品質?とにかくコスパが良いです。


謝辞
画像は Wikimedia Commons 様より使わせていただきました。