Пример #1
0
        // Модификаторы воспроизведения
        private void Proces_Play_Mods()
        {
            // Автоскрол текста песен
            if (iCheck_AutoScrollText.Checked && MainStream.v_stream_status == StreamStatus.PLAY)
            {
                RTBox_Scroll_ToText(SecondsToTimeFormat(MainStream.v_play_pos + v_Scroll_Delta_Sec));
            }

            // Нонстоп лист откл (все треки)
            if (sbtn_Repeat.Tag.ToString() == "0") // Нонстоп откл
            {
               if (MainStream.v_stream_status == StreamStatus.END) // конец трека
               {
                   MainStream.v_stream_status = StreamStatus.FREE;
                   timer_playng.Enabled = false;                        
                   sbtn_Pause.ImageIndex = 0; // 0 - Play; 1 - Pause
               }
            }

            // включен нонстоп + играет трек
            if (sbtn_Repeat.Tag.ToString() == "1" && MainStream.v_stream_status == StreamStatus.PLAY)
            {
                // секунд до конца
                int sec_to_end = MainStream.v_play_max - MainStream.v_play_pos;

                // пора запускать фейдер
                // если осталось заданное значение до конца и фейдер еще не запущен
                if (MainStream.v_FadeActive == false && sec_to_end <= (v_FadeTime_Pause / 1000))
                {
                    #region данная реализация не актуальна (фейдер + стоп)
                    /* федер в конце каждого трека + стоп (но оставим на память)
                    if (sbtn_Repeat.Tag.ToString() == "0") // нет нонстопа - выключаем текущий трек фейдером
                    {
                        toolTipController.ShowHint("Фейдер без нонстопа: " + sec_to_end + " сек");
                        MainStream.p_fade_channel(0, sec_to_end); // громкость в 0
                        MainStream.v_FadeStopTime = v_FadeTime_Pause;
                        MainStream.v_FadePostAction = StreamStatus.END; // статус после фейдера
                        MainStream.v_FadeActive = true;                        
                    }                    
                    else //есть нонстоп - запуск след трека
                    */                    
                    #endregion
                    
                    // кросс фейдер между треками при нонстопе
                    #region Кросс фейдер между треками
                    toolTipController.ShowHint("Фейдер + нонстоп: " + sec_to_end + " сек");
                    
                    // копируем текущий поток
                    SlaveStream = MainStream;                    

                    // сводим в ноль текущий поток
                    SlaveStream.p_fade_channel(0, v_FadeTime_Pause); // громкость в 0
                    SlaveStream.v_FadeStopTime = v_FadeTime_Pause;
                    SlaveStream.v_FadePostAction = StreamStatus.FREE; // статус после фейдера
                    SlaveStream.v_FadeActive = true;

                    // создаем новый поток
                    MainStream.v_streem_need_free = false;
                    MainStream = new StreamClass();

                    // текущий выделенный трек
                    int Row_ID = All_PlayLists[v_play_list_id_active].dt_ListData.Rows.IndexOf(All_PlayLists[v_play_list_id_active].gv_PlayList.GetFocusedDataRow());                    
                    
                    // выделение не менялось
                    if (v_play_list_id_active == SlaveStream.v_PL_List_ID_played && Row_ID == SlaveStream.v_PL_Row_ID)
                    {
                        // следующий
                        InitPlayFile(v_play_list_id_active, 1);
                    }
                    else
                    {
                        // текущий выделенный
                        InitPlayFile(v_play_list_id_active, 0);
                    }

                    // если новый трек не запустился - запускаем следущий за ним
                    int loop_count = 1;
                    int List_Rows = All_PlayLists[MainStream.v_PL_List_ID_played].dt_ListData.Rows.Count;                                       
                    while (MainStream.v_stream == 0 && loop_count < List_Rows)
	                {
                        InitPlayFile(v_play_list_id_active, 1);
                        loop_count ++;
	                }

                    // если трек стартовал, грузим доп настройки
                    if (MainStream.v_stream != 0)
                    {
                        int pos = EQ_Main.pbc_equal_main.Position;
                        int max = EQ_Main.pbc_equal_main.Properties.Maximum;
                        float volume = (float)pos / max;
                        MainStream.v_stream_volume = 0; //установка громкости                        
                        MainStream.p_fade_channel(volume, v_FadeTime_Pause);
                    }
                    else MainStream.v_stream_status = StreamStatus.STOP;
                    #endregion
                }
            }

            // обработка активного фейдера (Hot Fader) с паузой после обработки
            if (MainStream.v_FadeActive) // активность пост обработки
            {
                if (MainStream.v_FadeStopTime > 0) // начать обработку
                {
                    MainStream.v_FadeStopTime -= timer_playng.Interval;
                    if (MainStream.v_FadeStopTime <= 0) timer_playng.Interval = 1000; // возвращаем частоту таймера
                    string tmp = MainStream.v_FadePostAction.ToString();
                }                
            }

            // обработка активного фейдера для второго потока
            if (SlaveStream.v_FadeActive && SlaveStream.v_stream != MainStream.v_stream) // активность пост обработки
            {
                if (SlaveStream.v_FadeStopTime > 0) // начать обработку
                {
                    SlaveStream.v_FadeStopTime -= timer_playng.Interval;                    
                }
            }

            // Обработка заставки
            if (MainStream.v_stream_status != StreamStatus.PLAY || MainStream.v_TextFileName == "")
            {
                if (!Pic_Logo.Visible && !panelControl_TextEditor.Visible)
                {
                    if (v_Logo_NoActions_Time >= 0)
                        v_Logo_NoActions_Time += timer_playng.Interval;

                    if (v_Logo_NoActions_Time > v_Logo_StartTime)
                    {
                        Pic_Logo.Visible = true;
                        RTBox_TextFile.Visible = false;
                        Pic_Logo.Dock = DockStyle.Fill;                    
                    }                                    
                }
            }
            else v_Logo_NoActions_Time = 0;
        }
Пример #2
0
        //Запуск воспроизведения
        public void PlayCurFile_FromList(int list_id, int row_shift)
        {
            // играет трек
            if (MainStream.v_stream_status == StreamStatus.PLAY)
            {
                int Row_ID = All_PlayLists[list_id].dt_ListData.Rows.IndexOf(All_PlayLists[list_id].gv_PlayList.GetFocusedDataRow()) + row_shift;

                // без нонстопа или тот же трек
                if ( (sbtn_Repeat.Tag.ToString() != "1") || // нет нонстопа
                     (MainStream.v_PL_List_ID_played == list_id && MainStream.v_PL_Row_ID == Row_ID) // или запуск того же трека
                    )
                {
                    // мгновенная остановка трека
                    MainStream.v_stream_status = StreamStatus.FREE;
                }
                else
                {
                    // плавная остановка трека
                    // кросс фейдер между треками при нонстопе
                    #region Кросс фейдер между треками - ручной переход
                    toolTipController.ShowHint("Фейдер + нонстоп: " + v_FadeTime_Pause / 1000 + " сек");

                    // копируем текущий поток
                    SlaveStream = MainStream;

                    // сводим в ноль текущий поток
                    SlaveStream.p_fade_channel(0, v_FadeTime_Pause); // громкость в 0
                    SlaveStream.v_FadeStopTime = v_FadeTime_Pause;
                    SlaveStream.v_FadePostAction = StreamStatus.FREE; // статус после фейдера
                    SlaveStream.v_FadeActive = true;
                    #endregion
                }                
            }


            // запуск нового трека
            MainStream.v_streem_need_free = false;
            InitPlayFile(list_id, row_shift);

            if (MainStream.v_stream != 0)
            {
                int pos = EQ_Main.pbc_equal_main.Position;
                int max = EQ_Main.pbc_equal_main.Properties.Maximum;

                MainStream.v_stream_volume = (float)pos / max;
                //запуск трека
                MainStream.p_fade_channel(MainStream.v_stream_volume, 0, 0);                
                if (!MainStream.v_FadeActive) MainStream.v_FadePostAction = StreamStatus.NONE; 
            }
            else MainStream.v_FadePostAction = StreamStatus.FREE;

            if (panelControl_TextEditor.Visible) TextEditor_Hide(); // скрываем редактор - если был запущен
            sbtn_FadeNow.ImageIndex = 3; // 3 - Fade Down; 6 - Fade Up

            Update_Paly_Status();
        }