[リストへもどる]
一括表示
タイトル長文すみませんm(__)m
記事No177
投稿日: 2002/01/22(Tue) 10:44
投稿者フロート
動作報告のレポートです。


午後3.09(exe版)を使用してwaveファイルのエンコードを行ったのですが、
-q オプションの挙動が変なことに気づきました。

-q 0 を指定した場合
D:\WAVE>gogo -q 0 TEST.wav ..\MP3\TEST_Q0.mp3
{ 12669/ 12669} 100.0% ( 19.78x) re:[00:00:00.00] to:[00:00:16.73]

-q 1 を指定した場合
D:\WAVE>gogo -q 1 TEST.wav ..\MP3\TEST_Q1.mp3
{ 12669/ 12669} 100.0% ( 12.61x) re:[00:00:00.00] to:[00:00:26.24]

※使用した曲はCD2WAVで吸い出した5:30ほどの曲です。

上のとおり、-q 0 よりも -q 1 のほうがエンコードに時間がかかっています。
また、実際にエンコードしたファイルを聞き比べたところ、-q 1 のほうが
音像的に元のwaveに近い印象がしました。

もしやバグかと思い調べたところ、lame.cにおかしな部分を発見。
320行目からの lame_init_qval(void) というサブルーチンで
-q オプションの数値を取得し、case文で振り分けているっぽいのですが、
そのなかに case 0: という部分が入っていませんでした(バグですかね?)

しょうがないので下記のように変更しました。

変更前(lame.cの348行目以降)
case 2:
RO.noise_shaping = 1;
RO.noise_shaping_amp = 1;
RO.noise_shaping_stop = 1;
RO.use_best_huffman = 1;
break;

case 1:
RO.noise_shaping = 1; /* 2=usually lowers quality */
RO.noise_shaping_amp = 2;
RO.noise_shaping_stop = 1;
RO.use_best_huffman = 1; /* 2 not yet coded */
break;

変更後
case 2:
case 1:
RO.noise_shaping = 1;
RO.noise_shaping_amp = 1;
RO.noise_shaping_stop = 1;
RO.use_best_huffman = 1;
break;
case 0:
RO.noise_shaping = 1; /* 2=usually lowers quality */
RO.noise_shaping_amp = 2;
RO.noise_shaping_stop = 1;
RO.use_best_huffman = 1; /* 2 not yet coded */
break;

用は-q 1をそのまま-q 0にして、もとの-q 1を-q 2と同じにしたわけです(^^;;;
これでコンパイルし、エンコードを行ったところ、今度は
予想通りの結果が返ってきました。

D:\WAVE>gogo -q 0 TEST.wav ..\MP3\TEST_Q0.mp3
{ 12669/ 12669} 100.0% ( 12.61x) re:[00:00:00.00] to:[00:00:26.24]

D:\WAVE>gogo -q 1 TEST.wav ..\MP3\TEST_Q1.mp3
{ 12669/ 12669} 100.0% ( 13.86x) re:[00:00:00.00] to:[00:00:23.87]


以上、動作報告のレポートでした。