0
NAudioを使用して32ビットwavファイルでボリュームを正規化する方法はありますか?NAudioを使用した32ビットPCM Wavでボリュームを標準化
ボリュームがクリッピングしている場合は、ボリュームが低すぎる場合は下向きのノーマライズを、逆の場合は逆にします。
NAudioを使用して32ビットwavファイルでボリュームを正規化する方法はありますか?NAudioを使用した32ビットPCM Wavでボリュームを標準化
ボリュームがクリッピングしている場合は、ボリュームが低すぎる場合は下向きのノーマライズを、逆の場合は逆にします。
組み込み機能はありませんが、AudioFileReader
を使用すると、すべてのサンプルの値を調べて最大絶対サンプル値を見つけることができます。これにより、元のファイルをクリッピングしないでどれだけ増幅できるかを調べることができます。
その後は、オーディオを増幅するためAudioFileReader
のVolume
プロパティを使用して、新しい(IEEE浮動小数点)WAVファイルにそれを書き出すWaveFileWriter.CreateWaveFile
を使用することができます。 WaveFileWriter.CreateWaveFile16
は、正規化後に16ビットの出力が必要な場合に使用できます。
は、ここではいくつかの非常に簡単なサンプルコード
var inPath = @"E:\Audio\wav\input.wav";
var outPath = @"E:\Audio\wav\normalized.wav";
float max = 0;
using (var reader = new AudioFileReader(inPath))
{
// find the max peak
float[] buffer = new float[reader.WaveFormat.SampleRate];
int read;
do
{
read = reader.Read(buffer, 0, buffer.Length);
for (int n = 0; n < read; n++)
{
var abs = Math.Abs(buffer[n]);
if (abs > max) max = abs;
}
} while (read > 0);
Console.WriteLine($"Max sample value: {max}");
if (max == 0 || max > 1.0f)
throw new InvalidOperationException("File cannot be normalized");
// rewind and amplify
reader.Position = 0;
reader.Volume = 1.0f/max;
// write out to a new WAV file
WaveFileWriter.CreateWaveFile(outPath, reader);
}
それはうまく動作しますが、それは269メガバイトにオリジナルとして10メガバイトから、私のファイルが巨大になります...なぜ任意のアイデアですか?私はそれを解決することはできますか? –
は、リアルモードのようなファイルが残っているように見えます。私はそれを圧縮する必要があります。どのようにしてそれを達成するか、別の方法で正常に戻すには? –