public void Load(string url) { CurrentMediaKind = MediaKind.None; FreeHandles(); if (FormatHelpers.IsMidi(url) && File.Exists(_configuration.SoundFontPath)) { BassMidi.DefaultFont = _configuration.SoundFontPath; } const BassFlags sourceflags = BassFlags.Decode | BassFlags.Loop | BassFlags.Float | BassFlags.Prescan; const BassFlags mixerflags = BassFlags.MixerDownMix | BassFlags.MixerPositionEx | BassFlags.AutoFree; if (FormatHelpers.IsNetwork(url)) { _sourceHandle = Bass.CreateStream(url, 0, sourceflags, _callback, IntPtr.Zero); CurrentMediaKind = MediaKind.Network; } else if (FormatHelpers.IsCd(url)) { (int drive, int track)cdInfo = FormatHelpers.ProcessCdUrl(url); _sourceHandle = BassCd.CreateStream(cdInfo.drive, cdInfo.track, sourceflags); CurrentMediaKind = MediaKind.CDStream; } else if (FormatHelpers.IsTracker(url)) { _sourceHandle = Bass.MusicLoad(url, 0, 0, sourceflags); CurrentMediaKind = MediaKind.Tracker; MetaInfo = TrackMetaInfoFactory.CreateTrackerInfo(url, _sourceHandle); } else { _sourceHandle = Bass.CreateStream(url, 0, 0, sourceflags); CurrentMediaKind = MediaKind.File; MetaInfo = TrackMetaInfoFactory.CreateFileInfo(url); } if (_sourceHandle == 0) { ExceptionFactory.Create(Bass.LastError, "File Load failed"); } _sourceInfo = Bass.ChannelGetInfo(_sourceHandle); _mixerHandle = BassMix.CreateMixerStream(_sourceInfo.Frequency, _sourceInfo.Channels, mixerflags); if (_mixerHandle == 0) { ExceptionFactory.Create(Bass.LastError, "Mixer failed"); } if (!BassMix.MixerAddChannel(_mixerHandle, _sourceHandle, BassFlags.MixerDownMix)) { ExceptionFactory.Create(Bass.LastError, "Channel mixing failed"); } Bass.ChannelSetAttribute(_mixerHandle, ChannelAttribute.Volume, _lastvol); InitEq(ref _mixerHandle); Bass.ChannelPlay(_mixerHandle, false); IsPlaying = true; NotifyPropertyChanged(nameof(MetaInfo)); }