diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 8add248..a33e231 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -12,8 +12,6 @@ HEADERS += src/libremediaserver-audio.h \ src/audiowidget.h \ src/defines.h \ src/settings.h \ - src/settingsdialog.h \ - src/layersettingswidget.h \ src/slidergroup.h SOURCES += src/main.cpp \ src/dmxwidget.cpp \ @@ -25,12 +23,8 @@ SOURCES += src/main.cpp \ src/audiolayerwidget.cpp \ src/audiowidget.cpp \ src/settings.cpp \ - src/settingsdialog.cpp \ - src/layersettingswidget.cpp \ src/slidergroup.cpp -FORMS += src/libremediaserver-audio.ui \ - src/settingsdialog.ui \ - src/layersettingswidget.ui +FORMS += src/libremediaserver-audio.ui CCFLAG += -msse2 -mavx2 #-fsanitize=address -g -O0 QMAKE_CXXFLAGS += $$(CXXFLAG) #QMAKE_CXXFLAGS += -fsanitize=address -g -O0 diff --git a/src/audiolayerwidget.h b/src/audiolayerwidget.h index 13f829f..53401fb 100644 --- a/src/audiolayerwidget.h +++ b/src/audiolayerwidget.h @@ -1,20 +1,9 @@ #ifndef AUDIOLAYERWIDGET_H #define AUDIOLAYERWIDGET_H -#include - -#include -#include -#include -#include -#include #include -#include -#include #include -#include -#include -#include +#include #include "defines.h" #include "slidergroup.h" diff --git a/src/audiowidget.h b/src/audiowidget.h index 61c640c..254e59e 100644 --- a/src/audiowidget.h +++ b/src/audiowidget.h @@ -1,22 +1,15 @@ #ifndef AUDIOWIDGET_H #define AUDIOWIDGET_H -#include -#include -#include +#include -#include "dmxwidget.h" #include "audiolayerwidget.h" #include "settings.h" #include "miniaudioengine.h" -#include "defines.h" - +#include "defines.h" // MAX_LAYERS class AudioWidget : public QWidget { - friend class libreMediaServerAudio; - friend class AudioLayerWidget; - Q_OBJECT public: @@ -24,8 +17,6 @@ public: bool startEngine(); bool startEngine(int id); void stopEngine(); - -protected: void mediaLoaded(int layer, QString media ); void volChanged(int layer, float vol); void panChanged(int layer, int pan); diff --git a/src/defines.h b/src/defines.h index 780c461..68675c2 100644 --- a/src/defines.h +++ b/src/defines.h @@ -1,13 +1,10 @@ #ifndef DEFINES_H #define DEFINES_H -#include -#include -#include - -#define VERSION "LibreMediaServerAudio 0.2.0 Antigona Release" -#define COPYRIGHT "(C) 2014-2024 Santi Norena lms@criptomart.net" -#define LICENSE "GPL 3 License. See LICENSE.txt and credits.txt for details" +//#define VERSION "LibreMediaServerAudio 0.2.0 Antigona Release" +#define VERSION "Kike Substitutor - No AI required - v0.2.0" +#define COPYRIGHT "(C) 2014-2024 Santi NoreƱa " +#define LICENSE "GPL 3 Licensed. See LICENSE.txt.\nSound guys are not allowed to use this software." #define DEFAULT_FILE "lms-audio.xlm" #define MAX_LAYERS 16 #define UI_REFRESH_TIME 200 @@ -15,26 +12,10 @@ // struct where save the DMX settings for each layer struct dmxSetting { int address; - quint8 universe; - bool updated; + unsigned int universe; int layer; }; -// Media Information for MELIn packages. v1.0 -struct MediaFile { - quint8 Number; // 0-based contiguous index of the media. - QString MediaName;// Media name. - quint32 MediaLength;// Media length (in frames). -}; - -// Media Library for ELin packages v1.0 -struct MediaFolder { - quint8 m_Id; // Library id. - QString m_Name;// Library name. - quint8 m_ElementCount;// Number of elements in the library. - QList m_MediaInformation; // Pointer to the Medias Information List of this Library -}; - enum Status { Stopped, @@ -49,7 +30,7 @@ static const char* StatusStr[] = "Pause", "Playing One", "Playing Loop", - NULL + 0x0 }; enum Slider diff --git a/src/dmxwidget.cpp b/src/dmxwidget.cpp index 4383a76..60d4206 100644 --- a/src/dmxwidget.cpp +++ b/src/dmxwidget.cpp @@ -7,7 +7,7 @@ dmxWidget::dmxWidget(QWidget *parent) : { this->setFocusPolicy(Qt::FocusPolicy::NoFocus); QVBoxLayout *vbox = new QVBoxLayout; - m_receiveDMX->setText("DMX signal"); + m_receiveDMX->setText("DMX Signal"); vbox->addWidget(m_receiveDMX); this->setLayout(vbox); connect(m_watchDMX, SIGNAL(timeout()), diff --git a/src/dmxwidget.h b/src/dmxwidget.h index e1540a1..f3a6d7f 100644 --- a/src/dmxwidget.h +++ b/src/dmxwidget.h @@ -1,13 +1,10 @@ #ifndef DMXWIDGET_H #define DMXWIDGET_H -#include -#include -#include #include #include #include -#include +#include class dmxWidget : public QGroupBox { diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index f20d038..ab83519 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -25,73 +25,40 @@ libreMediaServerAudio::libreMediaServerAudio(QStringList args, QWidget *parent) : QMainWindow(parent) { Q_UNUSED(args); + qDebug() << VERSION; + qDebug() << COPYRIGHT; + qDebug() << LICENSE; ui.setupUi(this); this->setWindowTitle(VERSION); Settings *set = Settings::getInstance(); set->readFile(); - connect(set, SIGNAL(audioDeviceChanged(int)), this, SLOT(audioDeviceChanged(int))); - this->setWindowTitle(VERSION); - qDebug() << VERSION; - qDebug() << COPYRIGHT; - qDebug() << LICENSE; - MediaLibrary::getInstance()->initMediaLibrary(); - aw = new AudioWidget; - setCentralWidget(aw); + m_mediaLibrary = new MediaLibrary; + m_mediaLibrary->initMediaLibrary(); + m_aw = new AudioWidget; + setCentralWidget(m_aw); m_dmxWidget = new dmxWidget(this); QDockWidget *topWidget = new QDockWidget(tr("Master"), this); topWidget->setAllowedAreas(Qt::TopDockWidgetArea); topWidget->setWidget(m_dmxWidget); addDockWidget(Qt::TopDockWidgetArea, topWidget); - ola = new olaThread(this, set->getLayersNumber()); - Q_CHECK_PTR(ola); - ola->blockSignals(true); - connect(set, SIGNAL(registerUniverse(int)), ola, SLOT(registerUniverse(int))); - connect(ola, SIGNAL (universeReceived(int)), m_dmxWidget, SLOT(updateWatchDMX(int))); - connect(ola, SIGNAL(dmxOutput(int, int, int)), this, SLOT(dmxInput(int, int, int))); - ola->registerUniverse(); - ola->start(QThread::TimeCriticalPriority ); - connect(ui.actionOpen_conf, SIGNAL(triggered()), this, SLOT(openFile())); - connect(ui.actionSave_conf, SIGNAL(triggered()), this, SLOT(saveFile())); - connect(ui.action_Settings, SIGNAL(triggered()), this, SLOT(settings())); - connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup())); - aw->startEngine(); + m_ola = new olaThread(this, set->getLayersNumber()); + Q_CHECK_PTR(m_ola); + m_ola->blockSignals(true); + connect(m_ola, SIGNAL (universeReceived(int)), m_dmxWidget, SLOT(updateWatchDMX(int))); + connect(m_ola, SIGNAL(dmxOutput(int, int, int)), this, SLOT(dmxInput(int, int, int))); + m_ola->registerUniverse(); + m_ola->start(QThread::TimeCriticalPriority ); + connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup())); + m_aw->startEngine(); qDebug("Init Complete."); - ola->blockSignals(false); - ola->resendDmx(); + m_ola->blockSignals(false); + m_ola->resendDmx(); } libreMediaServerAudio::~libreMediaServerAudio() { - ola->stop(); - aw->stopEngine(); -} - -void libreMediaServerAudio::openFile() -{ - QFileDialog dialog(this); - if (!dialog.exec()) - return; - QStringList fileNames; - fileNames = dialog.selectedFiles(); - QFile file(fileNames.at(0)); -// open(&file); -} - -void libreMediaServerAudio::saveFile() -{ - QFileDialog dialog(this); - if (!dialog.exec()) - return; - QStringList fileNames; - fileNames = dialog.selectedFiles(); - QFile file(fileNames.at(0)); -// save(&file); -} - -void libreMediaServerAudio::settings() -{ - SettingsDialog *sd = new SettingsDialog(); - sd->show(); + m_ola->stop(); + m_aw->stopEngine(); } void libreMediaServerAudio::olasetup() @@ -109,30 +76,30 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value) int aux; switch(channel){ case DMX_FOLDER: - aux = ola->getValue(layer, DMX_FILE); - mediaFile = MediaLibrary::getInstance()->requestNewFile(value, aux); + aux = m_ola->getValue(layer, DMX_FILE); + mediaFile = m_mediaLibrary->requestNewFile(value, aux); if (QFile::exists(mediaFile)) - aw->mediaLoaded(layer, mediaFile); + m_aw->mediaLoaded(layer, mediaFile); break; case DMX_FILE: - aux = ola->getValue(layer, DMX_FOLDER); - mediaFile = MediaLibrary::getInstance()->requestNewFile(aux, value); + aux = m_ola->getValue(layer, DMX_FOLDER); + mediaFile = m_mediaLibrary->requestNewFile(aux, value); if (QFile::exists(mediaFile)) - aw->mediaLoaded(layer, mediaFile); + m_aw->mediaLoaded(layer, mediaFile); break; case VOLUME_COARSE: case VOLUME_FINE: - aw->volChanged(layer, (value / 65025.0f)); + m_aw->volChanged(layer, (value / 65025.0f)); break; case PAN: - aw->panChanged(layer, value); + m_aw->panChanged(layer, value); break; case PITCH: - aw->pitchChanged(layer, value); + m_aw->pitchChanged(layer, value); break; case ENTRY_POINT_COARSE: case ENTRY_POINT_FINE: - aw->entryPointChanged(layer, value); + m_aw->entryPointChanged(layer, value); break; case PLAYBACK: if (value == 0) @@ -140,16 +107,16 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value) aux = value / 25; switch (aux) { case 0 : - aw->playbackChanged(layer, PlayingOnce); + m_aw->playbackChanged(layer, PlayingOnce); break; case 1 : - aw->playbackChanged(layer, Stopped); + m_aw->playbackChanged(layer, Stopped); break; case 2 : - aw->playbackChanged(layer, Paused); + m_aw->playbackChanged(layer, Paused); break; case 3 : - aw->playbackChanged(layer, PlayingLoop); + m_aw->playbackChanged(layer, PlayingLoop); break; default : break; @@ -158,9 +125,3 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value) break; } } - -void libreMediaServerAudio::audioDeviceChanged(int id) -{ - aw->stopEngine(); - aw->startEngine(id); -} diff --git a/src/libremediaserver-audio.h b/src/libremediaserver-audio.h index 78b347b..9cd154b 100644 --- a/src/libremediaserver-audio.h +++ b/src/libremediaserver-audio.h @@ -20,31 +20,17 @@ #ifndef LIBREMEDIASERVERAUDIO_H #define LIBREMEDIASERVERAUDIO_H -#include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include #include "audiowidget.h" #include "medialibrary.h" #include "olathread.h" #include "settings.h" #include "dmxwidget.h" -#include "settingsdialog.h" #include "defines.h" - #include "ui_libremediaserver-audio.h" -class QMenu; - class libreMediaServerAudio : public QMainWindow { Q_OBJECT @@ -55,25 +41,14 @@ public: Ui::LibreMediaServerAudio ui; private: - AudioWidget *aw; + AudioWidget *m_aw; dmxWidget *m_dmxWidget; - olaThread *ola; - - void open_start(); - void save_finish(); - void open(QFile *file); - void save(QFile *file); - -public slots: - void audioDeviceChanged(int id); + olaThread *m_ola; + MediaLibrary *m_mediaLibrary; private slots: void olasetup(); void dmxInput(int layer, int channel, int value); - void openFile(); - void saveFile(); - void settings(); - }; #endif // LIBREMEDIASERVERAUDIO_H diff --git a/src/libremediaserver-audio.ui b/src/libremediaserver-audio.ui index 2090b50..6ade744 100644 --- a/src/libremediaserver-audio.ui +++ b/src/libremediaserver-audio.ui @@ -28,18 +28,9 @@ File - - - - - - Help - - - diff --git a/src/medialibrary.cpp b/src/medialibrary.cpp index 38e8d87..5834df0 100644 --- a/src/medialibrary.cpp +++ b/src/medialibrary.cpp @@ -1,15 +1,5 @@ #include "medialibrary.h" -MediaLibrary *MediaLibrary::_instance = 0; - -MediaLibrary *MediaLibrary::getInstance() { - - if (_instance == 0) { - _instance = new MediaLibrary(); - Q_CHECK_PTR(_instance); - } - return _instance; -} MediaLibrary::MediaLibrary(QObject *parent) : QObject(parent) diff --git a/src/medialibrary.h b/src/medialibrary.h index e6b0b79..5a0b55b 100644 --- a/src/medialibrary.h +++ b/src/medialibrary.h @@ -1,25 +1,32 @@ #ifndef MEDIALIBRARY_H #define MEDIALIBRARY_H -#include #include -#include -#include "defines.h" #include "settings.h" +#include "defines.h" + +// Media Information for MELIn packages. v1.0 +struct MediaFile { + quint8 Number; // 0-based contiguous index of the media. + QString MediaName;// Media name. + quint32 MediaLength;// Media length (in frames). +}; + +// Media Library for ELin packages v1.0 +struct MediaFolder { + quint8 m_Id; // Library id. + QString m_Name;// Library name. + quint8 m_ElementCount;// Number of elements in the library. + QList m_MediaInformation; // Pointer to the Medias Information List of this Library +}; class MediaLibrary : public QObject { - Q_OBJECT - friend class libreMediaserverAudio; // Not working... WHY? - friend class Settings; // working... - public: - - static MediaLibrary *getInstance(); - + MediaLibrary(QObject *parent = 0); /** * @brief request a new file from the media library * @param int folder - the folder required @@ -27,43 +34,12 @@ public: * @return QString the file required with full path */ QString requestNewFile(int folder, int layer); - - /** - * @brief Inicia la biblioteca de medios - */ void initMediaLibrary(); -protected: - - /** - * @brief Reload the media library on change of path or change the media files - */ - inline void rescanMediaLibrary() { - if (m_media != NULL) - delete m_media; - initMediaLibrary(); - } - private: + QList *m_media; + QList getMediaInformation(QDir dir); - explicit MediaLibrary(QObject *parent = 0); - static MediaLibrary *_instance; - -// Wich structure is more efficient for us? -// QList, QMap, QSet, QVector? - QList *m_media; // Library to save the folders/media libraries and index each media file inside - - /** - * @brief Returns a list withe the medias contained in a folder - * @param QDir - the directory when are the media - * @return QList The list with the medias in a folder - */ - QList getMediaInformation(QDir dir); // Get all the information of each media file in a dir - -signals: - -public slots: - }; #endif // MEDIALIBRARY_H diff --git a/src/miniaudioengine.cpp b/src/miniaudioengine.cpp index 5e11919..6d5490c 100644 --- a/src/miniaudioengine.cpp +++ b/src/miniaudioengine.cpp @@ -183,15 +183,11 @@ ma_result MiniAudioEngine::printFormatInfo(int layer) return result; } -// Expects between 0 and 1 vol value in db +// Expects between 0 and 1 vol value void MiniAudioEngine::volChanged(int layer, float vol) { - //float result; - if (m_mediaLoaded[layer] == false) return; - //result = ma_volume_linear_to_db(1.00000000 + (vol / 8.0)); - //qInfo("vol %f %f", vol, result); ma_sound_group_set_volume(&m_currentSound[layer], vol); } diff --git a/src/miniaudioengine.h b/src/miniaudioengine.h index d9dc13a..9549602 100644 --- a/src/miniaudioengine.h +++ b/src/miniaudioengine.h @@ -3,8 +3,8 @@ #define MINIAUDIO_IMPLEMENTATION #include "miniaudio.h" -#include "defines.h" //MAX_LAYERS -#include // for printf +#include "defines.h" // MAX_LAYERS +#include // prints messages class MiniAudioEngine { diff --git a/src/olathread.cpp b/src/olathread.cpp index 70002f1..16c976f 100644 --- a/src/olathread.cpp +++ b/src/olathread.cpp @@ -73,27 +73,27 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data, if (m_dmx[i.layer][j] != value) { m_dmx[i.layer][j] = value; switch (j) { - case 0: - value = (value * 0x100) + buffer.Get(i.address + 6); + case VOLUME_COARSE: + value = (value * 0x100) + buffer.Get(i.address + VOLUME_FINE); emit dmxOutput(i.layer,j,value); volSent = true; break; - case 7: - value = (value * 0x100) + buffer.Get(i.address + 8); + case ENTRY_POINT_COARSE: + value = (value * 0x100) + buffer.Get(i.address + ENTRY_POINT_FINE); emit dmxOutput(i.layer,j,value); entrySent = true; break; - case 6: + case VOLUME_FINE: if (volSent == false) { - value = (buffer.Get(i.address) * 0x100) + value; + value = (buffer.Get(i.address + VOLUME_COARSE) * 0x100) + value; emit dmxOutput(i.layer,j,value); } break; - case 8: + case ENTRY_POINT_FINE: if (entrySent == false) { - value = (buffer.Get(i.address + 7) * 0x100) + value; + value = (buffer.Get(i.address + ENTRY_POINT_COARSE) * 0x100) + value; emit dmxOutput(i.layer,j,value); } break; diff --git a/src/olathread.h b/src/olathread.h index 5ad75c8..148e859 100644 --- a/src/olathread.h +++ b/src/olathread.h @@ -1,9 +1,6 @@ #ifndef OLATHREAD_H #define OLATHREAD_H -#include - -#include #include #include @@ -14,9 +11,9 @@ #include #include -#include "defines.h" #include "dmxPersonality.h" #include "settings.h" +#include "defines.h" class olaThread : public QThread { @@ -35,11 +32,9 @@ public: inline int getValue(int layer, int channel) { return m_dmx[layer][channel]; } - void resendDmx(); private: - void run (); ola::client::OlaClientWrapper *m_clientWrapper; ola::client::OlaClient *m_client; diff --git a/src/settings.cpp b/src/settings.cpp index b0aab3a..f664bb0 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -17,12 +17,6 @@ Settings::Settings(QObject *parent) : m_layersNumber = 0; } -void Settings::setPathMedia(QString path) -{ - m_pathmedia = path; - MediaLibrary::getInstance()->rescanMediaLibrary(); -} - // Read the dmx settings for dmx.xml At the moment we need: // - The path to the medias folder tree // - The number of sources/layers controlled by DMX @@ -92,60 +86,3 @@ void Settings::readFromFile(QString file) { void Settings::readFile() { readFromFile(DEFAULT_FILE); } - -void Settings::changeLayerSetup(int layer, int universe, int address) -{ - dmxSetting temp; - temp.address = address; - temp.universe = universe; - temp.layer = layer; - m_settings.replace(layer, temp); - if (!m_universe.contains(temp.universe)) { - m_universe.insert(temp.universe); - } -} - -void Settings::addLayer() -{ - dmxSetting temp; - temp.address = -1; - temp.universe = -1; - temp.layer = -1; - m_settings.append(temp); -} - -void Settings::removeLayer(int layer) -{ - m_settings.removeAt(layer); -} - -/* -void Settings::writeFile(QString filename) -{ - QFile* xmlFile = new QFile(filename); - if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text)) { - QMessageBox::critical(NULL,"Load XML File Problem", - QString("Couldn't open %1 to load settings for olaInterface").arg(file), - QMessageBox::Ok); - return; - } - QXmlStreamWriter* xmlWriter = new QXmlStreamWriter(xmlFile); - - QXmlStreamWriter stream(&output); - stream.setAutoFormatting(true); - stream.writeStartDocument(); - - stream.writeStartElement("dmxSettings"); - stream.writeAttribute("href", "http://qt.nokia.com/"); - stream.writeTextElement("title", "Qt Home"); - stream.writeEndElement(); - - stream.writeEndDocument(); - -} - -void Settings::writeFile() -{ - writeFile(DEFAULT_FILE); -} -*/ diff --git a/src/settings.h b/src/settings.h index 5b9c813..8cd55bb 100644 --- a/src/settings.h +++ b/src/settings.h @@ -1,7 +1,6 @@ #ifndef SETTINGS_H #define SETTINGS_H -#include #include #include #include @@ -19,23 +18,10 @@ public: static Settings *getInstance(); inline QSet getUniverses() { return m_universe; } inline QString getPathMedia() { return m_pathmedia; } - void setPathMedia(QString path); inline QList getDmxSettings() { return m_settings; } inline int getLayersNumber() { return m_layersNumber; } - inline int getUniverseNumber() { return m_universe.size(); } void readFile(); - void changeLayerSetup(int layer, int universe, int address); - void removeLayer(int layer); - void addLayer(); - inline void setLayersNumber(int layersNumber) - { - if (layersNumber <= MAX_LAYERS) - m_layersNumber = layersNumber; - else - m_layersNumber = MAX_LAYERS; - } inline int getAudioDeviceId() { return m_audioDeviceId; } - inline void setAudioDeviceId(int id) { m_audioDeviceId = id; } private: static Settings *_instance; @@ -47,14 +33,7 @@ private: explicit Settings(QObject *parent = 0); void readFromFile(QString file); -// void writeFile(QString filename); // Not implemented yet -// void writeFile(); // Not implemented yet -signals: - void pathChanged(QString path); - void layersNumber(int number); - void registerUniverse(int universe); - void audioDeviceChanged(int id); }; #endif // SETTINGS_H diff --git a/src/settingsdialog.h b/src/settingsdialog.h index 665c465..aaf099b 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -4,8 +4,8 @@ #include #include #include + #include "settings.h" -#include "layersettingswidget.h" namespace Ui { class SettingsDialog; diff --git a/src/slidergroup.h b/src/slidergroup.h index d1d34bf..f5bae60 100644 --- a/src/slidergroup.h +++ b/src/slidergroup.h @@ -2,17 +2,10 @@ #define SLIDERGROUP_H #include -#include -#include -#include +#include +#include #include -QT_BEGIN_NAMESPACE -class QDial; -class QScrollBar; -class QSlider; -QT_END_NAMESPACE - class SliderGroup : public QGroupBox { Q_OBJECT