再生ソフトによる音の違い(インパルス応答を用いて)

Q.デジタルなのに音が変わるわけがない!
A.
     /: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :: : ヾ    ___ 
     /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、  /     ヽ
    /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/  リ!: ::/ノ  l`ヽl !: : |: : : :l: :l: リ / そ そ お \
   /: : ヽヾ/: : l/::l |/|||llllヾ,、  / |: :/ , -==、 l\:::|: : : :|i: | /   う う  前  |
.   /: : : //ヾ ; :|!: イ、||ll|||||::||    ノノ  イ|||||||ヾ、 |: ::|!: : イ: ::|/   な 思 が
   /: : ://: : :ヽソ::ヽl |{ i||ll"ン    ´   i| l|||l"l `|: /|: : /'!/l     ん う
 ∠: : : ~: : : : : : : :ゝ-―-      ,  ー=z_ソ   |/ ハメ;, :: ::|.   だ ん
   i|::ハ: : : : : : : : : : : 、ヘヘヘヘ     、  ヘヘヘヘヘ /: : : : : \,|.   ろ な
   |!l |: : : : : : : : :、: ::\    、-―-,      / : : :;,,;,:ミヽ   う  ら
     : :ハ、lヽ: :ヽ: : ::\__  `~ "      /: : ト; lヽ)   ゝ
       レ `| `、l`、>=ニ´        ,  _´ : :} `   /
         ,,、r"^~´"''''"t-`r、 _  -、 ´ヽノ \ノ   /    お ・
       ,;'~  _r-- 、__     ~f、_>'、_         |  で  前 ・
      f~  ,;"     ~"t___    ミ、 ^'t         |  は  ん ・
      ,"  ,~         ヾ~'-、__ ミ_ξ     |  な  中 ・
     ;'  ,イ ..          ヽ_   ヾ、0ヽ    l         /
     ( ;":: |: :: ..          .`,   ヾ  !    \____/
     ;;;; :: 入:: :: ::      l`ー-、   )l   ヾ 
     "~、ソ:: :い:: :     \_  ノ ,    ヾ 



 こんばんは。気になったことはちゃんと調べてみよう、がモットーのserです。 
 今回は再生ソフトによる音の違いを検証しようと思いますが、まずはじめにPCオーディオの概略から説明しようと思います。

 一般的にPCを用いたオーディオ再生では、以下のような経路で再生されます。

 PC→(DDCDAC)→アンプ→スピーカー,ヘッドホン
 注:カッコ内は一体型の機器もある。USB-DACや、Firewire-DACオーディオインターフェース
 今までのオーディオで変わったのは、CDプレイヤーがPC,DDC,DAC、もしくはCDトランスポートがPC,DDCに入れ替わったことです。PCオーディオと全く新しいことに聞こえるようでも、従来のオーディオシステムを持っている方なら、PCからデジタルアウトかアナログアウトを取り出して、アンプに入れればPCオーディオになるのです。
 
 システムのキモとなるPCから音楽信号を取り出す機材は、いったん置いておくとして、PCオーディオの操作性を決める再生ソフトについて、今回は取り上げます。といっても焦点を当てるのは操作性じゃありません。音質です。
 冒頭に戻りますが、デジタル出力時、バイナリ一致していれば音質は変わらないはずです。XP以前のWindowsはASIOを使わない限り、OS上で変換がされてしまうので音質が変わってしまいましたが、Vista以降であれば標準でWasapiという再生エンジンがサポートされていて、簡単にバイナリ一致するようになりました。
 
 問題は、どのソフトでもバイナリ一致しているのに、巷では音の良いソフトと音の悪いソフトがあると言われていることです。なんで音が変わるかはともかく、とりあえず本当に変わるかどうか実証してみよう。というのが今回の趣旨です。
 測定方法にはインパルス応答を選びました。インパルス応答の説明は自分で調べていただくとして、一番分かりやすいのは日東紡音響エンジニアリングの解説でしょうか。(インパルス応答の測定とその応用について - http://www.noe.co.jp/technology/18/18inv1.html)
 
 簡単に言えば、瞬間的に大きい音を出して、それの反応を見てみようということです。元波形はこんな感じです。

 本来ならば時間が0に限りなく近く、振幅が無限大なのですが、現実世界においてそれは無理なので、1サンプルの間に振幅が最大になるようになってます。


 それに対する応答はこんな感じになります。
 理想は元波形がそのまま出てくることなのですが、なかなか難しいですね。また、インパルス応答を解析することによって周波数特性も出せます。各ソフトのインパルス応答に対して同じようにサンプルを取って出してみました。さて、各ソフト違いはあるのでしょうか。
 
 測定環境は以下の通りです。
 元波形はWaveGeneを用いて、-3db/24bit/88.2kHzで生成。解析はARTAを使用。
 測定経路は、各ソフト→Lynx AES16e→Lynx Aurora8→TASCAM DV-RA1000HD
 ループバックに関しては以下の経路でバイナリ一致確認済み。
 ・録音機能があるもの(各ソフト→Lynx AES16e→Lynx AES16e→各ソフト)
 ・録音機能が無いもの(各ソフト→Lynx AES16e→TASCAM DV-RA1000HD)
 
 試したソフト
 Cubase6.5
 Wavelab7
 Studio One 2.5.1
 Studio One 1.6.5
 Foobar2000(ASIO出力)
 Foobar2000(WASAPI出力)
 PlayPcmWin
 
 測定データ凡例
 ソフト名
 インパルス応答画像
 インパルス応答の第1,2点のdb値及び収束時間の最大最小値と平均値

 ※測定経路でのノイズレベル実測値が-113db程度なので、マージンを取り-100dbを下回ったら収束とみなす
 ※インパルス応答のサンプル数は各ソフト5ずつ
 F特画像
 
Cubase6.5

サンプル長の最大値,最小値,平均値
12674,10438,11587.6
第1点の最大値,最小値,平均値
-5.353134999077714,-5.355022191777911,-5.353893389189602
第2点の最大値,最小値,平均値
-13.962825860863468,-13.967976970719496,-13.965755883250798


Wavelab7

サンプル長の最大値,最小値,平均値
12151,11683,11939.75
第1点の最大値,最小値,平均値
-5.4112950352811575,-5.411571972988508,-5.411389371984576
第2点の最大値,最小値,平均値
-13.821821238146255,-13.822972828245696,-13.822476996264847



Studio One 2.5.1

サンプル長の最大値,最小値,平均値
13114,11384,11923.5
第1点の最大値,最小値,平均値
-5.3480064164693,-5.348635063836823,-5.34823833876737
第2点の最大値,最小値,平均値
-13.978101643275714,-13.979634608906668,-13.978883308584338


Studio One 1.6.5

サンプル長の最大値,最小値,平均値
12740,11114,12105.666666666666
第1点の最大値,最小値,平均値
-5.416462754732655,-5.416482200235443,-5.416474638094463
第2点の最大値,最小値,平均値
-13.811399895564882,-13.811834401122862,-13.811619987345212


Foobar2000(ASIO)

サンプル長の最大値,最小値,平均値
13443,11283,12475.8
第1点の最大値,最小値,平均値
-5.413063701630491,-5.413983809680291,-5.413653668209522
第2点の最大値,最小値,平均値
-13.817122627127533,-13.818964247984507,-13.817873752346458


Foobar2000(WASAPI)

サンプル長の最大値,最小値,平均値
13044,10957,12216.8
第1点の最大値,最小値,平均値
-5.407234296356687,-5.41143269327177,-5.409169351838045
第2点の最大値,最小値,平均値
-13.823015482663124,-13.832511302589225,-13.828109753764162


PlayPcmWin


サンプル長の最大値,最小値,平均値
12506,11463,12047.2
第1点の最大値,最小値,平均値
-5.4034068291653075,-5.408192640927627,-5.405810087176194
第2点の最大値,最小値,平均値
-13.829010511444569,-13.839812001525186,-13.834709007741944


以上です。多分これだと分かりづらいと思うので、各画像をGIFにしてまとめてみました。





 まとめると周波数特性には微妙な違いはあるものの、各帯域0.01db内に収まってるので、恐らく人間が違いを識別することは不可能だと思われます。
ただ、インパルス特性の各ソフトの差異を見ると、各サンプルでの誤差は第1点、第2点ともに±0.001db程度に収まっていますが、各ソフトの平均値の差は±0.03dbと各サンプルのオーダーを上回っています。これをどうとらえるかということになりますが、一番大きいものと一番小さいものの差が0.06dbのことを考えると、もしかしたら知覚できる人間はいるのかもしれません。
 この原因がどこにあるかは今後研究しようと思います。

執筆後記
 インパルス波形を解析できるソフトということでARTAを用いたのですが、このデータ処理がかなり大変でした。各サンプルの音量がmVで出て、それの基準値をソフトで決められるのですが、それをdbに変換するのが一大事。1V=0dbになってたので、この記事のdb値はdbVとなります。
 また、出力ファイルがcsvで、サンプル数が262142サンプルに及ぶのですが、各数値が指数表示で出てくるので、Excelがこちらの意図しない並べ替え、フィルター動作をしてしまい大変でした。しかも固まるし。結局最終的にはRubyを用いてプログラムを組みましたが、こっちの方が断然楽でした。始めからプログラム組んだ方が良かったですね。
 でも、自分が感じていたソフトの差がそのままデータに出て良かったです。元々StudioOneの1.6.5と2.5.1に違いを感じたのがこの測定をしようと思った理由なのですが、結果的に、一番差異があるのがその2つのソフトとなりました。

 インパルス応答として理想的なのは、収束時間が短く、第1点が入力値(ここでは-3db)に近く、第2点が0に近いことが理想です。今回の測定結果を基に、ランキングをつけるとすると収束時間はサンプル誤差に各ソフトの誤差がほぼ等しいので除外するとして

第1点
1位Studio One 2.5.1
2位Cubase6.5
3位PlayPcmWin
4位Foobar2000(WASAPI)
5位Wavelab7
6位Foobar2000(ASIO)
7位Studio One 1.6.5

第2点
1位Studio One 1.6.5
2位Foobar2000(ASIO)
3位PlayPcmWin
4位Foobar2000(WASAPI)
5位Wavelab7
6位Cubase6.5
7位Studio One 2.5.1

 ほぼ第1点、第2点をひっくり返した形になりましたが、PlayPcmWinとWavelab7のが入れ替わってますね。一番いいのがPlayPcmWin,一番悪いのがWavelab7となるのではないでしょうか。他のソフトは優劣付けづらいですが、第1点小さく、第2点も小さいということはダイナミックレンジが狭いが正確な音、逆はダイナミックレンジは大きいが不正確な音ということになるので、好みに合わせて選ぶと良いのかもしれません。
 ダイナミックレンジが広すぎる音楽だけども音は良いというのはStudio One 1.6.5だとうまく圧縮してくれるかもしれませんし、ダイナミックレンジが狭いし、音も悪いという音楽だと、Studio One 2.5.1だとダイナミックレンジを極力それ以上狭めることなく、ソフトの色で音をごまかしてくれるかもしれません。

 以上、参考になるかどうか分からない記事を書いてしまいましたが、これからも続けていこうと思います。ここまで読んでくださりありがとうございました。