/* Pure Media Server - A Media Server Sotfware for stage and performing Copyright (C) 2012-2013 Santi Noreña libremediaserver@gmail.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "libremediaserver-audio.h" /** / Constructor */ libreMediaServerAudio::libreMediaServerAudio(QStringList args, QWidget *parent) : QMainWindow(parent) { qDebug() << "********************************************************************************"; qDebug() << QDate::currentDate().toString() << " "<< QTime::currentTime().toString(); qDebug() << VERSION; qDebug() << COPYRIGHT; qDebug() << LICENSE; ui.setupUi(this); this->setWindowTitle(VERSION); // Inicia el widget Terminal textEdit = new QTextEdit(this); textEdit->append(QString::fromLatin1(VERSION)); textEdit->append(QString::fromLatin1(LICENSE)); textEdit->append(QString::fromLatin1(COPYRIGHT)); QDockWidget *bottomWidget = new QDockWidget(tr("Terminal"), this); bottomWidget->setAllowedAreas(Qt::BottomDockWidgetArea); bottomWidget->setWidget(textEdit); addDockWidget(Qt::BottomDockWidgetArea, bottomWidget); // Inicia el widget central de audio aw = new AudioWidget(this); setCentralWidget(aw); // Inicia la lectura de dmx a través de ola ola = new olaThread(); Q_CHECK_PTR(ola); connect(ola, SIGNAL(toTerminal(QString)), this, SLOT(toTerminal(QString))); ola->start(QThread::TimeCriticalPriority ); ola->blockSignals(true); // Inicia el widget Master. No implementado todavía /* amw = new AudioMasterWidget(this); QDockWidget *topWidget = new QDockWidget(tr("Master"), this); topWidget->setAllowedAreas(Qt::TopDockWidgetArea); topWidget->setWidget(amw); addDockWidget(Qt::TopDockWidgetArea, topWidget); */ if (args.contains("-log")) { textEdit->append("Log to file"); } // Conectamos los menus connect(ui.actionOpen_conf, SIGNAL(triggered()), this, SLOT(openFile())); connect(ui.actionSave_conf, SIGNAL(triggered()), this, SLOT(saveFile())); connect(ui.actionChange_Media_Path, SIGNAL(triggered()), this, SLOT(ChangeMediaPath())); connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup())); Settings *set = new Settings(); connect(set, SIGNAL( layersNumber(int)), ola, SLOT( setLayersNumber(int))); connect(set, SIGNAL( DMXConf(dmxSetting ) ), ola, SLOT( setDMXConf(dmxSetting) ) ); connect(ola, SIGNAL( dmxOutput(int, int, int) ), this, SLOT( dmxInput(int, int, int) ) ); // Lee la configuración por defecto set->readDefaultFile(); ola->blockSignals(false); ola->resendDmx(); } /////////////////////////////////////////////////////////////////// // Destructor /////////////////////////////////////////////////////////////////// libreMediaServerAudio::~libreMediaServerAudio() { // save_finish(); delete MediaLibrary::getInstance(); ola->stop(); qDebug() << QDate::currentDate().toString() << " " << QTime::currentTime().toString(); qDebug() << "********************************************************************************"; return; } /////////////////////////////////////////////////////////////////// // Menu File /////////////////////////////////////////////////////////////////// // Open a configuration File void libreMediaServerAudio::openFile() { QFileDialog dialog(this); if (!dialog.exec()) return; QStringList fileNames; fileNames = dialog.selectedFiles(); QFile file(fileNames.at(0)); // open(&file); } // Save configuration File void libreMediaServerAudio::saveFile() { QFileDialog dialog(this); if (!dialog.exec()) return; QStringList fileNames; fileNames = dialog.selectedFiles(); QFile file(fileNames.at(0)); // save(&file); } // Change Media path void libreMediaServerAudio::ChangeMediaPath() { QFileDialog dialog(this); dialog.setFileMode(QFileDialog::Directory); QStringList fileNames; if (!dialog.exec()) return; fileNames = dialog.selectedFiles(); QString file = fileNames.at(0); MediaLibrary::getInstance()->setPath(file); QString desc = tr("Media Path Changed to: %1").arg(m_pathmedia); textEdit->append(desc); } /////////////////////////////////////////////////////////////////// // OLA Stuff /////////////////////////////////////////////////////////////////// void libreMediaServerAudio::olasetup() { QWebView *view = new QWebView(); view->load(QUrl("http://localhost:9090/ola.html")); view->show(); } /** * Parse the dmx information */ void libreMediaServerAudio::dmxInput(int layer, int channel, int value) { // This qDebug slows all the program. Uncomment only for debugging purpouse and comment again in normal use // qDebug() << tr("olaInterface|") << "newdmx layer" << layer << "channel" << channel << "value" << value; QString mediaFile = NULL; int aux; qreal f; switch(channel){ case DMX_FOLDER:// Folder aux = ola->getValue(layer, DMX_FILE); mediaFile = MediaLibrary::getInstance()->requestNewFile(value, aux); if (QFile::exists(mediaFile)) aw->mediaLoaded(layer, mediaFile); break; case DMX_FILE:// File aux = ola->getValue(layer, DMX_FOLDER); mediaFile = MediaLibrary::getInstance()->requestNewFile(aux, value); if (QFile::exists(mediaFile)) aw->mediaLoaded(layer, mediaFile); break; case VOLUME_COARSE: f = ( value * 0x100 ) + ola->getValue(layer, VOLUME_FINE); aw->volChanged(layer, f / 65535); break; case VOLUME_FINE: f = ( ola->getValue(layer, VOLUME_COARSE) * 0x100 ) + value; aw->volChanged(layer, f / 655.35); break; case PAN: f = (float)value / 255; break; case PLAYBACK: aux = value / 25; switch (aux) { case 0 : aw->playbackChanged(layer, QAudio::ActiveState); break; case 1 : aw->playbackChanged(layer, QAudio::StoppedState); break; case 2 : aw->playbackChanged(layer, QAudio::SuspendedState); break; } default: break; } } /** * Send the DMX info to Pure Data in init * */ void libreMediaServerAudio::loadbang() { ola->resendDmx(); }