HOME | Raspberry Pi | ビジネス書籍紹介 | 2021-09-19 (Sun) Today's Access : 133 Total : 354127. Since 10 Sep. 2019

I2S通信によるハイレゾ音源再生
2020.01.09 / 2021.05.27更新

YouTube 動画でポイントを説明しています。 画像をクリックすると再生できます。

今回は、ラズベリーパイからI2S接続により、デジタルオーディオ変換モジュール(DAC)と通信し、ハイレゾ音源を再生します。
I2S(Inter-IC Sound、アイ・スクウェアード・エス)は、4本のデジタル信号線でステレオ音声をシリアル伝送する規格です。

■PCM5101A I2S DAC

I2S [IIS] 入力DAC PCM5101A搭載32bit 384kHz DAC完成基板
再生に使用するDACは、NFJ製 PCM5101A I2S、Texas-Instruments製のBurrBrown(バーブラウン) PCM5101A DAC ICを搭載しています。
設定に関しては、このPCM5101Aを例に説明します。

■構成図


■配線
Raspberry Pi と DAC を結線します。

今回使用したディストリビューションは、Raspbian Stretch ですが、ここで紹介しているメディアプレイヤーの mplayer は CUI版ですので、Stretch Lite でも問題ありません。

■ドライバー設定

初期設定では、音声はHDMIから出力されるよう設定されているので、DACボードから音を出すには、ドライバーを指定します。
PCM510xA系DACのドライバ名には、hifiberryの名称が使われています。
$ ls /boot/overlays | grep hifiberry
hifiberry-amp.dtbo
hifiberry-dac.dtbo
hifiberry-dacplus.dtbo
hifiberry-dacplusadc.dtbo
hifiberry-dacplusadcpro.dtbo
hifiberry-digi-pro.dtbo
hifiberry-digi.dtbo
$ sudo vi /boot/config.txt
....

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
dtparam=i2s=on ← コメントを外す
#dtparam=spi=on

# Enable audio (loads snd_bcm2835)
# dtparam=audio=on ← コメントにする
dtoverlay=hifiberry-dac ←この行を追加
$ sudo reboot

再生デバイスのリストを表示して、デバイスが反映されているか確認します。

$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: sndrpihifiberry [snd_rpi_hifiberry_dac], デバイス 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0]
サブデバイス: 1/1
サブデバイス #0: subdevice #0

PCM5101A DAC (hifiberry dac)はサウンドカード番号:0。デバイス番号:0になっていることがわかります。
コマンドラインからオーディオデバイスを指定(plughw:カード番号,デバイス番号)して音を鳴らして確認してみます。
再生確認には、aplay コマンドを使用します。aplay はWAVファイルのみ再生できます。

$ aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Left.wav
再生中 WAVE '/usr/share/sounds/alsa/Front_Left.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
aplay: set_params:1305: チャネル数が使用不可能

$ aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Left.wav
この問題を解決するのには、plugを付けて明示的にモノラル音声をステレオに変換して再生することを指示します。
これを指定しないと、モノラル(1ch)からステレオ(2ch)には、変更されません。

■サウンドカード設定

hw:[カード番号], [デバイス番号]を指定します。
$ vi ~/.asoundrc
pcm.!default {
	#type hw
	#card 0
	type plug
	slave.pcm "hw:0,0"
}
ctl.!default {
	type hw
	card 0
}
pcm.!defaultがデフォルトの出力先デバイス、ctl.!defaultがデフォルトのミキサーデバイスを設定できます。

これでデバイスオプション指定なしで再生することができます。
$ aplay /usr/share/sounds/alsa/Front_Left.wav

補足:ALSA PCM デバイスファイル
ALSA とは Advanced Linux Sound Architecture の略で、Linux 2.6 から採用された Linux のサウンドシステムです。
ALSA デバイスファイルの一覧を表示してみます。
$ ls -la /dev/snd
合計 0
drwxr-xr-x   3 root root      220  1月  7 15:41 .
drwxr-xr-x  15 root root     3560  1月  7 15:41 ..
drwxr-xr-x   2 root root       80  1月  7 15:41 by-path
crw-rw----+  1 root audio 116,  0  1月  7 15:41 controlC0
crw-rw----+  1 root audio 116, 32  1月  7 15:41 controlC1
crw-rw----+  1 root audio 116, 16  1月  7 15:41 pcmC0D0p
crw-rw----+  1 root audio 116, 17  1月  7 15:41 pcmC0D1p
crw-rw----+  1 root audio 116, 18  1月  7 15:41 pcmC0D2p
crw-rw----+  1 root audio 116, 48  1月  7 15:41 pcmC1D0p
crw-rw----+  1 root audio 116,  1  1月  7 15:41 seq
crw-rw----+  1 root audio 116, 33  1月  7 15:41 timer
PCM 再生、録音のデバイスファイル名は 4つの部分に分かれていて、それぞれ命名にルールがあります。
たとえば pcmC0D0p を例にとって分解してみましょう。
pcm:PCM のデバイスであることを意味します。どのデバイスファイルでも pcm です。
C0:サウンドカード番号 0 を意味します。カード 1 なら C1 となります。
D0:デバイス番号 0 を意味します。デバイス 2 なら D2 となります。
p:PCM の再生能力があることを意味します。録音能力の場合は c となります。

■mplayer インストール
MPlayer(エムプレーヤー)は、オープンソースのメディアプレーヤーです。 様々なフォーマットに対応しており、またコマンドラインで使用する際、動画の映像を捨て、音声のみ再生することが可能ですので、とても便利です。
$ apt-cache search mplayer | grep mplayer
....
mplayer - movie player for Unix-like systems
....

$ apt-cache show mplayer | more
Package: mplayer
Version: 2:1.3.0-6
Architecture: armhf
......

$ sudo apt-get install mplayer
$ mplayer -vo null -ao alsa:device=plughw=0.0 sample.mp4
-vo :ビデオ(動画)の出力先
-ao :オーディオ(音声)の出力先

動画 sample.mp4 の音声部分のみを取出し再生しています。
$ mkdir ~/.mplayer
$ vi /home/pi/.mplayer/config
ao=alsa:device=plughw=0.0
vo=null
これでファイルパスを指定するだけで再生することができます。
$ mplayer sample.mp4



それでは、mplayer を使ってみましょう。
最初に、音楽データを保存する際のディレクトリーのレイアウトを検討します。
私の場合、ジャンル→アーティスト→アルバム名の下に楽曲を配置しています。
アルバム内の楽曲が収録順に演奏されるように、曲名の前にインデックスを付けています。
<music>
  +--<classic>
  |     +--<LiseDeLaSalle>
  |     |     +--<Bach>
  |     |     |     +-- 01_BWV903_Fantasie.mp3
  |     |     |     +-- 02_BWV903_Fuge.mp3
  |     |     |     +-- 03_BWV659.mp3
  |     |     |     +--....
  |     |     +--<Rachmaninov&Ravel>
  |     |     +--....
  |     +--<Rubinstein>
  |     +--....
  +--<jazz>
  +--<tango>
  +--....
  +--<favorite>
特定の曲を聴く
$ mplayer ~/music/classic/LiseDeLaSalle/Bach/01_BWV903_Fantasie.mp3

アルバム全曲を聴く
$ mplayer ~/music/classic/LiseDeLaSalle/Bach&Liszt/*

特定アーティストの曲を聴く
$ mplayer ~/music/classic/LiseDeLaSalle/*/*

また、好みの曲は、favorite にも配置しています。

シャッフル
$ mplayer -shuffle ~/music/classic/*/*/*

ループ再生
$ mplayer -loop 0 ~/music/classic/LiseDeLaSalle/Bach&Liszt/*

キー操作で一時停止、ミュート、音量調整なども行えます。
keyboard control
 left or right    seek backward/forward 10 seconds
 down or up       seek backward/forward  1 minute
 pgdown or pgup   seek backward/forward 10 minutes
 < or >           step backward/forward in playlist
 p or SPACE       pause movie (press any key to continue)
 ENTER            go forward in the playlist, even over the end.
 q or ESC         stop playing and quit program
 / and *          Decrease/increase volume.
 9 and 0          Decrease/increase volume.
 m                Mute sound.

■ファイル共有設定

リモートサーバー内のメディアファイルを、mplayer で再生する設定です。

$ sudo apt-get -y install sshfs

$ mkdir ~/Music
$ sshfs ubuntu@server:/home/ubuntu ~/Music
※server には、ホスト名あるいはIPアドレスを指定してください。

$ mplayer ~/Music/*

アンマウント
$ fusermount -u ~/Music

■PCM5101A搭載I2S DAC基板 (North Flat Japan Co., Ltd)

【DIPスイッチ:H=ON L=OFF】
スイッチ1:フィルター設定 ON:IIR(無限インパルス応答) / OFF:FIR(有限インパルス応)
スイッチ2:オーディオフォーマット設定 ON:Left-Justified / OFF:I2S
※必ず電源OFFの状態でDIPスイッチ設定を行ってください。動作モードはIC起動時に読み込まれるため、電源を切らない限りリセットされません。

【製品仕様】
DAC IC:Burr-Brown PCM5101A [SN比]106dB / [ダイナミックレンジ]106dB / [THD]-92dB
動作電圧:DC4.2V?12V
デジタル入力:I2S (IIS) / Left Justified(3線入力/4線入力両対応)
入力端子:[ピンヘッダー]LRCK/BICK(BCLK)/DATA(SDATA)/MCLK/GND
※MCLK出力がない機器の場合はMCLKをGNDに落とせば内部クロックで動作しますが、落とさない場合でもICの仕様により自動的に内部クロックで動作します。
アナログ出力:ステレオRCA端子/3.5mmステレオミニジャック (排他利用)
対応フォーマット:[サンプリングレート]
44.1kHz/48kHz/88.2kHz/96kHz/176.4kHz/
192kHz/352.8kHz/384kHz
[ビットレート]16bit/24bit/32bit
機能:[DACデジタルフィルター演算方式変更機能]
 FIR有限インパルス応答(Normal)/IIR無限インパルス応答(Low)
[入力フォーマット切替機能]I2S & Left-Justified
[MUTE機能]
対応OS:Windows 10/ 8(8.1)&7/ Vista / XP / 2000/ MacOS X / 9.1以降
サイズ:高さ14mm×幅63mm×奥行き49mm
重量:14g

■pimoroni pHAT DAC 2020.05.23追記


購入して放置状態になっていた、pimoroni pHAT DAC を取り付けてみました。
Raspberry Pi Zeroと同サイズの、安価ながら高品質なDAC機能を追加するpHATボードです。 2×20のGPIOピンヘッダで、Raspberry PiのI2Sインタフェースから192 kHz、24ビットのオーディオを出力します。
※現時点で、すでにpimoroni社の製品は Pirate Audio シリーズに移行しており、入手がかなり困難になっています。

DACは、上述のPCM510Xシリーズ製品ですので、Raspberry Pi Zero WH に被せるだけで動作しました。

PCM510xシリーズには、PCM5100、PCM5101、PCM5102の3種類があります。 違いは、SNR(S/N)のスペックです。100、106、112dB で各6dB差があります

新規に組み込む場合は、チュートリアルが示す手順になると思いますが、 マニュアル・セットアップの内容をみると、サウンドカードがカード番号0に指定されてしまいます。
LINE OUTから出力されない場合は、最初に説明しているPCM5101の設定をしてみてください。

チュートリアル(Setting up pHAT DAC)
http://learn.pimoroni.com/tutorial/phat/raspberry-pi-phat-dac-install

Automated Set Up
$ curl -sS https://get.pimoroni.com/phatdac | bash

Manual Set Up

/etc/modprobe.d/raspi-blacklist.conf
This file prevents certain modules from loading at startup. With the file open, comment out the lines corresponding to the modules we want to load by changing:
$ sudo nano /etc/modprobe.d/raspi-blacklist.conf
blacklist i2c-bcm2708
blacklist snd-soc-pcm512x
blacklist snd-soc-wm8804
 ↓
#blacklist i2c-bcm2708
#blacklist snd-soc-pcm512x
#blacklist snd-soc-wm8804
raspi-blacklist.confは初期状態では空でしたので、コメントアウトの必要もありません。

/etc/modules
This file, in contast to the blacklist, lists modules which we do want to load. We're going to remove the default sound driver with a comment, so change the line:
$ sudo nano /etc/modules
snd_bcm2835
 ↓
#snd_bcm2835
初期状態で、snd_bcm2835の記載はありませんでした。

Sound Config
Finally, create a new asound.conf
$ sudo nano /etc/asound.conf
pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}
LINE OUTから出力されない場合は、最初に説明しているPCM5101の設定をしてみてください。

Device Tree
$ sudo nano /boot/config.txt
dtoverlay=hifiberry-dac
#dtparam=audio=on
$ sudo reboot

pHAT DAC は、ピンホールに自分でピンソケットをハンダ付けする必要があります。
製品に添付されてくるピンソケットは足の短いものですが、足の長いピンソケットを使うことで、pHAT DAC で使用していないピンを 有効に活用することができます。

 Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2020.01.05 第1回 abcjs 楽譜作成・演奏スクリプト
2020.01.09 I2S通信によるハイレゾ音源再生
2020.01.18 MIDI再生:FM音源YMF825+Arduino編
2020.01.24 FM音源YMF825+micro:bit編
2020.02.13 Piano Hat & Rosegarden
2020.03.18 テキスト読み上げ gTTS
2020.05.19 テキスト読み上げ AquesTalk pico LSI
2020.06.22 波形処理 第1回 音の波と三角関数
2020.07.22 波形処理 第2回 平均律と純正律
2020.08.26 波形処理 第3回 黒鍵と白鍵
2020.11.21 深層学習 第1回環境整備
2020.12.19 深層学習 第2回マルコフ連鎖・自動歌詞生成
2021.01.02 深層学習 第3回コード進行解析
2021.01.16 波形処理 第4回 コード演奏
2021.08.07 MIDI制御/Adafruit Music Maker
2021.08.23 MIDIフォーマット解析
2021.08.24 オーディオアンプ・スピーカー


ニーア オートマタ PLAY ARTS改 <ヨルハ 二号 B型 DX版> PVC製 塗装済み可動フィギュア
「NieR:Automata」より、ヨルハ二号B型こと2BがPLAY ARTS改に新たに登場! 高級感の感じられるコスチュームや髪の質感、洗練されたボディバランス、細かなデティールに至るまでこだわり抜かれた逸品。 DX版には通常版のラインナップに加え2Bの随行支援ユニット ポッド042などをはじめ“純白の美しい太刀"白の約定やエフェクトパーツ、自爆モードを再現できる換装用ボディパーツ、シーンに合わせて変えられる顔パーツ2種も付属する豪華な仕様に。 作中のあらゆるシーンを再現することが可能なファン必見の一品となっている。

DIPスイッチで動作電圧を3.3Vと5Vに切り替えられるUNO互換ボード
KEYESTUDIO Plus Board for Arduino UNO R3 with Type-C USB Cable, 3.3V 5V 1.5A Output Current, More Powerful Controller Board USB-シリアルチップ:CP2102 / 動作電圧:5Vまたは3.3V(DIPスイッチ制御)/ 外部電源:DC 6-15V(9V推奨)/ デジタルI / Oピン:14(D0〜D13)/ PWMチャネル:6(D3 D5 D6 D9 D10 D11)/ アナログ入力チャネル(ADC):8(A0-A7)/ DC出力機能の各I / Oポート:20 mA / 3.3Vポートの出力能力:50 mA / フラッシュメモリ:32 KB(うち0.5 KBはブートローダーによって使用されます)/ SRAM:2 KB(ATMEGA328P-AU)/ EEPROM:1 KB(ATMEGA328P-AU)/ クロック速度:16MHz / オンボードLEDピン:D13

エレクトロクッキー Leonardo R3 ATmega32u4 ボード DIY Arduino工作用 - ピンクエディション


Newtonライト2.0 ベイズ統計
ベイズ統計は,結果から原因を推定する統計学です。AIや医療などの幅広い分野で応用されています。その基礎となるのは18世紀に考えだされた「ベイズの定理」です。 この本では,ベイズ統計学のきほんをやさしく紹介していきます。

Interface 2021年10月号
☆特集:~ 格好良さアップ! 機能&信頼性アップ ! ~「 3Dプリンタ & メカ設計入門 」
☆特集2:Pico達人への道…「 C/C++でMicroPython拡張 」


トランジスタ技術 2021年9月号
☆特集:~ 直流・交流・非接触・センサ微小電流の測定ノウハウ ~「電流を正しく測る技術」

トランジスタ技術スペシャル 2021年7月号 宇宙ロケット開発入門
これから開発・活用が進むと期待されている宇宙空間への交通・物流インフラとして、小型・低価格ロケットが注目を集めています。本書では、基本構造から制御メカニズムまで、小型宇宙ロケット開発の基礎知識を実例を交えて解説します。

日経Linux 2021年9月号
【特集1】おうち時間をLinuxデスクトップで楽しむ! Linux環境を作るワザ
【特集2】徹底図解で丸わかり! 「WSL2」入門   Windows 11の新機能を速報!
【特集3】IT自動化ツール AnsibleでWeb導入を自動化
【特集4】ラズパイで楽しむLinuxライフ 「今、会議中」と家族に伝えるプレートをPythonで作ろう


ラズパイマガジン2021年秋号
特集1 サクッと動くパーツ&ライブラリ総覧
特集2 ArduinoライブラリでラズパイPicoを動かす
特集3 古いラズパイをフル活用! Node-REDで 楽しい電子工作
特集4 空気の汚れをラズパイで検知しよう
特集5 ラズパイで楽しむLinuxライフ
特集6 NVIDIAのAIボードが6000円台に!
特集7 M5StickCで始める電子工作 iPhoneからサーボモーターを制御しよう


トランジスタ技術スペシャル 2021年 4月号 No.154「達人への道 電子回路のツボ」
初学者が実用的な電子回路を設計できるようになるためのポイントをまとめました。学校の教科書だけではつかめない基本電子回路やOPアンプ/トランジスタの使い方の実際を、いろいろな視点から解説しています。


Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
【仕様概要】CPU:ARM 1.2GHz 4コア、GPU:2コア 3D・動画支援、RAM:1GB、ネットワーク:LAN/Wi-Fi/Bluetooth、インターフェース:USB/HDMI/オーディオ/GPIO(UART/I2C/I2S/SPI...)。

ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換 (3)


ESPr Developer 32
スイッチサイエンス(Switch Science)

協和ハーモネット UL1007 AWG24 耐熱ビニル絶縁電線 リール巻 100m 黒


白光(HAKKO) ダイヤル式温度制御はんだ吸取器 ハンディタイプ FR301-81


サンハヤト TTW-203 テストワイヤ
ブレッドボードとスルーホール間の接続に便利なワイヤですブレッドボード用のオスピンと基板のスルーホール用のバネ性のある端子を組み合わせたテストワイヤです

無水エタノールP 500mlx2個パック(掃除)


ケイバ(KEIBA) マイクロニッパー MN-A04


熱収縮チューブφ1.5
印字無しで綺麗☆ シュリンクチューブ 絶縁チューブ 防水 高難燃性 収縮チューブ (2m, ブラック(黒))


サンハヤト SAD-101 ニューブレッドボード


白光(HAKKO) HEXSOL 巻はんだ 精密プリント基板用 150g FS402-02


【Amazon.co.jp限定】エーモン 電工ペンチ 全長約255mm (1452)


[Amazon限定ブランド]【指定第2類医薬品】PHARMA CHOICE 解熱鎮痛薬 解熱鎮痛錠IP 100錠


Copyright © 2011-2022 Sarako Tsukiyono All rights reserved®.