西川和久の不定期コラム

「Raspberry Pi3 Model B」で遊んでみよう! Part3

~GPIO入門2。I2Sを使ってDACを接続!

 前回Part2では、Raspberry Pi固有のGPIOへLEDを接続しオン/オフしてみたが、実用性は限りなくゼロ。今回Part3ではホビーでの具体的な利用方法として、GPIOのI2SへDACを接続し、ミュージックサーバーを構築したい。

GPIOのI2S出力

 もともとGPIO入門編その2となる予定だったこの回では、市販のセンサーを接続し、それに関するプログラミングなどを掲載するつもりだったが、考えてみると、GPIOからデータを取り込むまでは、Raspberry Piの仕様であるものの、センサーから得た値を演算して何かするのは、センサーの仕様。GPIOのコントロールに関しては(データ量が増える程度で)前回のPart2と大差なく、さほど面白くなさそうだ。

 であればと、Raspberry Pi固有でGPIOで……と、ネタを考えたところ、I2Sを出力できることを思い出し、プログラミングからは少し離れてしまうが、I2SへDACを接続、ミュージックサーバーを起動すれば、Raspberry Piを遊びレベルから実用レベルへ一気に引き上げることができることを思いついた。筆者の好きなお題であり、テンションも上がる(笑)。

 I2Sとは、Inter-IC Soundの略で、デジタル音声データをシリアル転送するための規格。汎用DAC(ADCもある)へ接続するバスの一種と言えば分かり易いだろうか。基本は3本だが、動作の基準となるMCLK/マスタークロックが追加されるケースが多くなった。

 Part2で少し触れたがRaspberry PiのGPIOはいろいろな作動モードを持っており、単に1bitのIN/OUTだけでなく、ピン12/BCK、ピン35/WS、ピン40/SDATA=I2Sもアサイン可能。今回はこれを使用する。

公式サイトの画像に、I2S関連3つ(緑色)を追加したもの。ピン12/BCK、ピン35/WS、ピン40/SDATA

 ただしRaspberry Pi3には、先に挙げたマスタークロック信号のMCLKがないため、これが必要なDACは(そのままでは)使えない。最近のDACは使ったことがないので(その上パッケージが小さ過ぎて半田付が難しい)、3つの信号だけで作動するDACが現在どれだけあるか分からないが、10年ほど前に、飽きるほど作った「TDA1543」や「TDA1541A」などがMCLKなしで動作するようだ。まだ手元に何台か残っているので、簡単にテストもできる。

Raspberry Pi(RASPBIAN)のサウンドデバイス周りを下調べ

 I2SへDACを接続する前に、Raspberry Pi(RASPBIAN)のサウンド周りを調べ、同時にUSBへ“Chord Mojo”も接続し、USBオーディオに関してもテストした。

 Mojoは、高価なハイエンドDAC(数百万円級もある)で有名なChordが去年(2015年)11月に出荷したポータブルアンプ(ポタアン)だ。入力はオプティカル(最大192kHz/24bit)、コアキシャル/3.5㎜(最大768kHz/32bit)、Micro USB(最大768kHz/32bit)の3系統、出力はヘッドフォンジャック(3.5㎜)×2。USB充電式のバッテリを搭載し、最大約8時間駆動が可能。もちろんハイレゾ対応で、最大PCM 768kHz/32bit、DSD256(11.2MHz/1bit)の再生が可能だ。固定出力のラインアウトモードがあるのでDACとしても使用できる。

 最大の特徴は、汎用DAC ICを使わず、Xilinxの新世代「Artix7」FPGAによるD/A変換を搭載してる点だ。つまり汎用DAC ICを使い、電源やパーツ、回路など外堀を工夫して差別化している他社とは、根本的にアプローチが異なる製品に仕上がっている。

 同社は、もともとHugoと呼ばれる、25万円ほどするポタアンを出していたが、写真からも分かるように、アーキテクチャそのままコンパクトにして、6万円台後半の価格に抑えたモデルがMojoとなる。

 なお、Mojoは「USB Audio Class 2」に対応したドライバがOS標準(OSXやiOS)であればそのまま作動するが、Windowsのように非対応の場合は、別途ドライバをインストールする必要がある、少し難易度(?)の高いデバイス。RASPBIANでそのまま動くのか興味のあるところだ。

 サウンドに関連するファイルやコマンドを操作すると以下のようになった。

 得られた情報を要約すると“Broadcom BCM2835”と“USBに接続したChord Mojo”がサウンドデバイスとして使え、card番号とデバイス名はそれぞれ、card 0/sysdefault:CARD=ALSA、card 1/sysdefault:CARD=Mojoとなっている点だ。

 vlcを使いネットラジオを再生するには(vlcがない場合は「sudo apt-get install vlc」でインストールする)、

これで聴くことができる。ボリュームのコントロールは「alsamixer」コマンドを使用する。

実際に作動しているところ。コマンドラインから起動したのでX(GUI)系のエラーが出ているが問題無く作動する
音量調整。alsamixer -c 1(card 1指定で起動)
電源ボタンのイルミネーション(右端)が赤色なので44.1kHzで作動している

I2Sから出力するのに七転八倒

 Raspberry Piサウンド関連のテストも難なく終わり、「ではI2SへDACを接続……」と、思ったところ、重要なことに気が付いた。先に掲載したサウンドデバイス関連の中に“I2S”(と思われる)というキーワードがどこにもない。即ち、このままでは出力先をI2Sにできないのだ。

 ネットで調べると、RASPBIANはI2Sに標準で対応しておらず、必要に応じてmakeしなければならないらしい。さすがに開発環境を構築するのはいささか荷が重いのでRASPBIANは諦め、別のディストリビューションを使うことにした。microSDカードへイメージを書き込む方法はPart1と同じ、「DD for Windows」を使ってimgファイルをmicroSDカードへ展開すればOK。

Volumio2。http://volumio.localでLANからアクセスできる。機能満載なのだが、RC1ということもあり、まだバギーで完成まで待ちたい

 中でも“Volumio”が評判がよく、早速ダウンロードし、起動すると、画面が虹色になり先に進まない……。サイトをよく見ると「Raspberry Pi3には未対応」だったのだ。Raspberry Pi3に対応するのは“Volumio2”となっており、現在開発中でRC1が公開されている。最終版は2016-03-25となっており、少し開発のテンポが遅くなってきているようだ。

 ただ起動するにはするが、NASの共有フォルダがマウントできなかったり、肝心のI2Sが試した範囲ではうまく動かないなど、残念ながら今回はパスすることにした。

 最終的に使ったのはmoodeOSで作動する“moOde audio player”。最新の2.6が6月7日に公開されたばかりで、Raspberry Pi3にも対応、もちろんI2SもOKだ。電源OFFも含め基本操作は全てWeb UIで操作でき、またBootstrapをベースにしているのでレスポンシブ対応、PCやスマートフォンで表示方法が変わりなかなか面白い。

moodeOSのコンソール画面。GUIはない。id: pi、password: raspberryでログインできる
moOde audio playerのPlayback画面。http://moode.local でLAN上のWebブラウザから起動する。レスポンシブ対応なので、ブラウザの幅を狭めると見栄えが変わる
スマートフォンでアクセスしたときのPlayback画面。3段が1段上下の並びに変わっているのが分かる

 まずはnasneで共有しているiTunesフォルダをマウント、Raspberry Pi3の3.5mmジャックから音が出るのを確認し、いよいよI2SでのDAC接続となる。

I2S接続はたった4本

 今回用意したのは自作の「TDA1543 4パラ 抵抗式I/V ノンオーバーサンプリングDAC」。これにした理由は写真からも分かるように、DAI(Digital Audio Interface)と呼ばれるS/PDIFからI2Sまでと(写真左側半分)、I2SからDACへの部分(写真右側半分)が完全に分離しており、ジャンパでお互いを切り離すことが簡単にできる構造になっていたからだ。これであればパターンカットなど基板を傷めずに済む。

 以前、筆者が書いた回路図も掲載するので参考にして欲しい。設計自体は筆者ではないが、当時自作DACが流行り、みんなの意見を聴きつつ、友人の1人が(基板も)設計したものだ。

左部分がDAI(今回未使用/未通電)、右部分がDAC。もともとジャンパピンで物理的に回路を切り離すことができ、(狙ったかのように)今回の用途にピッタリだった
電源部。TDA1543は3Vから8Vで駆動できるため、Raspberry Pi3 Model Bの5Vからでもいいのだが、LM317Tを使った電源ユニットがあったので7.5V程度に調整して使用
DAI部分の回路図。Coax1/2、Opt1/2、入力セレクタ、CoaxOut、リクロック、各ICに独立した三端子レギュレータ配置……など高性能。その分、使いまわしができるるようにと、I2S部分で切れるようになっていた。この部分がまるまるRaspberry Pi3 Model Bに置き換わる
DAC部分の回路図。古典的なTDA1543 4パラ 抵抗式I/V ノンオバーサンプリングとなっている。(効きは弱いが)LPFが入っているのが工夫部分

 もともとジャンパピンでDAIとDACを接続していたが、ジャンパピンを外し、3本ある内の中央1本にRaspberry Pi3からの信号(ピン12/BCK、ピン35/WS、ピン40/SDATA)計3本それぞれそのまま入れ、加えてGNDピンを1本立て、Raspberry Pi3のピン39/GNDも追加すれば準備完了。全部で4本の配線ならあっという間にできてしまう。

GPIOのピン12/35/40、そしてピン39/GNDから信号を引っ張り出す
TDA1543のI2S、BCK/WS/SDATAそれぞれに信号を入れ、GND用に別途pinを立てGPIOと接続
moOde audio playerのConfigure > System > Audio > I2S audio deviceで同じ構成のDAC、G2 Labs BerryNOSを選択

 配線が終われば、後はmoOde audio playerの出力をI2Sへ切り替えるだけとなる。Configure > System > Audio > I2S audio deviceから選ぶのだがGeneric I2S的な項目が無く、たまたま同じDAC、TDA1543を使用した「G2 Labs BerryNOS」があったのでそれを指定。無事再生が可能となった(OSの再起動が必要)。サウンドデバイスとしては以下のようになっている。

 なおDACの項目にはいくつもの種類があり、多くはRaspberry Piのドーターボード(上にそのまま乗る基板)形式だ。「Raspberry Pi DAC」で検索すると、いろいろなDACボードの写真が出てくるので興味のある人は是非見てほしい。

 一部バッファに真空管を搭載したものがあるが、今なら21世紀の真空管、コルグの「Nutube」を使ってみたいところ。個人にも単品で販売するそうだ(今年3月13日、「HIGH RESOLUTION FESTIVAL at SPIRAL」で直接KORGに確認)。

 USB Audioで鳴らすなら、Raspberry Piでなくてもいいのだが、I2Sで直接DACを駆動したい時はRaspberry Piの独擅場だ。掲載したDAIの回路図がそのままRaspberry Piに置き換わるのだから、コンパクトにまとめることができ、自作&製品化するとしても手間が省け、シンプルな分、音質に影響しそうなパラメータも減らすことができる。

 ただ今回に限って、音質に関しては、I2S接続かUSB接続か以前の話で、1992年2月リリースのTDA1543と、2015年最新鋭のMojoと……を比べるまでもないといった感じになってしまった。MCLK不要な最新鋭のDACなら、また評価が変わってくるだろう。

 moOde audio playerは、USBストレージ/NASの共有フォルダマウント、ネットラジオはもちろん、アップサンプリング機能などもあり、なかなか楽しめる仕様になっている。趣旨から外れるので、詳細は掲載しないものの、これなら「Raspberry Piが1台あってもいいかも!」と思った次第だ。今も執筆しながらご機嫌なサウンドが流れている。


 Part3はGPIOから出ているI2Sを使ってDACを駆動、ミュージックサーバーを構築した。おそらくホビーでRaspberry Piを使う用途としては、かなり実用的なものだと思われる。オンボードの音源やUSB DACでも作動するので、興味のある方は是非試して欲しい。

 さて、最終回のPart4はこれまで扱ったLinux系ではなく、もう1つのOS、Windows 10 IoT Coreに挑戦してみたいと思う。ただし、これこそ全く触ったことがなく、執筆できるところまで辿り着けるのか不安だが、楽しみながら修行したい。

Hello, World!までは何とかOK