将wav文件转换为mono

时间:2017-08-15 10:49:02

标签: c# audio wav naudio pcm

我尝试使用NAudio将立体声.wav文件转换为单声道。一个要求是我不能使用任何本机调用,因为我需要在Azure上运行此代码。这就是我的意思:

using (var waveFileReader = new WaveFileReader(sourceFileName))
    {
        var toMono = new StereoToMonoProvider16(waveFileReader);
        WaveFileWriter.CreateWaveFile(destFileName, toMono);
    }

我的代码没有错误,但输出是一个包含纯静音的文件。

还有其他方法可以将文件转换为单声道吗?

3 个答案:

答案 0 :(得分:1)

这段代码对我有用。

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

答案 1 :(得分:1)

您需要为// CLIENT APP @FeignClient(name = "media-client", url = "${api.base-path}/media") public interface MediaClient { @PostMapping String uploadMedia(@RequestPart("file") MultipartFile file); } // SERVER APP @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String uploadMedia(@RequestPart MultipartFile file) throws IOException { Files.copy(file.getInputStream(), Paths.get("/home/m/Desktop").resolve(UUID.randomUUID().toString() + ".jpg")); return null; } 的{​​{1}}和LeftVolume属性提供值。例如,将它们设置为0.5f以混合通道,或将左侧设置为1.0,将右侧设置为0.0以丢弃右侧通道

答案 2 :(得分: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),因为源是浮点格式。