Есть ли способ установить начальную и конечную точки воспроизведения в NAudio? В настоящее время я использую Timer
, чтобы периодически проверять ChannelPosition
и вернуть его в исходное положение, когда он достигнет конца. Есть ли лучший способ?Настройка начальных/конечных точек воспроизведения в NAudio
1
A
ответ
0
Если вы реализуете свой собственный 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();
Простой и элегантный. Спасибо. – dotNET