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); }
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); }
/// <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 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); }
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); }
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 { int counter = 0; bool bFree = BassVis.BASSVIS_Free(_visParam); while ((!bFree) && (counter <= 10)) { bFree = BassVis.BASSVIS_IsFree(_visParam); System.Windows.Forms.Application.DoEvents(); counter++; } } 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); }