automatorとシェルスクリプトで超簡易シャッフル音楽プレイヤーを作る


MacOSで動作する、超シンプルなシャッフル再生専用音楽プレーヤーを作ってみました。
アプリといっても、実体はシェルスクリプトでユーザインターフェースはありません。

今回作るアプリの仕様

  • 再生する音楽ファイルリストはあらかじめ作っておきます。
  • アプリを起動するとファイルリストの音楽ファイルをシャッフル再生します。
  • 音楽ファイルを再生中にもう一度アプリを起動すると、再生が停止します。
  • 操作パネルや再生中の曲名表示などのユーザインターフェースはありません。
  • 再生開始と停止以外の機能はありません。

作ってみる

音楽ファイルのリストを作る

音楽ファイルリストはただのテキストファイルなので、findコマンドでサクッと作ります。
findの引数は、音楽ファイルが置かれているパスなどに適宜置き換えてください。

macUpdateMusic.sh
#!/bin/bash
find /Volumes/root/MEDIA/MUSIC/ -type f -name "*.mp3" > ./playlist.txt

新しい音楽を追加した時などに再度実行することになるので、シェルスクリプトにしておくのが良いかと思います。

シャッフル音楽プレーヤー本体を作る

macPlayMusic.sh
#!/bin/sh

cd /Volumes/root

kill `pgrep -lf /macPlayMusic.sh|awk '{print $1}'`
IS_KILLED=$?
pkill afplay

if [ "$IS_KILLED" -ne 0 ]
then
  echo play start
  cat playlist.txt | while read x; do echo -e "$RANDOM\t$x"; done | caffeinate -i sort -k1,1n | cut -f 2- | while read x; do afplay -q 1 "$x"; done
else
  echo play stoped
fi

pgrepで、既に実行中のシャッフル音楽プレーヤーを探し、プロセスがあればkillし、事前に用意したファイルリストを利用してリスト内の音楽をシャッフル再生します。

まず、ファイルリストの各行先頭に乱数値を追加し、乱数値を追加したデータをソートします。
そうすると、ランダムな順番に並び替えられたファイルリストが完成するので、上から順に afplayという音楽プレイコマンドに渡すことでランダム再生を実現しています。

ランダムに並び替えられたファイルリストは、各行の先頭に乱数値がくっついているため cutというコマンドでファイル名部分のみを最抽出しています。

追記) sortコマンドには -R というコマンドラインオプションがあり、これをつけるとランダムソートができるのですが、これを最初に作ったSierraの頃は -R が使えなかったため、このようなやり方をとっています。
が、今手元のBig Surで確認したところ、 sort コマンドで -R パラメータが使用できたので、コマンドはもっと短くできるかと思います。

また、caffeinate は、macでオートスリープを抑制するコマンドです。

nohupなどをつけてコマンドを実行すると、ファイルリストないの音楽がランダムな順序で再生されるはずです。
再生中に同じコマンドを再度実行すると再生が停止しします(単にkillしているだけなので、フェードアウトするような感じでは無く、ぶちっと止まります)。

うまく動かない場合、スクリプト内に書かれているファイル名やパス名などを確認してください。

アプリ化してdockに配置する。

アプリ化することで、terminalから起動せずともdockなどから簡単に起動することができるようになります。

shell scriptは、macの標準アプリのautomatorを使うと簡単にアプリ化することができます。
automatorは、Launchpadを開いて[その他]というグループの中にいるはずです。
もしもなければ、finderでアプリケーションを開き、その中から探してください。

automatorを起動したら、作成する書類の種類から「アプリケーション」を選択します。

左側のリストから「ユーティリティ」→「シェルスクリプトを実行」を選択し、それを右側のエディットエリアにドラッグアンドドロップします。

右側のエディット画面にシェルスクリプトの編集画面が表示されるので、以下のように記述してください(シャッフル音楽プレイヤーのシェルスクリプトのパスは環境に合わせて適宜変更してください)。

nohup /Volumes/root/macPlayMusic.sh > /dev/null 2>&1 &

ここまでできたら、「ファイル」メニューから「保存」を選択することで、作成したautomatorプロジェクトがMacアプリとして保存されます。

アプリアイコンを変更する

デフォルトのアイコンでは、音楽プレイヤーっぽくないのでアイコンを変更します。

アプリアイコンの変更方法は http://www.specdesign.com.au/blog/tips/mac-icons/ あたりが参考になるかと思います。

アイコンのフリー素材サイトは、下記サイトが種類も豊富で使いやすいです。

これで完成です。アプリのアイコンをクリックするたびに、音楽ファイルのシャッフル再生開始&停止が切り替わります。

お疲れ様でした。