这是我的一部分代码:

private static MemoryStream outputStream;


public static void ConvertMp3ToWavStream(string inputPath)
        {
            outputStream = new MemoryStream();
            using (Mp3FileReader reader = new Mp3FileReader(inputPath))
            {
                using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(reader))
                {
                    WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat);

                    byte[] bytes = new byte[waveStream.Length];
                    waveStream.Position = 0;
                    waveStream.Read(bytes, 0, (int)waveStream.Length);
                    waveFileWriter.Write(bytes, 0, bytes.Length);
                    waveFileWriter.Flush();
                }
            }
        }


这是我的CloseAndDispose方法,我在进行一些操作后将其调用:

private static void CloseAndDispose()
        {
            if (outputStream != null)
            {
                outputStream.Close();
                outputStream.Dispose();
            }
        }


问题是:在完成所有操作后,我在内存堆栈中有一些内存,没有被处置。据我了解,这是我的writer。当我尝试处置作家时,我遇到了一个例外。 (无法读取MemoryStream)。当我尝试在CloseAndDispose()方法之后关闭并处置writer时,出现异常。我应该在哪里关闭waveFileWriter

最佳答案

NAudio在IgnoreDisposeStream名称空间中有一个名为NAudio.Utils的帮助程序类。在将内存流传递到WaveFileWriter之前,将它们包装成其中一种

using (var writer = new WaveFileWriter(new IgnoreDisposeStream(outputStream),
                                       waveStream.WaveFormat))
{
    ...
}

关于c# - 在memoryStream之后处置writer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31023547/

10-13 03:14