ttの日記: LAME TODO before 4.0 2
PE (perceptual entropy) の計算改善
LAME は実際のエンコードをする前に、「だいたいこのフレームをエンコードするのにどのぐらいのビットがいるか」を計算するようになっていて、それをみてMS/LRの切り替えとか、ビットリザーバーの使用方針とかを決めている。このPE自体はISOのdist10コードなどにも有る考え方だが、LAMEにおけるその計算方法や使い方は全然別物である。
さて、このPEの計算方法に関しては以下の点で改善できるはず。
- カットオフ周波数の考慮(現在カットオフをほとんど考慮して無い)
- 44.1kHz 以外でのパラメータチューニング(今のところサンプリング周波数にかかわらず同じ係数を使っていて、その係数は44.1kHz における値に特化してある)
PE - ビット数変換部分変更
前述のとおりLAMEではPEの値を見てビットリザーバーの使い方を決めるのだが、このPEの値の使い方がどうも怪しい。たとえばABRとCBRで使い方がまるっきり違ってるとか。なので、おそらくこの辺も改善が必要と思われる。
あと、もうちょっと先をみたビット配分、というのも出来るはず。「次のフレームで凄くビットが沢山必要そう」なら、今のフレームのビットを減らすとか。
short block のマスキング計算・noise shaping
こいつはかなりなおさないといけないところが多い。
- インパルス状波形への対応
- アタックのあった場所の認識とアタックの周波数特性の利用
- サブブロックゲインを使うと15kHz以上のノイズを減らせるが、現時点でこれが有効に使えていない
subband filter 出力を使った long/short 切り替え
現時点で実験ブランチには入っているが、残念ながら従来のものに比べて品質が劣っている(速度は速い)。原因は恐らく時間軸上での解像度が低いためだと思われるのでその修正が必要。私のコードの手抜きなのが原因であって理論的に難しいわけではない。
あとはサンプリング周波数が44.1kHz以外の時のことがまったく考えられて無いのを修正するのが必要。
libsndfile を標準入力対応にして入力層を libsndfile オンリーに
現在LAMEはlibsndfileをサポートするが、古い0.xx台のAPIしか使えない。これを現在の1.x系のAPIサポートに変更する必要がある。あと、libsndfileはseekableでない入力からの読み込みが出来ないので、その辺を何とかする必要がある。
libssrc の導入
いつになることやら・・・
バギーなデコーダへの対策
あんまりやりたくないが、--noscfci, --noscalefac_scale, -s, --lesser-ix およびそいつらをまとめた --buggydecoder オプションを実装する。
Intensity stereo
いつになるやら・・・
noise-shpaingの改善
今の奴は余りにも馬鹿正直なアルゴリズムなので何とかする
- 再計算が必要なところのみquantizeを行う仕組み
- 量子化係数を変化させるscalefactorの選択方法の改善
- 一つ前のgranuleでの結果をよりよく利用する方法の開発(特にVBR)
Chebyshev polynominal 方式の MDCT
ほんのちょっとは速くなるはず
MS sparsingとsubstep noise shapingの改善
とりあえずまともに使える程度のレベルには持って行きたい。
mpglibにおさらばしてHIPを使う
いまのmpglibは余りにも問題が多いので・・・
(*´∀`)キャッ (スコア:0)
んなことないっす、お体と精神状態にお気をつけて
#ちょっぴり過激なのでAC
ToDoとは (スコア:1)
やりたいなあということのリストでもありますので、
きっと大丈夫かと。
仕事のToDoじゃなければ、無理してやらずとも、放って
おけばいいんです。
それを仕事で放置すると、わがままな人って評価がつき
ます。ええ、ママン、ごめんなさい。