Naudio/c如何播放部分wav文件#

How to play part of wav file by Naudio/c#

我想播放波形文件的某些部分,例如从 20 到 50 秒。我在我的 C# 项目中使用 Naudio。我知道如何从 20 秒开始:

private NAudio.Wave.AudioFileReader wave = null;
private NAudio.Wave.DirectSoundOut outputSound = null;
...
timeFrom = 20;
wave = new NAudio.Wave.AudioFileReader(file);
wave.Position += (long)((double)wave.WaveFormat.AverageBytesPerSecond * timeFrom);
outputSound = new NAudio.Wave.DirectSoundOut();
outputSound.Init(new NAudio.Wave.WaveChannel32(wave));
outputSound.Play();

但是如何在50秒停止?对我来说使用定时器不是很好的解决方案。

看看OffsetSampleProvider。它具有 SkipOverTake 属性,允许您跳过前 20 秒,然后跳过接下来的 30 秒。

谢谢,很有用。代码如下:

using NAudio.Wave;
using NAudio.Wave.SampleProviders;
...
private AudioFileReader wave = null;
private WaveOut outputSound = null;
...
wave = new NAudio.Wave.AudioFileReader(fileName);
OffsetSampleProvider offsetSampleProvider = new OffsetSampleProvider(wave);
offsetSampleProvider.SkipOver = TimeSpan.FromSeconds(timeFrom);
offsetSampleProvider.Take = TimeSpan.FromSeconds(timeTo - timeFrom); 
outputSound = new WaveOut();
outputSound.Init(offsetSampleProvider);
outputSound.Play();