diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 48f0af8..3219b09 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -25,7 +25,8 @@ HEADERS += src/libremediaserver-audio.h \ src/defines.h \ src/settings.h \ src/slidergroup.h \ - src/dialgroup.h + src/dialgroup.h \ + src/audiofade.h SOURCES += src/main.cpp \ src/cuetrackwidget.cpp \ src/editcuetrackwidget.cpp \ diff --git a/src/editcuetrackwidget.cpp b/src/editcuetrackwidget.cpp index cb38701..df90ef9 100644 --- a/src/editcuetrackwidget.cpp +++ b/src/editcuetrackwidget.cpp @@ -33,8 +33,10 @@ void EditCueTrackWidget::setupUi() { volumeSpin->setRange(0, 100.00f); layout->addRow("Volume", volumeSpin); panSpin = new QDoubleSpinBox(this); + panSpin->setRange(-1, 1); layout->addRow("Pan", panSpin); pitchSpin = new QDoubleSpinBox(this); + pitchSpin->setRange(0, 2); layout->addRow("Pitch", pitchSpin); bus1Spin = new QDoubleSpinBox(this); bus1Spin->setRange(0, 100.00f); @@ -45,6 +47,7 @@ void EditCueTrackWidget::setupUi() { fadeInSpin = new QSpinBox(this); layout->addRow("Fade In", fadeInSpin); fadeOutSpin = new QSpinBox(this); + fadeOutSpin->setRange(0, 60 * 60 * 24); layout->addRow("Fade Out", fadeOutSpin); waitInSpin = new QSpinBox(this); layout->addRow("Wait In", waitInSpin); diff --git a/src/showplayer.cpp b/src/showplayer.cpp index f3cbedc..2815dfb 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -17,6 +17,8 @@ ShowPlayer::ShowPlayer(QWidget *parent) : for(int i = 0; i < MAX_LAYERS; i++) { layersUsed[i] = -1; cueTrackWidgetPlaying[i] = nullptr; + current[i] = nullptr; + prevCue[i] = nullptr; } } @@ -31,8 +33,11 @@ void ShowPlayer::go() CueTrack *goCue = ui->cueListWidget->getSelectedTrack(true); if (!goCue) return; + prevCue[goCue->audioLayer] = current[goCue->audioLayer]; current[goCue->audioLayer] = goCue; - playCueTrack(goCue); + removeCueTrackWidget(goCue->audioLayer); + CueTrackWidget *widget = addCueTrackWidget(goCue); + widget->go(); if (goCue->multi) go(); } @@ -60,12 +65,29 @@ void ShowPlayer::goAction(int c) ui->cueListWidget->redrawCueTrackList(); } +void ShowPlayer::fade(Slider s, int start, CueTrack *track) { + AudioFade *fade = new AudioFade(s, start, track, this); + connect(fade, SIGNAL(uiSliderChanged(int, Slider, int)), this, SIGNAL(uiSliderChanged(int, Slider, int))); + fade->start(); +} + void ShowPlayer::updateTrackStateInEngine(CueTrack *track) { emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn * 1000); - emit uiSliderChanged(track->audioLayer, Slider::Pan, (track->pan + 1) * 128); - emit uiSliderChanged(track->audioLayer, Slider::Pitch, track->pitch * 128); - emit uiSliderChanged(track->audioLayer, Slider::Bus1, track->bus1 * 255 * 2.55); - emit uiSliderChanged(track->audioLayer, Slider::Bus2, track->bus2 * 255 * 2.55); + if (prevCue[track->audioLayer] != nullptr) { + if (prevCue[track->audioLayer]->pan != track->pan) + fade(Slider::Pan, prevCue[track->audioLayer]->pan, track); + if (prevCue[track->audioLayer]->pitch != track->pitch) + fade(Slider::Pitch, prevCue[track->audioLayer]->pitch, track); + if (prevCue[track->audioLayer]->bus1 != track->bus1) + fade(Slider::Bus1, prevCue[track->audioLayer]->bus1, track); + if (prevCue[track->audioLayer]->bus2 != track->bus2) + fade(Slider::Bus2, prevCue[track->audioLayer]->bus2, track); + } else { + emit uiSliderChanged(track->audioLayer, Slider::Pan, (track->pan + 1) * 128); + emit uiSliderChanged(track->audioLayer, Slider::Pitch, track->pitch * 128); + emit uiSliderChanged(track->audioLayer, Slider::Bus1, track->bus1 * 255 * 2.55); + emit uiSliderChanged(track->audioLayer, Slider::Bus2, track->bus2 * 255 * 2.55); + } } void ShowPlayer::loadCueTrackList() diff --git a/src/showplayer.h b/src/showplayer.h index cda63bc..fcba462 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -12,6 +12,7 @@ #include "cuetrackwidget.h" #include "dialgroup.h" #include "settings.h" +#include "audiofade.h" #include "ui_showplayer.h" namespace Ui { @@ -34,6 +35,7 @@ private: Status currentStatus = Status::Iddle; int layersUsed[MAX_LAYERS]; CueTrack *current[MAX_LAYERS]; + CueTrack *prevCue[MAX_LAYERS]; CueTrackWidget *cueTrackWidgetPlaying[MAX_LAYERS]; CueTrackWidget *addCueTrackWidget(CueTrack *track); @@ -48,6 +50,7 @@ private slots: void playCueTrack(CueTrack *track); void goAction(int channel); void updateIndex(int index); + void fade(Slider s, int start, CueTrack *track); signals: void uiPlaybackChanged(int layer, Status s);