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); }
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; } }
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); }