昨日の投稿でちょっと書いた、音質調整(正確には、再生系の特性の補正)のためのグライコ(DEQ2496)をソフトで代替する件の見通しが立った(と思ったのだが、結論は追記を参照のこと)。

昨日、軽い気持ちで始めたのだが、さまざまな困難(というか、分からないこと)があった。でも、検索と先人の業績のおかげで、やりたかったことが概ねできることが分かった。

要求事項

  • DEQ2496と同等のイコライジング(31バンド、左右独立)をPCのソフトで行う。
  • イコライジングした音(スピーカー用)としていない音(ヘッドフォン用)を同時に別々に出力できる。
  • プレーヤーソフトgmusicbrowser(GMB)だけでなく、他の普通のアプリやOSの音も出せるようにしたい。

試行錯誤の内容(概略)

  • グライコ探し
    •  Linuxのグライコを検索して出て来た、以下のソフトは、バンド数が足りなかったり、左右独立でないので、使えないことが分かった。
      • Pulse Audio Equalizer, alsaequal, mbeq (swh-plugins), PulseEffects, CAPS audio plugin suite, Jamin
    • GMBのイコライザ(実際にはgstreamerのイコライザ)を改造して拡張するのは、特性測定時に測定ソフト(REW)の音をイコライジングできないので不採用とした。
    • Calf studio gearのイコライザは、30バンド・左右独立で、DEQ2496と同等なので、候補にした。
    • zam-pluginsのサイトには、31バンド・左右独立のイコライザ(ZamGEQ31X2)が書いてあるが、実際のパッケージには入っていないので却下した。
  • Calf studio gear (以下Calf)を動かす。
    • Calfが動くJACK(Linuxのサウンドシステムの一種)で音を出すのにとても手こずった。結局、デフォルトのデバイスでなく、明示的に光デジタル出力を指定すれば良かった。
    • 音の経路(例: スピーカーに出す前にグライコを通す)を指定するのも難しかった。qjackctlには「パッチベイ」という配線のような機能があるのだが、どういう訳か、使っているうちに設定を無視して直結し、イコライジングした音としていない音が重なってしまうので、使うのを諦めてjack-plumbingというコマンドを使った。この機能はありそうだと思っていたのだが、実際にはどうすればいいか分からなかったのだが、コマンド名から、もしやと思った。
  • イコライザを設定して、音を聴いてみる。
    • DEQ2496とは若干周波数やゲイン(音量)の刻みが違っていたが、正式に使う時に微調整することにし、おおまかな値をCalfのイコライザ(Equalizer 30 band)に設定した。
    • おそらく、各バンドのフィルタの特性はDEQ2496とは異なるので、実際の微調整は必須だと思う。
    • 聴いた感じでは、特に問題はなく、聞き慣れた普通の音が出ている。
  • OSや通常のプログラムの音も出力できるようにする。
    • pulseaudio-module-jackというモジュールを使い、標準のPulseAudio(Linuxのサウンドシステムの一種)に出る音がJACKに出せるようになり、ブラウザ(Vivaldi)の音が出た。
  •  2系統独立出力できるようにする。
    • チップ自体に機能があるので、ドライバを何とかすれば2系統出力できそうだからと、ダメモトでRealtekのサイトのLinuxドライバを入れたら、音が出なくなった(古い物を無理にインストールしたせいだろう)。バックアップからドライバを戻して復旧した。
    • 実際には、ドライバ自体は独立出力に対応しているので、alsa_outというプログラムにアナログ出力を受け持たせて、それに、以下のように音源を分岐して入れるようにして、イコライジングしない音も出るようにした。
      • 音源 → イコライザ → 光出力
      •   └→ アナログ出力
  • qjackctlが使いにくい問題への対処
    • JACKの制御のためにqjackctlが要るので、JACKは止めてALSA(もう一種のLinuxのサウンドシステム)にしたかったが、CalfはALSAでは使えず、他に要求を満たすイコライザがないので諦めた。
    • qjackctl以外のプログラム(Cadence)を試したが、もっと使えない(設定が保存できない?)ものだったので、諦めた。(5/8 7:21 追記:設定保存のメニューはないが、保存できているようだ)
    • qjackctlに指定できる、サーバ起動後の実行スクリプトが今一つまともに動かないので、上記に書いてきた機能を実現するためのいろいろな処理を行う起動用スクリプトを作って、そこからqjackctlを起動することにした。
  • その他
    • JACKは、位置づけとしては、WindowsのASIOのようなもののようだ。
    • 恐ろしいことに、JACKの試行錯誤中はOSすら不安定になった。今後は大丈夫か、ちょっと心配だ。
    • 複数のサンプルレートには対応しないようだ。設定していないサンプリングレートでも変換するから聞けないことはないが、本当は切り替えて欲しい。が、CD(44.1kHz)さえちゃんと聴ければ、とりあえずは問題ない。おそらく、いろいろな音をミックスして出すポリシーなのだろう(まあ、それが普通だ)。
    • イコライジングをソフトで行うため、CPU負荷は上がった。Calfのプロセスは、15%前後のCPU使用率となり、load averageは1前後になっていることが多い。ただ、全体的なCPU使用率(前述の使用率とは測っているプログラムが異なる)は4%未満なので、大きな問題はないのかも知れない。
    • なぜかOS(正確にはThunderbird)の音がJACKから出ないので、今後の課題だ。→ PulseAudioの「出力装置」の設定でJACKを「代替として設定」(右のチェックボックスをクリック)したら出るようになった。「代替」というのは、デフォルトのことだろうか? (17:59)

設定・操作画面

JACKで音質調整+2系統独立出力を実現した。(左上から時計回りに、JACKの制御(qjackctl)、音の経路設定(qjackctl)、30バンドグライコ(Calf)、Calfの制御)

30バンドグライコと音の経路設定は、なかなかの見物だ。

今後の予定

  • 複数のサンプルレートを自動で切り替えできないか、調べる。
  • 安定性を確認する。また、音質の異常や音飛びなどがないかを確認する。
  • 録音(入力)にも対応させる。(特性を測定する時)
  • DEQ2496でのイコライジングを止めるのか、熟考する(今は、興味を除いては、止めることに特段のメリットはないので、DEQ2496の故障時のバックアップや故障後の代替手段に位置付けるのがいいように思う)。
  • 実際の特性を測って、イコライザを調整する。

知らなかったものを試した結果、やりたかったことができて結構おもしろかったけど、疲れた。そんな訳で、あっという間に連休が終わりそうだ。。。

(19:39追記) モーツァルトのピアノ協奏曲23番を聴いていて、何となく音が悪い(元と違う: わずかに響きが違う感じなのと、ピアノの音がほんの少し平板的に聞こえた)気がして、気のせいなのか、イコライザの特性の差のせいかと思っていたのだが、ふとDEQ2496のパネルのLEDを見たら、思わぬ落とし穴を発見してしまった。DEQ2496はグライコだけでなく、数点だけPEQ(パラメトリックイコライザー)も掛けていたのだ。

だから、ソフトでDEQ2496を代替できるのはもう少し先だ。もちろん、CalfにはPEQもあるだろうから、不可能ではないだろう。が、やっぱり、そこまでしてやる気はなくなって来たというのが、正直なところだ。という訳で、この投稿の最後は、

To be continued?

(5/7 4:21追記) スリープからの復帰後に音が出なくなっていた。jack-plumbingが処理に失敗して、音の接続ができなくなっているようだ。jack-plumbingを再起動しても直らない。JACKのサーバが異常になったのだろうか。

これでは使い物にならないので、JACKは諦める。DEQ2496が壊れたら、その時に改めて考えよう。

(5/7 10:35追記) 結局、その後スリープからの復帰の問題にはまってしまった。この問題が解決したかは分からないが、GMBの出力が勝手に接続される問題は解決できた。勝手に接続するのはGMBのようで、再生をストップした後で再度再生する時に、デフォルトの出力先("system")に接続している感じだ。それで、qjackctlのパッチベイの設定で、systemの入力を「排他的」にすると、一つの出力(ここではCalfの出力)しかから接続されないようになって、勝手に接続されなくなる。

なお、qjackctlのパッチベイを使うことにした理由は、jack-plumbingがスリープに対応していないからではないかと思ったからだ。

また、alsa_outはJACKサーバが起動していない場合、勝手にサーバを起動するため、余計なサーバ(jackd)が起動していたことが分かった。本当のJACKサーバは今はjackdbusのようで、これはqjackctlが起動するので、alsa_outはqjackctlの後で起動するようにした。これもスリープに関係しているのではないかと予想(期待)している。

なお、昨夜、PEQも仮に設定してみた。しかし、音の違いは良く分からなかった。違いを判別するには、測定してみる必要がありそうだ。

(5/8 6:25追記) その後、興味本位で特性を測定したくなってしまって、連休の最終日を潰してしまった。

測定にはマイクの音を入力する必要があるのだが、測定ソフトREWがJACKに対応していないので、手こずった。最初に試した時は、うまくいったと思って測定したら、やけにいい特性が出て、「実はグライコは要らなかった??」と思い掛けたのだが、それは科学的でないし、実際、聴いたら音が良くなかったので、何かおかしいと思って調べたら、雑音(内部的なハウリング?)を録音していたようだった。

結局、JACKがオーディオインタフェースを専有するために、REW(標準サウンド(ALSAかPulseAudio)を使用)が録音できなくなっていたのが原因だった。もう一枚オーディオインタフェースがあれば楽だったのだが、ないので試行錯誤した。いろいろ調べて、JACKの制御プログラムをqjackctlでなくCadenceにし、JACKでは出力だけするように設定すればいいことが分かった。ただし、REWが何かおかしいようで、測定のたびに入力を設定し直す(一旦別のに設定して戻す)必要があった。

それでようやく測定ができた。結果としては、暫定的な設定で大きな問題はなかったが、右が少しずれていたのでグライコとPEQを微調整した。なお、PEQは必要だった(左右別のグラフを見ると分かる: 左: 80Hz付近、右: 150Hz付近に山がある)ので、Calfの"Equalizer 5 band"(これはグライコでなく、PEQ)を使用した。

調整前の特性は以下のとおり:

調整後の特性は以下のとおり:

左右一緒だと、調整前後の差は分からない。なお、左の220Hz辺りが強いことに気付かなくて調整しなかったのだが、本当に使う時に調整しようと思う。

結論としては、Linuxのソフト(JACKとプラグイン)でグライコ(DEQ2496)を完全に代替できる。ただし、使うためにはさまざまな面倒があるうえ、前述のように、JACKにはスリープの問題(今、別のプログラム(Cadence)を試している)があるので、当たり前のことながら、(技術的興味や物減らしへの熱意は別として、)DEQが使えるのなら使った方がいいだろう。

補足: 物減らしの面では、今はDEQのDACを使っているので、仮にDEQをなくしたとしたら、別の、ある程度良いDACが要るので、あまりメリットはない。それどころか、新しい物を買うという点で言語道断だ。だから、この方式は、DEQが壊れた時だけ意味がある。

PS. JACKのスリープからの復帰で再生できなくなる問題は、Cadenceでも駄目だった。JACKのサーバとの通信ができなくなるようだ。いくら技術的におもしろくたって、こんなに出来が悪いのでは、使い物にならない。よくこれを「プロ用」と言えると思う。これで、完全に諦めることができた。(5/8 19:55)

  •   0
  •   0

コメントを書く

名前    

メール 

URL