2016年9月10日土曜日

I2SオーディオI/F WM8731をraspberry piで鳴らす

MFTで買ったDm9RecordsのI2SオーディオI/F基板PIAiFを鳴らしました。
http://www.dm9records.com/index.php/release/sound/piaif/

参考:
https://github.com/raspberrypi/linux/issues/1302
https://github.com/raspberrypi/linux/issues/1420

1. /boot/config.txtを編集
編集箇所は以下4つ
#を消してI2CとI2Cを有効に
dtparam=i2c_arm=on
dtparam=i2s=on

raspberry pi オンボードのオーディオを無効に
(有効でも可。その場合再生する際にデバイス指定する必要がある)
# dtparam=audio=on
openGLドライバを無効に
I2Cドライバと同時に使えないらしいです。
# dtoverlay=vc4-kms-v3d
以下を追記
#dm9 PIAiF enable
dtoverlay=rpi-proto


2.raspberry pi再起動

3.DACが認識されているか確認
pi@raspi3:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpiproto [snd_rpi_proto], device 0: WM8731 HiFi wm8731-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0


4.Output Mixer HiFi Playback SwitchのIDを確認
pi@raspi3:~ $ amixer controls
numid=2,iface=MIXER,name='Master Playback ZC Switch'
numid=1,iface=MIXER,name='Master Playback Volume'
numid=4,iface=MIXER,name='Line Capture Switch'
numid=5,iface=MIXER,name='Mic Boost Volume'
numid=6,iface=MIXER,name='Mic Capture Switch'
numid=8,iface=MIXER,name='ADC High Pass Filter Switch'
numid=3,iface=MIXER,name='Capture Volume'
numid=10,iface=MIXER,name='Playback Deemphasis Switch'
numid=14,iface=MIXER,name='Input Mux'
numid=13,iface=MIXER,name='Output Mixer HiFi Playback Switch'
numid=11,iface=MIXER,name='Output Mixer Line Bypass Switch'
numid=12,iface=MIXER,name='Output Mixer Mic Sidetone Switch'
numid=7,iface=MIXER,name='Sidetone Playback Volume'
numid=9,iface=MIXER,name='Store DC Offset Switch'


5.Output Mixer HiFi Playback SwitchをONに。
これがOFFのままだとdmesgでI2S SYNC errorが出ます。
amixer cset numid=13 on

6.再生してみる。
mplayer hoge.wav

7.楽しい!! ✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌

オンボード出力が有効の場合、カードIDを調べて
pi@raspi3:~ $ 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
card 1: sndrpiproto [snd_rpi_proto], device 0: WM8731 HiFi wm8731-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0


ここではcard 1が外付けDACに該当するので
mplayer -ao alsa:device=hw=1,0 hoge.wav