To do this, based on the NAudio CreateWaveFile method NAudio CreateWaveFile class, created your own CreateWaveStream method

 public static void CreateWaveStream(Stream waveMemoryStream, WaveStream stream) { using (WaveFileWriter writer = new WaveFileWriter(waveMemoryStream, stream.WaveFormat)) { byte[] buffer = new byte[stream.WaveFormat.SampleRate * stream.WaveFormat.Channels * 16]; while (true) { int bytesRead = stream.Read(buffer, 0, buffer.Length); if (bytesRead == 0) break; writer.WriteData(buffer, 0, bytesRead); } } } public void TrimWavFile(string inPath, MemoryStream outPath, TimeSpan cutFromStart, int cutFromEnd) { using (Mp3FileReader mp3reader = new Mp3FileReader(inPath)) { WaveStream stream = WaveFormatConversionStream.CreatePcmStream(mp3reader); WaveFormat format = stream.WaveFormat; MemoryStream waveStream = new MemoryStream(); CreateWaveStream(waveStream, stream); Stream rawStream = new MemoryStream(waveStream.ToArray()); using (WaveFileReader reader = new WaveFileReader(rawStream)) { using (WaveFileWriter writer = new WaveFileWriter(outPath, reader.WaveFormat)) { int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000; int startPos = (int)cutFromStart.TotalMilliseconds * bytesPerMillisecond; startPos = startPos - startPos % reader.WaveFormat.BlockAlign; int endBytes = cutFromEnd * bytesPerMillisecond;/// endBytes = endBytes - endBytes % reader.WaveFormat.BlockAlign; int endPos = (int)reader.Length - endBytes; TrimWavFile(reader, writer, startPos, endPos); } } } } private void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos) { reader.Position = startPos; byte[] buffer = new byte[1024]; while (reader.Position < endPos) { int bytesRequired = (int)(endPos - reader.Position); if (bytesRequired > 0) { int bytesToRead = Math.Min(bytesRequired, buffer.Length); int bytesRead = reader.Read(buffer, 0, bytesToRead); if (bytesRead > 0) { writer.WriteData(buffer, 0, bytesRead); } } } } 

    0