public virtual void ReportTrackMetadata(ITrackMetadata trackMetadata)
        {
            if (trackMetadata == null)
            {
                throw new ArgumentNullException("trackMetadata");
            }
            Debug.WriteLine("MetadataSink.ReportTrackMetadata() " + (object)trackMetadata);
            TimeSpan?timeStamp = trackMetadata.TimeStamp;

            if (!timeStamp.HasValue)
            {
                throw new ArgumentException("A timestamp is required", "trackMetadata");
            }
            timeStamp = trackMetadata.TimeStamp;
            if (timeStamp.Value < TimeSpan.Zero)
            {
                throw new ArgumentOutOfRangeException("trackMetadata", "The timestamp cannot be negative");
            }
            bool   lockTaken = false;
            object obj       = null;

            try
            {
                Monitor.Enter(obj = this._lock, ref lockTaken);
                this._pendingTracks.Enqueue(trackMetadata);
            }
            finally
            {
                if (lockTaken)
                {
                    Monitor.Exit(obj);
                }
            }
        }
        private TimeSpan?ProcessPendingTracks()
        {
            TimeSpan?nullable;

            while (this._pendingTracks.Count > 0)
            {
                if (null == this._metadataState.TrackMetadata)
                {
                    ITrackMetadata trackMetadata = this._pendingTracks.Dequeue();
                    this._metadataState.TrackMetadata = trackMetadata;
                    nullable = trackMetadata.TimeStamp;
                    Debug.Assert(nullable.HasValue, "Invalid track metadata (no timestamp)");
                }
                else
                {
                    TimeSpan?timeStamp = this._metadataState.TrackMetadata.TimeStamp;
                    nullable = timeStamp;
                    TimeSpan timeSpan1 = this._position;
                    if ((nullable.HasValue ? (nullable.GetValueOrDefault() > timeSpan1 ? 1 : 0) : 0) != 0)
                    {
                        return(timeStamp);
                    }
                    ITrackMetadata trackMetadata1 = this._pendingTracks.Peek();
                    nullable = trackMetadata1.TimeStamp;
                    Debug.Assert(nullable.HasValue, "Invalid track metadata (no timestamp)");
                    nullable = trackMetadata1.TimeStamp;
                    TimeSpan timeSpan2 = this._position;
                    if ((nullable.HasValue ? (nullable.GetValueOrDefault() > timeSpan2 ? 1 : 0) : 0) != 0)
                    {
                        return(trackMetadata1.TimeStamp);
                    }
                    ITrackMetadata trackMetadata2 = this._pendingTracks.Dequeue();
                    Debug.Assert(object.ReferenceEquals((object)trackMetadata1, (object)trackMetadata2), "Dequeue track mismatch");
                    this._metadataState.TrackMetadata = trackMetadata1;
                }
            }
            if (null != this._metadataState.TrackMetadata)
            {
                TimeSpan?timeStamp = this._metadataState.TrackMetadata.TimeStamp;
                Debug.Assert(timeStamp.HasValue, "Invalid track metadata (no timestamp)");
                nullable = timeStamp;
                TimeSpan timeSpan = this._position;
                if ((nullable.HasValue ? (nullable.GetValueOrDefault() > timeSpan ? 1 : 0) : 0) != 0)
                {
                    return(timeStamp);
                }
            }
            nullable = new TimeSpan?();
            return(nullable);
        }
        public VorbisComments(ITrackMetadata[] metadata)
        {
            MemoryStream ms = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(ms);

            string vendorString = "flacFS";
            writer.Write(vendorString.Length);
            writer.Write(Encoding.UTF8.GetBytes(vendorString));
            writer.Write(metadata.Length);

            foreach (ITrackMetadata m in metadata)
            {
                if (m.Key.Equals("Track", StringComparison.InvariantCultureIgnoreCase))
                {
                    string [] track = m.Value.Split(new char[]{'/'});

                    string comment;

                    comment = "TrackNumber=" + Convert.ToInt32(track[0]).ToString();
                    writer.Write(comment.Length);
                    writer.Write(Encoding.UTF8.GetBytes(comment));

                    comment = "TotalTracks=" + Convert.ToInt32(track[1]).ToString();
                    writer.Write(comment.Length);
                    writer.Write(Encoding.UTF8.GetBytes(comment));
                }
                else if (m.Key.Equals("Year", StringComparison.InvariantCultureIgnoreCase))
                {
                    string comment = "Date=" +  m.Value;
                    writer.Write(comment.Length);
                    writer.Write(Encoding.UTF8.GetBytes(comment));
                }
                else
                {
                    string[] v = m.Value.Split(new char[] { '\0' });
                    foreach (string s in v)
                    {
                        string comment = m.Key + "=" + s;
                        writer.Write(comment.Length);
                        writer.Write(Encoding.UTF8.GetBytes(comment));
                    }
                }
            }
            block = ms.GetBuffer();
            writer.Close();
        }
Beispiel #4
0
 public override void SetTrackMetadata(ITrackMetadata trackMetadata)
 {
     this._metadataSink.ReportTrackMetadata(trackMetadata);
 }
 public abstract void SetTrackMetadata(ITrackMetadata trackMetadata);
Beispiel #6
0
 public override void ReportTrackMetadata(ITrackMetadata trackMetadata)
 {
     base.ReportTrackMetadata(trackMetadata);
     this._updateAction();
 }
Beispiel #7
0
        public virtual void ReportTrackMetadata(ITrackMetadata trackMetadata)
        {
            if (trackMetadata == null)
                throw new ArgumentNullException(nameof(trackMetadata));

            Debug.WriteLine("MetadataSink.ReportTrackMetadata() " + trackMetadata);

            if (!trackMetadata.TimeStamp.HasValue)
                throw new ArgumentException("A timestamp is required", nameof(trackMetadata));
            if (trackMetadata.TimeStamp.Value < TimeSpan.Zero)
                throw new ArgumentOutOfRangeException(nameof(trackMetadata), "The timestamp cannot be negative");

            lock (_lock)
            {
                _pendingTracks.Enqueue(trackMetadata);
            }
        }
Beispiel #8
0
 public void SetTrackMetadata(ITrackMetadata trackMetadata)
 {
 }
Beispiel #9
0
 public void SetTrackMetadata(ITrackMetadata trackMetadata)
 { }
Beispiel #10
0
        public override void ReportTrackMetadata(ITrackMetadata trackMetadata)
        {
            base.ReportTrackMetadata(trackMetadata);

            _updateAction();
        }