wip show player

This commit is contained in:
snt 2024-06-16 18:15:27 +02:00
parent 33d9cd699e
commit 9c97f20470
23 changed files with 89728 additions and 20 deletions

2
.gitignore vendored
View file

@ -44,3 +44,5 @@ log/**
*~
*.autosave
*.vscode*

View file

@ -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
View 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
View 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
View 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
View 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
}

View file

@ -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
View 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
View 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

View file

@ -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

View file

@ -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();
}

View file

@ -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

View file

@ -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/>

View file

@ -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);

View file

@ -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

View file

@ -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

File diff suppressed because it is too large Load diff

7766
src/miniaudio.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -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;

View file

@ -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
View 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
View 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
View 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>