将 2 通道 wav 文件拆分为单通道 wav 文件时音频失真
Distorted audio when splitting 2 channel wav file into mono channel wav files
我正在使用 NAudio 拆分一个 2 声道 wav 文件,该文件也是使用 NAudio 中包含的 Wasapi 进行录音生成的。我以 this 为例来拆分 2 通道 wav 文件。以下是我的代码:
WaveFileReader reader = new WaveFileReader(outputFileName + "ORIGINAL.WAV");
var buffer = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels];
var format = new WaveFormat(reader.WaveFormat.SampleRate, 32, 1);
for (int i = 0; i < writers.Length; i++)
{
writers[i] = new WaveFileWriter(String.Format(outputFileName + "{0}.wav", i), format);
logevent.writeToLog(Convert.ToString(newWaveIn.WaveFormat.Channels));
}
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
int offset = 0;
while (offset < bytesRead)
{
for (int i = 0; i < writers.Length; i++)
{
writers[i].Write(buffer, offset, 2);
offset += 2;
}
}
}
录制音频的比特率为 2822kbps。两个输出的wav文件都是1058kbps,播放时声音变得抖动或者是非常响亮的白噪声。
如果您处理的是 32 位音频,那么您需要一次写入四个字节,而不是在循环中写入两个字节
我正在使用 NAudio 拆分一个 2 声道 wav 文件,该文件也是使用 NAudio 中包含的 Wasapi 进行录音生成的。我以 this 为例来拆分 2 通道 wav 文件。以下是我的代码:
WaveFileReader reader = new WaveFileReader(outputFileName + "ORIGINAL.WAV");
var buffer = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels];
var format = new WaveFormat(reader.WaveFormat.SampleRate, 32, 1);
for (int i = 0; i < writers.Length; i++)
{
writers[i] = new WaveFileWriter(String.Format(outputFileName + "{0}.wav", i), format);
logevent.writeToLog(Convert.ToString(newWaveIn.WaveFormat.Channels));
}
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
int offset = 0;
while (offset < bytesRead)
{
for (int i = 0; i < writers.Length; i++)
{
writers[i].Write(buffer, offset, 2);
offset += 2;
}
}
}
录制音频的比特率为 2822kbps。两个输出的wav文件都是1058kbps,播放时声音变得抖动或者是非常响亮的白噪声。
如果您处理的是 32 位音频,那么您需要一次写入四个字节,而不是在循环中写入两个字节