Mac mini G4のiTunesでCDをLossLess(ALAC)で取り込んであります。
ALACは2004年くらいにAppleが開発したAudio Codecです。
これをMac以外で鳴らす方法を調べていました。
ALACは2011年にオープンソースになってgithubにあります。ソースツリーにはエンコードとデコードのコードがあります。このコードはCore Audio File(caf)での処理のコードになっていて、取り込んだファイルはm4aファイルなので、そのままは使えません。
ffmpegやfreacで変換する方法もありますが、変換は音質劣化につながるので、できるだけそのままで再生できる方法がいいです。またffmpegは大きすぎますし、freacは依存が多すぎです。
ffmpegなどでは2005年にリバースエンジニアリングで作られたDavid Hammertonさんのデコーダーが使われています。
いろいろ調べていたらAirMac ExpressにALACなファイルを送って鳴らすプログラムがありました。
たまたま使っていないAirMac Expressがあったので、ネットワークの設定をしてみました。なんだか不安定でかなりてこずりましたが、どうにかおうちのネットワークに入れることができました。
初代のAirMac Expressは以下のような構造になっているものと思われます。
BCM4712はBroadcomの初期のMIPS SOCで今となっては遅いほうです。USB 1.0は12Mで遅いのですが、USB Audioは12Mで動くのでUSB DACをつなげるのは良い発想だと思います。
PCM2705は秋月でも売っているPCM2704と同系のDACでそんなに悪いものではありません。
AirMac Expressは3世代ありそれぞれDACが違うようです。Appleの製品は同型で後期のものはコストカットされているものが多く、初代が一番よかったりする事もあります。
SPDIFで外部のDACを使うこともできます。コネクタはオーディオジャックとの兼用です。
light-playはOpenWRTで開発されたようですが、NetBSDでも問題なくコンパイルできました。またmakeもBSD makeで通り綺麗に書いてあるようです。
動かしてみます。
% ./light-play 10.0.1.147 01.m4a
鳴りました。
AirMac ExpressはDHCPでアドレスを設定しますが、DHCPサーバで固定で割り振るような設定にしたほうが良いです。
iTunesからAirMac Expressを鳴らす時はストリームがAESで暗号化されていますが、light-playでは暗号化無しのストリームになるようです。正規の使用では使われることのないAirMac Expressが暗号化無しに対応してるってよくきがついたと思います。
light-playはセッションのクローズの処理に問題があるような気がします。ぼちぼち確認してみます。