Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
 public virtual bool Close()
 {
     try
     {
         if (_visParam != null)
         {
             BassVis.BASSVIS_Quit(_visParam);
             _visParam = null;
         }
         return(true);
     }
     catch (Exception) {}
     return(false);
 }
Exemplo n.º 3
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);
            }
        }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
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 Winamp Viz
            if (_visParam.VisHandle != 0)
            {
                // Hide the Viswindow, so that we don't see it, while moving
                Win32API.ShowWindow(hwndChild, Win32API.ShowWindowFlags.Hide);
                _tmpVisParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WINAMP);
                _tmpVisParam.VisGenWinHandle = VisualizationWindow.Handle;
                BassVis.BASSVIS_Resize(_tmpVisParam, 0, 0, newSize.Width, newSize.Height);
            }
            return(true);
        }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
    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;
      }
    }
Exemplo n.º 8
0
    public VisualizationBase(VisualizationInfo vizPluginInfo, VisualizationWindow vizCtrl)
      : this()
    {
      VizPluginInfo = vizPluginInfo;
      VisualizationWindow = vizCtrl;

      // Init of BassVis should only used if the BASSVISKind changed remove also here
      switch (VizPluginInfo.VisualizationType)
      {
        case VisualizationInfo.PluginType.Sonique:
          _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_SONIQUE);
          break;

        case VisualizationInfo.PluginType.Winamp:
          _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WINAMP);
          break;

        case VisualizationInfo.PluginType.Bassbox:
          _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_BASSBOX);
          break;

        case VisualizationInfo.PluginType.WMP:
          _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WMP);
          break;
      } 
    }
        /// <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);
        }
Exemplo n.º 10
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_GetPluginHandle(BASSVISKind.BASSVISKIND_WINAMP, VizPluginInfo.FilePath);
   if (tmpVis != 0)
   {
     int numModules = BassVis.BASSVIS_GetModulePresetCount(_visParam, VizPluginInfo.FilePath);
     BassVis.BASSVIS_Config(_visParam, 0);
   }
 }
Exemplo n.º 11
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 Winamp Viz
      if (_visParam.VisHandle != 0)
      {
        // Hide the Viswindow, so that we don't see it, while moving
        Win32API.ShowWindow(VisualizationWindow.Handle, Win32API.ShowWindowFlags.Hide);        
        _tmpVisParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WINAMP);
        _tmpVisParam.VisGenWinHandle = VisualizationWindow.Handle;
        BassVis.BASSVIS_Resize(_tmpVisParam, 0, 0, newSize.Width, newSize.Height);
      }
      return true;
    }
Exemplo n.º 12
0
    /// <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
        if (Viz != null)
          CloseCurrentVisualization();

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

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

        // Search for Bassbox Plugins
        skinFolderPath = Path.Combine(Application.StartupPath, @"BBPlugin");
        string[] bassboxVisPaths = BassVis.BASSVIS_FindPlugins(BASSVISKind.BASSVISKIND_BASSBOX, 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);

        string[] wmpFilelist = BassVis.BASSVIS_FindPlugins(BASSVISKind.BASSVISKIND_WMP, string.Empty, false);

        if (wmpFilelist != null)
        {
          _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_WMP);
          foreach (string name in wmpFilelist)
          {
            if (!string.IsNullOrEmpty(name))
            {
              List<string> presets = new List<string>();
              // Get presets count
              int NumPresets = BassVis.BASSVIS_GetModulePresetCount(_visParam, name);
              string pluginname = BassVis.BASSVIS_GetPluginName(_visParam);

              if (NumPresets > 0)
              {
                for (int i = 0; i <= (NumPresets - 1); i++)
                {
                  presets.Add(BassVis.BASSVIS_GetModulePresetName(_visParam, i, name));
                }
              }

              VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.WMP, string.Empty, name,
                                                                presets);
              _VisualizationPluginsInfo.Add(vizInfo);
            }
          }
        }

        if (soniqueVisPaths != null && soniqueVisPaths[0] != "")
        {
          _visParam = new BASSVIS_PARAM(BASSVISKind.BASSVISKIND_SONIQUE);
          for (int i = 0; i < soniqueVisPaths.Length; i++)
          {
            string filePath = soniqueVisPaths[i];
            string name = Path.GetFileNameWithoutExtension(filePath);
            _visParam.VisHandle = BassVis.BASSVIS_GetModuleHandle(BASSVISKind.BASSVISKIND_SONIQUE, filePath);

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

            VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.Sonique, filePath, name,
                                                              null);
            _VisualizationPluginsInfo.Add(vizInfo);

            if (_visParam.VisHandle != 0)
            {
              BassVis.BASSVIS_Free(_visParam);
              bool bFree = BassVis.BASSVIS_IsFree(_visParam);
              if (bFree)
              {
                _visParam.VisHandle = 0;
              }
              else
              {
                Log.Warn("VisualisationManager: Failed to unload Sonique viz module - {0}", name);
                _visParam.VisHandle = 0;
              }
            }
          }
        }

        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_GetModuleHandle(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)
            {
              for (int j = 0; j < numModules; j++)
              {
                presets.Add(BassVis.BASSVIS_GetModulePresetName(_visParam, j, filePath));
              }
            }
            VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.Winamp, filePath, name,
                                                                presets);
            _VisualizationPluginsInfo.Add(vizInfo);
          }
        }

        if (bassboxVisPaths != null && bassboxVisPaths[0] != "")
        {
          // use only Filename BassBox can have Presetnames double
          for (int i = 0; i < bassboxVisPaths.Length; i++)
          {
            string filePath = bassboxVisPaths[i];
            string name = Path.GetFileNameWithoutExtension(filePath);

            VisualizationInfo vizInfo = new VisualizationInfo(VisualizationInfo.PluginType.Bassbox, filePath, name,
                                                              null);
            _VisualizationPluginsInfo.Add(vizInfo);
          }
        }
      }
      catch (Exception ex)
      {
        Log.Error("VisualisationManager: Failed to get viz plugins - {0}", ex.ToString());
      }
      return _VisualizationPluginsInfo;
    }
    /// <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;
    }
 public virtual bool Close()
 {
   try
   {
     if (_visParam != null)
     {
       BassVis.BASSVIS_Quit(_visParam);
       _visParam = null;
     }
     return true;
   }
   catch (Exception) {}
   return false;
 }