2017-08-01 11 views
0

私はnaudioを使用してC#でクイックウェーブファイルノーマライザを作成しました。wavファイルのクイックノーマライザが意図した通りに動作しない

現在、スレッドをロックして1 KBのファイルを作成します。 smは、あなたが信号を正規化するために、オーディオバッファに数学的な操作を行う必要があり、ファイル

using (WaveFileReader reader = new WaveFileReader(aktuellerPfad)) 
{ 
    using (WaveFileWriter writer = new WaveFileWriter("temp.wav", reader.WaveFormat)) 
    { 
     byte[] bytesBuffer = new byte[reader.Length]; 
     int read = reader.Read(bytesBuffer, 0, bytesBuffer.Length); 
     writer.WriteSample(read *32768/sm); 
    } 
} 
+1

問題は何ですか。何が目的どおりに機能していないのですか? –

+0

あなたは、バイトバッファの代わりに出力値int read(これは私が推測するスカラー値で、読み込まれたサンプルの数を表します)を書き込もうとしています。 @ErAcubeの解決策が必要だと思います。 – Alicia

答えて

3

の最高峰です。正規化ステップは、

aです。あなたがしているようにオーディオバッファを読み込みます。 (しかし、私はチャンクで読むことを好むだろうが)。

byte[] bytesBuffer = new byte[reader.Length]; 
    reader.Read(bytesBuffer, 0, bytesBuffer.Length); 

b。乗数の値を計算します。値を計算するさまざまな方法があります。私はあなたがどのように計算しているのかわかりませんが、値は32768/smと思われます。乗数を「mul」と表示します。

c。今度はバッファを反復し、その値に乗数を掛けます。

for (int i = 0; i < bytesBuffer.Length; i++) 
    { 
     bytesBuffer[i] = bytesBuffer[i] * mul; 
    } 

d。最後に、サンプルをファイルに書き出します。

writer.WriteSamples(bytesBuffer, 0, bytesBuffer.Length); 
+1

また、分割に使用する前に 'sm'の値が0でないことを確認します。 – Alicia

関連する問題