While the Apple Air­Port Express Base Sta­tion with 802.11n and Air­Tunes is quite afford­able, it’s a pity that Apple allow only AES encoded audio streams (aka Remote Audio Out­put Pro­to­col — raop). How­ever Jon Lech Johansen’s reversed the encryp­tion and released JustePort — a .NET tool. Mean­while other Open­Source appli­ca­tions sup­port the raop protocol:

VLC works out of the box, although the syn­tax is a bit strange.

1
2
3
4
$ cd /Applications/VLC.app/Contents/MacOS/
$ VLC –sout=’#transcode{acodec=alac,ab=192,channels=2}: raop{access=http,mux=raw,host=192.168.1.15,volume=77}’ /08-rex_the_dog-circulate.mp3
[0x14c15dd8] stream_out_raop stream out: Audio latency: 4384
[0x14c15dd8] stream_out_raop stream out: Jack type: analog

The impor­tant para­me­ter is “–sout=’#transcode{acodec=alac, channels=2, samplerate=44100}: raop{access=http,mux=raw, host=192.168.1.15,volume=77}’”.

You may also open the VLC prefs / All / Stream Out­put / Default Stream Out­put Chain and enter:
#duplicate{dst=“transcode {acodec=alac, channels=2, samplerate=44100}: raop{host=192.168.111.15,volume=77}:display”,dst=display}

Hint: VLC did not work for me with those parameter:

1
–sout-raop-host= Host  –sout-raop-volume=

Info from the VLC forum:

The Air­port Express will only take the Apple Loss­less codec, make also sure the sound is encoded with 44.1 kHz and not some­thing like 32 kHz or 22.05 kHz, as that’s all the Air­port Express understands.

raop-play did not work for me (cvs version):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ ./raop_play –vol 100 192.168.111.15 ./a.mp3
DBG: Server: AirTunes/101.9
DBG: CSeq: 1
DBG: Apple-Response: HNjZjDtZKxwPGY5QU6PyEIZUdaxWLMSxn97hwT7X701Dxd3EJg1SJRkxtVtCYMDmyBjPNB2zN94re+9jpaLWMMEs5jp8lkF1lYDbrZ1krq+TN6PfSHUh+1K2iWzgCvWWB/mY0kx2zCj08FwZWcnhXzizBbwRzSoVHJ+ml/rlAolMge7+EOjT2ggkXs+zy91U7vWzi9+feUrLApBQVQsBqJkn3im4Sa78Y27Tl6rCk5HHRXTMQk1wIqlo6Cp7Qe8YXYmJ0Bg3aP218jcCG5beKQ0PQC1DcYNfNlKgYKXu4jAKvVZPL3j/NzpDoZ0jo2bLKqvhZWtlwoqIYj/cMCtaLg==
DBG: Trans­port: RTP/AVP/TCP;unicast;mode=record;server_port=6000
DBG: Ses­sion: 1
DBG: Audio-Jack-Status: con­nected; type=analog
DBG: Server: AirTunes/101.9
DBG: CSeq: 2
DBG: Audio-Latency: 4384
DBG: Server: AirTunes/101.9
DBG: CSeq: 3
DBG: Server: AirTunes/101.9
DBG: CSeq: 4
con­nected
DBG: audio data type: 3
DBG: id3 tag­size: 4096
DBG: sam­ple rate=44100
Seg­men­ta­tion fault

There is also a ruby port of raop-play avail­able, check https://rubyforge.org/projects/raop/.

Pulseau­dio also sup­ports the RAOP pro­to­col, but I didn’t test it, but HE did…

Air­Tunes vs. Sqeeze­box (found here)

Well, they are two dif­fer­ent kinds of devices, really. The Air­port Express is a “push” type of device. The music is decoded on your com­puter and broad­cast to the AExp. All nav­i­ga­tion of your music col­lec­tion occurs on the com­puter; you can’t even skip to the next track with­out being in the same room as the machine. The Squeeze­box is a “pull” device; it grabs files from your server and decodes them on-board. As such it has its own UI for choos­ing what you want to lis­ten to and you don’t have to be in the same room (or, indeed, the same coun­try) as the source of the music, and your com­puter doesn’t even have to be on if you just want to lis­ten to Inter­net radio.