wip show player
This commit is contained in:
parent
33d9cd699e
commit
9c97f20470
23 changed files with 89728 additions and 20 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -44,3 +44,5 @@ log/**
|
|||
|
||||
*~
|
||||
*.autosave
|
||||
|
||||
*.vscode*
|
||||
|
|
|
@ -2,12 +2,15 @@ TEMPLATE = app
|
|||
TARGET = libremediaserver-audio
|
||||
QT += webkitwidgets widgets
|
||||
HEADERS += src/libremediaserver-audio.h \
|
||||
src/cuetracklistwidget.h \
|
||||
src/cuetrackwidget.h \
|
||||
src/showplayer.h \
|
||||
src/clickabledoublespinbox.h \
|
||||
src/clickablelabel.h \
|
||||
src/clickableslider.h \
|
||||
src/dmxwidget.h \
|
||||
src/filterbankwidget.h \
|
||||
src/libremediaserver-audio-gui.h \
|
||||
src/libremediaserver-audio-ui.h \
|
||||
src/ma_writer_node.h \
|
||||
src/main.h \
|
||||
src/medialibrary.h \
|
||||
|
@ -20,14 +23,17 @@ HEADERS += src/libremediaserver-audio.h \
|
|||
src/audiowidget.h \
|
||||
src/defines.h \
|
||||
src/settings.h \
|
||||
src/slidergroup.h
|
||||
src/slidergroup.h \
|
||||
src/trackdialog.h
|
||||
SOURCES += src/main.cpp \
|
||||
src/cuetrackwidget.cpp \
|
||||
src/showplayer.cpp \
|
||||
src/clickabledoublespinbox.cpp \
|
||||
src/clickablelabel.cpp \
|
||||
src/clickableslider.cpp \
|
||||
src/dmxwidget.cpp \
|
||||
src/filterbankwidget.cpp \
|
||||
src/libremediaserver-audio-gui.cpp \
|
||||
src/libremediaserver-audio-ui.cpp \
|
||||
src/libremediaserver-audio.cpp \
|
||||
src/medialibrary.cpp \
|
||||
src/miniaudio.c \
|
||||
|
@ -37,14 +43,16 @@ SOURCES += src/main.cpp \
|
|||
src/audiolayerwidget.cpp \
|
||||
src/audiowidget.cpp \
|
||||
src/settings.cpp \
|
||||
src/slidergroup.cpp
|
||||
FORMS += src/libremediaserver-audio-gui.ui
|
||||
src/slidergroup.cpp \
|
||||
src/trackdialog.cpp
|
||||
FORMS += \
|
||||
src/showplayer.ui \
|
||||
src/libremediaserver-audio-ui.ui
|
||||
CCFLAG += -msse2 -mavx2
|
||||
QMAKE_CXXFLAGS += $$(CXXFLAG)
|
||||
QMAKE_CFLAGS += $$(CCFLAG)
|
||||
QMAKE_LFLAGS += $$(LDFLAG)
|
||||
LIBS += -lola -lolacommon -ldl -lpthread -lm
|
||||
# -lcitp
|
||||
OTHER_FILES += \
|
||||
LICENSE.txt \
|
||||
docs/compiling.txt \
|
||||
|
|
23
src/.qmake.stash
Normal file
23
src/.qmake.stash
Normal file
|
@ -0,0 +1,23 @@
|
|||
QMAKE_CXX.QT_COMPILER_STDCXX = 201703L
|
||||
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 11
|
||||
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 4
|
||||
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
|
||||
QMAKE_CXX.COMPILER_MACROS = \
|
||||
QT_COMPILER_STDCXX \
|
||||
QMAKE_GCC_MAJOR_VERSION \
|
||||
QMAKE_GCC_MINOR_VERSION \
|
||||
QMAKE_GCC_PATCH_VERSION
|
||||
QMAKE_CXX.INCDIRS = \
|
||||
/usr/include/c++/11 \
|
||||
/usr/include/x86_64-linux-gnu/c++/11 \
|
||||
/usr/include/c++/11/backward \
|
||||
/usr/lib/gcc/x86_64-linux-gnu/11/include \
|
||||
/usr/local/include \
|
||||
/usr/include/x86_64-linux-gnu \
|
||||
/usr/include
|
||||
QMAKE_CXX.LIBDIRS = \
|
||||
/usr/lib/gcc/x86_64-linux-gnu/11 \
|
||||
/usr/lib/x86_64-linux-gnu \
|
||||
/usr/lib \
|
||||
/lib/x86_64-linux-gnu \
|
||||
/lib
|
18
src/.vscode/c_cpp_properties.json
vendored
Normal file
18
src/.vscode/c_cpp_properties.json
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "linux-gcc-x64",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
"cStandard": "${default}",
|
||||
"cppStandard": "${default}",
|
||||
"intelliSenseMode": "linux-gcc-x64",
|
||||
"compilerArgs": [
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
24
src/.vscode/launch.json
vendored
Normal file
24
src/.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "C/C++ Runner: Debug Session",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"args": [],
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": false,
|
||||
"cwd": "/home/snt/Documentos/lab/lms/lms-audio/src",
|
||||
"program": "/home/snt/Documentos/lab/lms/lms-audio/src/build/Debug/outDebug",
|
||||
"MIMode": "gdb",
|
||||
"miDebuggerPath": "gdb",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
59
src/.vscode/settings.json
vendored
Normal file
59
src/.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"C_Cpp_Runner.cCompilerPath": "gcc",
|
||||
"C_Cpp_Runner.cppCompilerPath": "g++",
|
||||
"C_Cpp_Runner.debuggerPath": "gdb",
|
||||
"C_Cpp_Runner.cStandard": "",
|
||||
"C_Cpp_Runner.cppStandard": "",
|
||||
"C_Cpp_Runner.msvcBatchPath": "",
|
||||
"C_Cpp_Runner.useMsvc": false,
|
||||
"C_Cpp_Runner.warnings": [
|
||||
"-Wall",
|
||||
"-Wextra",
|
||||
"-Wpedantic",
|
||||
"-Wshadow",
|
||||
"-Wformat=2",
|
||||
"-Wcast-align",
|
||||
"-Wconversion",
|
||||
"-Wsign-conversion",
|
||||
"-Wnull-dereference"
|
||||
],
|
||||
"C_Cpp_Runner.msvcWarnings": [
|
||||
"/W4",
|
||||
"/permissive-",
|
||||
"/w14242",
|
||||
"/w14287",
|
||||
"/w14296",
|
||||
"/w14311",
|
||||
"/w14826",
|
||||
"/w44062",
|
||||
"/w44242",
|
||||
"/w14905",
|
||||
"/w14906",
|
||||
"/w14263",
|
||||
"/w44265",
|
||||
"/w14928"
|
||||
],
|
||||
"C_Cpp_Runner.enableWarnings": true,
|
||||
"C_Cpp_Runner.warningsAsError": false,
|
||||
"C_Cpp_Runner.compilerArgs": [],
|
||||
"C_Cpp_Runner.linkerArgs": [],
|
||||
"C_Cpp_Runner.includePaths": [],
|
||||
"C_Cpp_Runner.includeSearch": [
|
||||
"*",
|
||||
"**/*"
|
||||
],
|
||||
"C_Cpp_Runner.excludeSearch": [
|
||||
"**/build",
|
||||
"**/build/**",
|
||||
"**/.*",
|
||||
"**/.*/**",
|
||||
"**/.vscode",
|
||||
"**/.vscode/**"
|
||||
],
|
||||
"C_Cpp_Runner.useAddressSanitizer": false,
|
||||
"C_Cpp_Runner.useUndefinedSanitizer": false,
|
||||
"C_Cpp_Runner.useLeakSanitizer": false,
|
||||
"C_Cpp_Runner.showCompilationTime": false,
|
||||
"C_Cpp_Runner.useLinkTimeOptimization": false,
|
||||
"C_Cpp_Runner.msvcSecureNoWarnings": false
|
||||
}
|
|
@ -19,7 +19,6 @@ public:
|
|||
explicit AudioLayerWidget(QWidget *parent = 0, int layer = 0);
|
||||
~AudioLayerWidget();
|
||||
|
||||
// From OLA -> LibreMediaServer -> AudioWidget
|
||||
void setMediaFile(QString file);
|
||||
void setDuration(float dur);
|
||||
void setCurrentTime(float progress);
|
||||
|
|
157
src/cuetrackwidget.cpp
Normal file
157
src/cuetrackwidget.cpp
Normal file
|
@ -0,0 +1,157 @@
|
|||
#include "cuetrackwidget.h"
|
||||
|
||||
CueTrackWidget::CueTrackWidget(QWidget *parent) : QWidget(parent) {
|
||||
setupUi();
|
||||
}
|
||||
|
||||
void CueTrackWidget::setupUi() {
|
||||
auto layout = new QHBoxLayout(this);
|
||||
|
||||
userNumberSpin = new QSpinBox(this);
|
||||
userNumberSpin->setRange(0, 1000);
|
||||
userNumberSpin->setToolTip("Cue user number");
|
||||
layout->addWidget(userNumberSpin);
|
||||
|
||||
filePathEdit = new QLineEdit(this);
|
||||
filePathEdit->setToolTip("File name");
|
||||
layout->addWidget(filePathEdit);
|
||||
|
||||
volumeSpin = new QSpinBox(this);
|
||||
volumeSpin->setRange(0, 65535);
|
||||
volumeSpin->setToolTip("Volume");
|
||||
layout->addWidget(volumeSpin);
|
||||
|
||||
bus1Spin = new QSpinBox(this);
|
||||
bus1Spin->setRange(0, 255);
|
||||
bus1Spin->setToolTip("Bus 1");
|
||||
layout->addWidget(bus1Spin);
|
||||
|
||||
bus2Spin = new QSpinBox(this);
|
||||
bus2Spin->setRange(0, 255);
|
||||
bus2Spin->setToolTip("Bus 2");
|
||||
layout->addWidget(bus2Spin);
|
||||
|
||||
panSpin = new QSpinBox(this);
|
||||
panSpin->setRange(0, 255);
|
||||
panSpin->setToolTip("Pan");
|
||||
layout->addWidget(panSpin);
|
||||
|
||||
pitchSpin = new QSpinBox(this);
|
||||
pitchSpin->setRange(0, 255);
|
||||
pitchSpin->setToolTip("Pitch");
|
||||
layout->addWidget(pitchSpin);
|
||||
|
||||
statusCombo = new QComboBox(this);
|
||||
setupStatusCombo();
|
||||
statusCombo->setToolTip("Playback Status");
|
||||
layout->addWidget(statusCombo);
|
||||
|
||||
fadeInSpin = new QSpinBox(this);
|
||||
fadeInSpin->setRange(0, 10000);
|
||||
fadeInSpin->setToolTip("Fade In Time");
|
||||
layout->addWidget(fadeInSpin);
|
||||
|
||||
fadeOutSpin = new QSpinBox(this);
|
||||
fadeOutSpin->setRange(0, 10000);
|
||||
fadeOutSpin->setToolTip("Fade Out Time");
|
||||
layout->addWidget(fadeOutSpin);
|
||||
|
||||
waitInSpin = new QSpinBox(this);
|
||||
waitInSpin->setRange(0, 10000);
|
||||
waitInSpin->setToolTip("Wait In Time");
|
||||
layout->addWidget(waitInSpin);
|
||||
|
||||
waitOutSpin = new QSpinBox(this);
|
||||
waitOutSpin->setRange(0, 10000);
|
||||
waitOutSpin->setToolTip("Wait Out Time");
|
||||
layout->addWidget(waitOutSpin);
|
||||
|
||||
stopAtEndCheck = new QCheckBox(this);
|
||||
stopAtEndCheck->setToolTip("Halt");
|
||||
layout->addWidget(stopAtEndCheck);
|
||||
|
||||
nameEdit = new QLineEdit(this);
|
||||
nameEdit->setToolTip("Cue Name");
|
||||
layout->addWidget(nameEdit);
|
||||
|
||||
descriptionEdit = new QLineEdit(this);
|
||||
descriptionEdit->setToolTip("Cue Notes");
|
||||
layout->addWidget(descriptionEdit);
|
||||
|
||||
entryPointSpin = new QSpinBox(this);
|
||||
entryPointSpin->setRange(0, 255);
|
||||
entryPointSpin->setToolTip("Entry Point");
|
||||
layout->addWidget(entryPointSpin);
|
||||
|
||||
exitPointSpin = new QSpinBox(this);
|
||||
exitPointSpin->setRange(0, 255);
|
||||
exitPointSpin->setToolTip("Exit Point");
|
||||
layout->addWidget(exitPointSpin);
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
QWidget *CueTrackWidget::createHeader()
|
||||
{
|
||||
QWidget *ret = new QWidget();
|
||||
|
||||
auto layout = new QHBoxLayout(this);
|
||||
QLabel *l = new QLabel("Cue Number");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("File Path");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Volume");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Bus 1");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Bus 2");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Pan");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Pitch");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Playback Status");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Fade In");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Fade Out");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Wait In");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Wait Out ");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Halt");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Name");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Notes");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Entry Point");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Exit Point");
|
||||
layout->addWidget(l);
|
||||
ret->setLayout(layout);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void CueTrackWidget::setupStatusCombo() {
|
||||
statusCombo = new QComboBox(this);
|
||||
statusCombo->addItem("Stopped", Stopped);
|
||||
statusCombo->addItem("Paused", Paused);
|
||||
statusCombo->addItem("PlayingOnce", PlayingOnce);
|
||||
statusCombo->addItem("PlayingLoop", PlayingLoop);
|
||||
statusCombo->addItem("Iddle", Iddle);
|
||||
statusCombo->addItem("PlayingFolder", PlayingFolder);
|
||||
statusCombo->addItem("PlayingFolderLoop", PlayingFolderLoop);
|
||||
statusCombo->addItem("PlayingFolderRandom", PlayingFolderRandom);
|
||||
}
|
||||
|
||||
CueTrack CueTrackWidget::saveCueTrack() const {
|
||||
CueTrack cueTrack;
|
||||
cueTrack.filePath = filePathEdit->text().toStdString();
|
||||
cueTrack.volume = volumeSpin->value();
|
||||
// Guarda el resto de los campos aquí...
|
||||
|
||||
cueTrack.status = static_cast<Status>(statusCombo->currentData().toInt());
|
||||
return cueTrack;
|
||||
}
|
65
src/cuetrackwidget.h
Normal file
65
src/cuetrackwidget.h
Normal file
|
@ -0,0 +1,65 @@
|
|||
#ifndef CUETRACKWIDGET_H
|
||||
#define CUETRACKWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLineEdit>
|
||||
#include <QSpinBox>
|
||||
#include <QComboBox>
|
||||
#include <QFormLayout>
|
||||
#include <QCheckBox>
|
||||
#include <QLabel>
|
||||
#include "defines.h"
|
||||
|
||||
class CueTrackWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit CueTrackWidget(QWidget *parent = nullptr);
|
||||
|
||||
CueTrack saveCueTrack() const;
|
||||
QWidget *createHeader();
|
||||
int audioLayer = 0;
|
||||
|
||||
int getVolume() const { return volumeSpin->value(); }
|
||||
int getPan() const { return panSpin->value(); }
|
||||
int getPitch() const { return pitchSpin->value(); }
|
||||
int getBus1() const { return bus1Spin->value(); }
|
||||
int getBus2() const { return bus2Spin->value(); }
|
||||
Status getStatus() const { return static_cast<Status>(statusCombo->currentIndex()); }
|
||||
QString getFilePath() const { return filePathEdit->text(); }
|
||||
void setFilePath(QString text) const { filePathEdit->setText(text);};
|
||||
int getFadeIn() const { return fadeInSpin->value(); }
|
||||
int getFadeOut() const { return fadeOutSpin->value(); }
|
||||
int getWaitIn() const { return waitInSpin->value(); }
|
||||
int getWaitOut() const { return waitOutSpin->value(); }
|
||||
bool getStopAtEnd() const { return stopAtEndCheck->isChecked(); }
|
||||
QString getName() const { return nameEdit->text(); }
|
||||
QString getDescription() const { return descriptionEdit->text(); }
|
||||
int getUserNumber() const { return userNumberSpin->value(); }
|
||||
int getEntryPoint() const { return entryPointSpin->value(); }
|
||||
int getExitPoint() const { return exitPointSpin->value(); }
|
||||
|
||||
private:
|
||||
QLineEdit* filePathEdit;
|
||||
QSpinBox* volumeSpin;
|
||||
QSpinBox* panSpin;
|
||||
QSpinBox* pitchSpin;
|
||||
QSpinBox* bus1Spin;
|
||||
QSpinBox* bus2Spin;
|
||||
QComboBox* statusCombo;
|
||||
QSpinBox* fadeOutSpin;
|
||||
QSpinBox* fadeInSpin;
|
||||
QSpinBox* waitInSpin;
|
||||
QSpinBox* waitOutSpin;
|
||||
QCheckBox* stopAtEndCheck;
|
||||
QLineEdit* nameEdit;
|
||||
QLineEdit* descriptionEdit;
|
||||
QSpinBox* userNumberSpin;
|
||||
QSpinBox* entryPointSpin;
|
||||
QSpinBox* exitPointSpin;
|
||||
|
||||
void setupUi();
|
||||
void setupStatusCombo();
|
||||
};
|
||||
|
||||
#endif // CUETRACKWIDGET_H
|
|
@ -59,10 +59,23 @@ constexpr const char* statusToString(Status e) noexcept
|
|||
case Status::PlayingFolderLoop: return "Play Folder Loop";
|
||||
case Status::PlayingFolderRandom: return "Playing Folder Random";
|
||||
default: return "--++--";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include <QString>
|
||||
|
||||
static Status stringToStatus(QString *statusStr) {
|
||||
if (statusStr->compare("Stopped")) return Stopped;
|
||||
else if (statusStr->compare("Paused")) return Paused;
|
||||
else if (statusStr->compare("PlayingOnce")) return PlayingOnce;
|
||||
else if (statusStr->compare("PlayingLoop")) return PlayingLoop;
|
||||
else if (statusStr->compare("Iddle")) return Iddle;
|
||||
else if (statusStr->compare("PlayingFolder")) return PlayingFolder;
|
||||
else if (statusStr->compare("PlayingFolderLoop")) return PlayingFolderLoop;
|
||||
else if (statusStr->compare("PlayingFolderRandom")) return PlayingFolderRandom;
|
||||
else return Stopped; // Valor por defecto o manejar como error
|
||||
}
|
||||
|
||||
struct layerData {
|
||||
QString media;
|
||||
Status status;
|
||||
|
@ -79,5 +92,27 @@ struct layerData {
|
|||
int bus2Vol;
|
||||
float level;
|
||||
};
|
||||
|
||||
struct CueTrack {
|
||||
std::string filePath;
|
||||
int volume = 0; // 0 - 65535 ToDo: change to db -85 - 0
|
||||
int pan = 128; // 0 - 255
|
||||
int pitch = 128; // 0 - 255
|
||||
int bus1 = 255; // 0 - 255
|
||||
int bus2 = 255; // 0 - 255
|
||||
Status status;
|
||||
int fadeOut = 3; // ToDo: change to float or milliseconds
|
||||
int fadeIn = 3;
|
||||
int waitIn = 0;
|
||||
int waitOut = 0;
|
||||
bool stopAtEnd = false; // trigger next cue when this is executed
|
||||
std::string name;
|
||||
std::string description;
|
||||
int userNumber; // cue user id
|
||||
int entryPoint; // 0 - 255
|
||||
int exitPoint; // 0 - 255
|
||||
int audioLayer; // internal audio layer used when cue is loaded
|
||||
};
|
||||
|
||||
#endif // __cplusplus
|
||||
#endif // DEFINES_H
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "libremediaserver-audio-gui.h"
|
||||
#include "libremediaserver-audio-ui.h"
|
||||
|
||||
|
||||
libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
||||
|
@ -35,6 +35,7 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
|||
topWidget->setContentsMargins(0, 0, 0, 0);
|
||||
addDockWidget(Qt::TopDockWidgetArea, topWidget);
|
||||
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
|
||||
connect(ui.actionLaunchShowPlayer, SIGNAL(triggered()), this, SLOT(launchShowPlayerWindow()));
|
||||
this->setContentsMargins(0, 0, 0, 0);
|
||||
this->setStyleSheet(
|
||||
"margin: 0px;"
|
||||
|
@ -43,6 +44,7 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
|||
"selection-color: blue;"
|
||||
"selection-background-color: green"
|
||||
);
|
||||
m_showPlayer = new ShowPlayer();
|
||||
}
|
||||
|
||||
libreMediaServerAudioUi::~libreMediaServerAudioUi()
|
||||
|
@ -55,3 +57,9 @@ void libreMediaServerAudioUi::olasetup()
|
|||
view->load(QUrl("http://localhost:9090/ola.html"));
|
||||
view->show();
|
||||
}
|
||||
|
||||
void libreMediaServerAudioUi::launchShowPlayerWindow()
|
||||
{
|
||||
qDebug() << "launch show player";
|
||||
m_showPlayer->show();
|
||||
}
|
|
@ -26,7 +26,8 @@
|
|||
#include "audiowidget.h"
|
||||
#include "dmxwidget.h"
|
||||
#include "defines.h"
|
||||
#include "ui_libremediaserver-audio-gui.h"
|
||||
#include "showplayer.h"
|
||||
#include "ui_libremediaserver-audio-ui.h"
|
||||
|
||||
class libreMediaServerAudioUi : public QMainWindow
|
||||
{
|
||||
|
@ -37,12 +38,14 @@ public:
|
|||
virtual ~libreMediaServerAudioUi();
|
||||
AudioWidget *m_aw;
|
||||
dmxWidget *m_dmxWidget;
|
||||
ShowPlayer *m_showPlayer;
|
||||
|
||||
private:
|
||||
Ui::LibreMediaServerAudio ui;
|
||||
Ui::LibreMediaServerAudioUi ui;
|
||||
|
||||
private slots:
|
||||
void olasetup();
|
||||
void launchShowPlayerWindow();
|
||||
};
|
||||
|
||||
#endif // LIBREMEDIASERVERAUDIOUI_H
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<author>Santi Noreña lms@criptomart.net</author>
|
||||
<class>LibreMediaServerAudio</class>
|
||||
<widget class="QMainWindow" name="LibreMediaServerAudio">
|
||||
<class>LibreMediaServerAudioUi</class>
|
||||
<widget class="QMainWindow" name="LibreMediaServerAudioUi">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
@ -41,6 +41,7 @@
|
|||
<string>File</string>
|
||||
</property>
|
||||
<addaction name="actionLaunch_OLA_Setup"/>
|
||||
<addaction name="actionLaunchShowPlayer"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
</widget>
|
||||
|
@ -49,6 +50,11 @@
|
|||
<string>OLA Setup</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionLaunchShowPlayer">
|
||||
<property name="text">
|
||||
<string>Show Player</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
|
@ -226,6 +226,9 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
|
|||
connect(m_lmsUi->m_aw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
||||
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
||||
connect(m_lmsUi->m_aw, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
||||
m_refreshUi = new QTimer(this);
|
||||
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
||||
m_refreshUi->start(UI_REFRESH_TIME);
|
||||
|
|
|
@ -30,7 +30,7 @@ using namespace std;
|
|||
#include "settings.h"
|
||||
#include "defines.h"
|
||||
#ifndef NOGUI
|
||||
#include "libremediaserver-audio-gui.h"
|
||||
#include "libremediaserver-audio-ui.h"
|
||||
#endif
|
||||
|
||||
class libreMediaServerAudio : public QObject
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "olathread.h"
|
||||
#include "settings.h"
|
||||
#include "libremediaserver-audio.h"
|
||||
#include "libremediaserver-audio-gui.h"
|
||||
#include "libremediaserver-audio-ui.h"
|
||||
#include "defines.h"
|
||||
|
||||
olaThread *m_ola;
|
||||
|
|
81196
src/miniaudio.c
Normal file
81196
src/miniaudio.c
Normal file
File diff suppressed because it is too large
Load diff
7766
src/miniaudio.h
Normal file
7766
src/miniaudio.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -502,7 +502,7 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
|||
result = ma_sound_start(&m_mae.sounds[layer]);
|
||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0.000001f, 0.000000f, FADE_TIME);
|
||||
if (m_mae.currentStatus[layer].cursor > 0)
|
||||
usleep(FADE_TIME * 1500); // avoid glitch when load when seeking
|
||||
usleep(FADE_TIME * 1500); // avoid glitch when seeking
|
||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, FADE_TIME * 2);
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -57,12 +57,8 @@ typedef struct
|
|||
|
||||
class MiniAudioEngine
|
||||
{
|
||||
friend class libreMediaServerAudio;
|
||||
|
||||
public:
|
||||
static void audioDataCallback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount);
|
||||
|
||||
protected:
|
||||
MiniAudioEngine();
|
||||
void stopEngine();
|
||||
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
||||
|
|
87
src/showplayer.cpp
Normal file
87
src/showplayer.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
#include "showplayer.h"
|
||||
|
||||
QWidget *ShowPlayer::createHeader()
|
||||
{
|
||||
QWidget *ret = new QWidget();
|
||||
|
||||
auto layout = new QHBoxLayout(this);
|
||||
QLabel *l = new QLabel("Cue Number");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("File Path");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Volume");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Bus 1");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Bus 2");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Pan");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Pitch");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Playback Status");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Fade In");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Fade Out");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Wait In");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Wait Out ");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Halt");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Name");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Notes");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Entry Point");
|
||||
layout->addWidget(l);
|
||||
l = new QLabel("Exit Point");
|
||||
layout->addWidget(l);
|
||||
ret->setLayout(layout);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ShowPlayer::ShowPlayer(QWidget *parent) :
|
||||
QDialog(parent)
|
||||
, ui(new Ui::ShowPlayer)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
connect(ui->addCueButton, SIGNAL(clicked()), this, SLOT(onAddTrack()));
|
||||
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(go()));
|
||||
QWidget *w = createHeader();
|
||||
ui->headerLayout->addWidget(w);
|
||||
currentTrackIndex = 0;
|
||||
filesLoaded = 0;
|
||||
currentStatus = Status::Iddle;
|
||||
}
|
||||
|
||||
ShowPlayer::~ShowPlayer() {}
|
||||
|
||||
void ShowPlayer::onAddTrack() {
|
||||
TrackDialog dialog;
|
||||
dialog.show();
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
ui->cueListWidget->addCueTrackWidget(&dialog.track);
|
||||
}
|
||||
}
|
||||
|
||||
void ShowPlayer::go()
|
||||
{
|
||||
CueTrackWidget* current = ui->cueListWidget->getTrackAtIndex(currentTrackIndex);
|
||||
if (!current)
|
||||
return;
|
||||
for (int i = 0; i < MAX_LAYERS; i++) {
|
||||
if (layersUsed[i] == -1) {
|
||||
layersUsed[i] = currentTrackIndex;
|
||||
current->audioLayer = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
updateTrackStateInEngine(currentTrackIndex, current->audioLayer);
|
||||
emit uiLoadMedia(current->audioLayer, current->getFilePath());
|
||||
emit uiPlaybackChanged(current->audioLayer, current->getStatus());
|
||||
filesLoaded++;
|
||||
currentTrackIndex++;
|
||||
}
|
59
src/showplayer.h
Normal file
59
src/showplayer.h
Normal file
|
@ -0,0 +1,59 @@
|
|||
#ifndef SHOWPLAYER_H
|
||||
#define SHOWPLAYER_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
#include "defines.h"
|
||||
#include "cuetrackwidget.h"
|
||||
#include "cuetracklistwidget.h"
|
||||
#include "trackdialog.h"
|
||||
#include "ui_showplayer.h"
|
||||
|
||||
namespace Ui {
|
||||
class ShowPlayer;
|
||||
}
|
||||
|
||||
class ShowPlayer : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ShowPlayer(QWidget *parent = nullptr);
|
||||
~ShowPlayer();
|
||||
|
||||
private:
|
||||
Ui::ShowPlayer *ui;
|
||||
CueTrackListWidget *cueListWidget; // Widget para mostrar los tracks
|
||||
size_t currentTrackIndex;
|
||||
Status currentStatus = Status::Iddle;
|
||||
size_t filesLoaded = 0;
|
||||
int layersUsed[MAX_LAYERS] = { -1 };
|
||||
|
||||
QWidget *createHeader();
|
||||
|
||||
void updateTrackStateInEngine(size_t index, int layer) {
|
||||
CueTrackWidget *track = cueListWidget->getTrackAtIndex(index);
|
||||
emit uiSliderChanged(layer, Slider::Volume, track->getVolume());
|
||||
emit uiSliderChanged(layer, Slider::Pan, track->getPan());
|
||||
emit uiSliderChanged(layer, Slider::Pitch, track->getPitch());
|
||||
emit uiSliderChanged(layer, Slider::Bus1, track->getBus1());
|
||||
emit uiSliderChanged(layer, Slider::Bus2, track->getBus2());
|
||||
};
|
||||
|
||||
private slots:
|
||||
void onAddTrack();
|
||||
void go();
|
||||
//void stop();
|
||||
//void nextTrack();
|
||||
//void goToTrack(size_t i);
|
||||
|
||||
signals:
|
||||
void uiPlaybackChanged(int layer, Status s);
|
||||
void uiSliderChanged(int layer, Slider s, int vol);
|
||||
void uiLoadMedia(int layer, QString s);
|
||||
};
|
||||
|
||||
#endif // SHOWPLAYER_H
|
194
src/showplayer.ui
Normal file
194
src/showplayer.ui
Normal file
|
@ -0,0 +1,194 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ShowPlayer</class>
|
||||
<widget class="QDialog" name="ShowPlayer">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1200</width>
|
||||
<height>800</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Show Player</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="goButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>131</width>
|
||||
<height>111</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>GO</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Space</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QWidget" name="masterWidget" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>150</x>
|
||||
<y>10</y>
|
||||
<width>661</width>
|
||||
<height>111</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<widget class="QLabel" name="activeCueLabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<y>40</y>
|
||||
<width>311</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Active Cue</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="nextCueLabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<y>80</y>
|
||||
<width>311</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Next Cue</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLCDNumber" name="activeCueNumber">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>40</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLCDNumber" name="nextCueNumber">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>64</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QToolButton" name="panicButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>570</x>
|
||||
<y>0</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>P</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="CueTrackListWidget" name="cueListWidget" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>9</x>
|
||||
<y>229</y>
|
||||
<width>1200</width>
|
||||
<height>561</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QWidget" name="horizontalLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>130</x>
|
||||
<y>130</y>
|
||||
<width>201</width>
|
||||
<height>26</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="ButtonToolBarLayout">
|
||||
<item>
|
||||
<widget class="QToolButton" name="rmCueButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="addCueButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="editCueButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="horizontalLayoutWidget_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>9</x>
|
||||
<y>160</y>
|
||||
<width>761</width>
|
||||
<height>80</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="headerLayout">
|
||||
<property name="spacing">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMaximumSize</enum>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CueTrackListWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>src/cuetracklistwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Add table
Reference in a new issue