web-dev-qa-db-ja.com

サンプルレートを変換するときのSoXでのクリッピングの削減/削除

SoXを使用して、一連のwavファイルを16kHz、16bitのモノチャネルwavファイル(初期wavファイルの1つのサブセットになります)にトリミングしています。ほとんどのソースwavファイルは既にこの仕様に設定されていますが、サンプルレートが異なるものがあることがわかりました。 JavaでProcessBuilderを使用して自動化されるため、次のコマンドを使用できると考えました。

sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

サンプルレートは、16000 Hzでない場合にのみ変更されます。同じ仕様のファイルで想定されていることを実行しますが、サンプルレートが異なるファイルでは、次のようになります。

sox WARN rate: rate clipped 48 samples; decrease volume?
sox WARN dither: dither clipped 44 samples; decrease volume?

オーディオの品質を落とさずにこれに対処するにはどうすればよいですか?信号処理については何も知りません。

29
cesar

ツールで提案されているように、音量を少し下げてみてください。 -v 0.99(または0.98など)を前に付ける。このようなボリュームの小さな変化はごくわずかです。

例:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

それでもクリッピングが発生する場合は、オーディオがひどくクリッピング(つまり歪んでいる)している可能性があります(これは現代の音楽では一般的です。Wikipedia: Loudness war を参照してください)。したがって、警告は無視できます—追加の警告はありません。歪みが導入されています。

コメントで述べたように、クリッピングを回避するために必要なボリュームを自動的に調整する-Gオプションを指定できます(少しの余分なCPU時間を犠牲にして、つまり-Gで実行すると少し遅くなります)。

34
user871634

問題がありました。 wavファイルのエンコーディングを変更すると修正されました:

sox input.wav -e signed-integer output.wav
0
Markus Lenger