public override Task <IOutputStream> Duplicate(IOutputStream stream) { var outputStream = stream as BassOutputStream; if (outputStream.Provider.Flags.HasFlag(BassStreamProviderFlags.Serial)) { Logger.Write(this, LogLevel.Warn, "Cannot duplicate stream for file \"{0}\" with serial provider.", stream.FileName); return(null); } var flags = BassFlags.Default; if (this.Float) { flags |= BassFlags.Float; } var result = this.StreamFactory.CreateBasicStream(stream.PlaylistItem, flags); if (result.IsEmpty) { return(null); } outputStream = new BassOutputStream(this, this.PipelineManager, result, stream.PlaylistItem); outputStream.InitializeComponent(this.Core); #if NET40 return(TaskEx.FromResult <IOutputStream>(outputStream)); #else return(Task.FromResult <IOutputStream>(outputStream)); #endif }
public override async Task <IOutputStream> Load(PlaylistItem playlistItem, bool immidiate) { if (!this.IsStarted) { await this.Start().ConfigureAwait(false); } //TODO: Why do we do this? Multiple streams for the same file are valid. if (this.StreamFactory.HasActiveStream(playlistItem.FileName)) { Logger.Write(this, LogLevel.Warn, "The stream is already loaded: {0} => {1}", playlistItem.Id, playlistItem.FileName); } Logger.Write(this, LogLevel.Debug, "Loading stream: {0} => {1}", playlistItem.Id, playlistItem.FileName); var flags = BassFlags.Default; if (this.Float) { flags |= BassFlags.Float; } var stream = this.StreamFactory.CreateInteractiveStream(playlistItem, immidiate, flags); if (stream.IsEmpty) { return(null); } var outputStream = new BassOutputStream(this, this.PipelineManager, stream, playlistItem); outputStream.InitializeComponent(this.Core); this.OnLoaded(outputStream); return(outputStream); }
public override async Task <IOutputStream> Load(PlaylistItem playlistItem, bool immidiate) { if (!this.IsStarted) { await this.Start().ConfigureAwait(false); } Logger.Write(this, LogLevel.Debug, "Loading stream: {0} => {1}", playlistItem.Id, playlistItem.FileName); var stream = await this.StreamFactory.CreateStream(playlistItem, immidiate).ConfigureAwait(false); if (stream.IsEmpty) { return(null); } var outputStream = new BassOutputStream(this, this.PipelineManager, stream.Provider, playlistItem, stream.ChannelHandle); outputStream.InitializeComponent(this.Core); return(outputStream); }