private void SkipToStart(TimeSpan ts)
{
if (_ok)
{
// Number of samples = seconds * samplerate
long pos = (long)(ts.TotalSeconds * _sr);
if (pos > 0)
{
if (_rdr.BaseStream.CanSeek)
{
Trace.WriteLine("Skip to time {0} (sample {1})", ts, pos);
_rdr.BaseStream.Seek(_seekpos + (pos * _nc * (_bitsPerSample / 8)), SeekOrigin.Begin);
// remember our new base-position, so Seek() works relative to this
_seekpos = _rdr.BaseStream.Position;
// Read the first sample again (see ReadSPDIF)
int nFirst = (_nc * _bitsPerSample / 8);
byte[] firstBytes = _rdr.ReadBytes(nFirst);
MemoryStream ms = new MemoryStream(firstBytes);
BinaryReader mr = new BinaryReader(ms);
_first = Next(mr, out _moreThanFirst);
}
else
{
// Laboriously skip samples until we reach the right place?
// Bah. TODO. For now we only care about file-input sources, which are seekable.
}
}
}
}