Exemple #1
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);
        }
        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);
        }
Exemple #3
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);
        }