wav 文件的快速标准化器无法按预期工作
Quick normalizer for wav files not working as intended
我使用 naudio 在 c# 中编写了一个快速 wave 文件规范器。
目前它锁定了线程并创建了 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);
}
}
您需要在音频缓冲区中进行数学运算以标准化信号。标准化步骤为:
一个。像你一样读取音频缓冲区。 (虽然,我更喜欢分块阅读)。
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 );
我使用 naudio 在 c# 中编写了一个快速 wave 文件规范器。
目前它锁定了线程并创建了 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);
}
}
您需要在音频缓冲区中进行数学运算以标准化信号。标准化步骤为:
一个。像你一样读取音频缓冲区。 (虽然,我更喜欢分块阅读)。
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 );