refactorizada la GUI, ola y audioengine se ejecutan fuera de widgets.
Opción para ejecutar sin mostrar la GUI. Los controles de la interfaz no son reactivos, no están conectados a las órdenes de audio. cambio en la personalidad dmx para procesar los canales en mejor orden. evita mandar dos veces los canales dobles por cada dmx frame, incluyendo file/folder.
This commit is contained in:
parent
4ee82c5e5f
commit
1fccbf64fd
20 changed files with 416 additions and 323 deletions
|
|
@ -21,50 +21,35 @@
|
|||
#include "libremediaserver-audio.h"
|
||||
|
||||
|
||||
libreMediaServerAudio::libreMediaServerAudio(QStringList args, QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
libreMediaServerAudio::libreMediaServerAudio(bool gui)
|
||||
{
|
||||
Q_UNUSED(args);
|
||||
qDebug() << VERSION;
|
||||
qDebug() << COPYRIGHT;
|
||||
qDebug() << LICENSE;
|
||||
ui.setupUi(this);
|
||||
this->setWindowTitle(VERSION);
|
||||
m_ui = gui;
|
||||
Settings *set = Settings::getInstance();
|
||||
set->readFile();
|
||||
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);
|
||||
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();
|
||||
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
|
||||
m_aw->startEngine();
|
||||
m_mae.startEngine(set->getAudioDeviceId());
|
||||
qDebug("Init Complete.");
|
||||
m_ola->blockSignals(false);
|
||||
m_ola->start(QThread::TimeCriticalPriority );
|
||||
#ifndef NOGUI
|
||||
if (m_ui) {
|
||||
m_refreshUi = new QTimer(this);
|
||||
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
||||
m_refreshUi->start(UI_REFRESH_TIME);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
libreMediaServerAudio::~libreMediaServerAudio()
|
||||
{
|
||||
m_ola->stop();
|
||||
m_aw->stopEngine();
|
||||
}
|
||||
|
||||
void libreMediaServerAudio::olasetup()
|
||||
{
|
||||
QWebView *view = new QWebView();
|
||||
view->load(QUrl("http://localhost:9090/ola.html"));
|
||||
view->show();
|
||||
m_mae.stopEngine();
|
||||
}
|
||||
|
||||
void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
||||
|
|
@ -73,54 +58,82 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
|||
return;
|
||||
QString mediaFile = NULL;
|
||||
int aux;
|
||||
switch(channel){
|
||||
case DMX_FOLDER:
|
||||
aux = m_ola->getValue(layer, DMX_FILE);
|
||||
mediaFile = m_mediaLibrary->requestNewFile(value, aux);
|
||||
if (QFile::exists(mediaFile))
|
||||
m_aw->mediaLoaded(layer, mediaFile);
|
||||
break;
|
||||
case DMX_FILE:
|
||||
aux = m_ola->getValue(layer, DMX_FOLDER);
|
||||
mediaFile = m_mediaLibrary->requestNewFile(aux, value);
|
||||
if (QFile::exists(mediaFile))
|
||||
m_aw->mediaLoaded(layer, mediaFile);
|
||||
break;
|
||||
case VOLUME_COARSE:
|
||||
case VOLUME_FINE:
|
||||
m_aw->volChanged(layer, (value / 65025.0f));
|
||||
break;
|
||||
case PAN:
|
||||
m_aw->panChanged(layer, value);
|
||||
break;
|
||||
case PITCH:
|
||||
m_aw->pitchChanged(layer, value);
|
||||
break;
|
||||
case ENTRY_POINT_COARSE:
|
||||
case ENTRY_POINT_FINE:
|
||||
m_aw->entryPointChanged(layer, value);
|
||||
break;
|
||||
case PLAYBACK:
|
||||
if (value == 0)
|
||||
break;
|
||||
aux = value / 25;
|
||||
switch (aux) {
|
||||
case 0 :
|
||||
m_aw->playbackChanged(layer, PlayingOnce);
|
||||
break;
|
||||
case 1 :
|
||||
m_aw->playbackChanged(layer, Stopped);
|
||||
break;
|
||||
case 2 :
|
||||
m_aw->playbackChanged(layer, Paused);
|
||||
break;
|
||||
case 3 :
|
||||
m_aw->playbackChanged(layer, PlayingLoop);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
if (channel == DMX_FOLDER || channel == DMX_FILE){
|
||||
int folder = (value >> 8) & 0x000000FF;
|
||||
int file = value & 0x000000FF;
|
||||
mediaFile = m_mediaLibrary->requestNewFile(folder, file);
|
||||
if (strcmp(mediaFile.toLatin1().constData(), m_currentMedia[layer].toLatin1().constData()) == 0)
|
||||
return;
|
||||
if (QFile::exists(mediaFile)){
|
||||
m_mae.loadMedia(layer, mediaFile.toLatin1().data());
|
||||
#ifndef NOGUI
|
||||
if (m_ui)
|
||||
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
|
||||
#endif
|
||||
m_currentMedia[layer] = mediaFile;
|
||||
}
|
||||
} else if (channel == VOLUME_COARSE || channel == VOLUME_FINE) {
|
||||
m_mae.volChanged(layer, (value / 65025.0f));
|
||||
#ifndef NOGUI
|
||||
if (m_ui)
|
||||
m_lmsUi->m_aw->volChanged(layer, (value / 650.25f));
|
||||
#endif
|
||||
} else if (channel == PAN) {
|
||||
m_mae.panChanged(layer, value);
|
||||
#ifndef NOGUI
|
||||
if (m_ui)
|
||||
m_lmsUi->m_aw->panChanged(layer, value);
|
||||
#endif
|
||||
} else if (channel == PITCH) {
|
||||
m_mae.pitchChanged(layer, value);
|
||||
#ifndef NOGUI
|
||||
if (m_ui)
|
||||
m_lmsUi->m_aw->pitchChanged(layer, value);
|
||||
#endif
|
||||
} else if (channel == ENTRY_POINT_COARSE || channel == ENTRY_POINT_FINE) {
|
||||
m_mae.setCursor(layer, value);
|
||||
#ifndef NOGUI
|
||||
if (m_ui)
|
||||
m_lmsUi->m_aw->cursorChanged(layer, m_mae.getCursor(layer));
|
||||
#endif
|
||||
|
||||
} else if (channel == PLAYBACK && value > 0) {
|
||||
Status s = m_mae.getStatus(layer);
|
||||
aux = value / 25;
|
||||
if (s != aux) {
|
||||
if (aux == 0)
|
||||
s = Status::PlayingOnce;
|
||||
else if (aux == 1)
|
||||
s = Status::Stopped;
|
||||
else if (aux == 2)
|
||||
s = Status::Paused;
|
||||
else if (aux == 3)
|
||||
s = Status::PlayingLoop;
|
||||
m_mae.playbackChanged(layer, s);
|
||||
#ifndef NOGUI
|
||||
if (m_ui)
|
||||
m_lmsUi->m_aw->playbackChanged(layer, s);
|
||||
#endif
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NOGUI
|
||||
void libreMediaServerAudio::refreshUi() {
|
||||
if (!m_ui)
|
||||
return;
|
||||
for (int i= 0; i < Settings::getInstance()->getLayersNumber(); i++ ) {
|
||||
Status s = m_mae.getStatus(i);
|
||||
if (s == Status::PlayingOnce || s == Status::PlayingLoop) {
|
||||
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
|
||||
{
|
||||
m_lmsUi = lmsUi;
|
||||
connect(m_ola, SIGNAL(universeReceived(int)), m_lmsUi->m_dmxWidget, SLOT(updateWatchDMX(int)));
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue