オーディオコーデック音質評価のやり方
オーディオコーデックは、オーディオの最終品質を無慈悲に左右する要素です。せっかく細かいニュアンスを作り込んでも、エンコードによって台無しになってしまうこともあります。
一方で、オーディオコーデックに関しての質の良い言及は非常に少なく、特に音質評価に関しては「どうせ区別がつかない」「結局は好み」などといった雑な極論が蔓延してしまっているのが原状です。
そこで、その「音質評価のやり方」をテーマとして本稿を書くことにしました。
主にインタラクティブオーディオ制作におけるオーディオコーデック選定時向けの記載が中心ですが、その他のシチュエーションでのオーディオコーデック使用時にも役に立つことはあると思います。
筆者は縁あって(?)オーディオコーデック設計の経験もあり、そんな珍しい視点での記述として是非参考にしてもらえればと思います!
1. オーディオコーデックとは
コーデックは coder (圧縮、エンコード) と decoder (伸長、デコード) の先頭部分をつなげて COder & DECoder → CODEC となった言葉で、圧縮伸長アルゴリズムのことを指します。
(この名付け……、え?テキトー過ぎない?って思いますよね……)
コーデックには zip のように汎用のデータに対して適用するものと、画像、動画、音声など、圧縮したいデータの種類によって専用のアルゴリズムを適用するものがあります。また、画像、動画、音声などは圧縮伸長によって多少データに誤差が出ても問題ないケースが多いため、その誤差を犠牲により圧縮率を高めた非可逆圧縮が使われることが多いです。
本稿はそのコーデックの中でも、非可逆のオーディオコーデックについて扱います。
2. オーディオコーデックの 3 要素
オーディオコーデックにおける 3 要素は、「圧縮率」「音質」「処理負荷(特にデコード時の)」といえます。
「圧縮率」はエンコード前と比較したエンコード後のデータサイズ割合を表します。
圧縮度合いが高い (=サイズが小さい) 方を「高い」と呼ぶことが多いので数値の大小と反転していたりしますが、そういうものだと思うしかなさそうです……。
ちょっと昔は「エンコード前のデータ」といえば 16bit LPCM を指しているのがほぼ明確だったので圧縮率は分かりやすい指標だったのですが、最近では 24bit や 32bit float の形式がそのまま使われることも多いので若干理解が難しくなっています。
(音楽データの圧縮ではビットレートで表現されることが多いのですが、インタラクティブオーディオ界隈?では容量管理の都合上か圧縮率で表現されることが多いです。混乱を減らすには「対 16bit LPCM 圧縮率」を使用するようにすれば良いのでしょうか……?)
「音質」は聴感上での音の再現度を表します。性質上、データ上の誤差の大きさだけではでなく人間の主観を元に評価する必要があり、決定的なことを言うのは難しかったりします。本稿の主題なので、後で詳しく紹介します。
「処理負荷」は、インタラクティブオーディオの文脈以外では軽視されることも多いのですが、限られた処理性能の中で大量のサウンド再生を行うことのある状況では非常に大きな要素です。音楽データの圧縮で良く使われるコーデックがインタラクティブオーディオ制作ではあまり使われない理由の 1 つになっています。(Loop を取る都合や権利関係など他の理由もあります。)
3. オーディオコーデックの音質評価
オーディオコーデックの音質評価は非常に難しい課題です。
たまに見かける方法として、適当に用意したいくつかの元音源を比較したいコーデックでそれぞれエンコードして聴き比べるというものがありますが、それだけでは正直十分とは言えません。
オーディオコーデックには得意不得意が存在し、元音源の特徴の違いによって再現の度合いに大きな差が出ることがあります。そのため、元音源の選び方によっては比較が全く参考にならなくなってしまいます。
もちろん実際に使用する可能性のある全ての元音源に対して比較する方法をとれば問題ないのですが、そうもいかない場面が殆どだと思います。
効率的にオーディオコーデックの音質評価をするためには、まず「オーディオコーデックの特性を理解すること」が重要になると考えます。
3-1. 特徴的な音源の準備
オーディオコーデックの特性を理解するために、まず音源の準備を行います。非可逆のオーディオコーデックにとって「苦手とする音」になりやすい特徴的なものを揃えていきます。
高周波数帯のノイズを多く含む音
色々な周波数の正弦波
矩形波や鋸波に近い音
小さい音、フェードアウトしていく音
大きい音、海苔波形の音
「高周波数帯のノイズを多く含む音」
多くのコーデックは高周波数帯を苦手とします。特に圧縮率の高いものは高周波帯の再現度合を犠牲にしている場合が多いです。15kHz 程度以上の高周波数帯を自然にしっかり含んた音源を用意することでこの差を分かりやすく体感することができます。バランスの変化を含めたニュアンスを確認することになるため、楽曲などが分かりやすいと思います。
「色々な周波数の正弦波」
正弦波はコーデックの性能を「耳で聴いて判断する場合」に意外と鬼門になります。元が澄んだ音であるために、数値としては小さい誤差でも余計な倍音として聴こえやすいためです。低周波数の場合は量子化軸の精度が大きく影響し、高周波数の場合は高周波数帯の苦手具合が大きく影響します。また、同じ高周波数帯でもノイズと正弦波では得意不得意に差が出てくるので、両方確認するのが良いです。
「矩形波や鋸波に近い音」
矩形波や鋸波は、波形として急峻な立ち上がり(立ち下がり)が起こる音になります。その急峻さが差分を利用した圧縮時に課題になるほか、高周波成分もしっかりと含むため印象とは裏腹に再現が難しい音になります。
「小さい音、フェードアウトしていく音」
これが苦手となるのは量子化軸のビット深度を犠牲にした圧縮を行っている場合で、余分にビット落ちが起こったようなノイズが載ってしまいます。
「大きい音、海苔波形の音」
元音源が 0dBFS 付近の場合は、圧縮の誤差によって 0dBFS からはみ出る場合の補正処理などが必要になり、コーデックの挙動がおかしくなる場合があります。
3-2. 聴き比べ
今回は例としてオーディオミドルウェアの Wwise を使用して、48k Hz 16 bit PCM を Vorbis High / Vorbis Low / ADPCM のそれぞれで圧縮して比較していきます。あまり特定のミドルウェアなどに特化した話にはしたくないのですが、検証のしやすさなどの理由で採用することにしました。
元音源としては、前項を踏まえて 10 個の Wav ファイルを準備しました。
(もちろん実際に比較を行う場合は、こういった音に加えて実際に使用する音源もいくつか聴き比べると良いです)
聴き比べ例 Wav ファイル集
動画共有などだと別のオーディオコーデックで圧縮されてしまい正しく比較ができないので、聴き比べを Wav ファイルで用意しました。 一度圧縮したものをもう一度 Wav ファイルに戻して並べてみました。(一部聴き比べのための音量調整を行っています)
Tone01 : Drum 音源 (15kHz 程度以上の高周波数帯を含むもの)
いきなり難易度高めの聴き比べです。これに限らないですが、聴環境によっては区別が付きにくい場合もあると思います。
ADPCM を PCM と区別するのは難しいと思いますが、Vorbis High / Vorbis Low は少し PCM とは違って聴こえるのではないでしょうか?
特にハイハット音に注意して聴くと、高周波数帯の変化によるニュアンスの違いが分かりやすいと思います。また、よく聴くとアタックの感じも違って聴こえると思います。
Tone02 : 正弦波 55 Hz
Vorbis High、ADPCM は PCM とほぼ区別がつかないと思います。
Vorbis Low は若干揺らぎが出ています。
Tone03 : 正弦波 220 Hz
各コーデックでの変化はかなり区別がつきにくいと思います。
Tone04 : 正弦波 880 Hz
Vorbis High、Vorbis Low は PCM とほぼ区別がつかないと思います。
ADPCM は量子化ノイズのようなノイズがうっすら載っています。
Tone05 : 正弦波 3520 Hz
Vorbis High、Vorbis Low は PCM とほぼ区別がつかないと思いますが、ADPCM はノイズまみれです。
Tone06 : 正弦波 14080 Hz
Vorbis High、Vorbis Low は PCM とほぼ区別がつかないと思いますが、ADPCM は更にノイズまみれです。
Tone07 : 矩形波 220 Hz (15kHz 程度以上の高周波数帯までしっかり鳴るもの)
割と聴き分けしやすく、全て別の音に聴こえると思います。
ADPCM は若干カドを甘くしたような音、Vorbis High は高周波数帯のニュアンスが落ちているのと若干の揺らぎが出ていて、Vorbis Low は更に揺らぎが強くなっています。
(補足 : 事前に帯域制限を施した場合には Vorbis High / Low の音質劣化は収まります。一方、波形として高周波数の形状が目立つようになるため ADPCM はノイズまみれになります……)
Tone08 : 鋸波 220 Hz (15kHz 程度以上の高周波数帯までしっかり鳴るもの)
Tone07 と同様に割と聴き分けしやすく、全て別の音に聴こえると思います。傾向も Tone07 と近いです。
Tone09 : 小音量正弦波 220 Hz (聴き比べのため全て +33dB しています)
かなりの小音量なため、PCM の時点で量子化ノイズがうすく載っていますが、各コーデックでの変化はかなり区別がつきにくいと思います。
Tone10 : 大音量正弦波 220 Hz (聴き比べのため全て -15dB しています)
各コーデックでの変化はかなり区別がつきにくいと思います。
3-3. 特性の分析
聴き比べをもとに、検証したオーディオコーデックの特性を分析します。
Vorbis High / Vorbis Low
Vorbis は元音源がどのようなものでもノイズにはなりにくいですが、15kHz 程度以上の高周波数帯のニュアンスは失われやすいといえます。また、波形によっては揺らぎが生じてしまう場合があります。
ADPCM
ADPCM は高周波数の正弦波などでノイズが載ってしまう特徴があるものの、元々ノイズ的な高周波数帯のニュアンスは残りやすいといえます。
(業界内では音質が良くないイメージがある ADPCM ですが、Wwise 2019 以降に採用されているものは音質調整が入っており、他でいう ADPCM より高音質になっている場合が多いです)
補足、小音量 / 大音量が苦手なコーデック
今回の検証では Tone09 / Tone10 のような音で目立った劣化が起こるコーデックはありませんでしたが、そういったコーデックも環境によってはまだ存在はするので注意が必要です。
各オーディオコーデックの音質変化を完全に理解するのはかなり大変ですが、このように特性としての理解を得ておくことで、音質優先でのコーデック選定を割と簡単に行うことができるようになります!
おわりに
オーディオコーデックの音質評価を効率的に行うやり方についてまとめてみました。
実際のコーデックの選定時には容量や処理負荷を優先しなければならない場面が多かったりはするのですが、作品のニュアンスをより正確に伝えるためにも、音質優先でコーデック選定をしていくことの重要さが広まれば良いなと思います!