// Модификаторы воспроизведения 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; }
//Запуск воспроизведения 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(); }