MoOde Audio ES9023P+UAC3552Aを切り替える(セレクター)

I2S接続のES9023Pを搭載していましたが切り替えが面倒でついUSB-DACを使う機会が多かったのですが当サイトのMoOde Audio(Pi1B)もやっと仕様が固まってきたので残っていた課題に取り組んでみました。

電源ユニットはUSB-HDD,CD/DVDプレーヤーが増えたため専用電源の意味がなくなったため新たにジャンクのATX電源を投入してベース基板も作り直しました。

ATX電源

atx
W80 H120 D100の小型のATX電源 5V 9A
ファンは抵抗で印加電圧を落としてぎりぎり起動するくらいのそよ風仕様です
ファンの音はほとんど気にならない程度まで落としました
通常稼働時は1Aも消費しないので発熱も無く特に問題ないと思います
電圧は禁断の5.3Vに設定
これでもUSB側からの供給だけではCDドライブは正常に読み取りできません
P5コネクタ経由からも供給して初めて読み取りできるようになります

なお後述するように12V電圧が必要になったのでUSBの1ポートだけ空き端子を利用して+12Vを供給しました(通常は絶対にしてはいけないですね。反省しています)
当サイトでは常時稼動しているのでほかに誤って接続するリスクも少ないのでまあよしとしておきます(自己責任でね)
base01
1段目のベース基板
マイクロB端子で電源を入力、隣がリセットスイッチ
出力ジャックは1段目に設けました
今回はGPIOの17〜26番ピンをコネクタで接続しています

base02
2段目のベース基板
こっちにもマイクロB端子がありますがあ試験的に取り付けたものでDAC専用に電源を供給できますがあまり使うことは無さそうです
ES9023P-DACとUAC3552A-DACの出力は一旦この基板の入力ジャックに入ります
2個のLED 右のオレンジはMoOde Player 左グリーンはradiko player切替時点灯

base03
行き場のなくなった3個目のリレーはロングのピンヘッダでまた上に乗っかりました

base04
現在接続しているものは
USB-HDD(1TB)
CD/DVDプレーヤー
wifiドングル
USBメモリ
あとはUSB-DACを接続、電源とアンプに接続でとりあえず周辺機器はこのくらいです。

回路

Pi1台に2個のボードを搭載すると各出力のグランド側に電位差が生じてグランドを共通にしただけでノイズとなって現れてしまいます。(これは簡単に解消できないと思います)
そのため通常のグランド共通のセレクタなどは使用できません。

したがって切り替える際にはグランド端子も含めて切り替える必要があります。
また切替時にも電位差によるノイズが発生してしまいます。
当初はリレー2個で済まそうといろいろ検討したのですがー電源も必要そうだし回路も複雑になるということで何ともしがたくリレーを1個増やすことにしました。
手持ちの小型の5Vリレーは2個しか無く、12Vのリレーで代用することにしました。
結果としてできた回路は至極単純、明快なものとなりました。少々難儀しましたが!
select01
2個のリレーでLR,GNDを切り替えます。もう1個のリレーで出力端子を一瞬ショートしてノイズを抑えます。
R3,R4の値に関しては保護としては大きい方がいいのですが作業中誤ってショートしても壊れないことからこれくらいでいいかなという感じです。(音質的にはない方がいい)
イメージとしてはアンプのボリュームを絞って入力ジャックを入れ替えまたボリュームを戻すといっただけの回路です。
LEDは状態表示用でデフォルトD1(INPUT1)オレンジ点灯、radiko D2(INPUT2)グリーン点灯。
制御はPiのGPIOを使用します。

MoOde Playerの設定

設定からI2S audio deviceを有効にします。
moode01
SETを押すとrebootしろよと言ってくるのでreboot

起動後オレンジのLEDが点灯します

moode02
Audio deviceからI2S audio deviceを選択してAPPLYを押してMPDをRESTART

ノイズもなく音が出ることを確認します

moodeにログインして

$ alsamixer -c1

alsa01
USB-DACも正常に認識されています

シェルスクリプトの作成

/var/www/htmlに2つのファイルを作成します。
/var/www/html/sel_moode.sh

#!/bin/bash
# CARD 0 moode audio
# CARD 1 radiko
nohup killall mplayer > /dev/null 2>&1
CARD=$(gpio -g read 11)
gpio -g mode 9 out
gpio -g mode 11 out
if [ $CARD -eq 1 ]; then
  gpio -g write 9 1
  gpio -g write 11 0
  sleepenh 0.1
  gpio -g write 9 0
fi
mpc play

/var/www/html/sel_radiko.sh

#!/bin/bash
# CARD0 moode audio
# CARD1 radiko
nohup killall mplayer > /dev/null 2>&1
CARD=$(gpio -g read 11)
gpio -g mode  9 out
gpio -g mode 11 out
mpc stop
if [ $CARD -eq 0 ]; then
  gpio -g write  9 1
  gpio -g write 11 1
  sleepenh 0.1
  gpio -g write  9 0
fi

実行権限を与えます。

# chmod 755 sel_moode.sh
# chmod 755 sel_radiko.sh

1秒以下のsleepを利用するためsleepenhをインストールします。

# apt install sleepenh

制御

ブラウザから制御するためにGPIOを利用しています。
jessieからはデフォルトでGPIOが使用できます。当然moodeOSも使用可能です。

$ gpio readall

gpio00
OS起動後
21 IN 0 BCM(GPIO 9)
23 IN 0 BCM(GPIO 11)

条件
OS起動時各リレーはOFF
インプットジャック1 ES9023P-DAC (デフォルト)
インプットジャック2 UAC3552A-DAC

スクリプトはGPIO 11の値を読み取って変数(CARD)に格納して判定しています。

sel_radiko.sh
GPIO 11 0の時 if〜fi 実行
21 OUT 0
23 OUT 1

sel_moode.sh
GPIO 11 1の時 if〜fi 実行
21 OUT 0
23 OUT 0

RL3は切替時のみ一瞬動作(出力ショート)するのでリレーによっては若干の調整が必要かもしれません。
ノイズが取りきれない時
gpio -g write 9 1
sleepenh 0.xx(適当な値)追加

Radiko Playerの編集

radiko01
PlayボタンをMoOdeに変更しました
Radiko再生中からMoOdeボタンを押すことでRadikoを停止、MoOde Playerの再生を開始します

今回より音量差を気にする必要がなくなるのでかなり楽になりました

/var/www/html/index.php
htmlのidとボタンネーム変更

<a class="btn btn-empty btn-lg btn-success" href="index.php?id=moode">MoOde</a>

phpのcase “play”を変更
ここで作成したsel_moode.shを呼び出します。

case "moode":
    exec("nohup sel_moode.sh > /dev/null 2>&1");
    $_SESSION['broad']="MoOde Audio Player";
break;

STOPを押した時MoOde Playerも停止

case "stop":
    exec("nohup killall mplayer > /dev/null 2>&1");
    exec("nohup mpc stop > /dev/null 2>&1");
    $_SESSION['broad']="STOP";
break;

phpの各放送局を変更
ここで作成したsel_radiko.shを呼び出します。

case "fmt":
    exec("nohup sel_radiko.sh > /dev/null 2>&1");
    exec("nohup /bin/bash radiko.sh -p FMT > /dev/null &");
    $_SESSION['broad']="TOKYO FM";
break;

編集が終わったらブラウザをリロードしておきます。

Radikoを再生してみよう

radiko
Listから適当な局を選んでクリック
カチカチっとリレー特有の音がしますがノイズの発生も無く再生されました。
別の局をクリックするとリレーが動作することも無く今までどおり再生されます。
MoOdeボタンを押すとやはりリレーの音がしてMoOde Audioに制御を渡します。
MoOdeからRadiko、RadikoからMoOdeに切り替わる際のみリレーが動作します。

MoOde Playerで再生してみよう

moode03
やはりI2S接続のES9023PはUAC3552Aと比べると音がグットクリアになります。

バックから聞こえる女性の唸っている声(?)もよくとおります。

moode04
少々問題もありますが初期の目標はほぼ達成できました。