Beispiel #1
0
        public override bool Initialize()
        {
            try
            {
                Log.Info("Visualization Manager: Initializing Sonique visualization: {0}", VizPluginInfo.Name);

                if (VizPluginInfo == null)
                {
                    Log.Error("Visualization Manager: Sonique visualization engine initialization failed! Reason:{0}",
                              "Missing or invalid VisualizationInfo object.");

                    return(false);
                }

                firstRun = true;
                BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_SONIQUEVIS_CONFIG_SLOWFADE, 25);
                bool result = SetOutputContext(VisualizationWindow.OutputContextType);
                _Initialized = result && _visParam.VisHandle != 0;
            }

            catch (Exception ex)
            {
                Log.Error(
                    "Visualization Manager: Sonique visualization engine initialization failed with the following exception {0}",
                    ex);
                return(false);
            }

            return(Initialized);
        }
        public VisualizationBase(VisualizationInfo vizPluginInfo, VisualizationWindow vizCtrl)
            : this()
        {
            VizPluginInfo       = vizPluginInfo;
            VisualizationWindow = vizCtrl;

            // Init BAssVis
            IntPtr hInstance = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]);

            switch (VizPluginInfo.VisualizationType)
            {
            case VisualizationInfo.PluginType.Sonique:
                BassVis.BASSVIS_Init(BASSVISKind.BASSVISKIND_SONIQUE, GUIGraphicsContext.form.Handle);
                _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_SONIQUE);
                break;

            case VisualizationInfo.PluginType.Winamp:
                BassVis.BASSVIS_Init(BASSVISKind.BASSVISKIND_WINAMP, GUIGraphicsContext.form.Handle);
                _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WINAMP);
                break;

            case VisualizationInfo.PluginType.Bassbox:
                BassVis.BASSVIS_Init(BASSVISKind.BASSVISKIND_BASSBOX, GUIGraphicsContext.form.Handle);
                _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_BASSBOX);
                break;
            }
        }
Beispiel #3
0
        private void PlaybackStateChanged(object sender, BassAudioEngine.PlayState oldState,
                                          BassAudioEngine.PlayState newState)
        {
            Log.Debug("WinampViz: BassPlayer_PlaybackStateChanged from {0} to {1}", oldState.ToString(), newState.ToString());
            if (newState == BassAudioEngine.PlayState.Playing)
            {
                RenderStarted = false;
                trackTag      = TagReader.TagReader.ReadTag(Bass.CurrentFile);
                if (trackTag != null)
                {
                    _songTitle = String.Format("{0} - {1}", trackTag.Artist, trackTag.Title);
                }
                else
                {
                    _songTitle = "   ";
                }

                _mediaInfo.SongTitle = _songTitle;
                _mediaInfo.SongFile  = Bass.CurrentFile;

                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);
            }
            else if (newState == BassAudioEngine.PlayState.Paused)
            {
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Pause);
            }
            else if (newState == BassAudioEngine.PlayState.Ended)
            {
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Stop);
                RenderStarted = false;
            }
        }
Beispiel #4
0
        public override bool Config()
        {
            // We need to stop the Vis first, otherwise some plugins don't allow the config to be called
            if (_visParam.VisHandle != 0)
            {
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Stop);
                int counter = 0;

                bool bFree = BassVis.BASSVIS_Free(_visParam);
                while ((!bFree) && (counter <= 10))
                {
                    bFree = BassVis.BASSVIS_IsFree(_visParam);
                    System.Windows.Forms.Application.DoEvents();
                    counter++;
                }
                _visParam.VisHandle = 0;
            }

            int tmpVis = BassVis.BASSVIS_GetPluginHandle(BASSVISKind.BASSVISKIND_WINAMP, VizPluginInfo.FilePath);

            if (tmpVis != 0)
            {
                int numModules = BassVis.BASSVIS_GetModulePresetCount(_visParam, VizPluginInfo.FilePath);
                BassVis.BASSVIS_Config(_visParam, 0);
            }

            return(true);
        }
Beispiel #5
0
        public override bool Config()
        {
            // We need to stop the Vis first, otherwise some plugins don't allow the config to be called
            if (_visParam.VisHandle != 0)
            {
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Stop);

                BassVis.BASSVIS_Free(_visParam);
                bool bFree = BassVis.BASSVIS_IsFree(_visParam);
                if (bFree)
                {
                    _visParam.VisHandle = 0;
                }
                else
                {
                    Log.Warn("Visualization Manager: Failed to unload Winamp viz module - {0}", VizPluginInfo.Name);
                    _visParam.VisHandle = 0;
                }
            }

            int tmpVis = BassVis.BASSVIS_GetModuleHandle(BASSVISKind.BASSVISKIND_WINAMP, VizPluginInfo.FilePath);

            if (tmpVis != 0)
            {
                int numModules = BassVis.BASSVIS_GetModulePresetCount(_visParam, VizPluginInfo.FilePath);
                BassVis.BASSVIS_Config(_visParam, 0);
            }

            return(true);
        }
Beispiel #6
0
        public void TestGetVersion()
        {
            var version = BassVis.GetVersion();

            Assert.NotNull(version);
            Assert.Equal("2.4.4.1", version);
        }
Beispiel #7
0
        public override bool SetOutputContext(OutputContextType outputType)
        {
            if (VisualizationWindow == null)
            {
                return(false);
            }

            if (_Initialized && !firstRun)
            {
                return(true);
            }

            // If width or height are 0 the call to BASS_SONIQUEVIS_CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            if (VizPluginInfo == null || VizPluginInfo.FilePath.Length == 0 || !File.Exists(VizPluginInfo.FilePath))
            {
                return(false);
            }

            string vizPath    = VizPluginInfo.FilePath;
            string configFile = Path.Combine(Path.GetDirectoryName(vizPath), "vis.ini");

            if (_visParam.VisHandle != 0)
            {
                try
                {
                    BassVis.BASSVIS_Free(_visParam, ref _baseVisParam);
                }
                catch (AccessViolationException) {}

                _visParam.VisHandle = 0;
            }

            try
            {
                visExec = new BASSVIS_EXEC(vizPath);
                visExec.SON_ConfigFile  = configFile;
                visExec.SON_Flags       = BASSVISFlags.BASSVIS_DEFAULT;
                visExec.SON_PaintHandle = VisualizationWindow.CompatibleDC;
                visExec.Width           = VisualizationWindow.Width;
                visExec.Height          = VisualizationWindow.Height;
                visExec.Left            = VisualizationWindow.Left;
                visExec.Top             = VisualizationWindow.Top;
                BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);
            }
            catch (Exception) {}
            firstRun = false;
            return(_visParam.VisHandle != 0);
        }
Beispiel #8
0
        public override int RenderVisualization()
        {
            try
            {
                if (VisualizationWindow == null || !VisualizationWindow.Visible || _visParam.VisHandle == 0)
                {
                    return(0);
                }

                // Set Song information, so that the plugin can display it
                if (trackTag != null && Bass != null)
                {
                    _playlistPlayer = PlayListPlayer.SingletonPlayer;
                    PlayListItem curPlaylistItem = _playlistPlayer.GetCurrentItem();

                    _mediaInfo.Position    = (int)Bass.CurrentPosition;
                    _mediaInfo.Duration    = (int)Bass.Duration;
                    _mediaInfo.PlaylistLen = 1;
                    _mediaInfo.PlaylistPos = _playlistPlayer.CurrentPlaylistPos;
                }
                else
                {
                    _mediaInfo.Position    = 0;
                    _mediaInfo.Duration    = 0;
                    _mediaInfo.PlaylistLen = 0;
                    _mediaInfo.PlaylistPos = 0;
                }
                if (IsPreviewVisualization)
                {
                    _mediaInfo.SongTitle = "Mediaportal Preview";
                }
                BassVis.BASSVIS_SetInfo(_visParam, _mediaInfo);

                if (RenderStarted)
                {
                    return(1);
                }

                int stream = 0;

                if (Bass != null)
                {
                    stream = (int)Bass.GetCurrentVizStream();
                }

                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);
                RenderStarted = BassVis.BASSVIS_RenderChannel(_visParam, stream);
            }

            catch (Exception) {}

            return(1);
        }
Beispiel #9
0
        public override bool WindowChanged(VisualizationWindow vizWindow)
        {
            base.WindowChanged(vizWindow);

            if (vizWindow == null)
            {
                return(false);
            }

            BassVis.BASSVIS_Resize(_visParam, 0, 0, VisualizationWindow.Width, VisualizationWindow.Height);

            return(true);
        }
Beispiel #10
0
 public virtual bool Close()
 {
     try
     {
         if (_visParam != null)
         {
             BassVis.BASSVIS_Quit(_visParam);
             _visParam = null;
         }
         return(true);
     }
     catch (Exception) {}
     return(false);
 }
Beispiel #11
0
        private void btWinampConfig_Click(object sender, EventArgs e)
        {
            if (_visParam != null)
            {
                // Free first the previous winamp plugin
                BassVis.BASSVIS_Quit(_visParam);
            }
            _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WINAMP);
            BassVis.BASSVIS_Init(BASSVISKind.BASSVISKIND_WINAMP, MediaPortal.GUI.Library.GUIGraphicsContext.form.Handle);
            int tmpVis = BassVis.BASSVIS_GetModuleHandle(BASSVISKind.BASSVISKIND_WINAMP, VizPluginInfo.FilePath);

            if (tmpVis != 0)
            {
                int numModules = BassVis.BASSVIS_GetModulePresetCount(_visParam, VizPluginInfo.FilePath);
                BassVis.BASSVIS_Config(_visParam, 0);
            }
        }
Beispiel #12
0
        public void BASSVIS_StateCallback(BASSVIS_PLAYSTATE NewState)
        {
            //CallBack PlayState for Winamp only
            switch (NewState)
            {
            case BASSVIS_PLAYSTATE.SetPlaylistTitle:

                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.SetPlaylistTitle, -1, _songTitle);

                break;

            case BASSVIS_PLAYSTATE.GetPlaylistTitlePos:

                _playlistTitlePos = BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.GetPlaylistTitlePos);
                break;
            }
        }
Beispiel #13
0
        public override bool WindowSizeChanged(Size newSize)
        {
            // If width or height are 0 the call to CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            // Do a move of the Bassbox Viz
            if (_visParam.VisHandle != 0)
            {
                // Hide the Viswindow, so that we don't see it, while moving
                Win32API.ShowWindow(VisualizationWindow.Handle, Win32API.ShowWindowFlags.Hide);
                BassVis.BASSVIS_Resize(_visParam, 0, 0, newSize.Width, newSize.Height);
            }
            return(true);
        }
 public virtual bool Close()
 {
     try
     {
         if (_visParam != null)
         {
             Log.Info("VisualizationBase: Destroy BassVis with {0} viz plugins...", VizPluginInfo.Name);
             BassVis.BASSVIS_Quit(_visParam);
             _visParam = null;
         }
         return(true);
     }
     catch (Exception ex)
     {
         Log.Error("VisualizationBase: Failed to destroy BassVis - {0}", ex.ToString());
     }
     return(false);
 }
Beispiel #15
0
        public override bool Config()
        {
            // We need to stop the Vis first, otherwise some plugins don't allow the config to be called
            if (_visParam.VisHandle != 0)
            {
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Stop);
                BassVis.BASSVIS_Free(_visParam, ref _baseVisParam);
                _visParam.VisHandle = 0;
            }

            int tmpVis = BassVis.BASSVIS_GetPluginHandle(BASSVISKind.BASSVISKIND_WINAMP, VizPluginInfo.FilePath);

            if (tmpVis != 0)
            {
                int numModules = BassVis.BASSVIS_GetModulePresetCount(_visParam, VizPluginInfo.FilePath);
                BassVis.BASSVIS_Config(_visParam, 0);
            }

            return(true);
        }
Beispiel #16
0
        public override int RenderVisualization()
        {
            try
            {
                if (VisualizationWindow == null || !VisualizationWindow.Visible)
                {
                    return(0);
                }

                IntPtr hdc = VisualizationWindow.CompatibleDC;

                int stream = 0;
                if (Bass != null)
                {
                    stream = (int)Bass.GetCurrentVizStream();
                }

                BassVis.BASSVIS_SONIQUEVIS_RenderToDC(BASSVISKind.BASSVISKIND_SONIQUE, (IntPtr)_visParam.VisHandle, stream, hdc);
            }

            catch (Exception) {}

            return(1);
        }
        /// <summary>
        /// Search the Visaulation Path for supported Vis
        /// </summary>
        /// <returns></returns>
        public List <VisualizationInfo> GetVisualizationPluginsInfo()
        {
            _VisualizationPluginsInfo.Clear();
            try
            {
                _VisualizationPluginsInfo.Add(new VisualizationInfo("None", true));

                // Close any Visualisation, which we may have running, because of VizManager Init
                CloseCurrentVisualization();

                string skinFolderPath = Path.Combine(Application.StartupPath, @"musicplayer\plugins\visualizations");

                // Search for Sonique and Winamp Plugins
                string[] soniqueVisPaths = BassVis.BASSVIS_FindPlugins(BASSVISKind.BASSVISKIND_SONIQUE, skinFolderPath, true);

                // Note: Recursive Searches for Winamp Plugins are not supported
                // Winamp plugins expect itself to be stored in a folder named Plugins in the root of the executable. This is where we will search
                // So this is the folder where all the MP Plugins are stored as well
                skinFolderPath = Path.Combine(Application.StartupPath, @"plugins");
                string[] winampVisPaths = BassVis.BASSVIS_FindPlugins(BASSVISKind.BASSVISKIND_WINAMP, skinFolderPath, true);

                List <VisualizationInfo> wmpPluginsInfo = GetWMPPluginInfo();

                if (IsGForceInstalled())
                {
                    VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.GForce, string.Empty, "G-Force",
                                                                      string.Empty, null);
                    _VisualizationPluginsInfo.Add(vizInfo);
                }

                if (IsWhiteCapInstalled())
                {
                    VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.WhiteCap, string.Empty,
                                                                      "WhiteCap", string.Empty, null);
                    _VisualizationPluginsInfo.Add(vizInfo);
                }

                if (IsSoftSkiesInstalled())
                {
                    VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.SoftSkies, string.Empty,
                                                                      "SoftSkies", string.Empty, null);
                    _VisualizationPluginsInfo.Add(vizInfo);
                }

                if (wmpPluginsInfo != null)
                {
                    for (int i = 0; i < wmpPluginsInfo.Count; i++)
                    {
                        _VisualizationPluginsInfo.Add(wmpPluginsInfo[i]);
                    }
                }

                if (soniqueVisPaths != null && soniqueVisPaths[0] != "")
                {
                    BassVis.BASSVIS_Init(BASSVISKind.BASSVISKIND_SONIQUE, VizRenderWindow.Handle);
                    _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_SONIQUE);
                    for (int i = 0; i < soniqueVisPaths.Length; i++)
                    {
                        string       filePath = soniqueVisPaths[i];
                        string       name     = Path.GetFileNameWithoutExtension(filePath);
                        BASSVIS_EXEC visExec  = new BASSVIS_EXEC(filePath);
                        visExec.SON_Flags      = BASSVISFlags.BASSVIS_NOINIT; // don't execute the plugin yet
                        visExec.SON_ConfigFile = Path.Combine(Path.GetDirectoryName(filePath), "vis.ini");

                        if (_visParam.VisHandle != 0)
                        {
                            int counter = 0;

                            bool bFree = BassVis.BASSVIS_Free(_visParam);
                            while ((!bFree) && (counter <= 10))
                            {
                                bFree = BassVis.BASSVIS_IsFree(_visParam);
                                System.Windows.Forms.Application.DoEvents();
                                counter++;
                            }
                            _visParam.VisHandle = 0;
                        }

                        BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);

                        string pluginname = BassVis.BASSVIS_GetPluginName(_visParam);
                        if (pluginname != null)
                        {
                            name = pluginname;
                        }

                        VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.Sonique, filePath, name,
                                                                          string.Empty, null);
                        _VisualizationPluginsInfo.Add(vizInfo);
                    }
                    BassVis.BASSVIS_Quit(_visParam);
                }

                if (winampVisPaths != null && winampVisPaths[0] != "")
                {
                    _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WINAMP);
                    for (int i = 0; i < winampVisPaths.Length; i++)
                    {
                        List <string> presets  = new List <string>();
                        string        filePath = winampVisPaths[i];
                        string        name     = Path.GetFileNameWithoutExtension(filePath);
                        _visParam.VisHandle = BassVis.BASSVIS_GetPluginHandle(BASSVISKind.BASSVISKIND_WINAMP, filePath);

                        string pluginname = BassVis.BASSVIS_GetPluginName(_visParam);
                        if (pluginname != null)
                        {
                            name = pluginname;
                        }

                        // Get modules
                        int numModules = BassVis.BASSVIS_GetModulePresetCount(_visParam, filePath);
                        if (numModules > 0)
                        {
                            if (numModules > 0)
                            {
                                for (int j = 0; j < numModules; j++)
                                {
                                    presets.Add(BassVis.BASSVIS_GetModulePresetName(_visParam, j, filePath));
                                }
                            }
                            VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.Winamp, filePath, name,
                                                                              string.Empty, presets);
                            if (!vizInfo.IsBlackListed)
                            {
                                _VisualizationPluginsInfo.Add(vizInfo);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("VisualisationManager: Failed to get viz plugins - {0}", ex.ToString());
            }
            return(_VisualizationPluginsInfo);
        }
Beispiel #18
0
        public override bool SetOutputContext(OutputContextType outputType)
        {
            if (VisualizationWindow == null)
            {
                return(false);
            }

            if (_Initialized && !firstRun)
            {
                return(true);
            }

            // If width or height are 0 the call to CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            if (VizPluginInfo == null || VizPluginInfo.FilePath.Length == 0 || !File.Exists(VizPluginInfo.FilePath))
            {
                return(false);
            }

            try
            {
                using (Profile.Settings xmlreader = new Profile.MPSettings())
                {
                    VizPluginInfo.FFTSensitivity = xmlreader.GetValueAsInt("musicvisualization", "fftSensitivity", 36);
                    VizPluginInfo.PresetIndex    = xmlreader.GetValueAsInt("musicvisualization", "preset", 0);
                }

                //Remove existing CallBacks
                BassVis.BASSVIS_WINAMPRemoveCallback();

                // Call Play befor use BASSVIS_ExecutePlugin (moved here)
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);

                // Set CallBack for PlayState
                _visCallback = BASSVIS_StateCallback;
                BassVis.BASSVIS_WINAMPSetStateCallback(_visCallback);

                // Hide the Viswindow, so that we don't see it, befor any Render
                Win32API.ShowWindow(VisualizationWindow.Handle, Win32API.ShowWindowFlags.Hide);

                // Create the Visualisation
                BASSVIS_EXEC visExec = new BASSVIS_EXEC(VizPluginInfo.FilePath);
                visExec.AMP_ModuleIndex = VizPluginInfo.PresetIndex;
                visExec.AMP_UseOwnW1    = 1;
                visExec.AMP_UseOwnW2    = 1;
                // The flag below is needed for the Vis to have it's own message queue
                // Thus it is avoided that it steals focus from MP.
                visExec.AMP_UseFakeWindow = true;

                BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);

                if (_visParam.VisHandle != 0)
                {
                    // Set the visualization window that was taken over from BASSVIS_ExecutePlugin
                    BassVis.BASSVIS_SetVisPort(_visParam,
                                               _visParam.VisGenWinHandle,
                                               VisualizationWindow.Handle,
                                               0,
                                               0,
                                               VisualizationWindow.Width,
                                               VisualizationWindow.Height);

                    BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_CONFIG_FFTAMP, VizPluginInfo.FFTSensitivity);

                    // SetForegroundWindow
                    GUIGraphicsContext.form.Activate();
                }

                firstRun = false;
            }
            catch (Exception ex)
            {
                Log.Error(
                    "Visualization Manager: Winamp visualization engine initialization failed with the following exception {0}",
                    ex);
            }
            _Initialized = _visParam.VisHandle != 0;
            return(_visParam.VisHandle != 0);
        }
Beispiel #19
0
        private bool InternalCreateVisualization(VisualizationInfo vizPluginInfo, bool isPreview)
        {
            // Close VisualType is not a BassVis Kind
            if (vizPluginInfo.VisualizationType != VisualizationInfo.PluginType.Sonique &&
                vizPluginInfo.VisualizationType != VisualizationInfo.PluginType.Winamp &&
                vizPluginInfo.VisualizationType != VisualizationInfo.PluginType.Bassbox)
            {
                CloseCurrentVisualization();
            }
            else
            {
                if (OldVizType != vizPluginInfo.VisualizationType)
                {
                    CloseCurrentVisualization();
                    OldVizType = vizPluginInfo.VisualizationType;
                }
                else
                {
                    switch (OldVizType)
                    {
                    case VisualizationInfo.PluginType.None:
                    case VisualizationInfo.PluginType.Unknown:
                        return(false);

                    case VisualizationInfo.PluginType.Sonique:
                    {
                        if (Viz.VizParam != null)
                        {
                            Log.Info("Visualization Manager: Free Sonique visualization...");
                            BassVis.BASSVIS_Free(Viz.VizParam);
                            bool bFree = BassVis.BASSVIS_IsFree(Viz.VizParam);
                            if (bFree)
                            {
                                Viz.VizParam.VisHandle = 0;
                                Log.Info("Visualization Manager: Sonique visualization " + OldViz + " free succes");
                            }
                        }
                        break;
                    }

                    case VisualizationInfo.PluginType.Winamp:
                    {
                        if (Viz.VizParam != null)
                        {
                            Log.Info("Visualization Manager: Free Winamp visualization...");
                            BassVis.BASSVIS_Free(Viz.VizParam);
                            bool bFree = BassVis.BASSVIS_IsFree(Viz.VizParam);
                            if (bFree)
                            {
                                Viz.VizParam.VisHandle = 0;
                                Log.Info("Visualization Manager: Winamp visualization " + OldViz + " free succes");
                            }
                        }
                        break;
                    }

                    case VisualizationInfo.PluginType.Bassbox:
                    {
                        if (Viz.VizParam != null)
                        {
                            Log.Info("Visualization Manager: Free Bassbox visualization...");
                            BassVis.BASSVIS_Free(Viz.VizParam);
                            bool bFree = BassVis.BASSVIS_IsFree(Viz.VizParam);
                            if (bFree)
                            {
                                Viz.VizParam.VisHandle = 0;
                                Log.Info("Visualization Manager: Bassbox visualization " + OldViz + " free succes");
                            }
                        }
                        break;
                    }
                    }
                }
            }

            CurrentVizType = vizPluginInfo.VisualizationType;
            OldViz         = vizPluginInfo.Name;
            CurrentViz     = OldViz;

            switch (CurrentVizType)
            {
            case VisualizationInfo.PluginType.None:
            case VisualizationInfo.PluginType.Unknown:
                return(false);

            case VisualizationInfo.PluginType.GForce:
            {
                Log.Info("Visualization Manager: Creating new G-Force visualization...");
                Viz = new SoundSpectrumViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            case VisualizationInfo.PluginType.WhiteCap:
            {
                Log.Info("Visualization Manager: Creating new WhiteCap visualization...");
                Viz = new SoundSpectrumViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            case VisualizationInfo.PluginType.SoftSkies:
            {
                Log.Info("Visualization Manager: Creating new SoftSkies visualization...");
                Viz = new SoundSpectrumViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            case VisualizationInfo.PluginType.Sonique:
            {
                Log.Info("Visualization Manager: Creating new Sonique visualization...");
                VizRenderWindow.Refresh();
                Viz = new SoniqueViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            case VisualizationInfo.PluginType.Winamp:
            {
                Log.Info("Visualization Manager: Creating new Winamp visualization...");
                VizRenderWindow.Refresh();
                Viz = new WinampViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            case VisualizationInfo.PluginType.Bassbox:
            {
                Log.Info("Visualization Manager: Creating new Bassbox visualization...");
                VizRenderWindow.Refresh();
                Viz = new BassboxViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            case VisualizationInfo.PluginType.WMP:
            {
                Log.Info("Visualization Manager: Creating new Windows Media Player visualization...");
                Viz = new WMPViz(vizPluginInfo, VizRenderWindow);
                break;
            }

            default:
                return(false);
            }

            VizRenderWindow.Visualization = Viz;

            if (Viz == null)
            {
                return(false);
            }

            ((VisualizationBase)Viz).VisualizationCreated +=
                new VisualizationBase.VisualizationCreatedDelegate(OnVisualizationCreated);

            bool result = false;

            if (isPreview)
            {
                VizRenderWindow.IsPreviewVisualization = true;
                result = Viz.InitializePreview();
            }

            else
            {
                VizRenderWindow.IsPreviewVisualization = false;
                result = Viz.Initialize();
            }

            return(result);
        }
Beispiel #20
0
        public override bool SetOutputContext(OutputContextType outputType)
        {
            if (VisualizationWindow == null)
            {
                return(false);
            }

            if (_Initialized && !firstRun)
            {
                return(true);
            }

            // If width or height are 0 the call to CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            if (VizPluginInfo == null || VizPluginInfo.FilePath.Length == 0 || !File.Exists(VizPluginInfo.FilePath))
            {
                return(false);
            }

            if (_visParam.VisHandle != 0)
            {
                RenderStarted = false;

                int counter = 0;

                bool bFree = BassVis.BASSVIS_Free(_visParam);
                while ((!bFree) && (counter <= 10))
                {
                    bFree = BassVis.BASSVIS_IsFree(_visParam);
                    System.Windows.Forms.Application.DoEvents();
                    counter++;
                }
                _visParam.VisHandle = 0;
            }


            try
            {
                //Remove existing CallBacks
                BassVis.BASSVIS_WINAMPRemoveCallback();
                // Create the Visualisation
                BASSVIS_EXEC visExec = new BASSVIS_EXEC(VizPluginInfo.FilePath);
                visExec.AMP_ModuleIndex = VizPluginInfo.PresetIndex;
                visExec.AMP_UseOwnW1    = 1;
                visExec.AMP_UseOwnW2    = 1;
                BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);
                if (_visParam.VisHandle != 0)
                {
                    BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);

                    // Set the visualization window that was taken over from BASSVIS_ExecutePlugin
                    BassVis.BASSVIS_SetVisPort(_visParam,
                                               _visParam.VisGenWinHandle,
                                               VisualizationWindow.Handle,
                                               0,
                                               0,
                                               VisualizationWindow.Width,
                                               VisualizationWindow.Height);

                    // Set CallBack for PlayState
                    _visCallback = BASSVIS_StateCallback;
                    BassVis.BASSVIS_WINAMPSetStateCallback(_visCallback);
                    BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_CONFIG_FFTAMP, 128);
                }

                // The Winamp Plugin has stolen focus on the MP window. Bring it back to froeground
                Win32API.SetForegroundWindow(GUIGraphicsContext.form.Handle);

                firstRun = false;
            }
            catch (Exception ex)
            {
                Log.Error(
                    "Visualization Manager: Winamp visualization engine initialization failed with the following exception {0}",
                    ex);
            }
            _Initialized = _visParam.VisHandle != 0;
            return(_visParam.VisHandle != 0);
        }
Beispiel #21
0
        public override int RenderVisualization()
        {
            try
            {
                if (VisualizationWindow == null || !VisualizationWindow.Visible || _visParam.VisHandle == 0)
                {
                    return(0);
                }

                // Any is wrong with PlaybackStateChanged, if the songfile automatically changed
                // so i have create a new variable which fix this problem
                if (Bass != null)
                {
                    if ((Bass.CurrentFile != _OldCurrentFile) && !Bass.IsRadio)
                    {
                        trackTag = TagReader.TagReader.ReadTag(Bass.CurrentFile);
                        if (trackTag != null)
                        {
                            _songTitle      = String.Format("{0} - {1}", trackTag.Artist, trackTag.Title);
                            _OldCurrentFile = Bass.CurrentFile;
                        }
                        else
                        {
                            _songTitle = "   ";
                        }
                    }

                    // Set Song information, so that the plugin can display it
                    if (trackTag != null && !Bass.IsRadio)
                    {
                        _mediaInfo.SongTitle = _songTitle;
                        _mediaInfo.SongFile  = Bass.CurrentFile;
                        _mediaInfo.Position  = (int)(1000 * Bass.CurrentPosition);
                        _mediaInfo.Duration  = (int)Bass.Duration;
                    }
                    else
                    {
                        if (Bass.IsRadio)
                        {
                            // Change TrackTag to StreamTag for Radio
                            trackTag = Bass.GetStreamTags();
                            if (trackTag != null)
                            {
                                // Artist and Title show better i think
                                _songTitle           = trackTag.Artist + ": " + trackTag.Title;
                                _mediaInfo.SongTitle = _songTitle;
                            }
                            else
                            {
                                _songTitle = "   ";
                            }
                            _mediaInfo.Position = (int)(1000 * Bass.CurrentPosition);
                        }
                        else
                        {
                            _mediaInfo.Position = 0;
                            _mediaInfo.Duration = 0;
                        }
                    }
                }

                if (IsPreviewVisualization)
                {
                    _mediaInfo.SongTitle = "Mediaportal Preview";
                }
                BassVis.BASSVIS_SetInfo(_visParam, _mediaInfo);

                if (RenderStarted)
                {
                    return(1);
                }

                int stream = 0;

                if (Bass != null)
                {
                    stream = (int)Bass.GetCurrentVizStream();
                }

                // ckeck is playing
                int nReturn = BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.IsPlaying);
                if (nReturn == Convert.ToInt32(BASSVIS_PLAYSTATE.Play) && (_visParam.VisHandle != 0))
                {
                    // Do not Render without playing
                    if (MusicPlayer.BASS.Config.MusicPlayer == AudioPlayer.WasApi)
                    {
                        RenderStarted = BassVis.BASSVIS_RenderChannel(_visParam, stream, true);
                    }
                    else
                    {
                        RenderStarted = BassVis.BASSVIS_RenderChannel(_visParam, stream, false);
                    }
                }
            }

            catch (Exception) {}

            return(1);
        }
Beispiel #22
0
        public override bool SetOutputContext(OutputContextType outputType)
        {
            if (VisualizationWindow == null)
            {
                return(false);
            }

            if (_Initialized && !firstRun)
            {
                return(true);
            }

            // If width or height are 0 the call to CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            if (VizPluginInfo == null || VizPluginInfo.FilePath.Length == 0 || !File.Exists(VizPluginInfo.FilePath))
            {
                return(false);
            }

            string vizPath    = VizPluginInfo.FilePath;
            string configFile = Path.Combine(System.Windows.Forms.Application.StartupPath, @"musicplayer\plugins\visualizations\Sonique\vis.ini");

            try
            {
                // Call Play befor use BASSVIS_ExecutePlugin (moved here)
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);

                using (Profile.Settings xmlreader = new Profile.MPSettings())
                {
                    VizPluginInfo.UseOpenGL    = xmlreader.GetValueAsBool("musicvisualization", "useOpenGL", true);
                    VizPluginInfo.UseCover     = xmlreader.GetValueAsBool("musicvisualization", "useCover", true);
                    VizPluginInfo.RenderTiming = xmlreader.GetValueAsInt("musicvisualization", "renderTiming", 25);
                    VizPluginInfo.ViewPortSize = xmlreader.GetValueAsInt("musicvisualization", "viewPort", 0);
                }

                // Create the Visualisation
                visExec = new BASSVIS_EXEC(vizPath);
                visExec.SON_ConfigFile     = configFile;
                visExec.SON_Flags          = BASSVISFlags.BASSVIS_DEFAULT;
                visExec.SON_ParentHandle   = VisualizationWindow.Handle;
                visExec.Width              = VisualizationWindow.Width;
                visExec.Height             = VisualizationWindow.Height;
                visExec.SON_UseOpenGL      = VizPluginInfo.UseOpenGL;
                visExec.SON_ViewportWidth  = VizPluginInfo.ViewPortSizeX;
                visExec.SON_ViewportHeight = VizPluginInfo.ViewPortSizeY;
                visExec.Left        = VisualizationWindow.Left;
                visExec.Top         = VisualizationWindow.Top;
                visExec.SON_ShowFPS = true;
                // can not check IsRadio on first start
                // so ProgressBar and Cover Visible state will hide after change to the next Plugin to
                if (Bass.IsRadio)
                {
                    // no duration deactivate ProgressBar
                    visExec.SON_ShowPrgBar = false;
                    // Cover-Support used only on first start if VizPluginInfo.UseCover = true
                    // after or change the plugin in FullScreen, Cover-Support will disable for RadioStreams
                    visExec.SON_UseCover = false;
                }
                else
                {
                    visExec.SON_ShowPrgBar = true;
                    visExec.SON_UseCover   = VizPluginInfo.UseCover;
                }

                BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);

                if (_visParam.VisHandle != 0)
                {
                    // Config Settings
                    BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_SONIQUEVIS_CONFIG_RENDERTIMING, VizPluginInfo.RenderTiming);
                    BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_SONIQUEVIS_CONFIG_USESLOWFADE, 1);
                    BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_SONIQUEVIS_CONFIG_SLOWFADE, 5);
                    BassVis.BASSVIS_SetOption(_visParam, BASSVIS_CONFIGFLAGS.BASSVIS_CONFIG_FFTAMP, 5);

                    Win32API.ShowWindow(VisualizationWindow.Handle, Win32API.ShowWindowFlags.Hide);

                    // SetForegroundWindow
                    GUIGraphicsContext.form.Activate();
                }
                firstRun = false;
            }
            catch (Exception ex)
            {
                Log.Error(
                    "Visualization Manager: Sonique visualization engine initialization failed with the following exception {0}",
                    ex);
            }
            _Initialized = _visParam.VisHandle != 0;
            return(_visParam.VisHandle != 0);
        }
Beispiel #23
0
        public override bool SetOutputContext(OutputContextType outputType)
        {
            if (VisualizationWindow == null)
            {
                return(false);
            }

            if (_Initialized && !firstRun)
            {
                return(true);
            }

            // If width or height are 0 the call to CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            if (VizPluginInfo == null || VizPluginInfo.FilePath.Length == 0 || !File.Exists(VizPluginInfo.FilePath))
            {
                return(false);
            }

            if (_visParam.VisHandle != 0)
            {
                BassVis.BASSVIS_Free(_visParam, ref _baseVisParam);
                _visParam.VisHandle = 0;
                RenderStarted       = false;
            }

            // Set Dummy Information for the plugin, before creating it
            _mediaInfo.SongTitle   = "";
            _mediaInfo.SongFile    = "";
            _mediaInfo.Position    = 0;
            _mediaInfo.Duration    = 0;
            _mediaInfo.PlaylistPos = 0;
            _mediaInfo.PlaylistLen = 0;
            BassVis.BASSVIS_SetInfo(_visParam, _mediaInfo);

            try
            {
                // Create the Visualisation
                BASSVIS_EXEC visExec = new BASSVIS_EXEC(VizPluginInfo.FilePath);
                visExec.AMP_ModuleIndex = VizPluginInfo.PresetIndex;
                visExec.AMP_UseOwnW1    = 1;
                visExec.AMP_UseOwnW2    = 1;
                BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);
                if (_visParam.VisGenWinHandle != IntPtr.Zero)
                {
                    hwndChild = Win32API.GetWindow(VisualizationWindow.Handle, Win32API.ShowWindowFlags.Show);
                    if (hwndChild != IntPtr.Zero)
                    {
                        Win32API.MoveWindow(hwndChild, 0, 0, VisualizationWindow.Width, VisualizationWindow.Height, true);
                    }

                    BassVis.BASSVIS_SetVisPort(_visParam,
                                               _visParam.VisGenWinHandle,
                                               VisualizationWindow.Handle,
                                               0,
                                               0,
                                               VisualizationWindow.Width,
                                               VisualizationWindow.Height);

                    BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);
                }
                else
                {
                    BassVis.BASSVIS_SetVisPort(_visParam,
                                               _visParam.VisGenWinHandle,
                                               IntPtr.Zero,
                                               0,
                                               0,
                                               0,
                                               0);
                }

                // The Winamp Plugin has stolen focus on the MP window. Bring it back to froeground
                Win32API.SetForegroundWindow(GUIGraphicsContext.form.Handle);

                firstRun = false;
            }
            catch (Exception ex)
            {
                Log.Error(
                    "Visualization Manager: Winamp visualization engine initialization failed with the following exception {0}",
                    ex);
            }
            _Initialized = _visParam.VisHandle != 0;
            return(_visParam.VisHandle != 0);
        }
Beispiel #24
0
        public override bool SetOutputContext(OutputContextType outputType)
        {
            if (VisualizationWindow == null)
            {
                return(false);
            }

            if (_Initialized && !firstRun)
            {
                return(true);
            }

            // If width or height are 0 the call to CreateVis will fail.
            // If width or height are 1 the window is in transition so we can ignore it.
            if (VisualizationWindow.Width <= 1 || VisualizationWindow.Height <= 1)
            {
                return(false);
            }

            if (VizPluginInfo == null || VizPluginInfo.FilePath.Length == 0 || !File.Exists(VizPluginInfo.FilePath))
            {
                return(false);
            }

            try
            {
                BassVis.BASSVIS_SetPlayState(_visParam, BASSVIS_PLAYSTATE.Play);
                string vizPath = VizPluginInfo.FilePath;

                visExec                 = new BASSVIS_EXEC(vizPath);
                visExec.PluginFile      = vizPath;
                visExec.BB_Flags        = BASSVISFlags.BASSVIS_DEFAULT;
                visExec.BB_ParentHandle = VisualizationWindow.Handle;
                visExec.BB_ShowFPS      = true;
                // can not check IsRadio on first start
                // so ProgressBar Visible State will hide after change to the next Plugin to
                if (Bass.IsRadio)
                {
                    // no duration deactivate ProgressBar
                    visExec.BB_ShowPrgBar = false;
                }
                else
                {
                    visExec.BB_ShowPrgBar = true;
                }
                visExec.Left   = 0;
                visExec.Top    = 0;
                visExec.Width  = VisualizationWindow.Width;
                visExec.Height = VisualizationWindow.Height;

                BassVis.BASSVIS_ExecutePlugin(visExec, _visParam);

                if (_visParam.VisHandle != 0)
                {
                    // SetForegroundWindow
                    GUIGraphicsContext.form.Activate();
                }
                firstRun = false;
            }
            catch (Exception ex)
            {
                Log.Error(
                    "Visualization Manager: Bassbox visualization engine initialization failed with the following exception {0}",
                    ex);
            }
            _Initialized = _visParam.VisHandle != 0;
            return(_visParam.VisHandle != 0);
        }
Beispiel #25
0
 public override bool WindowSizeChanged(Size newSize)
 {
     BassVis.BASSVIS_Resize(_visParam, 0, 0, VisualizationWindow.Width, VisualizationWindow.Height);
     return(true);
 }