CD用やサンプル配布用に16bitのWAVを書き出すとき、書き出し画面のディザの項目はいつも少し迷う。オンにするのが常識だとは知っていても、どの方式を選ぶと何がどれだけ変わるのかを、数字で確かめたことはなかった。ノイズを足すのに音が良くなる、という説明も、言葉だけだと半分しか腑に落ちない。

このメモでは、24bit相当の精度を持つ素材を2種類用意し、ディザなし(四捨五入だけ)、TPDFディザ、TPDFディザにノイズシェーピングを組み合わせたものの3通りで16bitに落とした。そのうえで、元の素材との差、つまり16bit化で加わった誤差だけを取り出して、時間ごとの量と帯域ごとの量を比べている。聴いた印象はその日の体調や再生音量でいくらでも揺れるので、ここでは誤差の数字だけを並べ、耳の話は最後に少しだけ添える。

16bitに落とすとき、何が起きているのか

アナログ・デジタル変換器AD574の半導体チップを顕微鏡で撮影した写真。上下に2つのチップが並ぶ
連続した電圧を飛び飛びの数値に置き換えるのが変換器の仕事で、その刻み幅が量子化の細かさになるPhoto: Lhfjames / CC BY-SA 4.0

16bitの音声は、波形の高さを65,536段階の整数で表す。24bitなら約1,677万段階あるので、24bitから16bitに落とすということは、下位の8bit分の細かさを捨て、いちばん近い段に寄せ直すということだ。この寄せ直しで生じるずれが量子化誤差で、1段の幅(1 LSB)の半分以内に収まる。信号が十分に大きく複雑なら、このずれは毎サンプルばらばらに出るので、平らなノイズとして振る舞う。理論上のSN比は「6.02×ビット数+1.76」dBで、16bitならおよそ98 dBになる。

問題は信号が小さくなったときだ。波形の振れ幅が数段ぶんしかないと、ずれの出方が波形の形に引きずられ、ノイズではなく波形をゆがめた音、つまり元の音に無い倍音として現れる。さらに振れ幅が半段を下回ると、四捨五入の結果がすべて0になり、音そのものが消える。フェードアウトの最後やリバーブの尾、静かなピアノの減衰は、まさにこの領域を通過していく。

ディザは、量子化の直前に1段程度のごく小さなノイズを足して、ずれの出方を波形から切り離す処理だ。ずれが毎回ランダムになるので、ゆがみが無くなる代わりに一定量のノイズが残る。一様分布のノイズを2つ足し合わせた三角分布のもの(TPDF、振れ幅は±1 LSB)を使うと、誤差の平均だけでなく大きさのばらつきも信号に左右されなくなる。代わりにノイズの量は、ディザなしの量子化誤差の3倍(約4.8 dB増し)になる。ノイズシェーピングは、このノイズの周波数の配分を変え、耳の感度が低い高域へ寄せる仕組みだ。

素材と3つの方式をそろえる

M-AudioのDelta 1010。ラックマウントの入出力ユニットの背面と、ケーブルでつながったPCIカード
24bitで録って16bitで納める、という流れはPCIカードの時代から変わっていないPhoto: Musicproducer / CC BY-SA 4.0

素材は計算で合成した2種類で、どちらも44.1 kHz、長さ6秒にした。録音した素材を使うと、元から入っているノイズとディザのノイズが区別できなくなるので、あえて雑音の無い合成音にしている。

1つ目はフェードアウトの代わりで、440 Hzの正弦波を最大値の-20 dBから毎秒15 dBずつ下げ、6秒後には-110 dBまで絞り切る。16bitの1段の半分は-96.3 dBに当たるので、途中で必ず16bitの底を割り込む。2つ目は静かなピアノの代わりで、220 Hz(ラの音)を基音に8本の倍音を重ね、高い倍音ほど速く減衰させた音を、最大値-30 dBから鳴らし始めた。弦の倍音がわずかに高めにずれるピアノの性質に寄せて、倍音の周波数も少しだけ上にずらしている。

3つの方式は次のとおり。

方式足すノイズ誤差の扱い
A:ディザなしなし四捨五入のみ
B:TPDF±1 LSBの三角分布四捨五入のみ
C:TPDF+ノイズシェーピング±1 LSBの三角分布直前5サンプルの誤差を次の入力に戻す

Cのノイズシェーピングは、古くから知られる44.1 kHz用の5次の係数(2.033、-2.165、1.959、-1.590、0.6149)を使った誤差帰還型にした。この係数で誤差の周波数特性を計算すると、0.5〜2 kHzでおよそ-16 dB、4 kHzで-27 dB、8 kHzでほぼ0 dB、16 kHzで+12 dB、22 kHzで+19 dBになる。耳がいちばん敏感な2〜5 kHzでノイズを大きく削り、そのぶん16 kHzより上に押し出す形だ。製品に入っているシェーピングはもっと次数が高く、曲線も細かく作り込まれているが、考え方は同じなので、ここでは素直な形のものを基準にした。

数値はすべて、フルスケール(波形の最大値)を0 dBとしたときの実効値で書いている。

フェードアウトの尻尾は、ディザなしだと5.09秒で消える

マランツのCDプレーヤーCD-63。金色の筐体に円形のディスク窓と操作ボタンが並ぶ
1983年のCDプレーヤー。16bit・44.1 kHzという器の大きさは、この頃から変わっていないPhoto: Daderot / CC0

まずフェードアウトの素材で、16bit化で加わった誤差の量を1秒ごとに見た。信号の列は元の正弦波の実効値で、1秒ごとに15 dBずつ下がっていく。

区間信号A:ディザなしB:TPDFC:シェーピング
0〜1秒-28.5 dB-101.1 dB-96.3 dB-84.1 dB
2〜3秒-58.5 dB-101.1 dB-96.4 dB-84.1 dB
4〜5秒-88.5 dB-101.0 dB-96.3 dB-84.2 dB
5〜6秒-103.5 dB-103.7 dB-96.3 dB-84.2 dB

誤差の総量だけを見ると、いちばん小さいのはディザなしで、TPDFは4.8 dB、シェーピングは17 dB多い。ここだけ切り取ると、ディザは音を悪くする処理に見える。

ところが最後の1秒で事情が変わる。ディザなしの誤差が-103.7 dBと信号の大きさにぴったり一致しているのは、誤差の正体が「消えた信号そのもの」になったからだ。出力を1サンプルずつ調べると、5.088秒を最後に値はすべて0になり、最後の1秒の44,100サンプルのうち43,198サンプルが完全な無音だった。正弦波の山の高さが半段(-96.3 dB)を下回った瞬間に、音がぷつりと途切れたことになる。

TPDFとシェーピングでは、出力は最後まで無音にならない。最後の1秒を周波数で分けて見ると、信号の実効値は1段より小さい-103.5 dBなのに、440 Hzの成分は周りのノイズより、TPDFで34 dB、シェーピングで51 dB高い位置にはっきり残っていた。1段より小さい音でも、ノイズの中に埋もれた形で記録できている。フェードアウトが最後まで滑らかにノイズへ溶けていくか、途中で急に消えるかの違いは、この数字に出ている。

その直前、信号が-80〜-95 dBの4〜5秒の区間では、ディザなしの出力に元の正弦波には無い奇数次の倍音が出ていた。

基音に対する大きさ3倍音5倍音7倍音9倍音
A:ディザなし-25.0 dB-24.7 dB-22.9 dB-22.0 dB
B:TPDF-46.4 dB-44.4 dB-43.1 dB-44.8 dB
C:シェーピング-63.3 dB-60.3 dB-60.5 dB-73.1 dB

ディザなしでは、基音より25 dBほど小さいだけの倍音が並ぶ。山の頂上だけが段に引っかかり、正弦波が角ばった波形に変わっているからだ。TPDFとシェーピングの数字は、その周波数にたまたま落ちているノイズの量で、倍音の山としては見えなかった。シェーピングの値が低いのは、1.3〜4 kHzあたりのノイズが削られているためだ。

静かなピアノの減衰で、ディザなしは元の音に無い成分を足す

ピアノの減衰を模した素材でも、誤差の総量はフェードアウトのときとほとんど同じで、Aが-101.1 dB、Bが-96.3 dB、Cが-84.2 dBだった。違いが出たのは、誤差の中身のほうだ。

この素材には220 Hzの1〜8倍の成分しか入っていない。そこで、誤差を周波数で分け、元の音に無い9倍から60倍までの位置(52か所)に山が立っているかを数えた。山の高さは、その位置の両脇のノイズとの差で測っている。

区間(信号の大きさ)A:ディザなしB:TPDFC:シェーピング
2.0〜2.7秒(約-58 dB)15 dB超の山 0か所、最大6.6 dB0か所、最大10.1 dB0か所、最大9.4 dB
4.0〜4.7秒(約-75 dB)15 dB超の山 48か所、平均19.8 dB0か所、最大10.6 dB0か所、最大8.8 dB

音がまだ大きい2秒台では、ディザなしの誤差もふつうのノイズのように散らばり、目立つ山は無かった。ところが4秒台まで減衰すると、52か所のうち48か所で、周りより20 dB前後高い山が立った。同じ「ディザなし」でも、音が大きいうちは素直なノイズ、静かになると音に寄り添ったゆがみ、と誤差の性格が途中で入れ替わっている。ディザなしの減衰音が、消え際だけざらついたり、こもったりして聞こえると言われるのは、この入れ替わりのせいだと思う。

TPDFとシェーピングでは、どちらの区間でも山は見つからなかった。誤差の性格が信号の大きさに関係なく一定に保たれていることになる。ノイズの量そのものよりも、この「最後まで性格が変わらない」ことのほうが、ディザの効き目の本体なのだと感じた。

ノイズシェーピングは総量で損をして、耳の感度の高い帯域で得をする

3つの方式の誤差を、フェードアウトの最初の4秒ぶんで帯域ごとに分けた。右の2列は、聞こえ方に合わせて重みを付けた値で、「A特性」は騒音計で使われる重み付け、「最小可聴値」は静かな部屋で人がぎりぎり聞き取れる音の大きさの周波数特性を、1 kHzを基準にして重みに使ったものだ。

方式20 Hz〜4 kHz4〜12 kHz12〜16 kHz16〜22 kHz合計A特性最小可聴値
A:ディザなし-108.8-105.5-108.5-106.6-101.1-103.6-101.7
B:TPDF-103.8-100.7-103.7-102.0-96.3-98.8-96.8
C:シェーピング-120.7-103.3-97.6-84.4-84.1-92.8-106.1

(単位はdB)

シェーピングの合計はTPDFより12.2 dB多い。その大半は16 kHzより上に集まっていて、16〜22 kHzの帯域だけでTPDFより17.6 dB多い。代わりに20 Hz〜4 kHzの帯域では16.9 dB少なく、ここではディザなしよりも12 dB静かだ。耳の感度が高い帯域に限れば、16bitのはずなのに18bit近い静けさが出ている。

面白かったのは重み付けの結果が割れたことだ。最小可聴値で重みを付けると、シェーピングはTPDFより9.3 dB静かで、ディザなしよりも4.4 dB静かになる。ところがA特性で重みを付けると、逆にTPDFより6 dB悪くなる。A特性は20 kHz付近でも10 dBほどしか下げないので、高域に寄せたノイズをそのまま数えてしまうからだ。人の耳は16 kHzを超えると感度が急に落ちるので、聞こえ方に近いのは最小可聴値のほうだと思う。ただ、これはふつうの再生音量で、若い耳で、高域までしっかり再生できる環境を前提にした話でもある。年齢とともに高域の聞こえは落ちるので、高域に寄せたノイズがさらに聞こえにくくなる人もいる。逆に、フェードアウトの最後だけ音量を大きく上げて聴くような場合は、高域のノイズが聞こえてくる余地がある。

検証から決めた書き出しの手順

数字を見たうえで、自分の書き出しの手順を次のように決めた。

1つ目は、ディザは最後の1回だけにすること。ディザを入れたあとにEQやノーマライズをかけると、整えた誤差の性格がまた崩れるし、ディザを2回重ねればノイズも2回ぶん乗る。16bit化は必ず全部の処理の最後に置く。

2つ目は、24bitや32bit浮動小数点で書き出すときは、ディザを入れないこと。24bitの底は16bitより約48 dB下にあり、どんな変換器のノイズよりも小さい。マスタリングを人に頼むときは24bitのままで渡し、16bit化は最後に作業する人に任せる。

3つ目は、16bitで納める最終ファイルにはTPDFを基本にし、静かな曲やフェードの長い曲ではノイズシェーピングを選ぶこと。今回の計算でも、フェードアウトの最後の1秒を無音にせず残せたのはディザありの2つだけで、耳に敏感な帯域をいちばん静かにしたのはシェーピングだった。DAWやマスタリング用のプラグインには、iZotopeのMBIT+、Logic ProなどにあるPOW-r(1番はシェーピングなし、2番と3番がシェーピングあり)、Apogee由来のUV22HR、PSPのX-Ditherといった方式が入っている。名前は違っても、ノイズを足して、必要なら高域に寄せる、という骨組みは今回のCと同じだ。

4つ目は、その16bitのファイルがあとでサンプリング周波数の変換や圧縮音声への変換を通る場合は、強いシェーピングを避けることだ。高域に押し出したノイズの配分は44.1 kHzのまま再生される前提で作られているので、途中で変換が入ると狙いが崩れる。配信用に圧縮される音源なら、24bitのまま入稿できる窓口ではそうするほうが素直だと思う。

最後に、このメモの限界も書いておく。素材は雑音の無い合成音で、実際の録音では素材そのもののノイズが16bitの底より大きいことも多く、その場合はディザの差は小さくなる。シェーピングの係数も古典的な5次のもので、製品の方式はもっと作り込まれている。それでも、フェードの最後で音が途切れるかどうか、静かな部分で元の音に無い成分が立つかどうかは、方式を選ぶだけで決まる差として数字にはっきり出た。書き出し画面のディザの項目は、これからは迷わずオンにする。

関連記事