「蒼弓ノート」 別館

チャンネルカップリング実験

最終更新:

匿名ユーザー

- view
メンバー限定 登録/ログイン
#blognavi
 あれから色々とやってます。ノイズコントロールのアルゴリズムを改良したり Manuke氏のパッチを取り込んだりは既定事項ですが、そのほかにもステレオ周りの実験をやっていました。
 Vorbisのステレオ周りは少々独特なものがあるのはご存知の方もいらっしゃるかも知れません。一般的な非可逆オーディオ圧縮ではM/Sステレオとシンプルステレオを切り替える方式がほとんどです。しかし、VorbisにはM/Sステレオにあたるものはありません。Vorbisではもっと積極的にステレオ情報を間引きます。
概略はオフィシャルのドキュメントにありますが、lossless連結以外では位相情報を減らします。pointステレオに至っては位相情報を持ちません。しかし人の耳は高域になるほど位相差には鈍感になる特性があるので大抵の場合は問題になりません。1.0以降の実際の実装では目立つ音にはlosslessを割り当て、目立たない(減衰音など)音にはpointを割り当てます。閾値はquality値が高いほどlosslessの割合が増えるようになっています。この時の割り当ては周波数解像度単位で決定するようになっているため、かなりきめ細かに制御できます(44.1kHz時で通常、約21.5Hzから172.3Hz 単位)。
 ところで、高い音程では位相情報の削減はそれほど問題にならない、と上に書きましたが、現在のアルゴリズムの不完全さから問題となるケースも出てきます。pointステレオは非常に攻撃的な手段です。それゆえに、使い所を誤ると容易に知覚できる問題を生み出します。その問題を解決・又は縮小するために何らかの工夫が必要になりますが、一番簡単なのはもっと情報量の多い連結方法を使用するように閾値を変えることです。現状ではlosslessの割合を多くするのが一番シンプルな方法なのですが、それではビットレートが上がり過ぎます。そこで、今のエンコーダでは使われていないphaseステレオを使ったらどのくらいビットレートが削減できるか実験してみました。具体的にはquality4でpointステレオの替わりに8phaseステレオを使用するというものです。
 phaseステレオの基本的な部分は1.0RC2のエンコーダから拝借して、チャンネル連結の方法としては1.0/1.0.1のround hypotを使ってみました(RC2の方法よりも効率的だったので)。その結果は、losslessよりはビットレートが下がるが、ビットレートは依然高い水準を維持していました。あるサンプルではオールlosslessステレオ時で160kbps後半、lossless+8phaseで150kbps前半。ちなみにlossless+pointでは125kbpsです。正直にいってあまりパフォーマンスがいいとは言えません。Xiph.orgの Monty氏がpointステレオの改良に重点を置いた理由が解るような気がします。もっとも、4phaseなどを使用すればもうちょっとビットレートは下がるのかも知れません。

[追記 09/07/2004] 上記にある"RC2の方法よりも効率的だったので"というのは間違いで、正しくは"RC2の方法よりも良い結果が得られたので"、です。RC2の方法を用いるとビットレートは140kbps後半に落ちますが、問題はより目立つようになります。
 もっとも問題があるとはいっても、この辺は全てビットレートと音質との間の取引がありますし、問題となるサンプルがそれほど多いわけではありません。現状でも全体の音質を考えれば、悪くない線だと思います。より良いステレオモデルは実現可能だと思いますが、そのためには多くの時間と実験が必要になるでしょう。だれかチャレンジしてみませんか?

参考[Vorbisのステレオモデルについて]
Dual Stereo 独立したチャンネルとして処理します。他の方法と併用は出来ないようです。
Lossless Stereo チャンネルを可逆で(位相情報を保って)連結します。
Phase Stereo 位相情報(angle)を削減します。削減する量に応じて4/6/8 phaseなどがあります。
Point Stereo 位相情報を保ちません。故に情報量は最小になります。

下方の3つの連結モデルは自由に混在することができます。


カテゴリ: [vorbis] - &trackback() - 2004年09月06日

#blognavi
記事メニュー
目安箱バナー