先看一下在iPhone 6 plus上用虾米播放高音质音乐的效果:
苹果的Airplay协议是通过基于RSTP(Real Time Streaming Protocol)协议通过UDP传输的无损编码音频流(Apple Lossless codec,音频流本身经过了AES加密,私钥是不公开的,这样只有苹果和其合作伙伴才能使用这个协议。但是2004年有人通过逆向工程获得了私钥并将其公开,这样我们也可以自己搭建低成本高音质的基于Airplay的音乐系统。在iPhone成为街机的时代,每个人的手机里有很多喜欢的音乐,如果在家里可以通过无线网络在音响系统里播放会方便很多。
硬件
- pcDunio Acadia 或 Raspberry Pi 一只
- 3.5mm音频线一根,类似这种
- 有源音箱一对
- 网线一根或USB无线网卡一只
音频芯片
好的音质需要好的音源,无损音乐加好的前端输出是必不可少的。 pcDuino Acadia集成的音频芯片是业界领先的英国Wolfson(欧胜微电子)为高清音频设计的WM8962 。树莓派集成的音频芯片则是由美国Broadcom(博通)封装在主芯片BCM2835里通过PWM (pulse-width modulation) 提供的,比较简单音质一般,达不到高清音频的要求。
下面是树莓派音频口播放1kHz正弦信号的输出波形,可以看出来波形并不好。
正是因为板载音频质量差强人意,Wolfson也专为树莓派设计了基于WM5102 codec芯片的Wolfson Audio Card (售价高达$34.95,性价比不高,这块芯片也用在了魅族MX3上)。
更好的方案是使用USB声卡,如淘宝上可以购买的基于德州仪器的PCM2704的USB声卡,40多人民币。
综上,如果想DIY自己的高清音乐播放系统,只有树莓派还是不够的,可以考虑用pcDunio Acadia或额外购买USB DAC。
声音测试和调节
声音测试
首先需要用音频线把板子和有源音箱连接起来,如果线材或音箱质量不够好,会立刻听到背景噪音,实测树莓派的背景噪音比pcDuino Acadia要大一些。
注:普通用户不一定有权限使用系统音频设备,所以以下测试需要root或audio group里的用户。
首先可以用speaker-test
命令测试是否能出声。
hugo@raspberrypi2 ~ $ sudo speaker-test
speaker-test 1.0.25
Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 512 to 32768
Period size range from 512 to 32768
Using max buffer size 32768
Periods = 4
was set period_size = 8192
was set buffer_size = 32768
0 - Front Left
Time per period = 2.234240
0 - Front Left
Time per period = 2.899088
0 - Front Left
如果听不到声音,可以检查一下连接和系统设置:
树莓派的命令输出:
hugo@raspberrypi2 ~ $ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
pcDunio Acadia的命令输出:
Hardware device with all software conversions
hugo@Acadia ~ $ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: wm8962audio [wm8962-audio], device 0: HiFi wm8962-0 []
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: imxhdmisoc [imx-hdmi-soc], device 0: IMX HDMI TX mxc-hdmi-soc-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
如果你安装了USB声卡,还需要设置系统把USB声卡设置成缺省声卡。
sudo vi /etc/modprobe.d/alsa-base.conf
修改
options snd-usb-audio index=-2
为
#options snd-usb-audio index=-2
options snd-usb-audio nrpacks=
有些系统可能还需执行下一步(注:树莓派2不需要)
sudo vi /usr/share/alsa/alsa.conf
把 pcm.front cards.pcm.front
替换成pcm.front cards.pcm.default
测试音乐播放
下载一个mp3文件在pcDunio或树莓派上,然后安装mpg321
sudo apt-get install mpg321
执行mpg321 example.mp3
就可以测试音乐播放了
音量调节
可以执行sudo alsamixer
来设置音量,执行sudo alsactl store 0
恢复出厂设置。
对比一下可以看到pcDunio Acadia的设置项要丰富多了,除了Headphone这项可以提高音量(5dB)外,Digital这项的增益调节也可以大幅提高音量(23.25dB)。推力方面也相对好多了,可以直推一些好耳机。
Airplay设置
这里我们使用开源的Airplay解码软件Shairport
。
安装依赖库
sudo apt-get install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils libmodule-build-perl libasound2-dev libpulse-dev
下载代码,编译安装
root@Acadia ~ $ git clone https://github.com/abrasive/shairport.git
root@Acadia ~ $ cd shairport
root@Acadia ~ $ ./configure
Configuring Shairport
OpenSSL found
libao found
PulseAudio found
ALSA found
Avahi client found
getopt.h found
CFLAGS: -D_REENTRANT -I/usr/include/alsa -D_REENTRANT
LDFLAGS: -lm -lpthread -lssl -lcrypto -lao -lpulse-simple -lpulse -lasound -lavahi-common -lavahi-client
Configure successful. You may now build with 'make'
root@Acadia ~/shairport $ make
pcDunio Acadia上还需要执行这一步:
root@Acadia ~ $ git clone https://github.com/njh/perl-net-sdp.git perl-net-sdp
root@Acadia ~ $ cd perl-net-sdp
root@Acadia ~/perl-net-sdp $ perl Build.PL
root@Acadia ~/perl-net-sdp $ sudo ./Build
root@Acadia ~/perl-net-sdp $ sudo ./Build test
root@Acadia ~/perl-net-sdp $ sudo ./Build install
root@Acadia ~/perl-net-sdp $ cd ..
运行Shairport
运行非常简单:
sudo shairport -a "Acadia"
执行完后拿起你的iPhone,虾米,QQ音乐或百度音乐App都支持Airplay了,在播放界面上选择输出到Acadia
上就可以开始欣赏Airplay啦。
参考文章
- http://www.crazy-audio.com/2013/11/quality-of-the-raspberry-pi-onboard-sound/
- http://drewlustro.com/hi-fi-audio-via-airplay-on-raspberry-pi/
- http://raspberrypihq.com/how-to-turn-your-raspberry-pi-into-a-airplay-receiver-to-stream-music-from-your-iphone/