1

soxを使用して.dat形式に変換した値は、正規化されていないようです。誰かが私が間違っていることを確認できることを願っています。

私はsoxとgnuplotに関するこの素晴らしいSOの投稿で説明されているのと同様のことをしようとしています(Javaでの処理に値を送信しているので、コンテキストが少し異なります)。問題は、.datファイルで「小さな値のみ」を取得するのに対し、マニュアルページには-1から1の間で正規化されると記載されていることです。

soxおよびmp3処理パッケージをインストールした後、テストするために次のことを行います。

sox elevator.mp3 -c 1 -r 11000 elevator_mediumres.dat
cat elevator_mediumres.dat |cut -c21-33 > elevator_mediumres_values_only.dat
sort -n elevator_mediumres_values_only.dat > elevator_mediumres_values_only_sorted.dat 
# echo min $(head -1 elevator_mediumres_values_only_sorted.dat) max $(tail -1 elevator_mediumres_values_only_sorted.dat)

これにより、出力「min -0.48370361max9.1552734e-05」が得られます。datの代わりにwavの最初のコマンドを実行すると、wavファイルはOKに聞こえます(エアロスミスの「エレベーターでの愛」の11kHzモノラルと同じくらいOKです)。もちろん、後でデータを手動で正規化することもできますが、より適切で簡単な方法があることを望んでいます。

ありがとう、

-S-

4

1 に答える 1

1

ファイルに大きな DC シフトがあるようです。データで何をする必要があるかによって、正規化する前におそらくそれを削除する必要があります。でこれを行うにはsox、まず DC シフトを決定します。soxawkおよびを使用した 1 つの方法を次に示しbashます。

dc_shift=$(sox infile.wav -n stats 2>&1 | awk '/DC offset/ { print $3 }')

次に、入力ファイルに dc シフトと正規化を適用します。

sox infile.wav normalized.wav dcshift $(( -dc_shift )) gain -n

soxコマンドラインは次のように構築されます。

sox IN OUT EFFECTS

各効果は順番に適用されます。

于 2012-09-07T14:23:22.050 に答える