西川和久の不定期コラム
「Raspberry Pi3 Model B」で遊んでみよう! Part3
~GPIO入門2。I2Sを使ってDACを接続!
2016年6月25日 07:00
前回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もアサイン可能。今回はこれを使用する。
ただし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」コマンドを使用する。
I2Sから出力するのに七転八倒
Raspberry Piサウンド関連のテストも難なく終わり、「ではI2SへDACを接続……」と、思ったところ、重要なことに気が付いた。先に掲載したサウンドデバイス関連の中に“I2S”(と思われる)というキーワードがどこにもない。即ち、このままでは出力先をI2Sにできないのだ。
ネットで調べると、RASPBIANはI2Sに標準で対応しておらず、必要に応じてmakeしなければならないらしい。さすがに開発環境を構築するのはいささか荷が重いのでRASPBIANは諦め、別のディストリビューションを使うことにした。microSDカードへイメージを書き込む方法はPart1と同じ、「DD for Windows」を使ってimgファイルをmicroSDカードへ展開すればOK。
中でも“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やスマートフォンで表示方法が変わりなかなか面白い。
まずは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を接続していたが、ジャンパピンを外し、3本ある内の中央1本にRaspberry Pi3からの信号(ピン12/BCK、ピン35/WS、ピン40/SDATA)計3本それぞれそのまま入れ、加えてGNDピンを1本立て、Raspberry Pi3のピン39/GNDも追加すれば準備完了。全部で4本の配線ならあっという間にできてしまう。
配線が終われば、後は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に挑戦してみたいと思う。ただし、これこそ全く触ったことがなく、執筆できるところまで辿り着けるのか不安だが、楽しみながら修行したい。