Exemple #1
0
        protected virtual bool TryParseDuration(BassSkipSilenceStreamAdvisorBehaviour behaviour, string value, out TimeSpan duration)
        {
            if (string.IsNullOrEmpty(value))
            {
                duration = TimeSpan.Zero;
                return(false);
            }
            var parts = value.Split(new[] { ':' }, 2);

            if (parts.Length != 2)
            {
                duration = TimeSpan.Zero;
                return(false);
            }
            var threshold = default(int);

            if (!int.TryParse(parts[0], out threshold) || behaviour.Threshold != threshold)
            {
                Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Warn, "Ignoring lead in/out value \"{0}\": Invalid threshold.", parts[0]);

                duration = TimeSpan.Zero;
                return(false);
            }
            if (!TimeSpan.TryParse(parts[1], out duration))
            {
                Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Warn, "Ignoring lead in/out value \"{0}\": Invalid duration.", parts[1]);

                duration = TimeSpan.Zero;
                return(false);
            }

            return(true);
        }
Exemple #2
0
 public BassSkipSilenceStreamComponent(BassSkipSilenceStreamAdvisorBehaviour behaviour, BassOutputStream stream)
 {
     this.Behaviour = behaviour;
     this.Rate      = behaviour.Output.Rate;
     this.Channels  = stream.Channels;
     this.Flags     = BassFlags.Decode;
     if (this.Behaviour.Output.Float)
     {
         this.Flags |= BassFlags.Float;
     }
 }
Exemple #3
0
        protected virtual bool TryGetMetaData(BassSkipSilenceStreamAdvisorBehaviour behaviour, PlaylistItem playlistItem, out TimeSpan leadIn, out TimeSpan leadOut)
        {
            if (playlistItem.MetaDatas == null)
            {
                //This shouldn't happen.
                leadIn  = default(TimeSpan);
                leadOut = default(TimeSpan);
                return(false);
            }

            Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Debug, "Attempting to fetch lead in/out for file \"{0}\" from meta data.", playlistItem.FileName);

            var leadInMetaDataItem  = default(MetaDataItem);
            var leadOutMetaDataItem = default(MetaDataItem);

            lock (playlistItem.MetaDatas)
            {
                var metaDatas = playlistItem.MetaDatas.ToDictionary(
                    metaDataItem => metaDataItem.Name,
                    StringComparer.OrdinalIgnoreCase
                    );
                metaDatas.TryGetValue(CustomMetaData.LeadIn, out leadInMetaDataItem);
                metaDatas.TryGetValue(CustomMetaData.LeadOut, out leadOutMetaDataItem);
                if (leadInMetaDataItem == null && leadOutMetaDataItem == null)
                {
                    Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Debug, "Lead in/out meta data does not exist for file \"{0}\".", playlistItem.FileName);

                    leadIn  = default(TimeSpan);
                    leadOut = default(TimeSpan);
                    return(false);
                }
            }

            if (leadInMetaDataItem == null)
            {
                leadIn = TimeSpan.Zero;
            }
            else if (!this.TryParseDuration(behaviour, leadInMetaDataItem.Value, out leadIn))
            {
                Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Debug, "Lead in meta data value \"{0}\" for file \"{1}\" is not valid.", leadInMetaDataItem.Value, playlistItem.FileName);

                leadIn  = default(TimeSpan);
                leadOut = default(TimeSpan);
                return(false);
            }

            if (leadOutMetaDataItem == null)
            {
                leadOut = TimeSpan.Zero;
            }
            else if (!this.TryParseDuration(behaviour, leadOutMetaDataItem.Value, out leadOut))
            {
                Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Debug, "Lead out meta data value \"{0}\" for file \"{1}\" is not valid.", leadOutMetaDataItem.Value, playlistItem.FileName);

                leadIn  = default(TimeSpan);
                leadOut = default(TimeSpan);
                return(false);
            }

            Logger.Write(typeof(BassSkipSilenceStreamAdvisor), LogLevel.Debug, "Successfully fetched lead in/out from meta data for file \"{0}\": {1}/{2}", playlistItem.FileName, leadIn, leadOut);

            return(true);
        }