読者です 読者をやめる 読者になる 読者になる

アールテクニカ地下ガレージ

アールテクニカ株式会社の製品開発・研究開発・日々の活動です

Raspberry Pi 3でI2S接続のオーディオインタフェースを試す(2:Audio Injector編)

Raspberry Pi ガジェット
Author

コイデマサヒロ

Raspberry Piで使えるI2C接続のオーディオカードのシリーズ2回目です。前回は、MM-5102を試してI2S接続のオーディオデバイスだとノーマルカーネルであってもレイテンシーが抑えることができることがわかりました。出回っているI2S接続のオーディオデバイスの殆どがリスニング向けの再生用途であるため、オーディオ入力が付いていません。せめて2In -2Outのデバイスがほしいところです。

いろいろ探してみたところAudio Injector というデバイスをみつけ入手してみました。今回は、このAudio Injectorを試してみます。

f:id:atkoide:20161102213724j:plain

 

Audio Injectorのスペック

前回紹介したMM-5201は、Raspberry PiのGPIOピンのI2S接続用のものしか使用していませんでしたが、Audio Injectorの場合は、ICのコントロール等のためI2Cピンも利用しています。

デジタル・オーディオ部:最大96kHz、32bit
>32bitは良いとして、96kHzというのはいまどきのデバイスとしては多少見劣りしますが、用途的には十分です。(心臓部のCODECチップの制限です。)

アナログ・オーディオ部:メイン入出力 In x2、Out x2 、RCAピン。レベル調整用のアナログのボリュームが付き。
入力用にマイクが付いているモデルもあるようですが、僕が入手したのはマイク無しのものです。基板上にはマイク用のパターンがあるのと関連部品は付いているようなので、何かしらのコンデンサマイクを付ければ使えるかもしれません。

ヘッドフォン端子:16Ωで最大18mW。出力のボリュームはヘッドフォン端子には効きません。

DAC IC:Wolfson社製 WM8731
(Wolfson社は買収されて現在はシーラス・ロジック社のようです)
このDAC自体は、かなり前からあるようなもののようです。最大96kHzというのも単純に少し古めだからということでしょう。今となっては音質的な評価はそれほど高くないようですが、オーディオイン、アウトを手軽に扱えるチップは貴重かもしれません。またハットの表面からはわかりませんが、裏面にはちゃんとクリスタルが付けられています。

f:id:atkoide:20161102214358j:plain
DACの実物の写真。上側の中ほどのピンが半田ブリッジしていますが、わざとショートさせているようです。

対応ドライバー:ALSA
Audio Injectorの開発者は、ドライバーも作成したようで、カーネルに含まれています。WM8731を使ってカードを自作しても、このドライバーが使えるはずです。(国内では入手性が悪そうですが...)。設定によってはJack Audioからも利用できます。

 

ボート全体の印象

僕が入手したボードには、v1.5とありました。それなりのリビジョンがあるようで、ネットで画像を検索するとコンデンサーにスルーホールのものを使ったものも見つかります。v1.5はコネクタ以外は全て表面実装部品でした。他のバージョンでも回路構成的にそれほど違いは無いと思います。実装自体はそれほど悪くないと思うのですが、フラックスの残留が多いのが気になりました。

 

個人的にどうしても気になっているのが2点。どうにも見た目が...。アナログIOのポートが隣り合わせなのは見た目的にバランスが悪いですね。ここにジャックは付けずにターミナルブロックとかでも良かったのではないかと思います。ちゃんとケースに入れようと思うと、今のままだと取り回しが面倒になりそうです。

 あとジャックはRCAじゃないほうが....。意外と取り回しが面倒なんですよね。

このあたりはいずれ全て取り外して引き出すようにしよいうかなと考えていますが...。

 

その他の情報

本家サイトはこちらですが、
http://www.audioinjector.net/#!/rpi-hat

kickstarterのページの方が情報が多いです。
https://www.kickstarter.com/projects/1250664710/audio-injector-sound-card-for-the-raspberry-pi/description 

セットアップ等の情報はフォーラムに詳しいです。
http://www.flatmax.org/phpbb/index.php

僕はebayで入手しましたが、直接だと日本への発送はしてないようなので、割高にはなりますがsekaimonを通して購入しました。

 

Audio Injectorのセットアップ

公式のサイトのフォーラムにてセットアップツールが公開されていますので、それを利用するのが良いでしょう。
http://www.flatmax.org/phpbb/viewtopic.php?f=5&t=3
基本的には設定ファイルを書き換えるだけですの、手動でできるレベルですが。

 

ツールを使ったセットアップ手順を説明します。予めAudio Injectorを取り付けておいても問題無いです。コマンドラインでの作業です。

ツール類のアーカイブをダウンロードします。

$ wget http://www.flatmax.org/phpbb/download/file.php?id=2 -O audio.injector.scripts_0.1-1_all.deb.tar.gz

ファイルを展開します。

$ tar zxvf audio.injector.scripts_0.1-1_all.deb.tar.gz

展開したフォルダに移動してインストールします。

$ sudo dpkg -i audio.injector.scripts_0.1-1_all.deb

設定スクリプトを起動します。パスが通っているので場所はどこでもOKです。

$ audioInjector-setup.sh

このスクリプトでやっていることは、カーネル類のアップデートと起動時にAudio Injectorのドライバを起動するように設定の書き換えです。古いカーネルだとAudio Injectorのドライバがインストールされていないため、最新にアップデートする必要があります。

 

正常終了すれば、再起動を促されるので、再起動します。(再起動前にAudio Injectorを取り付けておきます)

 

手動で行う場合は

$ sudo nano /boot/config.txt

 で、適当な場所に以下の一行を追加します。

dtoverlay=audioinjector-wm8731-audio

また

dtparam=audio=on

という行があった場合は、削除するかコメントアウトしておいたほうが良いです。(この設定はオンボードとHDMI経由の出力はできなくなりますが、システムがオンボードのサウンドカードを優先することはなくなります)

そしてファイルを保存(Ctl+O)、終了(Ctl+X)して、OSを再起動(sudo reboot)します。

再起動後、

$ alsactl --file /usr/share/doc/audioInjector/asound.state.RCA.thru.test restore

とするとライン入力を使う場合のデフォルト設定にセットされAudio Injectorが使えるようになるようです。しかし僕の場合はこれではだめでした。フォーラムでも同様の問題は報告されていて、

$ alsamixer

でALSA設定ツールを起動し、「Output Mixer HiFi」の項目が「MM」になっていたら「OO」に変更します。変更はキーボードの「M」を押します。(下の画像で、右から4番目の設定項目)

f:id:atkoide:20161102220951p:plain

入力もalsamixerだと「録音」タブ(F4)で「Line」を「録音」にする必要があります(下画像の左下側の設定)。この設定に関係なく、「Output Mixer Line Bypass」をオンにすると入力を出力にスルーしてくれるます。ただし、これはチップ内のみでスルーしてるだけですので入力データが、Raspberry Piに行っていないと思われます。

f:id:atkoide:20161102221012p:plain尚、同様の設定が、alsamixerのGUIツールである、Audio Device Settingsでも設定できます。デフォルトだと設定項目が表示されませんが、「コントロールの選択」から項目を選ぶと各種設定項目が表示され変更できるようになります。

 

Jackの設定は前回で説明したとおり、/boot/config.txt に

dtoverlay=i2s-mmap

という記述を入れてやればOKです。

 

レイテンシ―について

いくつかシンセなどを試してみた感じだと、USBデバイスに比べると半分くらいに抑えられそうです。例えば、zynaddsubfxだとJackでUSBデバイスだと1024x3という設定が、512x3でも充分動きました(ノーマルカーネル)。USBデバイスだと1024x3でもxrun(音切れの原因)が発生しがちですが、I2Sだと発生しません。(リアルタイムカーネルだとさらに半分くらいまでいけましたがフリーズしてしまうためちゃんとデータが取れませんでした)

 

OSのウィンドウシステムはCPU負荷が高いので、ヘッドレスで動かせば、ノーマルカーネルでも、かなりレテンシーを押さえることができそうです。実用性があると言えそうです。(前回のMM-5102でもレイテンシーは同等です)

 

Audio Injectorの音質評価

セットアップツールと一緒にテストツールもインストールされますので、それを使ってみます。

$ audioInjector-test.sh

/tmp/に画像ファイルが作成されます。
僕の環境はマイクが無いバージョンなので、spectragram.pngだけ見てみます。

f:id:atkoide:20161102214500p:plain10kHzのピー、ピーという連続音を再生し、それを録音したもののスペクトログラムです。グラフは上下に2つありますが、ステレオ分の左右ということです。

 

うっすらと10kHzの20kHzにも音が乗っているようです。テストスクリプトをいじって他の周波数でも試してみましたが、倍の周波数に音が乗っているようです。(開発元で公開している画像も似た感じです。)
原因はよくわかりませんが、輻射ノイズのようなものでしょうか?
全体的にもうっすらとノイズは乗っているのが分かります。このあたりはRaspberry Pi側からのデジタルなノイズもあると思われますし、ケース等に入れずシールドされていない状態なので、ある程度は仕方が無いのではないかと思われます。
グラフ上にはいろいろノイズが出ていますが、聴感上はそれほど気にならないレベルです。

安いUSBオーディオインタフェースと色々な音を聴き比べると、Audio Injectorの方が断然クリアで聞き取りやすい音です。個人的な印象では、前回のMM-5102の方が音は良い気がします。

 

 

さいごに

 I2S系のカードはシステムへの負荷が軽くレイテンシーが抑えることができることがわかり、今後の広がりが出てきました。エフェクトとして利用するのはまだ難しいかもしれませんが、シンセ的に使うことはできそうです。
オーディオ入力付きのものは少ないのですが、MIDI+オーディオ(2In、2Out)なカードのリリースを予定しているところもあるようですす。ジャンル的にも盛り上がりが出てくるかもしれません。今後もこのあたりの可能性を探っていく予定です。

 

 

Author

コイデマサヒロ

ディレクター、プロデューサー、ギタリスト。mimiCopyをはじめ弊社リリースの全てソフトウェア製品の企画を担当。ネイティブアプリ開発がメインでOS問わず対応可。dubバンドのギタリストとしても活動中。

スポンサーリンク