我正在尝试使用 NAudio 将立体声.wav文件转换为单声道。一个要求是我不能使用任何本机调用,因为我需要在 Azure 上运行此代码。这是我带来的:
using (var waveFileReader = new WaveFileReader(sourceFileName))
{
var toMono = new StereoToMonoProvider16(waveFileReader);
WaveFileWriter.CreateWaveFile(destFileName, toMono);
}
我的代码工作没有错误,但输出是一个包含纯静音的文件。
还有其他方法可以将文件转换为单声道吗?
这段代码对我有用。
public static void StereoToMono(string sourceFile, string outputFile)
{
using (var waveFileReader = new WaveFileReader(sourceFile))
{
var outFormat = new WaveFormat(waveFileReader.WaveFormat.SampleRate, 1);
using (var resampler = new MediaFoundationResampler(waveFileReader, outFormat))
{
WaveFileWriter.CreateWaveFile(outputFile, resampler);
}
}
}
请注意,channels
参数1
传递给outFomat
。
您需要为StereoToMonoProvider16
的LeftVolume
和RightVolume
属性提供值。例如,将它们都设置为 0.5f 以混合通道,或将左设置为 1.0,将右设置为 0.0 以丢弃右通道
这段代码对我有用,即使在 Azure 上也是如此:
private void ConvertToMono(string sourceFileName, string destFileName) {
var monoFormat = new WaveFormat(44100, 1);
using (var waveFileReader = new WaveFileReader(sourceFileName))
{
var floatTo16Provider = new WaveFloatTo16Provider(waveFileReader);
using (var provider = new WaveFormatConversionProvider(monoFormat, floatTo16Provider))
{
WaveFileWriter.CreateWaveFile(destFileName, provider);
}
}
}
请注意,我使用的是额外的转换器(WaveFloatTo16Provider
(,因为源是浮点格式。