マカー的 (その34)

オープンソース化された iTunes-LAME がついにユニコードの問題を解決したらしく (未確認) 、これで漸く日本語の文字化けやタグ入力の不備に悩む必要もなくなったわけですが、わたしといえば、それでもいまだにインチキスクリプトのほうをぐじぐじいじくっているのです。

CD Info.cidb から iTunes_CDDB_IDs を読み出す

現状 iTunes-LAME になくて、できれば対応させておきたいことのひとつに、 iTunes の “CD トラック名を取得” 機能というのがあります。なにかの間違いで ID3 タグが全て吹っ飛んでしまったとしても、たちどころに CD 挿入時の状態に復帰させることができるという、本来 iTunes でエンコードしたファイルのみに適用される便利機能なのですが、読み込んだ CD に関する情報を記録した CD Info.cidb を XML 化し、必要な文字列を取り出すことさえできれば、自前でエンコードしたファイルであってもそれに対応させることが可能というわけです。手順としては…


$ plistCIDB -d tmp.plist ~/Library/Preferences/CD\ Info.cidb

…などとして CD Info.cidb を plist 化し、以前紹介した xmlstarlet 等の XML Parser を使って目的の情報を読み出したのち、適当なタグエディタでそれを記録するなどの方法が考えられます。

XSLT で扱いやすく

Property List 形式のファイルは、そのままではやや扱いづらいところがあるため、事前に適当な XSL ファイルを使って読みやすい形式に変換してやる必要があります。わたしの場合は、たまたまみつけたスタイルシートを使って、次のように変換してみました。


$ xmlstarlet tr reformat.xsl tmp.plist 2>/dev/null 1> CD\ Info.plist

リンク先のスタイルシートに reformat.xsl と名前をつけて保存、先に出力しておいた tmp.plist を CD Info.plist へと変換しています。


      <key>album title</key>
      <string>Opto Files</string>
      <key>auther</key>
      <string>Alva Noto + Opiate</string>
      <key>category</key>
      <string>Electronica/Dance</string>
      <key>composer</key>
      <string>Carsten Nicolai &amp; Thomas Knak</string>

こんなのが、


        <album_title>Opto Files</album_title>
        <auther>Alva Noto + Opiate</auther>
        <category>Electronica/Dance</category>
        <composer>Carsten Nicolai &amp; Thomas Knak</composer>

こんなかんじにわかりやすく変換されて出力されます。

XML をパース

さて、 iTunes_CDDB_IDs として必要な文字列は meid, music_id 、そして全体の曲数の 3 つです。


MUSIC_ID=`xmlstarlet sel -t -m "propertylist/dict/album/dict[album_title='Opto Files'][auther='Alva Noto + Opiate']/music_id" -v "." CD\ Info.plist`
# 1353941
MEID=`xmlstarlet sel -t -m "propertylist/dict/album/dict[album_title='Opto Files'][auther='Alva Noto + Opiate']/meid" -v "." CD\ Info.plist`
# F6EC0EE12BC459FCBF9195D68D4292FD

こうして取り出した文字列に曲数をつけて、以下のようにして書き込みます。

eyeD3 で書き込み

$ eyeD3 --comment="eng:iTunes_CDDB_IDs:4+${MEID}+${MUSIC_ID}" *.mp3

――これでいちおうの出来上がり、というわけなのですが、どうにもスマートじゃないんですよね。コンピレーション CD の auther (ほとんどのものは Various Artist で大丈夫ですが) が特定できなかった場合に取得失敗するなど、まだまだ問題も多いのです。

すみません、なにもオチがありません。覚え書きにしてもこれはひどいですね。

The File created at Tue, 04 Dec 2007 10:47:59 +0900  . 2007/11 . WriteBack (0)

別になんでもない (その73)

マコちゃんを無事見届けたので寝ます。目がかなりしんどいです。いや、こういったことは Twitter さんに投げるべきなのか。

The File created at Tue, 04 Dec 2007 10:47:59 +0900  . 2007/11 . WriteBack (0)

Mac OS X で圧縮音声 (その22)

AAC の詳細なオプションに対応したバージョン、 XLD 20071114 がリリースされています。

X Lossless Decoder: 20071114
http://tmkk.hp.infoseek.co.jp/xld/

下で思い切り失敗してるあれこれを見事解決してくれました。ちゃんと確かめてから書こう、というか当分おとなしくしてようとおもいました!

The File created at Tue, 04 Dec 2007 10:47:58 +0900  . 2007/11 . WriteBack (0)

Mac OS X で圧縮音声 (その21)

ここ最近は各所で少しずつ動きがあるようです。

X Lossless Decoder: 20071111a

Mac OS X 10.5 Leopard に対応したバージョンがリリースされています。 10.5 では動作しなくなっていた MPEG-4/AAC, Apple Lossless 関連の問題が修正されています。

X Lossless Decoder: 20071111a
http://tmkk.hp.infoseek.co.jp/xld/

Cog Development

息を吹き返した Mac OS X 向けオーディオ・プレイヤー、 Cog 。 Development セクションでは Nightly Build 形式で最新バージョンが提供されており、 Cog r553 以降では待望の cuesheet を用いた音源再生に対応しています。面目躍如といったところですか。

Cog Development
http://cogx.org/development.php

Play Unstable

Max の開発者による Play も同系統のオーディオ・プレイヤーとして有名ですが、こちらは再生時のエフェクトや音楽ライブラリ関連の開発に注力している模様。 LAME が標準でヘッダに付加する ReplayGain 情報を利用した再生音量の平均化 (Album Gain の解析も可) や、 Audio Unit の各種機能を利用した DSP Effect など、 Audiophile な向きには好まれそうなつくりです。

Play from sbooth.org
http://sbooth.org/Play/

最新の Leopard 対応版 Nightly Build では、 Cog 同様に cuesheet を用いた音源再生にも対応しています。が、こちらはやや不安定。 cuesheet を認識したりしなかったり、読み込んだかと思えば恐ろしいビープ音で驚かせたり、と、少々危なっかしい印象です。

どうやら Windows における foobar2000 のような、 iTunes のリプレイスメントとして開発されているようなのですが、バージョンアップの度にデータベースが利用不能になるなど、まだ常用にはほど遠い感があります。

小回りの効く軽量のプレーヤーが好きなので、個人的にはこちらよりも Cog のほうを推してみたいところ。

afconvert

Twitter に書き殴って済ませていたのですが、一応こちらにも。 Mac OS X Leopard では、/Developer/Examples の定番コンバート・ツール、 afconvert が、プリコンパイルされた状態で /usr/bin に収録されています。

なにもオプションをつけずに、ファイルタイプのみを指定した場合は、 iTunes 同様に、 ABR 128 kbps 相当のファイルが出力されますが…


$ afconvert -f 'm4af' -d 'aac ' -s 3 -u vbrq 128-320  fatboy.wav fatboy.m4a
$ afconvert -f 'm4af' -d 'aac ' -s 3 -u vbrq 127 fatboy.wav fatboy.m4a
$ mp4info fatboy.m4a 
mp4info version 1.5.0.1
fatboy.m4a:
Track	Type	Info
1	audio	MPEG-4 AAC LC, 5.061 secs, 239 kbps, 44100 Hz

…などとすると、エンコードモードを VBR に変更、さらに目標値をビットレートの範囲を品質で指定することができます。最低ビットレートに 64 kbps 以下を指定すると自動的に 32 KHz でエンコードされてしまうようなので、実質 96-320 kbps の範囲内でのみ有効、といったところでしょうか。 おもいきり間違ってました。 0-127 の値で品質を指定するそうです。"-" 以降が無視されてなんとなくエンコードできてただけっぽいです。ちょう恥ずかしい。もう一度確かめ直すと、 83 以上の値で 44100 Hz に、 82 以下で 32 kHz となりました。

最近よくみかける、「AACのビットレートが揃わない」等の問題は -s (--strategy) で指定するエンコードモードを -s 0 (CBR) として、明示的に指定しておくと回避できるようです。しかしながら、 iTunes の標準が既に変更されている以上、ここは素直に従っておくのが無難かな、という気がします。


$ afconvert -h
{ -s | --strategy } strategy
        bitrate allocation strategy for encoding an audio track
        0 for CBR, 1 for ABR, 2 for VBR_constrained, 3 for VBR

また、上記の例でファイル情報を表示するのに利用した mp4info は、コマンドライン・ツール mpeg4ip の収録物です。インストールしておくと、タグを追加するなどの操作がコマンドラインで全て完結するので、なかなか便利だと思います。

MPEG4IP - Open Streaming Video and Audio
http://mpeg4ip.sourceforge.net/

$ mp4tags -a "体重が" -s "豊富" fatboy.m4a
$ mp4info fatboy.m4a
mp4info version 1.5.0.1
fatboy.m4a:
Track	Type	Info
1	audio	MPEG-4 AAC LC, 5.061 secs, 239 kbps, 44100 Hz
 Metadata Name: 豊富
 Metadata Artist: 体重が

iTunes のギャップレス情報 "iTunSMPB" は、現状、 iTunes もしくは XLD でエンコードした場合にのみ付加されます。このことに加え、期待していた標準入力からのエンコードにも対応していないようなので、個人的には afconvert を利用する機会はあまりなさそうです。

The File created at Tue, 04 Dec 2007 10:47:58 +0900  . 2007/11 . WriteBack (0)

マカー的 (その33)

ちょっと事情があって freedb の情報から cuesheet を生成するやつをつくった。引数に こういう URL を入れます。これもたぶん 2 度と使わないとおもう。

OnMyCommand でアプリケーション形式にしてみた。無駄にでかい。

暇すぎたので Web から使えるようにしてみた。ソースがみえないので精神的。

cuesheet generator
http://closer.s11.xrea.com/etc/cddb.php
いいかげんな使い方

"http://freedbtest.dyndns.org/dbread2.php?dbpath=blues/8309400a&raw=true" こういう URL をさがしてきてフォームに入力します。

The File created at Tue, 04 Dec 2007 10:47:58 +0900  . 2007/11 . WriteBack (0)

マカー的 (その32)

地雷と噂の iTunes 7.5 をいれてみましたよ。 Apple の担当者さまにおかれましては、このようなスパイダーな書き換えは是非に慎んで頂きたく。

iTunes 7.5

左が元のファイル。右が iTunes 7.5 で再生後のファイル。内容を変更しないならいちいち書き直すなと。

ジャンルのカタカナ表記にかんしては、おそらくずっとこのままなんでしょうね。見ないからどうでもいいですけどね。アニソンしかはいってませんしね。いっそ日本語リソースを全部ちんことかにしといてもいいくらいです――いや、よくないです。

Discogstagger

で、何のつながりもないんですが、ついでに 4 年くらい前に FLAC で保存したプリンスを MP3 にエンコードしてたら、あろうことか 42 曲全てタグなしのファイルになってしまいました。 Gracenote が仕様変更してて AppleScript のほうが使えないので、今回は、こないだ Discogs で遊んだときに作りかけた厨房スクリプトをつかって書き換えてみることに。

アルバムに含まれるすべてのファイルを同じディレクトリに移動させておいて、


$ sh hoge.sh 447590

…とかやると、いちおう動きます。タグの書き込みからリネームまで恙無く。

いや、うごきはするんですが、 XML をわざわざ使ってる意味もあんまりないし、今回はたまたま上手くいっただけのような気がします。見ると落ち込むので 2 度と使うことはないでしょう。

eyeD3

上記のスクリプトを動かすには――そんなひとがいるかどうか別として―― xmlstarlet と eyeD3 が必要です。両方とも MacPorts などで簡単にインストールできますが、 eyeD3 の最新バージョン、 0.6.14 を正常に動作させるには、ほんの少し修正が必要です。 port で入れた場合なら、 "/opt/local/lib/python2.x/site-packages/eyeD3/__init__.py" の 37 行目をコメントアウトして以下のように書き換えます。


#LOCAL_ENCODING = locale.getpreferredencoding(do_setlocale=False);
LOCAL_ENCODING = "utf-8";

同様に "/opt/local/bin/eyeD3" の 36 行目あたりも修正します。


#ENCODING = locale.getpreferredencoding();
ENCODING = "utf-8";

LOCAL_ENCODING でひっかかってるらしかったので適当に直しましたが、本当はもっと良い解決方法があるにちがいありません。わかったら誰か教えろ――てください。

日常的に使える機能が豊富にそろっているので、 MP3 を中心につかうひとならいれておいて損はないと思いますよ。

The File created at Tue, 04 Dec 2007 10:47:57 +0900  . 2007/11 . WriteBack (0)

マカー的 (その31)

その後―― Discussion Board みてたら、システム環境設定・アカウントにオプション設定がある、と書かれてたので、それに従って詳細オプションでログインシェルを標準の /bin/bash にもどした。書き換えたあとも何故か /opt/local/bin/bash が起動しちゃうので、 port uninstall bash した。

――ちうか AirMac 経由のファイル共有が使いものにならない。特に iTunes の起動、再生時は応答に異常に時間がかかってやばい。大したファイル数でもないのに読み込み中のプログレスバーが表示されるようになった。スリープ明けには必ず接続が切れるし、自動マウントすらされない。どーなってんの。 AirMac Disk がデフォルトでは Time Machine の接続先として認識されないのって、もしかしなくてもこの所為かしらね。

―― HetimaZip-qlgenerator がすげえいい。昨日までは寧ろ Cover Flow なんてなくてもいい! くらいの勢いだったのに、急にたのしくなってきた。特殊な需要を満たしてくれるものってほんとすばらしいですね。カラム表示のアイコンプレビューは外付けの HDD ががりがりいって怖いからそっこーきった。

The File created at Tue, 04 Dec 2007 10:48:01 +0900  . 2007/10 . WriteBack (0)

マカー的 (その30)

なんも考えずに Leopard をいれてみた。Mac OS X 10.5 Leopard - なんか色がミドリっぽくなった短期間に何度も設定するのはさすがにだるいので、今回はアーカイブインストールを。ちょう楽。

ターミナルとか

設定が引き継がれるので別段変わったことをする必要はないんだけども、初手からターミナルが起動せず焦る。ここは前回のインストール時にもはまったんだけど、 ワタシは以前 MacPorts 経由で bash を入れ替えていたので… /etc/shells に MacPorts でインストールした bash へのパスを記入しておけばいいみたい。 Leopard に最初からはいってる /bin/bash のバージョンは version 3.2.17(1)-release (i386-apple-darwin9.0) とのことで、これは MacPorts の最新バージョンといっしょ。だから出来たらもとに戻しておきたいんだけど、みたら NetInfo Manager がなくなってる。ということでちょっと保留に。

Contextual Menu Items

追加したコンテクストメニュー項目がきれいさっぱりなくなってる! ちょうこまる! …とかおもったら、これは Finder のコンテクストメニューの「その他」に追加したものがまとめられていただけだった。いちいち読み込んで重くなったり、表示がごちゃごちゃになるのを嫌ったのかな。あと OnMyCommand で作成したコンテクストメニューの一部――ターミナルなどに処理を投げるもの――が動かなくなってるんだけど、 Mailing List に投げられてた 1.9 PR1 (www.abracode.com/free/cmworkshop/OnMyCommand_1.9pr1.dmg.gz) で大体解決した。

InputManagers

10.5 で InputManagers が利用できなくなったのをうけて、代替プラグイン (アプリケーション?) がいくつかできてた。

PlugSuit 1.0
http://millenomi.altervista.org/PlugSuit/
PimpKit 0.1
http://www.cocoamug.com/pimpkit/index.html

PimpKit では SafariStand がうまく動かず。じゃあ PlugSuit でいこうかしら、とおもったのも束の間、 SIMBL が Leopard に対応してることに気づき、あっさり乗り換えることに。 SafariStand の Site Alteration が動作しないものの、 SafariStand 3.0L149 で対応済み Rubisco も動くし、まずまずいいかんじになった。

SIMBL 0.8.2
http://www.culater.net/software/SIMBL/SIMBL.php
SafariStand 3.0L149
http://hetima.com/safari/stand.html

アプリケーションとか

とりあえず mi と Safari があればどうとでもなるような最下層のユーザです。ふだんよく使うアプリケーションの不具合は、いまんとこ、 XLD で MPEG-4 AAC/Apple Lossless へのエンコードができなくなってることくらい。いまはそんなに気にしてないけど、いや、これがじわじわ効いてくるんですよ、きっと。

Time Machine

Mail.app Bundle の HTTPMail Plugin の Leopard 対応状況を確認しに行ったら、作者のブログに、ネットワーク経由でマウントしたディスクを Time Machine の共有ボリュームとして使う方法が書いてあった。

OSX 10.5, Time Machine and Linux shared drive
http://blog.danielparnell.com/?p=43

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

AirMac Extreme に接続した USB HDD もちゃんと候補表示にでてくるね。速度的に使いものになるかどうかは知らないけど。

Developer

/Developer/Examples/CoreAudio/AudioCodecs の FLAC component がビルドできない! ちゃんと README 通りにやったつもりなんだけどなあ。

The File created at Tue, 04 Dec 2007 10:48:00 +0900  . 2007/10 . WriteBack (0)

マカー的 (その29)

Discogs に何時のまにか API らしきものが備わってたので遊んでました。 API がどうのこうの、 XML がどーのこーの、なんて口にするとちょっとかっこいいのかしら、と思って書きましたが、じっさいのところさっぱり意味はわかってません。

ともあれ、事前に xmlstarletnkfMacPorts でインストールしておきます。 xmlstarlet は文字通り XML のパースに、 nkf はクエリを URL エンコードするのに使います。

再生中のトラックを検索する

まずは検索から。 iTunes で再生中のトラック情報を渡して検索を開始、サイトからかえってきた XML ファイルより先頭 URL だけを抜き出してみます。


#!/bin/bash
trackinfo=`osascript -e "tell application \"iTunes\"
  if player state is playing then
    set trackinfolist to {artist of current track, name of current track, album of current track}
    set trackinfo to \"\"
    repeat with i in trackinfolist
      set trackinfo to trackinfo & i & \"  \"
    end repeat
  else
    set trackinfo to \"\"
  end if
  return trackinfo as string
end tell"`

artist=`echo "$trackinfo" | cut -f1 | /opt/local/bin/nkf -wWMQ | tr = %`
title=`echo "$trackinfo" | cut -f2 | /opt/local/bin/nkf -wWMQ | tr = %`
album=`echo "$trackinfo" | cut -f3 | /opt/local/bin/nkf -wWMQ | tr = %`

query="${artist}+${album}"
xml=`/opt/local/bin/xmlstarlet ed -P "http://www.discogs.com/search?type=all&q=${query}&f=xml&api_key=[API_KEY]"`
url=`echo $xml | /opt/local/bin/xmlstarlet sel -t -m "resp/searchresults/result[1]/uri" -v "."`
if [ "$url" = "" ]; then
  url="http://www.discogs.com/artist/$artist"
fi
echo "$url"
exit

例によって Quicksilver から利用することが前提となっているので、追加してインストールしたバイナリは基本的にフルパスで記述しています。

処理が終了すると (うまくゆけば) 該当するディスクの URL が返ってきます。そのまま Excute ボタンをクリックしてサイトにゴー。

そのまま Twitter にポスト

exit の直前の一行を以下のように書き換えると Twitter に投稿したりもできます。トリガーを設定してスパマーじみた勢いの連続投稿。


message="${artist}%20-%20${title}"
curl -s --basic --user "[ID]:[PASSWORD]" --data-ascii status="Now Playing: $message $url" http://twitter.com/statuses/update.xml >&/dev/null && echo "$url"

ページから曲リストを取得する

ディスク別の詳細ページから情報を取得してみます。引数にページ ID がはいります。


#!/bin/bash
XML=`xmlstarlet ed -P "http://www.discogs.com/release/$1?f=xml&api_key=[API_KEY]"`
ARTIST1=`echo "$XML" | xmlstarlet sel -t -m "resp/release/artists/artist" -v "concat(name,' ',join,' ')" | sed -e 's/\&amp;/\&/g' -e 's/ *$//g'`
ARTIST2=`echo "$XML" | xmlstarlet sel -t -m "resp/release/artists/artist/anv" -v "." | sed -e 's/\&amp;/\&/g'`
YEAR=`echo "$XML" | xmlstarlet sel -t -m "resp/release/released" -v "." | cut -c-4`
ALBUM=`echo "$XML" | xmlstarlet sel -t -m "resp/release/title" -v "." | sed -e 's/\&amp;/\&/g'`
echo "Artists: $ARTIST1"
echo "Name Variation: $ARTIST2"
echo "Album: $ALBUM"
echo "Released: $YEAR"
echo "Tracklisting:"
echo "$XML" | xmlstarlet sel -t -m "resp/release/tracklist/track" -v "concat(position,'  ',title)" -n
exit

MP3 の ID3 タグに反映させる

取得した情報をもとに一気に ID3 タグとして反映させる、なんて芸もできますが、ソースがあまりにもぐっちゃぐちゅ子。 Name Variation とか Artist の区切り記号の存在、ディスク番号の扱いが適当なとことか、いらいら要素がたくさん。とはいえ、要はいつものごとくひたすらループをまわすというだけなので賢い人ならすぐに出来るんじゃないかと。

The File created at Tue, 04 Dec 2007 10:48:00 +0900  . 2007/10 . WriteBack (0)

散財 (その19)

不自然なほど話題になってた例の女装子本とか買った。 前に誰かおんなの人が「レジっ子が同性だとエロ漫画を買うとき緊張する」と言っていたが、本当だった。冷や汗でた。――いや、エロ漫画くらいなら敵が男だろうが女だろうがなんてことはない。しかし、ものが女装子本となると、さすがにちょっと――わざわざ女性のレジっ子が常駐してそうな店を選んだというのに、なんで今日だけ男が立ってますか。

The File created at Tue, 04 Dec 2007 10:48:02 +0900  . 2007/08 . WriteBack (0)

copyright © oklahomamixer 2002-2007 all rights reserved, all wrongs reversed.

oops! | Last-Modified: 2007-12-04T10:47:59+09:00 JST.