Odroid U2の分散オーディオプレーヤー



キッチンで多くの時間を費やしていることに気づいたら、部屋にあるスピーカーからの音が届きません。 そして、私はいくつかの部屋で同時に音楽を再生できる、優れたサイレントプレーヤーを作りたかったのです。 もちろん、ボリュームコントロールを回すだけで問題を解決できますが、この方法は隣人との関係で非人道的なものとして破棄されました。 もう1つの重要な点は、同じスピーカーを使用してコンピューターから音声を出力したかったということです。 1つの部屋に複数のスピーカーセットが必要なのはなぜですか?

私はこのソリューションまたはそのソリューションを選んだ理由に注意を払おうとしたため、この投稿は非常に長いことが判明しました。









ソフトウェア



同期再生



同期してサウンドを再生できるプログラムはほとんどありません。 私たちの耳はわずかな偏差を識別でき、エコーが聞こえ始めます。 喜びは、奥地の駅でスピーカーフォンを介して到着する列車の発表と同じくらいです。 良い結果は、 ジャックPulseAudioの 2つのサウンドシステムによって示されます 。 彼らは、 squeezeboxはまだかなりうまく機能していると言います。 mplayerとvlcも試しましたが、それらから適切な同期を取得できませんでした。 RTPマルチキャストを使用する場合、Vlcはビデオストリームにうまく対応しますが、音には顕著なエコーがあります。 また、 ビデオオンデマンドでは、各クライアントが個別のストリームを受信するため、同期はまったく行われません。 udp同期を有効にすると、Mplayerの速度が著しく低下します。

したがって、ビデオを同期して表示する必要がない場合、ジャックまたはPulseAudioは柔軟性があるため、適切な選択です。 ビデオが必要な場合...本当に機能するものがあるかどうかを教えてください。



ジャックvs PulseAudio



長い検索の後、それらの間に苦労はなかったことが判明しました:それらは全く異なる目的のために書かれました。 音楽を聴くために、操作中にストリームを切り替える際に、非常に短い遅延や途方もない柔軟性は必要ありません。 しかし、何も再現されない場合は、CPUの負荷を減らし、ネットワーク上でパケットを駆動しないようにします。 必要なのは、事前定義された出力のオンとオフを切り替えることだけです。 したがって、私の場合、PulseAudioが推奨される選択肢です。



PulseAudio



ヒント:最初に行うことは、クロックを正しく設定することです。 デバイス間で同期が不十分な場合、奇妙なバグが発生する可能性があります。 したがって、どこにでもntpdをインストールする必要があります。

同期再生を設定するにはいくつかの方法があります。 module-combine-sinkをmodule-tunnel-sinkと組み合わせて使用​​するか、ブロードキャストrtpストリームを使用できます。 module-combine-sinkを選択したのは、カットオフが大幅に少ないためです。 しかし、それはWiFi経由では機能せず、RTPは可能です。 しかし、私はWiFiが好きではなく、投稿が好きです。

もう1つの微妙な点は、PulseAudioがシステム全体のデーモンとして、またはユーザーごとに個別に動作できることです。 後者は、たとえばユーザーが他の人のスレッドを切断したりリダイレクトしたりできないように、主にセキュリティ上の考慮事項などのために推奨されるソリューションです。 しかし、X11のないクライアントについて話している場合は、システムモードのみが残ります。 そしてセキュリティの問題...それがまさに私が必要とするものです。複数の信頼できるユーザーのための共通のサウンドサーバーです。

systennyモードを選択した場合は、 パルスアクセスグループに自分を追加することを忘れないでください。 設定ファイルは/ etc / pulse /ディレクトリにあります。 システムモードの場合、これはsystem.paであり、ユーザーdefault.paの場合です。



出力デバイス



これらは、アンプが接続されているデバイスです。 リモートアクセスを許可する必要があるため、configにmodule-native-protocol-tcpを追加します。



load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
      
      







入力機器



サウンドストリームの送信元のデバイスでは、リモート出力を構成する必要があります。 各出力デバイス(ローカル出力を除く)について、次の行を追加します。



 load-module module-tunnel-sink server=<output device address>
      
      







次に、それらを動的にオンおよびオフにする方法を学習する必要があります。 PulseAudioは、ミュートされたチャンネルにもデータを送信しますが、中断された出力には送信しません。 すべてのアプリケーションで音声出力をオフにしないために、実際の出力ごとに中間出力を作成します。



 load-module module-combine-sink sink_name=kitchen_mpd slaves=tunnel-sink.u2k.home load-module module-combine-sink sink_name=hall_mpd slaves=alsa_output.usb-ESI_Audiotechnik_GmbH_Dr._DAC_nano-01-nano.analog-stereo
      
      







そして最後に、これらの出力を1つに結合します。



 load-module module-combine-sink sink_name=mpd_sink slaves=kitchen_mpd,hall_mpd
      
      







これで、PulseAudioを再起動した後、次の形式のコマンドで個々の出力をオンまたはオフにできます。



 #  pactl suspend-sink hall_mpd 1 #  pactl suspend-sink hall_mpd 0
      
      







やった! ネットワークを介して接続された複数の出力デバイスを介して同期的にサウンドを再生するカスタム出力が用意されています。



音楽を演奏する



ここで、この出力にプレーヤーを接続する必要があります。 ほとんどすべてのデバイスからリモート制御できるため、MPDを選択しました。 これは、キッチンで音楽を聴いていて、コンピューターが部屋にあるときに便利です。 セットアップは非常に簡単です。



 audio_output { type "pulse" name "Pulse" server "u2.home" # optional sink "mpd_sink" }
      
      







ただし、複数の出力がある場合は、MPDインターフェイスを介して制御することもできます。 これを可能にするMPDの小さなハックを書きました。 これは、任意のコマンドのオンとオフを実行する修正されたNullOutputです。 これらの出力を対応するpactl呼び出しに構成し、メイン(最初の)出力を別の小さなハックで非表示にすることが残っています。



 audio_output { type "exec" name "" enable "pactl suspend-sink hall_mpd 0" disable "pactl suspend-sink hall_mpd 1" } audio_output { type "exec" name "" enable "/usr/bin/pactl suspend-sink kitchen_mpd 0" disable "/usr/bin/pactl suspend-sink kitchen_mpd 1" }
      
      







共有する



デスクトップコンピューターで、 / etc / pulse / client.confに登録しました

 default-server = u2.home
      
      





その結果、すべてのアプリケーションはリモートサウンドサーバーと直接通信します。 それは完璧に動作します。



問題



私が直面しなければならなかった主な問題は、不安でした。 ネットワーク接続が失われた場合、PulseAudioは対応する出力を削除し、再作成しません。 手動で再起動する必要があります。

もう1つの問題は、MPDとPulseAudioの出力の状態が一致しない場合があることです。 音をオンまたはオフにするには、もう一度ボタンを押す必要があります。



長所



朝食と夕食で音楽を聴くことができます。 さらに、音楽はほとんどのアパートで聞こえ、静かにまたは大声で再生されません。 必要に応じて、個々のゾーンを無効にすることができます。 管理は簡単でシンプルです。 一般的に、猫は以下を承認します:











PS博士の特定の組み合わせ。 DAC nanoとodroid U2はあまり成功していません。 高い確率で、このサウンドカードは、U2のVBUS上のコンデンサの容量が不十分であるため、USBハブを介してのみ機能します。



All Articles