如何重新采样wave文件并创建流或字节数组而不是文件?

时间:2018-07-02 20:19:40

标签: naudio

我已经看到了许多有关重新采样文件和创建新文件的示例。

dir.mkdirs()  // this returns true, and I checked that all subdirectories as created with success

我想要做的是创建一个重新采样的流或字节数组。我试过调用WaveFileWriter.WriteWavFileToStream(memoryStream,resampler)而不是CreateWaveFile,但是我最终得到一个包含RIFF标头的流,因此我不确定该怎么做。

2 个答案:

答案 0 :(得分:0)

您可以只在重采样器上调用Read来读取缓冲区重采样的字节。我通常建议一次读取大约1秒钟的音频,并继续进行直到Read返回0

答案 1 :(得分:0)

感谢您的帮助。我现在按照建议使用Read方法,但重新采样的音频会发出咔嗒声。在下面包含的代码中,当我将byte []“ arr”的大小调整为大于128时,音频会变差。我进行重新采样的方式导致点击。

public void AddSample(byte[] sample)
    {
        using (var sourceProvider = new RawSourceWaveStream(sample, 0, sample.Length, waveFormat))
        // Setup resampler
        using (var resampler = new MediaFoundationResampler(sourceProvider, defSampleRate))
        {
            resampler.ResamplerQuality = 60;
            var arr = new byte[128];
            while (resampler.Read(arr, 0, arr.Length) > 0)
            {
                // Send stream to the provider
                bufferedProvider.AddSamples(arr, 0, arr.Length);
            }
        }
    }