パラメトリックWAVプレーヤー
今回は、再生音質をパラメトリックイコライザーで調整して出力することができるパラメトリックWAVプレイヤーアプリをリリースしたので、その紹介です。
BOOTHにて公開しています!
最新版 ダウンロード
更新履歴
3.0.2 randomモードで再生ボタンを押した場合の一曲目もランダム化しました。
3.0.3 一部のサウンドデバイスで、WASAPIモードでの再生できなかった不具合を対策しました。
3.0.4 プレイリストを一括消去するDel All、および複数選択による一括削除を追加しました。
これはWAVファイルのデジタルデータを直接IIR(Biquad)フィルタにかけて、音質調整をして出力することができるWAVプレイヤーで、結論を先にいうと、周波数特性の改善だけではなく、同時に位相特性も改善されて、定位感が大幅に改善します!びっくり(@_@)
きっかけはオーディオ仲間の I さんからの電話でした。いわく、
「おもしろいDACの製作記事を見つけたから作ってみたらなかなかよかったよー(^-^)」
そのおもしろいDACとは、この記事で紹介されているRaspberry Pi PICOを使ったものです。
この作者は、スピーカー単体特性を苦労して改善するよりも、ソースのイコライジングで特性を補うほうが合理的なのではないか?というアプローチをしていて、そのひとつの答えとして、PICO2を使って、8段のパラメトリックイコライザを内蔵したDACを開発し、最終的にスピーカーから出力される音の周波数特性を改善するということを実現しています。
ぼくも実際に作ってみましたが、なるほどとてもよくできていて、安価でコンパクトでしかも効果的です。すばらしい!(^-^)!
ぼくもこれをシステムに組み込んで使おうかとも考えたのですが、いくつか気になる点がありました。
・DACチップ一体で作っているため、DACチップの置き換えなどができず、たとえばSSDACを使おうとするとSSDACに組み込まなければいけない。
・PICOのベースクロックはUSBの48MHzに合わせて作ってあるため12MHzであり、たとえばCD系(44.1kHz)の11.2896MHzのクロックはどうしても割り切れない系のPLLに頼らざるを得ない。
それならPCのアプリとして作れば、フィルタの段数も増やせそうだし、出力をUSBのDACにすれば選べるし、そのほうがよさそうだな……
と考えて、とりあえずC#を使ってコンソールでWAVを再生する実験をして、そのあとBiquadフィルタを実装して通す実験をしたところうまくいったので、それならカタチにしよう!と思って、コツコツと作り始めました。
カタチとしては、パラメトリックフィルタを内蔵したWAV専用のプレーヤーアプリで、対応フォーマットは44.1kHz、48kHz、88.2kHz、96kHzのWAV、出力は接続しているUSBサウンドデバイスが選択できて、WASAPI出力も選べるようにしました。
内臓のフィルタは、パラメトリック(ピーキング)フィルタが左右独立で30段、ローシェルフ、ハイシェルフフィルタが左右独立で各一段、それに係数を任意に設定できるBiquadフィルタを左右独立で5段としました。またダイレクトリッピングしたアナログレコードを再生できるように、フォノイコライザも内蔵し、フォノイコライザの特性はRIAA、NAB、Colombia/LP、Decca、AES(2種)、Old RCA(4種)と、合計10種類で、ほぼすべての特性をカバーしています。
(このうち、パラメトリック16段、Low Shelf、High Shelf、Biquad3段、RIAAフォノイコは無料でお使いいただけます。 )
アプリのUIはこんな感じです。
図1.Parametric Wav Playerの外観
上側にある小さな窓がプレーヤー本体で、後ろに写っている大窓がフィルタ設定画面です。
このアプリは、単にちょっと凝ったトーンコントロールと、任意設定できるデジタルフィルタを内蔵したプレーヤーだと考えて、面白がって音質をあれこれいじって再生するという使い方が手軽にできますが、作者の目的は、視聴位置での周波数特性を改善することにあります。
実際に自室のシステムで試してみたので、以下に紹介します。
今回の目的は、部屋の視聴位置でのスピーカーの周波数特性を改善することです。
大きな方針としては、視聴位置に測定用のマイクを設置して、スピーカーからホワイトノイズを出力したときに、マイクで拾った信号をFFTで観察して、フラットになるようにフィルタを設定する、ということです。
FFTはWaveSpectra を使う方針ですが、WavSpectraは低域が正確に測れないので、先にREWとUMIK-1を使って、視聴位置での音場特性を測ります。
まず、普段使用しているスピーカーですが、Auratone5CとVictorのSX-100を直列にして、無帰還アンプで鳴らしています。スピーカーはどちらも12.5Cmフルレンジユニットが使われています(写真1)。
写真1.使用しているスピーカーシステム
これをUMIK-1とREWで、視聴位置で測定した結果を図2に示します。
図2.視聴位置での音圧周波数特性(赤線)
これは想像していたよりだいぶひどい特性です(^-^;
以前、Auratone5Cは軸上10センチの位置で特性を測ったことがあって、その結果は図3のようでした。
図3.Auratone5Cの軸上10センチでの音圧周波数特性
この特性を見る限りでは、低域が物足りないものの、全体としては素直で悪くないものでしたが、2mほど離れた今回の視聴点ではずいぶん特性が変っています。
さて、それでは図2の、REWで示された視聴点の特性から、まず低域のローシェルフフィルタと、高域のハイシェルフフィルタの設定を仮決めしておきます。ローシェルフ、ハイシェルフフィルタは図4、図5に示すような特性のフィルタです。この例ではカットオフ周波数Fcに対して、Gain15dB、Q=0.8を設定した場合を示しています。
図4.ローシェルフフィルタ 図5.ハイシェルフフィルタ
つまりカットオフ周波数から下のゲインを調整するのがローシェルフで、上のゲインを調整するのがハイシェルフフィルタです。
さきほどのREWの測定結果から、ローシェルフとハイシェルフのフィルタ特性を次のように仮決めしました。
Low Shelf:Fc=75Hz、Gain=15dB、Q=0.7
High Shelf:Fc=14kHz、Gain=12dB、Q=1.0
まずこの設定でフィルタをかけて調整を進めていきます。
本アプリでのフィルタをかけた状態でスピーカーの音場特性を測るには、UMIK-1とWaveSpectraを使います。REWは内蔵音源を使う測定なので、本アプリを使った測定はできないからです。
ホワイトノイズを録音したWAVファイルを用意して、それを本アプリで再生し、視聴位置にUMIK-1を設置してここで集音した信号をWaveSpectra で観測します。
まずは、フィルタを一切かけない状態での初期状態の特性を図6に示します。
図6.初期状態の視聴位置でのスピーカー音圧特性
これは先程のREWで測定した図2の特性とおおむね一致しています。
ここに先ほど決めたローシェルフ/ハイシェルフフィルタの設定をアプリに入力して、フィルタOnして測定したものを図7に示します。
図7.ローシェルフ/ハイシェルフフィルタをOnにした音圧特性
これで高域が改善しているのがわかります。
次に、この図で○印をつけた110Hz付近にディップがあるので、これをParametricフィルタで改善します。設定は次の通り。
Fc=110Hz、BW=0.2、PeakGain=8dB
説明が前後しますが、Parametricフィルタ(Peaking Filter)の特性を図8に示します。この例では、中心周波数Fcに対して、PeakGain=15dB、BW=1.0を設定しています。
図8.Parametric(Peaking)フィルタの特性
Parammetricフィルタは、特定の周波数のゲインを増減するフィルタなので、ここでは110Hz を狙って8dB 上げる設定をしています。
このフィルタをOnして測った特性を図9に示します。
図9.110Hzの改善結果と、992Hzのピーク
これで先程の110Hzのディップが解消しました。次に992Hz付近にピークがあるので、これをつぶします。
Fc=992Hz、BW=0.2、PeakGain=ー8dB
これで、特性は次のようになりました。
図10.992Hzの改善
このようにして、全体にわたってディップとピークを地道につぶしていきます。
だいたい満足なところまで行った結果を図11に示します。
図11.全帯域改善
これで目立つ凹凸を消すことができましたが、10kHz以上が少し下がっています。これを次のように改善します。
Fc=20kHz、BW=0.5、PeakGain=9dB
すると次のような特性が得られました。
図12.最終調整結果
もう一度最初の無調整の図6を再掲しますが、大幅に改善していることがわかります。
図6.初期状態の視聴位置でのスピーカー音圧特性(再掲)
さてこれでいよいよ実際に音楽を聞いてみます。
当然ながら低域と高域は改善されているので、低域の厚みと高域のヌケ感が改善されることは予想できますがはたして……
(@_@;
まさにこんな感じの印象でした!
低域と高域のレベルが改善されたのは当然なのであまり驚かなかったのですが、それでは何に驚いたかというと、定位感が大幅に改善したことに驚いたのです。
長いことオーディオをやっていますが、これほどの改善効果を体験するのは非常にめずらしく、思い返してみれば50年近く前に、カセットデッキのアジマス調整をしたときに、霧が晴れるように音質が改善したあの時の感動に匹敵するほどの衝撃です。
音圧の周波数特性を改善したことで、なぜ定位感が改善したのか?
これは考えてみれば当然かもしれないのですが、音圧の変化と位相特性は最小位相の範囲内では表裏一体であり、音圧特性を改善すれば位相特性も同時に改善するということです。これはたとえば、フォノイコライザの補正カーブは必ず一意に位相特性を伴い、逆特性で戻せば位相特性もフラットに戻る、というのと同じことです。
しかしこれはゲインと位相が常に一意に変化する最小位相系に限った現象であって、たとえば壁からの反射による影響や、スピーカーからの距離の差によるような非最小位相系は改善されません。それでも今回は目を見張るほどの改善がありました。
以上のように、今回は想像をはるかに超える効果を得ることができました。
みなさんにもぜひ体験していただきたいと思いますし、マルチシステムを使っておられる場合はどのような効果が得られるのか、ということにも興味があります。
本ソフトはトップにリンクした通り、BOOTHからダウンロードでき、詳しい操作説明はマニュアルが同梱されていますので、興味のある方は参照してください。
マニュアルだけここに貼っておきます。
ダウンロード - parametricplayermanual.pdf
【20260628追記】
このアプリに搭載したフォノイコライザについて解説しておこうと思います。
じつはこのアプリに搭載されたフォノイコライザは、ちょっとした目玉だと思っています。というのは、現存するであろうほぼすべてのイコライザ特性を網羅しているからです。
フォノイコライザのIIRデジタルフィルタへの実装については、過去記事で書いていますので、参照してください。
【参考記事】
RIAAフォノイコライザをIIRデジタルフィルタで実装する ①準備編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ③シミュレーション編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ④実装・評価編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑥ z-2項をシフトする理由
さて、今回はもっとも普及しているRIAA規格を始めとして、現存する規格を網羅して合計10種類のフォノイコライザの規格をカバーしています。このアプリに搭載しているフォノイコライザの規格と、その時定数は次の表1に示すとおりです。
表1.搭載したフォノイコライザの時定数
RIAA以外の規格については、時期によって数値が変ったりするものもあり、判然としない場合もあります。
たとえばNAB規格は、最初期にはT1=2242として発表されましたが、後にColombia/LPとの互換性を考慮してT1=1592に変更されたと言われています。このあたりが、NABとColombia/LPが混同されたり、「ほとんど近い」と言われる理由のようです。
AESについては、高域時定数T3に諸説あり、オリジナルの規格はT3=63.6とする説が有力ですが、後にRIAAとの統合プロセスを考慮し、T3=75として扱っているイコライザーも存在したようです。
old RCAの規格についてはさらにややこしく、RCAがLP製造を開始した最初期の規格はT2=265、T3=63.6だったと言われています。しかし一部の文献や、のちのヴィンテージ機器では、T2=199、T3=75としているものが存在します。T2=265、T3=75や、T2=199、T3=63.6という組み合わせについては文献がありませんが、念のため搭載しました。
これらの定数に対して、Biquadフィルタに実装する公式は次のとおりとなっています。時定数T1~T3は上述の通り、Fsはサンプリング周波数です。これはフォノイコライザの伝達関数を双一次変換(BLT)でデジタルに変換したものです。
(式1)
このソフトで実際に信号を処理した場合の理論値と実測値の結果を表2に示します。Fsは96kHzで測定しています。
なお、理論値については次の式2によって求められ、表2の数値はいずれも1kHzのゲインを0に正規化しています。
(式2)
表2.フォノイコライザ各規格の実測値(Fs=96kHz)
測定は正弦波を入力し、20Hzでサウンドカードの最大出力がクリップしない値(約5Vp-p)に設定し、そこから同じ入力条件のまま
周波数を徐々に上げて、20kHzまでについて、デジタルオシロのカーソル機能で振幅(p-p)を計測しました。
20Hzで5Vp-pでも20kHzではおよそ40dB下がって50mVほどになるため、ノイズの影響や読み取り精度を考慮すると16kHzや20kHzの
測定精度はやや低いです。
また過去の記事でも検証しましたが、式1の計算では、サンプリング周波数が下がるほど高域のゲイン特性が若干上がる傾向が出ます。
そのためか、いずれも周波数が高い方で誤差がプラス方向にやや高めに出ています。
しかしながらいずれも1dB以内の誤差におさまっているので、まあまあなのではないでしょうか。
参考サイト
簡単なデジタルフィルタの実装
Audio-EQ-Cookbook
| 固定リンク | 0
コメント