ラズベリーパイの音声をDAC(pcm5102a)でI2S出力する
普段音声出力はRaspberryPi3のオーディオジャック(アナログ出力)から行っていますが、DACを介すことでI2S出力(デジタル出力)に変更する方法です
I2S
I2Cじゃありません. Inter IC SoundでI2Sです
4本(または3本)の信号線でステレオ音声をシリアル伝送する規格
名前 | rasPiのpin No. | 説明 |
BCK(BCLK) | 12 | ・bit clock ・serial clock(SCLK)とも呼ばれる |
LRCK(LRCLK) | 35 | ・Left Right Clock ・ステレオにおいて、LチャネルとRチャネルを区別するための信号 |
DATA | 40 | ・PCM Data ・serial data ・デジタル化された音声データのビット列 |
MCK | - | ・Master Clock ・ラズパイのGPIOからは出力されていない ・ICによっては上記3信号と同期するように自動で調整してくれるものもあり、その場合は不要 (今回使うPCM5102AもBCKから生成してくれるので不要) ・System Clock(SYSCLK)とも呼ばれる |
DAC
Degital Analog Converter
ラズパイからI2Sで出力したデジタル信号をスピーカーやヘッドフォンで使えるアナログ信号に変換するもの
今回はPCM5102AというDACチップを利用します
デジタル-アナログ変換回路 - Wikipedia
使ったもの
世の中には既に全て実装済みのDACボードがありますが、今回はチップを買って全てブレッドボード上に1から組み上げます
item | 買ったところ | 個数 |
IC&変換基板 | http://akizukidenshi.com/catalog/g/gK-11836/ | 1 |
ブレッドボード | http://akizukidenshi.com/catalog/g/gP-00315/ | 1 |
ブレッドボード用電源モジュール | https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4RAW | 1 |
抵抗(47Ω) | http://akizukidenshi.com/catalog/g/gR-25470/ | 3 |
抵抗(470Ω) | http://akizukidenshi.com/catalog/g/gR-25471/ | 2 |
コンデンサ(2.2nF) | http://akizukidenshi.com/catalog/g/gP-07686/ | 2 |
コンデンサ(0.1μF) | http://akizukidenshi.com/catalog/g/gP-10147/ | 4 |
コンデンサ(2.2μF) | http://akizukidenshi.com/catalog/g/gP-08152/ | 2 |
コンデンサ(10μF) | http://akizukidenshi.com/catalog/g/gP-04621/ | 4 |
回路図
公式ページのデータシートに回路図例があるので、その通りに組み込みます
http://www.tij.co.jp/jp/lit/ds/symlink/pcm5102a.pdf
注意する点としては
- GNDに落とすところはグランドバウンス対策で47Ω抵抗をはさんでいる
- SCK(MCK)は今回ラズパイからとれないので、GNDに落とすことでpcm5102AがBCKから生成してくれる
- ブレッドボード電源モジュールは3.3Vで使用
- 上記のデータシートの回路図はなぜかICチップ逆になっているので注意
ケーブル接続
次にラズパイと上記のDACセットを接続する
I2Sは普通に調べても表記されていないことが多く、以下のサイトがわかりやすいです
https://bluefish.orz.hm/sdoc/raspi_i2sout.html
ソフトウェア側設定
ハードのほうの組み込みが完了したら、次はラズベリーパイ側の設定を行っていきます
pcm5102Aのドライバはデフォルトでラズベリーパイにインストールされている(/boot/overlays/以下で確認できるか)ので、利用するための記述のみ行います
ドライバのマッピング
sudo vi /boot/config ### 以下の1行を末尾に追加 dtoverlay=hifiberry-dac
ドライバのロード
起動時にドライバをロードするように設定する
sudo vi /etc/modules ### 以下の1行を末尾に追加 snd_soc_hifiberry_dac
上記の設定が済んだら一度再起動する
確認
以下のようにドライバ変更が反映されていたらOK
$ lsmod | grep dac snd_soc_hifiberry_dac 2511 0 snd_soc_core 125885 3 snd_soc_bcm2835_i2s,snd_soc_hifiberry_dac,snd_soc_pcm5102a snd_pcm 75698 4 snd_bcm2835,snd_soc_core,snd_soc_hifiberry_dac,snd_pcm_dmaengine $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] . . card 1: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] . .
DACがcard0のdevice0に割り当てられていることが確認できる
音声出力確認
wavファイルで確認
注意点として、この構成ではモノラルの音源は再生できず、再生しようとすると以下のようなエラーになってしまう
$ aplay -D hw:0,0 /usr/share/sounds/alsa/Noise.wav Playing WAVE '/usr/share/sounds/alsa/Noise.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono aplay: set_params:1239: Channels count non available
なので適当にフリーの音源サイトからwavファイルをダウンロードしてきてそれを再生する
- 今回は以下のフリーサイトからダウンロード
- http://www.ne.jp/asahi/music/myuu/wave/wave.htm
$ aplay -D hw:0,0 /home/pi/fanfare.wav Playing WAVE '/home/pi/fanfare.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
mp3で確認
mp3で確認する場合はmpg321等を利用する
$ mpg321 #{mp3file}
環境によってはエラーが出るが、sudoで実行するとうまくいくことがある
以上で完了。想像以上にてこずった。
ケーブルを整理してラズパイから給電に変更したもの