「afplay」タグアーカイブ

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

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

さて、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秒にしています。

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


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

春日潜庵

afplayとBitBarをリンクさせる

先日書いた afplay は快適です。しかし、再生中の楽曲名ぐらいわかりたいものですね。そこで、メニューバーに情報を表示させるBitBarというアプリとリンクさせることにしました。

まず、BitBar の説明から、

Welcome to BitBar, 

The BitBar app lets you put the output from any script or program right in your Mac OS X menu bar. And it’s completely free. An impressive number of plugins have already been contributed by a wide range of developers just like you, and this site makes it easy to find them.

BitBar – Put anything in your Mac OS X menu bar

シンプルですけど、便利なソフトですね。私の場合は、指定したシェルスクリプトを10秒ごとに実行させています。

仕組みは簡単で、前回紹介した「世界で一番軽くてシンプル:mac用のシャッフル専用音楽プレーヤー – のらぬこの日常を描く」に追記して、現在再生中の楽曲のパス(アーティスト名とアルバム名、楽曲名を含む)を新規ファイルにして特定の場所に書き込みます。もともとシャッフル専用音楽プレーヤーの再生リストとして使っていたものを一行だけにしたようなものです。これを再生する前に作成します。

そして非同期で BitBar に登録したスクリプトが「アーティスト名 – 楽曲名」の形に成形して出力します。出力された文字列は、BitBar によってメニューバーに表示されます。

実際の表示

これで、完成ですね。BitBar にはスクリプト名に再生間隔を指定することができます。私は10秒に設定しました。最大遅延10秒で表示されることになります。スクリプトの詳細は、省略します。汚いスクリプトなので恥ずかしい。公開しました(リンク)。やっつけで作った割にはよくできたと思ってます。


人の希望は、初め漠然として大きく、後、ようやく小さく確実になるならびなり。

正岡子規

afplayという選択肢

いや、知らなかったんですね。Macにはafplayというミュージックプレイヤーがインストールされていたんですね。コマンドラインですけど。

シンプルを極めたらこうなったというようなコマンドですね。基本的に音楽ファイルを引数にしてそれを再生する。まぁ、レーティングもできるみたいですが、使いませんね。シンプルに再生する。途中で中断するには kill するしかないっぽいです。引数を変えることで別の曲を再生する。こんなコマンドあったんですね。知らなかったです。

で、これを使ってシャッフルプレイに特化したアプリに仕上げてしまったのが、「世界で一番軽くてシンプル:mac用のシャッフル専用音楽プレーヤー – のらぬこの日常を描く」これいいです。昨日愚痴ったiTunesのバグに対しても、何それ? って感じで再生してくれます。これは素晴らしい。

    Audio File Play
    Version: 2.0
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options

Usage:
afplay [option...] audio_file

Options: (may appear before or after arguments)
  {-v | --volume} VOLUME
    set the volume for playback of the file
  {-h | --help}
    print help
  { --leaks}
    run leaks analysis
  {-t | --time} TIME
    play for TIME seconds
  {-r | --rate} RATE
    play at playback rate
  {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
  {-d | --debug}
    debug print output

一応オプションもありますね。ボリュームはシステムのボリュームでやるとして、デバッグモードも関係ないし、気になるのは、-q ですね。先に引用したのらぬこさんのところでもちゃんとハイクオリティにセットしてありますので、何の問題もありませんね。

今再生している楽曲名がわからないという弱点はありますが、プレイリストはテキストファイルですので自由に変えられる。しばらくこれで行こうと思います。


「寒い晩だな」「寒い晩です」妻の慰めとは、まさにかくの如きなり。

斎藤緑雨