というわけでメインマシンから鯖上のファイルをエンコードするとき、無音検出に使っているfaad(mod)がやたらと遅いのが気になったのでソースから再コンパイルして調整してみました。
DGIndexの高速化で使ったsetvbufが手っ取り早いんじゃね?と思ったので適用。
setvbuf(*FILE, NULL, _IOFBF, 131072);
とか書くだけです。
ネットワーク(SMB)上に144kbps、2chのAACを用意して、-b2で24bit出力(入力と出力は同じ鯖の同じフォルダ)したときの結果です。
入出力バッファ無し時は配布版の2.7modとも同じ速度でした。
入力バッファ | 出力バッファ | 速度 -b2 |
- | - | 38.15x |
64kB | - | 38.0x |
- | 8kB | 81.60x |
- | 64kB | 246.17x |
- | 1MB | 324.98x |
- | 2MB | 346.40x |
- | 4MB | 348.47x |
- | 6MB | 347.47x |
16kB | 1MB | 331.54x |
64kB | 1MB | 334.42x |
128kB | 1MB | 323.18x |
16kB | 2MB | 323.18x |
32kB | 2MB | 334.36x |
64kB | 2MB | 343.31x |
128kB | 2MB | 346.40x |
256kB | 2MB | 346.40x |
512kB | 2MB | 341.30x |
1MB | 2MB | 347.47x |
8kB | 4MB | 344.36x |
64kB | 4MB | 349.55x |
128kB | 4MB | 346.47x |
という感じで、僕のネットワーク環境下では入力128kB、出力2MB位がちょうどよいようです。
入力にバッファが効かないのはOSでキャッシュされているから疑惑もありますが・・・
RAMMap等でクリアしても良いのですが、今回はそこまでしてません。
HDD上のファイルに対してもorg373x→486x位に早くなりました。
但し、オリジナル配布版とはlibが異なるのか、デコードしたwav同士を比較するとたまに1digit異なったりします。元々浮動小数なので気にしなくて良いのですが。
もしよろしければソースを公開していただけませんか?
返信削除コメントに気付きませんで申し訳ありません。
削除とは言ってもほとんど何も変えてないので差分だけ
audio.c
84a85
> setvbuf(aufile->sndfile,NULL,_IOFBF,1048576*2);
main.c
282a283
> setvbuf(b->infile,NULL,_IOFBF,131072);
・・・ほんとにほとんど変わっていないでしょ?(w