2015年5月3日日曜日

mpdで演奏中の曲データをワンクリックで Windows のクリップボードに取り込む Getting info. of the now-playing song on mpd into the Windows clipboard with one click

(もっと簡単な改良版を公開しました)
(An improved method is now available.)

mpd ベースのプレイヤーを使っていると (とくにランダム再生を使っているときとか),今流れている曲をツイートしたくなるときがある.RuneAudio の web UI にはそういう機能があるが,mpd 汎用の方法があると,いろいろとよさげである.
そういう意味では,アイコンクリック一発でクリップボードに曲名と演奏者名くらいが入ると,twitter クライアントに貼り付けやすく,またもう一言を添えやすく,汎用性も高い.むしろ下手にツイートまで自動でしてしまうよりいいぐらいである.普段作業している Windows 7/8.1 で,こういうことに対応したクライアントもあるのかもしれないが,そのためだけにクライアントを常時動かしておくというのもどうかという気がする (とくにランダム自動再生のときは).
When playing with an mpd-based player, I often would like to tweet about the tune.  The web UI of Rune Audio supports tweeting function, but a more general way for mpd may be a good idea.
The goal:  only one click on the Windows desktop gets the title and the artist of the mpd now-playing tune into the Windows clipboard.

mpd の演奏状態は,Linux等では mpc というコマンドラインのクライアントで見ることができる.そこで mpc の Windows 版を使うことで,以下のような方法を取ってみた.
On Linux, mpc command reports the information about the now-playing tune.  I installed the Windows port of mpc and completed the purpose as below.

1. Windows 版 mpc をインストール Installing the Windows port of mpc
Win32 版の mpc は 0.22 までバイナリがある.すなおに こちら を落としてきて,パスの通ったところに置く.
The Windows ports of mpc (version < 0.22) are available.  This is version 0.22.  Download and extract the zip, and copy mpc.exe to the directory with the executable search path.

2. awk for win32 をインストール Installing awk for win32
awk でなくてもできるのだが,まあ,簡単なので awk で.GNU awk 3.1.6 for win32 を Sourceforge から ダウンロード
展開してできる bin の下の awk.exe をどこかパスの通ったところにコピーしておく.
Download GNU awk 3.1.6 for win32 from Sourceforge.  Extract the zip and copy awk.exe to the directory with the executable search path.

3. nkf for win32 をインストール Installing nkf for win32
Vector から ダウンロード.vc2005\win32(98,Me,NT,2000,XP,Vista,7)Windows-31J の下にある nkf32.exe をパスの通ったところに置く.
nkf (Network Kanji Filter) is a charset converter for Japanese character sets.  For European languages, it is not needed.  For Chinese and Korean characters, there may be such converters, but I don't know about them.

4. バッチファイルを作る Creating a batch file.
名前はなんでもよい.mpd.bat とか.中味は
The base name is arbitrary; eg. mpd.bat.  It consists of 

@echo off
mpc -h volumio.local | nkf32 -s | awk -F" - " -f mpc-call.scr | clip

volumio.local は mpd が動いているマシン名.Static IP になっているなら IP アドレスでも OK (DHCPでももちろんOKなのだが,調べるのが面倒).
mpc コマンドは現在の演奏状態を標準出力に返してくるので,それをパイプで順次処理している.
これをやるまで,Windows の command シェルで多段のパイプが使えるとは知らなかった (^^;
UTF-8 で出力される内容は nkf で sjis に変換し,その結果から awk で必要な部分 (今は曲名と演奏者) を抽出する.
clip は Windows の標準コマンドで,パイプで渡された内容をクリップボードに格納する.
volumio.local indicates the mpd-running machine.  The IP address of the machine is also available.  mpc command gives the information about the now-playing tune to the standard output.  The response (in UTF-8) is transferred to nkf through the pipe function of Windows and then converted to S-JIS.  Then, the awk script below (mpc-call.scr) extracts the title and the artist name, and finally the info is copied to the clipboard with clip command.

awk での具体的な処理内容は同じフォルダに mpc-call.scr という名前のファイルで指定.中味は

NR == 1 { print "\"" $2 "\" by " $1 " #nowplaying"}

これを bat ファイルと同じ場所に置く.
mpc-call.scr file is located at the identical directory with mpd.bat.

これで

"Maiden Voyage" by Herbie Hancock #nowplaying

といった内容がクリップボードに入る.$2 が曲名,$1 が演奏者.
ここを修正すればフォーマットを変えられる.
The above combination of the bat file and the awk script gives info like above.  $2 and $1 in the script indicate the title and the artist name, respectively.  You can modify the output format as you like by modifying the script.

じつは,Linux 上だと awk の処理内容をコマンドラインオプションですべて与えられるのだが,Windows 上ではスクリプトファイルにしないとうまく処理ができなかった.

5. バッチファイルをタスクバーにピン留め Pin to the bat file to the taskbar
ピン留めすることで,使いたいときにすぐにアクセスできる.

0 件のコメント:

コメントを投稿