diff --git a/docs/lms-audio.xlm b/docs/lms-audio.xlm
deleted file mode 100644
index b2ea7ed..0000000
--- a/docs/lms-audio.xlm
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/docs/lms-audio.xml b/docs/lms-audio.xml
new file mode 100644
index 0000000..6d15b0d
--- /dev/null
+++ b/docs/lms-audio.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/docs/roadmap.txt b/docs/roadmap.txt
index 9e4f017..a92bd03 100644
--- a/docs/roadmap.txt
+++ b/docs/roadmap.txt
@@ -42,3 +42,8 @@ v 0.3.0
- ampliar writer para recibir un número n de entradas y escribirlas cada una en un buffer
- aislar miniaudio del callback dmx tal como hemos hecho con la Ui, al menos las operaciones lentas como cargar medios.
- en load media usar un fence para actualizar mediaLoaded.
+- Video
+
+v 0.2.1 showplayer
+
+
diff --git a/lms-resources.qrc b/lms-resources.qrc
index 21a0629..a8112f0 100644
--- a/lms-resources.qrc
+++ b/lms-resources.qrc
@@ -10,6 +10,7 @@
resources/save_button.png
resources/icon.png
resources/panic_button.jpg
- resources/go_button.jpeg
+ resources/go_button.jpeg
+ resources/restore_button.jpg
diff --git a/resources/icon.png b/resources/icon.png
new file mode 100644
index 0000000..f9be058
Binary files /dev/null and b/resources/icon.png differ
diff --git a/resources/panic_button.jpg b/resources/panic_button.jpg
new file mode 100644
index 0000000..1e5e62d
Binary files /dev/null and b/resources/panic_button.jpg differ
diff --git a/resources/restore_button.jpg b/resources/restore_button.jpg
new file mode 100644
index 0000000..5de74ed
Binary files /dev/null and b/resources/restore_button.jpg differ
diff --git a/src/cuetracklistwidget.cpp b/src/cuetracklistwidget.cpp
index 0e2d6f6..0be4c03 100644
--- a/src/cuetracklistwidget.cpp
+++ b/src/cuetracklistwidget.cpp
@@ -14,31 +14,32 @@
#include
#include
#include "cuetracklistwidget.h"
+#include "editcuetrackwidget.h"
CueTrackListWidget::CueTrackListWidget(QWidget *parent)
{
layout = new QVBoxLayout(this);
tableWidget = new QTableWidget();
- tableWidget->setSortingEnabled(false);
+ tableWidget->setSortingEnabled(false);
layout->addWidget(tableWidget);
setLayout(layout);
- QShortcut *shortcut_up = new QShortcut(QKeySequence("Up"), parent);
- QObject::connect(shortcut_up, SIGNAL(activated()), this, SLOT(key_up()));
- QShortcut *shortcut_down = new QShortcut(QKeySequence("Down"), parent);
+ tableWidget->installEventFilter(parent);
+ QShortcut *shortcut_up = new QShortcut(QKeySequence("Up"), parent);
+ QObject::connect(shortcut_up, SIGNAL(activated()), this , SLOT(key_up()));
+ QShortcut *shortcut_down = new QShortcut(QKeySequence("Down"), parent);
QObject::connect(shortcut_down, SIGNAL(activated()), this, SLOT(key_down()));
- QShortcut *shortcut_copy = new QShortcut(QKeySequence("Ctrl+C"), parent);
- QObject::connect(shortcut_copy, SIGNAL(activated()), this, SLOT(copyCueTrack()));
- QShortcut *shortcut_cut = new QShortcut(QKeySequence("Ctrl+X"), parent);
- QObject::connect(shortcut_cut, SIGNAL(activated()), this, SLOT(cutCueTrack()));
- QShortcut *shortcut_paste = new QShortcut(QKeySequence("Ctrl+V"), parent);
- QObject::connect(shortcut_paste, SIGNAL(activated()), this, SLOT(pasteCueTrack()));
- tableWidget->installEventFilter(this);
- QShortcut *shortcut_delete = new QShortcut(QKeySequence("Delete"), parent);
- QObject::connect(shortcut_delete, SIGNAL(activated()), this, SLOT(deleteCueTrack()));
- QShortcut *shortcut_insert = new QShortcut(QKeySequence("Insert"), parent);
- QObject::connect(shortcut_insert, SIGNAL(activated()), this, SLOT(createNewCueTrack()));
- QShortcut *shortcut_edit = new QShortcut(QKeySequence("e"), parent);
- QObject::connect(shortcut_edit, SIGNAL(activated()), this, SLOT(editCueTrack()));
+ QShortcut *shortcut_copy = new QShortcut(QKeySequence("Ctrl+C"), parent);
+ QObject::connect(shortcut_copy, SIGNAL(activated()), this, SLOT(copyCueTrack()));
+ QShortcut *shortcut_cut = new QShortcut(QKeySequence("Ctrl+X"), parent);
+ QObject::connect(shortcut_cut, SIGNAL(activated()), this, SLOT(cutCueTrack()));
+ QShortcut *shortcut_paste = new QShortcut(QKeySequence("Ctrl+V"), parent);
+ QObject::connect(shortcut_paste, SIGNAL(activated()), this, SLOT(pasteCueTrack()));
+ QShortcut *shortcut_delete = new QShortcut(QKeySequence("Delete"), parent);
+ QObject::connect(shortcut_delete, SIGNAL(activated()), this, SLOT(deleteCueTrack()));
+ QShortcut *shortcut_insert = new QShortcut(QKeySequence("Insert"), parent);
+ QObject::connect(shortcut_insert, SIGNAL(activated()), this, SLOT(createNewCueTrack()));
+ QShortcut *shortcut_edit = new QShortcut(QKeySequence("e"), parent);
+ QObject::connect(shortcut_edit, SIGNAL(activated()), this, SLOT(editCueTrack()));
}
void CueTrackListWidget::addCueTrack(CueTrack* cue) {
@@ -92,7 +93,7 @@ void CueTrackListWidget::key_down() {
void CueTrackListWidget::displayCueTrackInTable(CueTrack *cueTrack, int index) {
if (tableWidget->columnCount() == 0) {
tableWidget->setColumnCount(7);
- QStringList headers = {"Active", "Number","Audio Channel", "Name", "Volume", "Status", "File"};
+ QStringList headers = {"Active", "Cue","Chan", "Name", "Vol", "State", "File"};
tableWidget->setHorizontalHeaderLabels(headers);
}
if (index == -1)
@@ -247,7 +248,7 @@ void CueTrackListWidget::redrawCueTrackList()
int selected = cueTracks.at(selectedIndex)->userNumber;
clearTableWidget();
tableWidget->setColumnCount(7);
- QStringList headers = {"Active", "Number","Channel", "Name", "Volume", "Status", "File"};
+ QStringList headers = {"Active", "Cue","Chan", "Name", "Vol", "State", "File"};
tableWidget->setHorizontalHeaderLabels(headers);
sortCueTrackList();
selectedIndex = 0;
@@ -270,6 +271,7 @@ void CueTrackListWidget::redrawCueTrackList()
void CueTrackListWidget::loadCueTrackList(std::string filename)
{
+ qDebug() << "loading cue list from " << filename.data();
QFile file(QString::fromStdString(filename));
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
@@ -389,6 +391,7 @@ void CueTrackListWidget::loadCueTrackList(std::string filename)
void CueTrackListWidget::saveCueTrackList(std::string filename)
{
+ qDebug() << "saving cue list to " << filename.data();
std::ofstream file(filename);
if (!file.is_open())
{
@@ -508,7 +511,7 @@ CueTrack loadCueTrackFromXml(const QString& filename) {
const QString elementName = xmlReader.name().toString();
if (elementName == "filePath") {
cueTrack.filePath = xmlReader.readElementText().toStdString();
- } else if (elementName == "volume") {
+ } else if (elementName == "vol") {
cueTrack.volume = xmlReader.readElementText().toInt();
} else if (elementName == "pan") {
cueTrack.pan = xmlReader.readElementText().toInt();
@@ -518,7 +521,7 @@ CueTrack loadCueTrackFromXml(const QString& filename) {
cueTrack.bus1 = xmlReader.readElementText().toInt();
} else if (elementName == "bus2") {
cueTrack.bus2 = xmlReader.readElementText().toInt();
- } else if (elementName == "status") {
+ } else if (elementName == "state") {
QString tmp = xmlReader.readElementText();
cueTrack.status = stringToStatus(&tmp);
} else if (elementName == "fadeOut") {
diff --git a/src/cuetracklistwidget.h b/src/cuetracklistwidget.h
index 321a36a..ff731b2 100644
--- a/src/cuetracklistwidget.h
+++ b/src/cuetracklistwidget.h
@@ -10,7 +10,6 @@
#include
#include
#include "defines.h"
-#include "editcuetrackwidget.h"
class CueTrackListWidget : public QWidget {
Q_OBJECT
diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp
index 4e26b0c..0039a4f 100644
--- a/src/cuetrackwidget.cpp
+++ b/src/cuetrackwidget.cpp
@@ -17,9 +17,14 @@ CueTrackWidget::CueTrackWidget(QWidget *parent) :
connect(&tlFade, SIGNAL(finished()), this, SLOT(fadeSlot()));
connect(&tlWaitIn, SIGNAL(finished()), this, SLOT(waitInSlot()));
connect(&tlWaitOut, SIGNAL(finished()), this, SLOT(waitOutSlot()));
+ connect(ui->playButton, SIGNAL(clicked()), this, SLOT(play()));
+ connect(ui->stopButton, SIGNAL(clicked()), this, SLOT(stop()));
+ connect(ui->pauseButton, SIGNAL(clicked()), this, SLOT(pause()));
+ connect(ui->fadeInButton, SIGNAL(clicked()), this, SLOT(fadeIn()));
+ connect(ui->fadeOutButton, SIGNAL(clicked()), this, SLOT(fadeOut()));
+ connect(ui->muteButton, SIGNAL(clicked()), this, SLOT(mute()));
}
-
CueTrackWidget::~CueTrackWidget()
{
delete ui;
@@ -34,9 +39,9 @@ void CueTrackWidget::loadCueTrack(CueTrack* track)
ui->pitch->display(track->pitch);
ui->bus1->display(track->bus1);
ui->bus2->display(track->bus2);
- ui->fade->setValue(track->fadeIn);
- ui->waitIn->setValue(track->waitIn);
- ui->waitOut->setValue(track->waitOut);
+ ui->fade->display(track->fadeIn);
+ ui->waitIn->display(track->waitIn);
+ ui->waitOut->display(track->waitOut);
ui->halt->setChecked(track->stopAtEnd);
QFileInfo fileInfo(track->filePath.data());
fileInfo.fileName().truncate(64);
@@ -44,6 +49,7 @@ void CueTrackWidget::loadCueTrack(CueTrack* track)
ui->status->setText(statusToString(track->status));
ui->audioLayer->display(track->audioLayer);
ui->multi->setChecked(track->multi);
+ ui->fadeOut->display(track->fadeOut);
}
void CueTrackWidget::go()
@@ -95,4 +101,48 @@ void CueTrackWidget::setNextCue()
{
ui->cueProgressBar->setDisabled(true);
ui->cueProgressBar->hide();
+ ui->audioControlLayout->setEnabled(false);
+ QList list = { 1, 0 };
+ ui->cueValues->setSizes(list);
+}
+
+void CueTrackWidget::play()
+{
+ QString t = ui->status->text();
+ emit changeStatus(ui->audioLayer->intValue(), stringToStatus(&t));
+}
+
+void CueTrackWidget::stop()
+{
+ emit changeStatus(ui->audioLayer->intValue(), Status::Stopped);
+}
+
+void CueTrackWidget::pause()
+{
+ emit changeStatus(ui->audioLayer->intValue(), Status::Paused);
+}
+
+void CueTrackWidget::fadeIn()
+{
+ emit changeVol(ui->audioLayer->intValue(), Slider::Volume, ui->vol->value() * 655.35, ui->fade->value() * 1000, ui->fadeOut->value() * 1000);
+ muted = false;
+}
+
+void CueTrackWidget::fadeOut()
+{
+ emit changeVol(ui->audioLayer->intValue(), Slider::Volume, 0, ui->fade->value() * 1000, ui->fadeOut->value() * 1000);
+ muted = true;
+}
+
+void CueTrackWidget::mute()
+{
+ if (muted)
+ {
+ emit changeVol(ui->audioLayer->intValue(), Slider::Volume, ui->vol->value() * 655.35, 0, 0);
+ muted = false;
+ }
+ else {
+ emit changeVol(ui->audioLayer->intValue(), Slider::Volume, 0, 0, 0);
+ muted = true;
+ }
}
diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h
index 87cd221..0915b84 100644
--- a/src/cuetrackwidget.h
+++ b/src/cuetrackwidget.h
@@ -19,26 +19,34 @@ public:
explicit CueTrackWidget(QWidget *parent = nullptr);
~CueTrackWidget();
-private:
- Ui::CueTrackWidget *ui;
- QTimeLine tlFade;
- QTimeLine tlWaitIn;
- QTimeLine tlWaitOut;
-
public slots:
void loadCueTrack(CueTrack* track);
void go();
void setNextCue();
+private:
+ Ui::CueTrackWidget *ui;
+ QTimeLine tlFade;
+ QTimeLine tlWaitIn;
+ QTimeLine tlWaitOut;
+ bool muted = false;
+
private slots:
void fadeSlot();
void waitInSlot();
void waitOutSlot();
+ void play();
+ void stop();
+ void pause();
+ void fadeIn();
+ void fadeOut();
+ void mute();
signals:
void cueFinished(int layer);
void goAction(int layer);
- void NewFunction(CueTrack *track);
+ void changeStatus(int layer, Status status);
+ void changeVol(int layer, Slider s, int value, int fadein, int fadeout);
};
#endif // CUETRACKWIDGET_H
diff --git a/src/cuetrackwidget.ui b/src/cuetrackwidget.ui
index 314782b..1928afc 100644
--- a/src/cuetrackwidget.ui
+++ b/src/cuetrackwidget.ui
@@ -6,8 +6,8 @@
0
0
- 502
- 329
+ 1000
+ 740
@@ -37,99 +37,42 @@
0
- 0
+ 1
- 0
+ 1
- 0
+ 1
- 0
+ 1
-
-
-
-
- 0
- 0
-
-
-
-
- 16777215
- 16777215
-
-
-
- QFrame::StyledPanel
-
+
Qt::Vertical
-
- false
-
-
- 8
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
+
Qt::Horizontal
-
+
-
+
0
0
- 0
- 0
-
-
-
- Cue Progress
-
-
- Cue Progress
-
-
- 24
-
-
-
-
-
- 1
- 0
-
-
-
-
- 48
- 48
+ 24
+ 24
14
- 75
true
@@ -161,7 +104,7 @@
- 2
+ 0
0
@@ -174,7 +117,6 @@
13
- 75
true
@@ -206,6 +148,29 @@
3
+
+
+
+ 2
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ Cue Progress
+
+
+ Cue Progress
+
+
+ 24
+
+
@@ -214,12 +179,15 @@
0
+
+ QFrame::StyledPanel
+
Qt::Horizontal
-
+
-
+
0
0
@@ -227,37 +195,206 @@
0
- 24
+ 12
- 16777215
- 24
+ 26
+ 16777215
+
+
+
+ Audio Channel
+
+
+ true
+
+
+ false
+
+
+ 1
+
+
+ QLCDNumber::Flat
+
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 100
+ 16777215
- 10
+ 13
- Media FIle Name
+ Playback Status
+
+
+ true
QFrame::StyledPanel
- Media file name
+ Playback Status
+
+
+ Qt::PlainText
+
+
+ true
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+ Qt::AlignCenter
true
-
- 3
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 130
+ 16777215
+
+
+
+
+ true
+ false
+
+
+
+ Qt::NoFocus
+
+
+ <html><head/><body><p>PLay next cue at same time this cue, do not wait to finish the cue.</p></body></html>
+
+
+ Qt::LeftToRight
+
+
+ true
+
+
+ Multi Go
+
+
+
+ :/buttons/resources/go_button.jpeg:/buttons/resources/go_button.jpeg
+
+
+
+ 32
+ 32
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 24
+ 0
+
+
+
+
+ 120
+ 16777215
+
+
+
+
+ 13
+ true
+
+
+
+ Qt::NoFocus
+
+
+ Do not play next cue if checked
+
+
+ If checked, do not play next cue. If checked, Go next cue when this cue has finished.
+
+
+ Halt
+
+
+ true
+
+
+ Halt
+
+
+
+ :/buttons/resources/delete_button.png:/buttons/resources/delete_button.png
+
+
+
+ 32
+ 32
+
+
+
+ true
+
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+ true
+
+
+ QFrame::StyledPanel
+
+
+ Media File Name
+
+
+ true
+
+
+ Qt::AlignJustify|Qt::AlignVCenter
+
+
+ true
@@ -280,6 +417,12 @@
16777215
+
+ QFrame::NoFrame
+
+
+ 0
+
Qt::Horizontal
@@ -318,117 +461,118 @@
0
-
-
-
+
-
+
- 0
+ 10
0
-
- Qt::NoFocus
+
+ QFrame::StyledPanel
-
- Wait in time in seconds
+
+ QFrame::Plain
-
- QAbstractSpinBox::NoButtons
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::NoFocus
-
-
- Wait out time in secods
-
-
- QAbstractSpinBox::NoButtons
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::NoFocus
-
-
- Fade time in seconds
-
-
- Fade In
-
-
- Fade In Time in seconds
-
-
- true
-
-
- true
-
-
- true
-
-
- QAbstractSpinBox::NoButtons
-
-
-
-
-
+
false
-
-
-
-
-
-
-
- 99990000.000000000000000
-
-
- QAbstractSpinBox::AdaptiveDecimalStepType
+
+ QLCDNumber::Flat
- -
-
+
-
+
- 0
+ 10
0
-
- Qt::NoFocus
+
+ QFrame::StyledPanel
-
- Exit Point
+
+ QFrame::Plain
-
- QAbstractSpinBox::NoButtons
+
+ false
+
+
+ QLCDNumber::Flat
- -
-
+
-
+
+
+
+ 10
+ 0
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 10
+ 0
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 10
+ 0
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
0
@@ -437,23 +581,64 @@
- 13
+ 10
-
- Playback Status
-
QFrame::StyledPanel
- Playback Status
+ Bus
+2
-
- Qt::PlainText
+
+ Qt::AlignCenter
-
- true
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ Vol
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ Exit
+Point
Qt::AlignCenter
@@ -463,219 +648,57 @@
- -
-
+
-
+
+
+
+ 10
+ 0
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
0
0
-
- Qt::NoFocus
-
-
- Entry Point
-
-
- QAbstractSpinBox::NoButtons
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 24
-
-
-
- Audio Channel
-
-
- false
-
-
- 1
-
-
- QLCDNumber::Flat
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 24
- 0
-
-
-
-
- 13
- 75
- true
-
-
-
- Qt::NoFocus
-
-
- Do not play next cue if checked
-
-
- If checked, do not play next cue. If checked, Go next cue when this cue has finished.
-
-
- Halt
-
-
- true
-
-
- Halt
-
-
-
- :/buttons/resources/delete_button.png:/buttons/resources/delete_button.png
-
-
-
- 32
- 32
-
-
-
- true
-
-
-
-
-
-
-
-
- QLayout::SetDefaultConstraint
-
-
- 0
-
- -
-
-
- 3
-
-
-
- -
-
-
-
- 0
- 0
-
-
10
+
+ QFrame::StyledPanel
+
- Bus 1
+ Bus
+ 1
Qt::AlignCenter
- -
-
-
- 3
-
-
- QLCDNumber::Flat
-
-
-
- -
-
-
-
- 10
-
-
-
- Volume
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
-
- 10
-
-
-
- Bus 2
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
- <html><head/><body><p>Volume</p></body></html>
-
-
- 3
-
-
-
- -
-
-
- <html><head/><body><p>Bus 2 Volume</p></body></html>
-
-
- 3
-
-
-
- -
-
-
- <html><head/><body><p>Bus 1 Volume</p></body></html>
-
-
- 3
-
-
-
- -
+
-
-
+
0
0
@@ -685,6 +708,9 @@
10
+
+ QFrame::StyledPanel
+
Pan
@@ -693,13 +719,50 @@
- -
-
+
-
+
+
+
+ 0
+ 0
+
+
10
+
+ QFrame::StyledPanel
+
+
+ Fade
+In
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
Pitch
@@ -708,8 +771,8 @@
- -
-
+
-
+
0
@@ -718,45 +781,351 @@
- 50
- false
- true
+ 10
-
- <html><head/><body><p>PLay next cue at same time this cue, do not wait to finish the cue.</p></body></html>
-
-
- Qt::RightToLeft
+
+ QFrame::StyledPanel
-
+ Wait
+Out
-
-
- :/buttons/resources/go_button.jpeg:/buttons/resources/go_button.jpeg
+
+ Qt::AlignCenter
-
-
- 32
- 32
-
+
+ true
- -
-
+
-
+
+
+
+ 10
+ 0
+
+
+
+ <html><head/><body><p>Bus 1 Volume</p></body></html>
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ 3
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
10
+
+ QFrame::StyledPanel
+
- MultiCue
+ Fade
+Out
Qt::AlignCenter
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ Wait
+In
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+
+ 10
+ 0
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ 3
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 10
+ 0
+
+
+
+ <html><head/><body><p>Bus 2 Volume</p></body></html>
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ 3
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 10
+ 0
+
+
+
+ <html><head/><body><p>Volume</p></body></html>
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ 3
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 10
+ 0
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+ false
+
+
+ 3
+
+
+ QLCDNumber::Flat
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ Entry
+Point
+
+
+ Qt::AutoText
+
+
+ false
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+
+ QLayout::SetMaximumSize
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Play
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Pause
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Stop
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Fade
+In
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Mute
+
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Fade
+ Out
+
@@ -766,13 +1135,6 @@
-
- waitOut
- fade
- entryPoint
- exitPoint
- waitIn
-
diff --git a/src/defines.h b/src/defines.h
index 1844856..c530664 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -4,7 +4,7 @@
#define VERSION "LibreMediaServerAudio v0.2.0 Antigona"
#define COPYRIGHT "(C) 2014-2024 Santi Noreña "
#define LICENSE "GPL3 Licensed. See LICENSE.txt."
-#define DEFAULT_FILE "lms-audio.xlm"
+#define DEFAULT_FILE "lms-audio.xml"
#define MAX_LAYERS 4
#define MAX_AUDIODEVICES 8
#define FORMAT ma_format_f32 /* Must always be f32. */
diff --git a/src/filterbankwidget.cpp b/src/filterbankwidget.cpp
index c948411..3b05ec3 100644
--- a/src/filterbankwidget.cpp
+++ b/src/filterbankwidget.cpp
@@ -36,6 +36,14 @@ FilterBankWidget::FilterBankWidget(QWidget *parent)
"font-size: 8px;}");
connect(m_bypass, SIGNAL(stateChanged(int)), this, SLOT(bypassChanged(int)));
master->addWidget(fb[0]);
+ fb[0]->setFocusPolicy(Qt::NoFocus);
+ fb[0]->setButtonSymbols(QAbstractSpinBox::NoButtons);
+ fb[0]->setValue(-1);
+ fb[0]->setDecimals(1);
+ fb[0]->setAlignment(Qt::AlignHCenter);
+ fb[0]->setContentsMargins(0, 0, 0, 0);
+ fb[0]->setMaximumWidth(66);
+ fb[0]->setMinimumWidth(25);
layout->addLayout(master);
for (int i = 1; i < 13;) {
QVBoxLayout *filterLayout= new QVBoxLayout;
diff --git a/src/libremediaserver-audio-ui.cpp b/src/libremediaserver-audio-ui.cpp
index e1f8533..bfeeeb3 100644
--- a/src/libremediaserver-audio-ui.cpp
+++ b/src/libremediaserver-audio-ui.cpp
@@ -45,10 +45,46 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
"selection-background-color: green"
);
m_showPlayer = new ShowPlayer();
+ m_showPlayer->setFocus();
+ QShortcut *shortcut_space = new QShortcut(QKeySequence(" "), this);
+ QObject::connect(shortcut_space, SIGNAL(activated()), m_showPlayer, SLOT(go()));
+ QShortcut *shortcut_up = new QShortcut(QKeySequence("Up"), this);
+ QObject::connect(shortcut_up, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(key_up()));
+ QShortcut *shortcut_down = new QShortcut(QKeySequence("Down"), this);
+ QObject::connect(shortcut_down, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(key_down()));
+ QShortcut *shortcut_copy = new QShortcut(QKeySequence("Ctrl+C"), this);
+ QObject::connect(shortcut_copy, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(copyCueTrack()));
+ QShortcut *shortcut_cut = new QShortcut(QKeySequence("Ctrl+X"), this);
+ QObject::connect(shortcut_cut, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(cutCueTrack()));
+ QShortcut *shortcut_paste = new QShortcut(QKeySequence("Ctrl+V"), this);
+ QObject::connect(shortcut_paste, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(pasteCueTrack()));
+ QShortcut *shortcut_delete = new QShortcut(QKeySequence("Delete"), this);
+ QObject::connect(shortcut_delete, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(deleteCueTrack()));
+ QShortcut *shortcut_insert = new QShortcut(QKeySequence("Insert"), this);
+ QObject::connect(shortcut_insert, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(createNewCueTrack()));
+ QShortcut *shortcut_edit = new QShortcut(QKeySequence("e"), this);
+ QObject::connect(shortcut_edit, SIGNAL(activated()), m_showPlayer->ui->cueListWidget, SLOT(editCueTrack()));
+ Settings::getInstance()->beginGroup("mainwindow");
+ auto geometry = Settings::getInstance()->value("geometry", QByteArray()).toByteArray();
+ if (!geometry.isEmpty())
+ restoreGeometry(geometry);
+ geometry = Settings::getInstance()->value("showPlayerGeometry", QByteArray()).toByteArray();
+ if (!geometry.isEmpty())
+ m_showPlayer->restoreGeometry(geometry);
+ Settings::getInstance()->endGroup();
}
libreMediaServerAudioUi::~libreMediaServerAudioUi()
{
+ Settings::getInstance()->beginGroup("mainwindow");
+ Settings::getInstance()->setValue("size", size());
+ Settings::getInstance()->setValue("fullScreen", isFullScreen());
+ Settings::getInstance()->setValue("geometry", saveGeometry());
+ Settings::getInstance()->setValue("showPlayer", m_showPlayer->isVisible());
+ Settings::getInstance()->setValue("showPlayerSize", m_showPlayer->size());
+ Settings::getInstance()->setValue("showPlayerGeometry", m_showPlayer->saveGeometry());
+ Settings::getInstance()->endGroup();
+ delete m_showPlayer;
}
void libreMediaServerAudioUi::olasetup()
@@ -60,6 +96,5 @@ void libreMediaServerAudioUi::olasetup()
void libreMediaServerAudioUi::launchShowPlayerWindow()
{
- //m_showPlayer->showMaximized();
m_showPlayer->show();
}
diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp
index c2bd32b..f3dab82 100644
--- a/src/libremediaserver-audio.cpp
+++ b/src/libremediaserver-audio.cpp
@@ -24,7 +24,7 @@
libreMediaServerAudio::libreMediaServerAudio()
{
m_settings = Settings::getInstance(this);
- m_settings->readFile();
+ //m_settings->readFile();
m_ui = m_settings->getShowUi();
m_layersQty = m_settings->getLayersNumber();
for (uint i = 0; i < m_layersQty; i++) {
@@ -66,17 +66,6 @@ libreMediaServerAudio::~libreMediaServerAudio()
if (m_settings->getDmxActive())
m_ola->stop();
m_mae.stopEngine();
- Settings::getInstance()->beginGroup("mainwindow");
- Settings::getInstance()->setValue("size", m_lmsUi->size());
- Settings::getInstance()->setValue("fullScreen", m_lmsUi->isFullScreen());
- Settings::getInstance()->setValue("geometry", m_lmsUi->saveGeometry());
- Settings::getInstance()->setValue("showPlayer", m_lmsUi->m_showPlayer->isVisible());
- Settings::getInstance()->setValue("showPlayerSize", m_lmsUi->m_showPlayer->size());
- Settings::getInstance()->setValue("showPlayerGeometry", m_lmsUi->m_showPlayer->saveGeometry());
- Settings::getInstance()->endGroup();
- m_settings->settingsSaver();
- if (m_settings->getShowPlayerActive())
- m_lmsUi->m_showPlayer->saveCueTrackList("lastshow.xml");
delete m_lmsUi;
delete m_settings;
sleep(1);
@@ -316,7 +305,6 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
m_ola->start(QThread::TimeCriticalPriority );
} else {
m_lmsUi->m_dmxWidget->hide();
- //m_lmsUi->topWidget->hide();
}
for (uint i = 0; i < m_settings->getAudioDeviceQty(); i++) {
char *name = m_mae.getDeviceName(i);
@@ -326,14 +314,6 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
m_lmsUi->m_showPlayer->loadCueTrackList("lastshow.xml");
m_lmsUi->m_showPlayer->show();
}
- m_settings->beginGroup("mainwindow");
- auto geometry = m_settings->value("geometry", QByteArray()).toByteArray();
- if (!geometry.isEmpty())
- lmsUi->restoreGeometry(geometry);
- geometry = m_settings->value("showPlayerGeometry", QByteArray()).toByteArray();
- if (!geometry.isEmpty())
- lmsUi->m_showPlayer->restoreGeometry(geometry);
- m_settings->endGroup();
m_refreshUi = new QTimer(this);
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
m_refreshUi->start(UI_REFRESH_TIME);
@@ -356,6 +336,7 @@ void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
m_updateUi[layer][2] = value;
break;
case Slider::Bypass:
+ // ToDo: sigsev when no dmx, resolve this whitout dmxSettings, is it needed=
m_mae.setBypass(m_dmxSettings.at(layer).audioDevice, layer, value);
break;
case Slider::Bus1:
diff --git a/src/miniaudioengine.cpp b/src/miniaudioengine.cpp
index d81b309..2c6144c 100644
--- a/src/miniaudioengine.cpp
+++ b/src/miniaudioengine.cpp
@@ -1,3 +1,4 @@
+#include
#include "miniaudioengine.h"
#include "dmxPersonality.h"
@@ -285,7 +286,7 @@ ma_result MiniAudioEngine::startDevices()
engineConfig.noAutoStart = MA_TRUE;
for (uint internalId = 0; internalId < m_mae.audioDevicesQty; internalId++) {
- deviceConfig.capture.pDeviceID = &m_mae.pPlaybackDeviceInfos[m_mae.audioDevicesId[internalId]].id;
+ //deviceConfig.capture.pDeviceID = &m_mae.pPlaybackDeviceInfos[m_mae.audioDevicesId[internalId]].id;
deviceConfig.playback.pDeviceID = &m_mae.pPlaybackDeviceInfos[m_mae.audioDevicesId[internalId]].id;
deviceConfig.pUserData = &m_mae.engines[internalId];
result = ma_device_init(&m_mae.context, &deviceConfig, &m_mae.devices[internalId]);
@@ -499,6 +500,9 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
break;
case Status::Stopped:
ma_sound_stop_with_fade_in_milliseconds(&m_mae.sounds[layer], m_mae.currentStatus[layer].fadeOut);
+ QTimer::singleShot(m_mae.currentStatus[layer].fadeOut, [this, layer] {
+ this->seekToCursor(layer, m_mae.currentStatus[layer].cursor);
+ });
break;
case Status::PlayingLoop:
loop = true;
diff --git a/src/settings.cpp b/src/settings.cpp
index fc17589..53b02c3 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -19,7 +19,31 @@ Settings::Settings(QObject *parent) :
m_audioDeviceQty = 0;
for (uint i = 0; i < MAX_AUDIODEVICES; i++)
m_audioDeviceId[i] = -1;
- settingsLoader();
+ if (QFile::exists(DEFAULT_FILE))
+ readFromFile(DEFAULT_FILE);
+ else if (QFile::exists(fileName()))
+ settingsLoader();
+ else {
+ qDebug() << "Can not read initial settings, making some standard";
+ setValue("lmsAudio/ui", 1);
+ setValue("lmsAudio/dmxActive", 0);
+ setValue("lmsAudio/showPlayerActive", 1);
+ setValue("lmsAudio/layersNumber", 2);
+ setValue("lmsAudio/path", "../media/");
+ setValue("audioDevice/devicesNumber", 2);
+ setValue("audioDevice/id0", 4);
+ setValue("audioDevice/id1", 3);
+ setValue("layers/layer0/dmx", 1);
+ setValue("layers/layer0/universe", 1);
+ setValue("layers/layer0/id", 0);
+ setValue("layers/layer0/audioDevice", 0);
+ setValue("layers/layer1/dmx", 26);
+ setValue("layers/layer1/universe", 1);
+ setValue("layers/layer1/id", 1);
+ setValue("layers/layer1/audioDevice", 0);
+ sync();
+ settingsLoader();
+ }
}
Settings::~Settings() {
@@ -28,6 +52,7 @@ Settings::~Settings() {
void Settings::settingsLoader()
{
+ qDebug() << "loading settings from system";
beginGroup("lmsAudio");
m_ui = value("ui", 0).toBool();
m_dmxActive = value("dmxActive", 0).toBool();
@@ -94,14 +119,14 @@ void Settings::settingsSaver()
// - Audio device id
// - Show Ui, showPlayer
void Settings::readFromFile(QString file) {
+ qDebug() << "loading settings from xml file " << file;
QFile* xmlFile = new QFile(file);
if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::critical(NULL,"Load XML File Problem",
QString("Couldn't open %1 to load settings").arg(file),
QMessageBox::Ok);
- // Instead exit give the oportunity to load another file or define the settings
- qCritical("Load XML File Problem");
- exit(1);
+ qCritical("Load XML File Problem");
+ return;
}
QXmlStreamReader* xmlReader = new QXmlStreamReader(xmlFile);
while(!xmlReader->atEnd() && !xmlReader->hasError()) {
diff --git a/src/showplayer.cpp b/src/showplayer.cpp
index 9ac3f5a..328227b 100644
--- a/src/showplayer.cpp
+++ b/src/showplayer.cpp
@@ -13,7 +13,12 @@ ShowPlayer::ShowPlayer(QWidget *parent) :
connect(ui->LoadCueList, SIGNAL(clicked()), this, SLOT(loadCueTrackList()));
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go()));
connect(ui->cueListWidget, SIGNAL(changeSelectedIndex(int)), this, SLOT(updateIndex(int)));
- currentStatus = Status::Iddle;
+ connect(ui->panicButton, SIGNAL(clicked()), this, SLOT(panicButtonClicked()));
+ connect(ui->restoreButton, SIGNAL(clicked()), this, SLOT(restoreButtonClicked()));
+ connect(ui->CopyCue, SIGNAL(clicked()), ui->cueListWidget, SLOT(copyCueTrack()));
+ connect(ui->PasteCue, SIGNAL(clicked()), ui->cueListWidget, SLOT(pasteCueTrack()));
+ connect(ui->CutCue, SIGNAL(clicked()), ui->cueListWidget, SLOT(cutCueTrack()));
+ currentStatus = Status::Iddle;
for(int i = 0; i < MAX_LAYERS; i++) {
layersUsed[i] = -1;
cueTrackWidgetPlaying[i] = nullptr;
@@ -21,12 +26,22 @@ ShowPlayer::ShowPlayer(QWidget *parent) :
prevCue[i] = nullptr;
}
ui->nextCue->setNextCue();
+ Settings::getInstance()->beginGroup("showPlayerSplittersState");
+ ui->splitter_main->restoreState(Settings::getInstance()->value("mainSplitter").toByteArray());
+ ui->splitter_controls->restoreState(Settings::getInstance()->value("controlsSplitter").toByteArray());
+ ui->splitter_cues->restoreState(Settings::getInstance()->value("cueSplitter").toByteArray());
+ Settings::getInstance()->endGroup();
}
ShowPlayer::~ShowPlayer()
{
saveCueTrackList("lastshow.xml");
- delete ui;
+ Settings::getInstance()->beginGroup("showPlayerSplittersState");
+ Settings::getInstance()->setValue("mainSplitter", ui->splitter_main->saveState());
+ Settings::getInstance()->setValue("controlsSplitter", ui->splitter_controls->saveState());
+ Settings::getInstance()->setValue("cueSplitter", ui->splitter_cues->saveState());
+ Settings::getInstance()->endGroup();
+ delete ui;
}
void ShowPlayer::onAddTrack() {
@@ -78,7 +93,7 @@ void ShowPlayer::fade(Slider s, int start, CueTrack *track) {
void ShowPlayer::updateTrackStateInEngine(CueTrack *track) {
emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn * 1000, track->fadeOut * 1000);
- if (prevCue[track->audioLayer] != nullptr) {
+ if (track->fadeIn != 0 && 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)
@@ -120,12 +135,12 @@ void ShowPlayer::cueTrackAtEnd(int layer)
void ShowPlayer::cueFinished(int c)
{
- if (!current[c])
- return;
- if (!current[c]->stopAtEnd)
+ if (!current[c])
+ return;
+ if (!current[c]->stopAtEnd)
this->go();
- if (current[c]->status == Status::Stopped || current[c]->status == Status::Paused)
- cueTrackAtEnd(c);
+ if (current[c]->status == Status::Stopped || current[c]->status == Status::Paused)
+ cueTrackAtEnd(c);
}
CueTrackWidget *ShowPlayer::addCueTrackWidget(CueTrack* track) {
@@ -134,10 +149,12 @@ CueTrackWidget *ShowPlayer::addCueTrackWidget(CueTrack* track) {
widget->loadCueTrack(track);
connect(widget, SIGNAL(goAction(int)), this, SLOT(goAction(int)));
connect(widget, SIGNAL(cueFinished(int)), this, SLOT(cueFinished(int)));
+ connect(widget, SIGNAL(changeStatus(int, Status)), this, SIGNAL(uiPlaybackChanged(int, Status)));
+ connect(widget, SIGNAL(changeVol(int, Slider, int, int, int)), this, SIGNAL(uiSliderChangedFaded(int, Slider, int, int, int)));
cueTrackWidgetPlaying[track->audioLayer] = widget;
item->setSizeHint(widget->sizeHint());
ui->activeCueList->setItemWidget(item, widget);
- return (widget);
+ return (widget);
}
void ShowPlayer::playCueTrack(CueTrack* track) {
@@ -178,4 +195,28 @@ void ShowPlayer::loadCueTrackList(QString path) {
void ShowPlayer::saveCueTrackList(QString path) {
ui->cueListWidget->saveCueTrackList(path.toStdString());
-}
\ No newline at end of file
+}
+
+void ShowPlayer::panicButtonClicked() {
+ for (int i = 0; i < MAX_LAYERS; i++) {
+ if (layersUsed[i] != -1) {
+ CueTrack* track = current[i];
+ if (track && track->active) {
+ emit uiSliderChanged(track->audioLayer, Slider::Volume, 0);
+ emit uiPlaybackChanged(track->audioLayer, Status::Paused);
+ }
+ }
+ }
+}
+
+void ShowPlayer::restoreButtonClicked() {
+ for (int i = 0; i < MAX_LAYERS; i++) {
+ if (layersUsed[i] != -1) {
+ CueTrack* track = current[i];
+ if (track) {
+ emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn, track->fadeOut);
+ emit uiPlaybackChanged(track->audioLayer, track->status);
+ }
+ }
+ }
+}
diff --git a/src/showplayer.h b/src/showplayer.h
index 4054904..9220640 100644
--- a/src/showplayer.h
+++ b/src/showplayer.h
@@ -26,6 +26,7 @@ class ShowPlayer : public QDialog
public:
explicit ShowPlayer(QWidget *parent = nullptr);
~ShowPlayer();
+ Ui::ShowPlayer *ui;
public slots:
void cueTrackAtEnd(int layer);
@@ -33,13 +34,13 @@ public slots:
void saveCueTrackList(QString path);
private:
- Ui::ShowPlayer *ui;
Status currentStatus = Status::Iddle;
int layersUsed[MAX_LAYERS];
CueTrack *current[MAX_LAYERS];
CueTrack *prevCue[MAX_LAYERS];
CueTrackWidget *cueTrackWidgetPlaying[MAX_LAYERS];
CueTrackWidget *addCueTrackWidget(CueTrack *track);
+ std::map> prePanicState;
private slots:
void updateTrackStateInEngine(CueTrack *track);
@@ -53,11 +54,13 @@ private slots:
void goAction(int channel);
void updateIndex(int index);
void fade(Slider s, int start, CueTrack *track);
+ void panicButtonClicked();
+ void restoreButtonClicked();
signals:
void uiPlaybackChanged(int layer, Status s);
- void uiSliderChanged(int layer, Slider s, int vol);
- void uiSliderChangedFaded(int layer, Slider s, int vol, int fadeIn, int fadeOut);
+ void uiSliderChanged(int layer, Slider s, int value);
+ void uiSliderChangedFaded(int layer, Slider s, int value, int fadeIn, int fadeOut);
void uiLoadMedia(int layer, QString s);
};
diff --git a/src/showplayer.ui b/src/showplayer.ui
index 42c4603..768f936 100644
--- a/src/showplayer.ui
+++ b/src/showplayer.ui
@@ -34,7 +34,7 @@
-
-
+
Qt::Vertical
@@ -238,7 +238,7 @@
-
+
Qt::Horizontal
@@ -286,6 +286,9 @@
Qt::ClickFocus
+
+ Panic!
+
...
@@ -295,7 +298,7 @@
- 96
+ 120
120
@@ -303,8 +306,26 @@
P
+
+
+ Restore
+
+
+
+
+
+
+ :/buttons/resources/restore_button.jpg:/buttons/resources/restore_button.jpg
+
+
+
+ 120
+ 120
+
+
+
-
+
Qt::Horizontal