DSPUtil.WaveReader.SkipToStart C# (CSharp) Method

SkipToStart() private method

private SkipToStart ( System.TimeSpan ts ) : void
ts System.TimeSpan
return void
        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.
                    }
                }
            }
        }