ラズパイ(Raspberry Pi)のボード上に3.5mmステレオジャックが搭載されています。しかし、このステレオジャックの音質はあまり良いものではありません。
ラズパイを使えば、簡単に小型で高機能なオーディオプレイヤーを作ることができます。しかし、音質が貧弱なのでオーディオプレイヤーとしては物足りなさを感じてしまうでしょう。
そこで今回は、I2Sと呼ばれる規格に対応するステレオDACモジュールをラズパイに接続して、ヘッドフォンで良い音楽が楽しめるように改良する方法を紹介します。
目次
- ラズパイのヘッドフォンから出る音を改善するには?
- 1.1. なぜラズパイの音は悪いのか?
- 1.2. 改善方法(1) HDMIを使用する
- 1.3. 改善方法(2) DACモジュールを使用する
- 1.4. I2Sとは?
- 準備
- 2.1. 用意するもの
- 2.2. 3.5mmステレオジャックの半田付け
- 2.3. DACモジュールにピンヘッダを半田付け
- 配線
- ドライバ(ソフトウェア)のインストール
- ボリュームを調整する
- まとめ
1. ラズパイのヘッドフォンから出る音を改善するには?
ラズパイの基板上に実装されている3.5mmステレオジャックにヘッドフォンやスピーカーを接続したことがありますか? 音質の悪さに驚いたはずです。
エラー時の警告音や玩具の効果音ならこれでも十分です。しかしヘッドフォンを接続してオーディオを楽しむには全く適しません。
「なぜこんな音なのか?」「改善するには?」について考えてみます。
1.1. なぜラズパイの音は悪いのか?
ラズパイのCPU(マイコン)は複数のタスクを同時に実行できるパワーを持っています。しかしその周辺回路は「できるだけ低価格で提供する」ラズパイのコンセプトに基づいているので、それ以外の付加機能は必要最低限の性能しか搭載していません。
オーディオも例外ではなくCPUから3.5mmステレオジャックの回路も簡易的なものを搭載しています。
電子回路はデジタル回路とアナログ回路に大別されます。
デジタル回路とは「0と1」の組み合わせで作られるデジタル信号を「0Vと3.3Vの電圧」へ置換して電子部品同士が情報を交換する回路です。ちなみに3.3VはラズパイのCPUの電源電圧です。
一方、アナログ回路が扱うのは「0Vと3.3Vの間の電圧の変化」で情報を表現するアナログ信号です。人間の耳に伝わる「音」も微妙な電圧の変化で表現されるアナログ信号です。
そのためデジタル信号を処理するコンピューターは「音の情報」をそのまま扱えません。
そこでラズパイなどのコンピューターは「アナログ信号をデジタル信号に変換して取り込み処理」し、また「処理したデジタル信号をアナログ信号に変換して出力」します。
「音」も同様で、例えばマイクからラズパイに音声を取り込み、加工してヘッドフォンに出力する場合は
アナログ信号(マイク) ≫ デジタル信号 ≫ ラズパイ ≫ デジタル信号 ≫ アナログ信号(ヘッドフォン)
のようになります。
この「アナログ信号 ≫ デジタル信号」の変換を「A/D変換(ADC)」と呼び、「デジタル信号 ≫ アナログ信号」の変換を「D/A変換(DAC)」と呼びます。
一般的にD/A変換は処理が複雑で高コスト化の原因になるので、マイコンには搭載されず(ラズパイにはA/D変換もありません)、D/A変換用のICを外付けする必要があります。
ところがラズパイはD/A変換用のICを使わず、PWM信号と抵抗とコンデンサで構成されたローパスフィルタによる「擬似的なアナログ信号」で代用しています。
PWM(Pulse Width Modulation)は、デジタル入出力ピンから出力される電圧(ラズパイは3.3V)を高速にON/OFFする機能です。このままではデジタル信号なので「音」として聞くことはできません。そこでラズパイは、このデジタル信号をローパスフィルタで平均化によって0Vから電源電圧までの間の電圧(アナログ信号)を擬似的に表現しています。
そのため、D/A変換用のICを使わなくても音は出力できますが、音質はあまりよくありません。
1.2. 改善方法(1) HDMIを使用する
ラズパイには標準でHDMI端子が実装されています。皆さんもラズパイにディスプレイを接続するときに使用しているでしょう。
もともとHDMIは1本のケーブルで映像や音声などをデジタル信号のまま伝送することが目的の規格なので、これをオーディオの出力に使うことができます。
ただしHDMIに直接接続できるヘッドフォンはありません。HDMI信号(デジタル信号)からオーディオを分離してアナログ信号に変える変換器が必要です。
このHDMI信号を変換する方法は、主にホームシアターのような据え置きに対して使用するのに適しています。
1.3. 改善方法(2) DACモジュールを使用する
改善方法(1)の方法はラズパイから出力されるデジタル信号(HDMI信号の中のオーディオ)をアナログ信号に変換するものでした。
似たような方法を考えれば、もう少しシンプルにヘッドフォンを接続することができそうです。
そこで今回は、市販のDACモジュールを使用します。
DACモジュールとは、ラズパイからオーディオをデジタル信号の状態で取り出してD/A変換を行い、アナログ信号を出力するものです。
ラズパイからオーディオをデジタル信号で取り出す規格にはI2Sが使われます。
本記事で使用するDACモジュールの出力はラインレベルです。ラインレベルとはオーディオ機器同士が信号を伝達するための規格で、あまり大きな出力ではありません。そのため大型のヘッドフォンでは十分な音量が得られない場合があります。
また、ラインレベルの出力には音量を調整するボリュームがついていないので可変抵抗器を取り付けてボリュームの代わりにします。
1.4. I2Sとは?
今回使用するDACモジュールはI2Sの規格を使用してラズパイからデジタル信号(オーディオ)を取り出します。
I2Sは「Inter-Integrated Circuit Sound」の略です。「Inter-IC Sound」と表記されることもあります。日本語では「IC間サウンド」です。
名前が似た機能にI2Cがあります。I2Cは近距離に配置されたマイコン同士が情報交換するための通信の仕様です。
I2Sもマイコン間の通信の仕様ですが音声データを転送するために特化したもので、I2Cとは全く関係ありません。
配線(信号線)はI2Cだと2本使用しますが、I2Sは3本以上です。
本記事で使用するDACモジュールには、ラズパイとI2Sで通信できるように製造元からラズパイのデバイスドライバ(ソフトウェア)が配布されています。そのため使用時にI2Sを意識する必要はありません。
デバイスドライバの対応しないOS・マイコンに接続する場合はI2Sの処理をプログラム内でコーディングします。
2. 準備
電子工作の準備です。必要な部材を用意したらピンヘッダなどを半田付けします。
2.1. 用意するもの
以下のものを用意してください。
ラズパイ本体
ブレッドボード
GPIO拡張基板
スイッチサイエンス製(互換可)
3.5mm ステレオジャック
I2S ステレオDACモジュール
2連ボリューム(10kΩ)
電解コンデンサ(220uF)
上記のほかに次のものが必要です。
- 電源
- ブレッドボード用のジャンパーワイヤ
- USBキーボード、マウス(ラズパイにSSH接続する場合は不要)
- ニッパーなどの工具
- 半田ごて、半田
ブレッドボード用のジャンパーワイヤは切断して使用します。
3.5mmステレオジャックは「ステレオミニジャック」と呼ばれる場合もあります。またジャックは3極と4極がありますがステレオオーディオ出力で使用するのは3極です。4極は「3極+マイク」でスマートフォンなどのヘッドフォンに採用されています。今回は3極を用意してください。
2.2. 3.5mmステレオジャックの半田付け
本記事で使用するDACモジュールはラインレベルの出力なのでボリュームがついていません。可変抵抗器で音量調整できるようにジャックに電線を半田付けしておきます。電線はブレッドボード用のジャンパーワイヤを3本使用します。
ジャンパーワイヤは3本とも片方のブレッドボードに挿す端子を切り落とします。もう片方はブレッドボードに接続するために必要です。
半田付けできるように電線の被覆をはがします。露出した部分をジャックの端子に巻き付けてから半田付けすると失敗が少ないでしょう。
2.3. DACモジュールにピンヘッダを半田付け
本記事で使用するDACモジュールには15ピン(9ピン・6ピン)の端子があります。
ブレッドボードに挿して使用できるように、付属しているピンヘッダを端子に半田付けします。
3. 配線
DACモジュールとラズパイを以下の手順で配線します。
DACモジュールをブレッドボードに挿します。ブレッドボードの左側にはGPIO拡張基板を、右側にはDACモジュールを配置します。
ラズパイの3.3Vピンをブレッドボードの電源ライン(+)に、GNDピンを電源ライン(-)に配線します。
DACモジュールの電源とグランドをそれぞれブレッドボードの電源ライン(+)と電源ライン(-)に接続します。
次に電解コンデンサをブレッドボードに挿します。
ラズパイから来る電源はノイズを含む場合があります。通常の電子工作では特に問題ありませんが、今回のようなオーディオを扱う場合ノイズは大敵です。そこで電解コンデンサ(220uF)をノイズフィルターとして使用します。
接続は簡単です。ブレッドボードの電源ライン(+)と電源ライン(-)をまたぐように挿します。
電解コンデンサには極性があるので注意してください。端子が長い方がプラス側です。また電解コンデンサの筐体に記されたマークでマイナス側が分かるようになっています。
ラズパイとDACモジュールの信号線を接続します。
- DACモジュールのWSELをラズパイのGPIO19に接続
- DACモジュールのDINをラズパイのGPIO21に接続
- DACモジュールのBCLKをラズパイのGPIO18に接続
DACモジュールのピンの配置は公式マニュアル(英語)を参照してください。
4. ドライバ(ソフトウェア)のインストール
DACモジュールの配線が終わったらラズパイの設定に移ります。
本記事で使用するDACモジュールには、製造元がドライバ(ソフトウェア)を提供しています。
インストールするにはターミナルから次のコマンドを入力します。
curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/i2samp.sh | bash
途中「このドライバをバックグラウンドで起動し、DACモジュールの状態を監視するか?」と質問があります。質問の意味が分からない場合はyで構いません。
ラズパイを「再起動するか?」と聞かれたらyを選択し、再起動後に再度インストーラーを実行します。
途中、オーディオ出力のテストが行われます。
DACモジュールにヘッドフォンを接続してください。左右のヘッドフォンから異なる音声が流れます。
何も聞こえない場合はDACモジュールに半田付けしたピンヘッダの半田不良が考えられます。
5. ボリュームを調整する
ここまでの手順でDACモジュールは使用できるようになりました。小型のヘッドフォンであれば高音質で音楽を楽しめます。
ただしDACモジュールのジャックはラインレベルの出力なのでボリュームがありません。可変抵抗器を使ってボリュームを調整できるようにします。
使用する可変抵抗器は「2連可変抵抗器」です。2連可変抵抗器は通常の可変抵抗器が2個組み合わさっています。ただし、抵抗値を調整するシャフトは1本しかありません。2個の可変抵抗器を1本のシャフトで同時に操作できるので、今回のような左右同時に音声を出力するステレオのオーディオ出力のボリューム調整に使用されます。
2連可変抵抗器の端子は、通常の可変抵抗器の3本の端子が2列(2組)並んでいます。(6本が1列に並んでいるものもあります)
2個の可変抵抗器は電気的には独立しています。そこで3本の端子をステレオオーディオの右チャンネル、もう3本を左チャンネルの調整に使用します。
ここでは右チャンネルの接続を説明します。
可変抵抗器の3本の端子を、それぞれ(1)、(2)、(3)とします。
- (1)をDACモジュールのRoutに接続
- (2)を3.5mmステレオジャックの右に接続
- (3)をブレッドボードの電源ライン(-)に接続
左チャンネルも同様に配線してください。
最後に3.5mmステレオジャックのグランドを電源ライン(-)に接続します。
6. まとめ
今回はI2Sと呼ばれるオーディオをデジタル信号で取り出すための規格について説明しました。また、DACモジュールを使用でラズパイの音質も改善できることがご理解いただけたと思います。
本記事で使用したDACモジュールの出力はラインレベルのため大型のヘッドフォンでは少し物足りなさが残るかも知れません。その場合はラインレベルではなくアンプを内蔵するDACモジュールを選ぶと良いでしょう。
オーディオアンプはオペアンプ(電子部品)を使えば簡単に自作できます。
ポイントを押さえれば初心者でも難しい電子工作ではありません。次のステップとしてちょうど良いテーマでしょう。気になった方は、ぜひ挑戦してみてください。