出し惜しみではないのです

昨日の  と  の連携に関する記事で、コードを全く書いていなかったのは、さすがに情報の出し惜しみと思われるかもしれないと、余計な心配をしておりまして、汚い・一貫性のないスクリプトではありますが、公開させていただきます。

さて、 afplay の再生アプリに関しては基本的に、「のらぬこの日常を描く」さんのところを参照していただければいいのですが、それだけでは今再生中の楽曲を明示できません。そこでのらぬこさんのスクリプトにちょこっとコードを足します。

#!/bin/sh

cd ~/Music

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

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

一行がスクロールする形で表示されているので見にくいのですが、ハイライトした行の2つめの「 while read 」の後ろ、「 echo “$x” > now.txt 」が追加した部分です。これで、現在の楽曲情報を「ミュージック」フォルダにテキストファイルとして書き込みます。これは、 BitBar のスクリプトとは非同期に行われます。見ればわかりますが、 afplay の直前。再生の直前に書き込まれます。これが第一弾。

次に BitBar のスクリプト。これが出し惜しみするわけではないのですが、恥ずかしい。もっとシンプルに書けると思うのですが、書きながら「とりあえず」のレベルだなぁと思っていました。恥ずかしいのですが、以下にスクリプトを書き込みますね。

#!/bin/sh

cd ~/Music

OLDIFS=$IFS
IFS=

while read line
do
        fname=${line##*/}
        fname=${fname%.*}
        fname=`echo $fname | sed -e 's/^[0-9][^ ]*[ ]//'`

        artist=`echo $line | sed -e 's/^.*Music\///'`
        artist=`echo $artist | sed -e 's/\/.*$//'`

        echo $artist " - " $fname
done < now.txt

IFS=$OLDIFS

前段、 fname の部分が楽曲名を求めるところなのですが、 iTunes のライブラリ構造をそのまま利用しているため、次のようなファイルネームになります。

  • 先頭に数字でアルバム中の順番が追加されている。
  • 複数枚の CD アルバムの場合「アルバム番号 - 曲順」という数字を半角ハイフォンでつないだ番号が追加される

fname の sed 正規表現の部分がそれですね。次のアーティスト名の部分は、フォルダ構成の決め打ちです。 iTunes のライブラリの場合、おいている場所によって変わるのですが、変わらないのが Music というフォルダ(ローカライズされてミュージックと表示されていてもフォルダ名は Music )の次にアーティスト名が来ると言うこと。それを決め打ちで検索しています。

で、 echo で表示すると BitBar の方でメニューバーに表示してくれる。そういう形になっています。 BitBar はファイル名に時間を書き込んでおくとその時間間隔でスクリプトを実行する機能があります。私は、「 nowplay.10s.sh 」という名前にして10秒間隔で実行するように指定しています。5秒にしようか(タイムラグがそれだけ短くなる)悩みましたが、大した違いでは無いだろうと言うことで10秒にしています。

説明するのも赤面しますが、もっとシンプルなスクリプトになるはずです。そっと教えてくれると嬉しかったりします。


いかに弱き人といえども、その全力を単一の目的に集中すれば必ずその事を成し得べし。

春日潜庵

投稿者プロフィール

會澤 賢一
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

1 thought on “出し惜しみではないのです

  1. ああ恥ずかしい。パイプした方がスマートですよね。後で見直しをしたときに自分でわかるように書いたつもりですけど。。。恥ずかしい。

會澤 賢一 にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください