gpt4 book ai didi

c# - 在NAudio中设置播放开始/结束点

转载 作者:行者123 更新时间:2023-12-02 23:43:21 24 4
gpt4 key购买 nike

有没有办法在NAudio中设置播放的起点和终点?目前,我正在使用Timer定期检查ChannelPosition,并在到达末尾时将其重置为开始位置。有没有更好的方法?

最佳答案

如果您实现包装了IWaveProvider的自己的WaveStream,则可以在流上设置CurrentTime,并检查Read的实现是否已结束。通过将基础流上的时间设置回开始时间,可以使音夹在两个时间戳之间循环。

该类的实现如下所示:

private class StartEndLoopReader:IWaveProvider
{
private TimeSpan _start;
private TimeSpan _end;
private WaveStream _stream;

public StartEndLoopReader(WaveStream stream, TimeSpan start, TimeSpan end)
{
_stream = stream;
_stream.CurrentTime = start;
_start = start;
_end = end;
}

public int Read(byte[] array, int offset, int count)
{
Debug.WriteLine(_stream.CurrentTime);
if (_stream.CurrentTime>_end)
{
// back to start to loop
// if you want to stop here, return 0 instead.
_stream.CurrentTime = _start;
}

return _stream.Read(array, offset, count);
}

#region IWaveProvider Members
public WaveFormat WaveFormat
{
get { return _stream.WaveFormat; }
}
#endregion
}

您可以按如下方式使用此类:
var wo = new NAudio.Wave.WaveOutEvent();
var reader = new StartEndLoopReader(
new WaveFileReader( @"v1.wav"),
new TimeSpan(0,0,2),
new TimeSpan(0,0,4));

wo.Init(reader);
wo.Play();

关于c# - 在NAudio中设置播放开始/结束点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com