MEMSマイクは、「SPH0645LM4H搭載 I2S MEMSマイクをRaspberry Pi 3に接続」でRaspberry Pi 3と接続しました。今回は、Raspberry Pi 3にI2Sのインタフェースを持つDAC「PCM5102 DAC Decoder 」を接続し、Pythonを使って、ハイレゾ音源を再生します。
PCM5102 DAC DecoderとRaspberry Pi 3の接続
使用するPCM5102 DAC Decoderを次に示します。ebayより購入しました。
PCM5102 DAC Decoderの仕様を次に示します。
- 解像度24bitで192kHzサンプリングレート
- 動作電圧 : 5 V
- インタフェース:I2Sで動作するPCM5102A DACを使用
- pHATフォーマットボード
- ラインアウトステレオジャック
DAC DecoderにはPowerピン「VCC」「3.3V」「GND」の他に次の信号ピンがあります。
記号 | 信号名 | 説明 |
---|---|---|
SCL | SCK システムクロック入力端子 | System clock input |
DMP | DEMP デエンファシス回路制御端子 | De-emphasis control for 44.1kHz sampling rate(1): Off (Low) / On (High |
XMT | XSMT ソフトミュート制御端子 | |
LCK | LRCK オーディオデータワードクロック入力端子 | ワードセレクトを示す左/右のクロック |
DIN | オーディオデータ入力端子 | |
BCK | オーディオデータビットクロック入力端子 | データ転送を行うI2Sマスターからのデータクロック |
FMT | オーディオフォーマット選択端子 | Audio format selection : I2S (Low) / Left justified (High) |
FLT | デジタル補間フィルター選択端子 | Filter select : Normal latency (Low) / Low latency (High) |
PCM5102 DAC DecoderとRaspberry Pi 3は、I2Sのインタフェースを使って次のように接続します。
DAC Decoder信号名 | Raspberry Pi 3信号名 |
---|---|
VCC | 5V |
GND | GND |
BCK | GPIO18(PCM_CLK) |
DIN | GPIO21(PCM_DOUT) |
LCK | GPIO19(PCM_FS) |
- PCM5102 DAC Decoderの FMT、SCL、DMP、FLTは 10kΩでプルダウンします。
- PCM5102 DAC Decoderの XMTは 10kΩで +3.3Vにプルアップします。
- PCM5102 DAC Decoderの +3.3Vはラズパイとは接続しません。
PCM5102 DAC DecoderとRaspberry Pi 3を接続した画像を次に示します。
DAC Decoderの出力はイヤホーンにしました。持っているミニコンポをつないだところ音が飛びました。イヤホーンだと音が飛ばなくてそれなりの音になります。
PCM5102 DAC Decoderのセットアップ
すでにラズパイに含まれているHiFiBerry DACのドライバを流用します。次の手順でドライバの設定を使います。
device treeの設定のために「/boot/config.txt」を編集し、ピンの設定をI2Sにして、ドライバとマッピングをします。
dtoverlay=hifiberry-dac
Raspbianに含まれるドライバドライバをの設定するために、次のように、「/etc/modules」を編集して、起動時にドライバ「snd_soc_hifiberry_dac」 をロードするようにします。
snd_soc_hifiberry_dac
次のコマンドでドライバを確認します。
$ lsmod Module Size Used by fuse 106496 3 rfcomm 49152 6 cmac 16384 1 bnep 20480 2 hci_uart 36864 1 btbcm 16384 1 hci_uart serdev 20480 1 hci_uart bluetooth 368640 29 hci_uart,bnep,btbcm,rfcomm ecdh_generic 28672 1 bluetooth brcmfmac 307200 0 brcmutil 16384 1 brcmfmac spidev 16384 0 cfg80211 573440 1 brcmfmac rfkill 28672 6 bluetooth,cfg80211 i2c_bcm2835 16384 0 spi_bcm2835 16384 0 snd_soc_bcm2835_i2s 16384 0 joydev 20480 0 evdev 24576 6 snd_soc_pcm5102a 16384 1 uio_pdrv_genirq 16384 0 uio 20480 1 uio_pdrv_genirq fixed 16384 0 snd_soc_simple_card 16384 0 snd_soc_simple_card_utils 16384 1 snd_soc_simple_card snd_soc_hifiberry_dac 16384 0 snd_soc_core 188416 5 snd_soc_simple_card_utils,snd_soc_bcm2835_i2s,snd_soc_hifiberry_dac,snd_soc_pcm5102a,snd_soc_simple_card snd_compress 20480 1 snd_soc_core snd_pcm_dmaengine 16384 1 snd_soc_core my_loader 16384 0 snd_bcm2835 32768 0 snd_pcm 98304 5 snd_pcm_dmaengine,snd_soc_bcm2835_i2s,snd_bcm2835,snd_soc_core,snd_soc_hifiberry_dac snd_timer 32768 1 snd_pcm snd 69632 5 snd_compress,snd_timer,snd_bcm2835,snd_soc_core,snd_pcm i2c_dev 16384 0 ip_tables 24576 0 x_tables 32768 1 ip_tables ipv6 434176 29
次に、PCM5102 DAC Decoderの優先度を次のコマンドで確認します。数字が小さい方が優先度高いので、もし、PCM5102 DAC Decoder「snd_soc_hifiberry_dac」の優先順位が低い場合、「Raspberry Pi 3にUSB DACの接続」に従って設定を変更します。
$ cat /proc/asound/modules 0 snd_soc_hifiberry_dac 1 snd_bcm2835
次のコマンドでサウンドデバイスが card0、デバイス0に割り当てらていることを確認します。
$ aplay -l **** ハードウェアデバイス PLAYBACK のリスト **** カード 0: sndrpihifiberry [snd_rpi_hifiberry_dac], デバイス 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 1: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA] サブデバイス: 7/7 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 サブデバイス #2: subdevice #2 サブデバイス #3: subdevice #3 サブデバイス #4: subdevice #4 サブデバイス #5: subdevice #5 サブデバイス #6: subdevice #6 カード 1: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] サブデバイス: 1/1 サブデバイス #0: subdevice #0
次のコマンドでcard1を指定して音を再生します。waveファイル「1000hz.wav」は「SPH0645LM4H搭載 I2S MEMSマイクを使ってRaspberry Pi 3で録音」の「Waveファイルの作成」で1000hzのwaveファイルを作りました。
$ aplay -D plughw:0,0 1000hz.wav 再生中 WAVE '1000hz.wav' : Signed 16 bit Little Endian, レート 44100 Hz, モノラ ル
DAC Decoderプログラムの作成
音楽再生コマンド「aplay」をPythonからsubprocessにより起動するプログラムを次に示します。 waveファイル「sound_24bit192kHz.wav」は、解像度24bitで192kHzサンプリングレートのハイレゾ音源です。
#-*- cording: utf-8 -*- import subprocess subprocess.call("aplay -D plughw:0,0 sound_24bit192kHz.wav", shell=True)
DAC Decoderプログラムの実行
次のコマンドでハイレゾのwaveファイル「sound_24bit192kHz.wav」を再生します。イヤホーンから音が再生されます。
$ python3 dac.py 再生中 WAVE 'sound_24bit192kHz.wav' : Signed 24 bit Little Endian in 3bytes, レ ート 192000 Hz, ステレオ