Это часть моего кода:Dispose писатель после MemoryStream
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()
, я получаю исключение. Где я должен закрыть waveFileWriter
?
Если это это [WaveFileWriter] (https://daisy-trac.cvsdude.com/urakawa-sdk/browser/trunk/csharp/audio /NAudio/Wave/WaveOutputs/WaveFileWriter.cs?rev=1346), вы немного застряли. * Некоторые * классы, основанные на потоке, позволяют создавать их с параметром, который указывает, должен ли передаваемый поток быть «Disposed», но этот, похоже, не дает вам эту опцию. Конечно, если вы работаете с этим источником, вы можете изменить его для реализации этой опции. –