藤本健のDigital Audio Laboratory
第572回:ハイレゾで注目の「32bit-float」で、オーディオの常識が変わる?
第572回:ハイレゾで注目の「32bit-float」で、オーディオの常識が変わる?
(2013/11/25 13:28)
最近のハイレゾブームで、雑誌の編集部などから声がかかることが多くなったが、そこで求められるのは20kHz以上の可聴外の音が記録されていることの意義が中心。確かに、非常に高い周波数の音が入っていることによるメリットもあるとは思うが、それよりも「いい音」にしている大きな要因は量子化ビット数が大きく、ダイナミックレンジが広いことだろう。だから16bit/96kHzのサウンドより、24bit/44.1kHzのサウンドのほうが、いい音に感じられるのだと思う。
その量子化ビット数、音楽配信のハイレゾの世界では24bit止まりのようだが、音楽制作の世界では「32bit-float(32bit浮動小数点数)」に注目が集まっている。この32bit-floatにすると、これまでのオーディオの常識が完全に崩れてしまう画期的なことができるのだが、意外と知られていないようなので、簡単な実験を交えながら、その面白さについて紹介してみたい。
16bitと24bitの違いをおさらい
32bit-floatの話に入る前に、改めて確認しておきたいのが16bitと24bitの違い。ご存じの通り、CDは16bitなのに対し、流行りのハイレゾ音源は24bit。ファイルサイズ的には1.5倍になるだけだが、表現できる音の細かさは256倍となる。ここでいう音の細かさとは音量についてであり、16bitであれば1段階の違いと捉える音量の変化を24bitなら256段階で記録できるから、音をきめ細かく表現できるわけだ。
まあ、大きい音量で鳴っているときは、16bitでも24bitでも、あまり差は感じられないが、非常に小さな音の場合、その違いが顕著に表れる。人間の耳は、かすかな音でもクッキリと捉える能力を持っているので、小さな音でもその音色や音の変化が分かる。この小さな音の時、16bitの分解能だと、実質的に数bitでの表現となるから、かなり悪い音になってしまう。でも24bitであれば、+8bitの表現力を持つことができるから、いい音になるわけだ。
このことを10進法の数字で捉えると、もう少し違いが実感できるかもしれない。16bitで表現できるのは「2の16乗=65,536段階」であるのに対し、24bitでは「2の24乗=16,777,216段階」となっている。
では、これをダイナミックレンジという言葉で表現すると、どうなるのだろうか? 実は1bit増えれば表現できる音量が2倍に増えるわけだから、ダイナミックレンジは1bitにつき6dB分となる。つまり、16bitと24bitでは、下記のような違いが出る。
- 16bitなら、6dB×16=96dB
- 24bitなら、6dB×24=144dB
このように、16bitと24bitのダイナミックレンジの違いは48dBとなるわけだ。dBについて馴染みのない方にとっては、イマイチよく理解できないかもしれないが、要するに24bitなら圧倒的に細かく音の変化を捉えられるし、非常に小さい音でもクッキリと表すことができるというわけなのだ。
では、これを32bit-floatにするとどうなるのか? 32bitではなく、32bit-floatであるのがポイントだ。floatが付いているかついていないかで、まったく違う世界になるので、ゆっくり見ていこう。
32bit-floatでは、“0dB超え”でもオーバーフローしない
単なる32bitだとすれば、ダイナミックレンジは24bitよりもさらに48dB増えて、192dBとなる。それはそれでいいけれど、正直言って24bitの音と32bit音を聴き比べて違いがハッキリ分かる人など、ほとんどいないと思う。それに対して32bit-floatとは何なのだろうか?
日本語で書くと、前述した通り「32bit浮動小数点数」ということになる。浮動小数点数は、工学系の人なら普段からよく使っていると思うが、普通の人にはやや馴染みが薄いかもしれない。その言葉通り、小数点のある数値を扱っており、先ほどの16bitや24bitなど、整数で扱う数値とはちょっと違うのだ。では、何が浮動なのかというと、小数点の位置が自在に動くということ。一般的な表現でいえば、「有効桁数が決まっていて、それが万単位の数字なのか、億単位なのか、兆単位なのかを別途自由に設定できる数」といえばいいのだろうか。
もっと具体的に表すと、下図のように32bit-floatは32桁の2進数が符号部、指数部、仮数部の3つから構成されている。
【11月27日訂正】記事初出時、「有効桁数である仮数部は23bitあり、符号部と合わせると24bit分となる」としていましたが、誤りのため削除しました(編集部)
指数部が8bitあるおかげで、絶対値においてとんでもないほどの小さい数から大きい数まで表せるようになる。これを十進数で表すと
0.00000000000000000000000000000000000000000000140239846~340,282,347,000,000,000,000,000,000,000,000,000,000
これを見ると、整数の24bitや32bitと比較して、いかに広い範囲の数字が扱えるか分かっていただけるだろう。ちょっと数学っぽい難しい話になってしまったが、ここで重要になるのは絶対値で1よりも大きい値を扱えるという点にある。これはどういうことを示すのか?
通常、オーディオで扱える音量の範囲は無音=-∞dBを0、最大音量0dBを1としたら、絶対値で0~1の範囲。だから、グラフ表示させた際、0dBを超えない範囲で波形が描かれることになる。もし0dBを超えるような演算をすると0dBが頭打ちとなり、音が歪んでしまうため、0dBを超えないようにするのがオーディオ処理の鉄則となっているのだ。
このことは16bitだろうが、24bitだろうが、そもそもアナログであっても最大音量を超えてはいけないというのは常識中の常識。実際、最大0dBとなっている24bitのオーディオの音量をさらに12dBも上げたりすると、完全に音が割れてしまうのでアウトだ。仮に、その後で音量を12dB下げたとしても、歪んでしまった部分は取り返しがつかず、頭がつぶれたままで音量だけ小さくなることになる。
ところが、これが32bit-floatだと話がまったく違ってくる。0dBを超えてもオーバーフローしないのだ。確かに波形編集ソフトの画面表示上は0dBが表示できないので、24bitと同様に頭がつぶれている。またこの状態でオーディオインターフェイスから音を出すと、オーディオインターフェイス側で強制的に24bit変換されてしまうので、先ほどと同じように音が割れてしまう。ところが、その後-12dBの処理をすると、なんと元の状態に戻すことができるのだ。
ここで試しに、見かけ上つぶれてしまった大きな音のデータを32bit-floatのWAVファイルとして書き出すとどうなるだろうか? Windows上でテストしてみた結果、ソフトによって扱いが違うという、ちょっと面白い結果になった。まずiTunesで再生してみたところ、完全に音が割れた状態で、まともに聴けるものではなかった。ところがWindows Media Playerで再生させると、まったく問題のないキレイな音で再生することができるのだ。これは、ちょうど1年前に記事にした「第528回:Windowsオーディオエンジンで音質劣化を検証」のピークリミッターと関係があるのかもしれない。
さらに、iTunesからiPhoneに転送して再生してみると、こちらも問題なく歪まずに聴こえた。iTunesからiPhoneへの転送時に変換されているかもしれないし、どのプレーヤーがどのような処理をしているのかまで、細かくは追えていないが、つまりプレーヤーによって、32bit-floatの扱い方は違うけれど、ピークを超える大きな音でも、データとして破綻しているわけではないわけだ。
音量が大きくても小さくても、最終的な調整で音質劣化を防げる
ここまでSony Creative SoftwareのSoundForge 10を使って処理をしていたが、見かけ上潰れているWAVファイルを、Cubase 7で読み込むとどうなるのか。あらかじめプロジェクトを32bit-floatに設定してから読み込んでみたところ、やはり表示上は潰れているし、そのまま再生すると完全に音が割れた状態だ。しかし、ゲインを-12dBしてみると、元の波形が蘇ってくる。やはりWAVファイルを介しても、データとして壊れていないことがハッキリと確認できたわけだ。
今度は反対に音量を非常に小さくしたら、どうなるだろうか? SoundForgeの機能だと-60dB(正確には-59.20dB)が限界なので、24bit/44.1kHzの原音に対し、-60dBの処理を2回繰り返し、-120dBとした結果、ほぼ無音というくらい小さい音になった。その後、一度これを保存してから読み込み直し、0dBのノーマライズをかけた結果がこれだ。パッと見ただけでも、4bit程度の分解能の音になっているのが分かるし、聴いてみると、ビットクラッシュをかけた感じのザラザラした酷い音になっている。
では、同じ実験を32bit-floatで行なうとどうなるのか。-120dBすると、やはり見かけ上、無音になるし、音は聴こえなくなる。しかし同じように保存した後に、読み込み直してノーマライズをかけると、完全に元の状態に戻ってくれるのだ。試しに「これでもか! 」と、-60dB処理を6回行ない-360dBしてからノーマライズしても同じ結果になる。さらにこれをCubaseに読み込んでノーマライズしても同様の結果になる。
これまでオーディオ処理において0dBを超えたらアウトだし、音量を小さくすると、その分音が劣化するというのが常識だった。だからこそ、0dBを超えない範囲で、できるだけいい音に仕立てていくということを熟練のレコーディングエンジニアがミキシングコンソールのレベルメーターを見ながら、細かい作業を行なっていたわけだ。しかし、32bit-floatを使えば、音量がオーバーしようと、極端に小さな音にしようと、最終的に適度な音量にすれば、まったく音質に問題が起きないのだ。
ここまでの実験では、あえて一度ファイルを外部書き出して処理をしていたが、外部に書き出さずに内部処理をしている場合は32bit-floatが利用できるというソフトも増えてきている。よく「Cubaseで再生すると音がいい」とか、「StudioOneはいい音だ」などと言われているが、音量を変化させても音が変形=劣化しないし、複数トラックの音をミックスしても、キレイに混ざり合ってくれるため、いい音に感じられるということなのだろう。