ttの日記: takehiro.c
short blockはいわゆるプリエコーが発生しそうな、一般的に圧縮の難しい、音がなり始めた瞬間などの過渡的な信号に対して使われる。圧縮が難しいわけだから、当然データは大きくなる。
当然ながら、そういうデータこそがんばって圧縮してほしいものである。が、dist10のコードでは、そこらへんがしょぼしょぼであった。
mp3に限らず大抵の音声・画像圧縮方法では非可逆圧縮した後に可逆圧縮を行う。具体的な圧縮方法はフォーマットによって異なるが、mp3では事前に用意したいくつかのハフマンコードを使って圧縮を行うといったことが出来るようになっている。いくつかある、というのは、そのいくつかあるテーブルから一番効率のいいものを選ぶことによって、より圧縮率を高めるためである。
ところが…ところがである。dist10のコードでは、複数使えるハフマンコードの中から、short blockでないときはほぼ常にすべてのテーブルの中から最適なものを選ぶのだが、shortの時にはなぜか全部の1/3か1/2ぐらいの中からしか選ばない。
なんでやねん!というわけで、その辺を頑張って修正してみた。が、例によって私が書いたコードなのでしょぼいバグがあった(苦笑)。
さて、当時のLAMEはCVSなどハイソなものは使っておらず、Markが頑張って皆が投げてくるパッチを集める、という開発スタイルをとっていた。私が投げたこの修正のパッチもとりあえず有効性は認められたのだが、Markはこのバグに気付いたので、彼の手により私のパッチは他とは隔離して特定のファイルにまとめられ、特定のシンボルを有効にしてコンパイルしたときのみ有効になるように変更された。
その後バグは取れて、古いコードは削除され、常に私のコードが使われるようにはなった。だが、その隔離されたファイルはLAMEのツリーに残った。
takehiro.cという名前で・・・・
教訓 : パッチを投げるときは、ファイル名に変なものをつけられないよう注意しましょう。
takehiro.c More ログイン