diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 154d1fe..42ef0d1 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -2,6 +2,7 @@ TEMPLATE = app TARGET = libremediaserver-audio QT += webkitwidgets widgets HEADERS += src/libremediaserver-audio.h \ + src/clickablelabel.h \ src/dmxwidget.h \ src/libremediaserver-audio-gui.h \ src/main.h \ @@ -16,6 +17,7 @@ HEADERS += src/libremediaserver-audio.h \ src/settings.h \ src/slidergroup.h SOURCES += src/main.cpp \ + src/clickablelabel.cpp \ src/dmxwidget.cpp \ src/libremediaserver-audio-gui.cpp \ src/miniaudio.c \ diff --git a/src/audiolayerwidget.cpp b/src/audiolayerwidget.cpp index 2dd1d94..ee112dd 100644 --- a/src/audiolayerwidget.cpp +++ b/src/audiolayerwidget.cpp @@ -9,7 +9,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer): QVBoxLayout *layout = new QVBoxLayout; QVBoxLayout *playback = new QVBoxLayout; - m_folderValue = new QLabel; + m_folderValue = new ClickableLabel; //m_folderValue->setMaximumWidth(160); m_folderValue->setAlignment(Qt::AlignHCenter); m_folderValue->setStyleSheet( @@ -17,7 +17,9 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer): "background-color: black;" ); playback->addWidget(m_folderValue); - m_fileValue = new QLabel; + m_fileValue = new ClickableLabel; + connect(m_fileValue, SIGNAL(clicked()), this, SLOT(openMediaDialog())); + connect(m_folderValue, SIGNAL(clicked()), this, SLOT(openMediaDialog())); //m_fileValue->setMaximumWidth(160); m_fileValue->setAlignment(Qt::AlignHCenter); m_fileValue->setStyleSheet( @@ -52,6 +54,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer): m_progressTime->setMaximumWidth(75); m_progressTime->setFocusPolicy(Qt::NoFocus); m_progressTime->setAlignment(Qt::AlignHCenter); + m_progressTime->setContentsMargins(0,0,0,0); m_totalTimeValue = new QTimeEdit; m_totalTimeValue->setObjectName("Track Length"); m_totalTimeValue->setToolTip("Track Length"); @@ -61,6 +64,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer): m_totalTimeValue->setMaximumWidth(75); m_totalTimeValue->setFocusPolicy(Qt::NoFocus); m_totalTimeValue->setAlignment(Qt::AlignHCenter); + m_totalTimeValue->setContentsMargins(0,0,0,0); QHBoxLayout *status = new QHBoxLayout; status->addWidget(m_progressTime); status->addWidget(m_totalTimeValue); @@ -115,13 +119,28 @@ void AudioLayerWidget::toggleSuspendResume() break; case Status::Paused: case Status::Stopped: - this->setPlaybackStatus(Status::PlayingOnce); + //this->setPlaybackStatus(Status::PlayingOnce); emit uiPlaybackChanged(m_layer, Status::PlayingOnce); case Status::Iddle: break; } } +void AudioLayerWidget::openMediaDialog() +{ + QFileDialog dialog(this); + dialog.setFileMode(QFileDialog::ExistingFile); + dialog.setNameFilter(tr("Sound Tracks (*.mp3 *.mp3 *.flac *.wav")); + dialog.setViewMode(QFileDialog::Detail); + dialog.setDirectory(Settings::getInstance()->getPathMedia()); + if (!dialog.exec()) + return; + QStringList fileNames; + fileNames = dialog.selectedFiles(); + emit uiLoadMedia(m_layer, fileNames.at(0)); + this->fileLoaded(fileNames.at(0)); +} + // from DMX signals void AudioLayerWidget::setVol(float vol) { @@ -157,10 +176,12 @@ void AudioLayerWidget::fileLoaded(QString file) void AudioLayerWidget::setPlaybackStatus(Status status) { + if (StatusStr[status] == m_suspendResumeButton->text()) + return; + m_suspendResumeButton->blockSignals(true); m_status = status; if (status == Status::Stopped) m_progress->setValue(0); - m_suspendResumeButton->blockSignals(true); m_suspendResumeButton->setText(StatusStr[status]); m_suspendResumeButton->blockSignals(false); } diff --git a/src/audiolayerwidget.h b/src/audiolayerwidget.h index 4f89d17..c0c6b3b 100644 --- a/src/audiolayerwidget.h +++ b/src/audiolayerwidget.h @@ -3,11 +3,13 @@ #include #include -#include +#include #include #include "defines.h" #include "slidergroup.h" +#include "clickablelabel.h" +#include "settings.h" class AudioLayerWidget : public QWidget { @@ -28,8 +30,8 @@ private: Status m_status; int m_layer; QPushButton *m_suspendResumeButton; - QLabel *m_fileValue; - QLabel * m_folderValue; + ClickableLabel *m_fileValue; + ClickableLabel * m_folderValue; SliderGroup *m_volume; SliderGroup *m_pan; SliderGroup *m_pitch; @@ -46,10 +48,13 @@ public slots: void durationChanged(float dur); void refreshUi(float progress); +private slots: + void openMediaDialog(); + signals: void uiPlaybackChanged(int layer, Status s); void uiSliderChanged(int layer, Slider s, int value); - + void uiLoadMedia(int layer, QString s); }; #endif // AUDIOLAYERWIDGET_H diff --git a/src/audiowidget.cpp b/src/audiowidget.cpp index 58ca7fd..47d7ce5 100644 --- a/src/audiowidget.cpp +++ b/src/audiowidget.cpp @@ -10,6 +10,7 @@ AudioWidget::AudioWidget(QWidget *parent) : m_layout->insertWidget(i, alw); connect(alw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SIGNAL(uiSliderChanged(int, Slider, int))); connect(alw, SIGNAL(uiPlaybackChanged(int, Status)), this, SIGNAL(uiPlaybackChanged(int, Status))); + connect(alw, SIGNAL(uiLoadMedia(int, QString)), this, SIGNAL(uiLoadMedia(int, QString))); } m_layout->setSpacing(0); m_layout->setContentsMargins(1, 1, 1, 1); @@ -50,12 +51,3 @@ void AudioWidget::cursorChanged(int layer, float cursor) AudioLayerWidget *alw = dynamic_cast(item->widget()); alw->refreshUi(cursor); } -/* -void AudioWidget::uiSliderAction(int layer, Slider s, float value) -{ - emit uiSliderChanged(layer, s, value); -} - -void AudioWidget::uiChangePlaybackStatus(int layer, Status s) { - emit uiPlaybackChanged(layer, s); -}*/ diff --git a/src/audiowidget.h b/src/audiowidget.h index ff3adea..a293a0a 100644 --- a/src/audiowidget.h +++ b/src/audiowidget.h @@ -21,14 +21,11 @@ public: void playbackChanged(int layer, Status status); void cursorChanged(int layer, float cursor); QHBoxLayout *m_layout; -/* -public slots: - void uiSliderAction(int layer, Slider s, float value); - void uiChangePlaybackStatus(int layer, Status s); -*/ + signals: void uiPlaybackChanged(int layer, Status s); void uiSliderChanged(int layer, Slider s, int vol); + void uiLoadMedia(int layer, QString s); }; #endif // AUDIOWIDGET_H diff --git a/src/clickablelabel.cpp b/src/clickablelabel.cpp new file mode 100644 index 0000000..333219b --- /dev/null +++ b/src/clickablelabel.cpp @@ -0,0 +1,13 @@ +#include "clickablelabel.h" + +ClickableLabel::ClickableLabel(QWidget *parent, Qt::WindowFlags f) + : QLabel{parent} +{ + +} + +ClickableLabel::~ClickableLabel() {} + +void ClickableLabel::mousePressEvent(QMouseEvent* event) { + emit clicked(); +} diff --git a/src/clickablelabel.h b/src/clickablelabel.h new file mode 100644 index 0000000..e75aae7 --- /dev/null +++ b/src/clickablelabel.h @@ -0,0 +1,22 @@ +#ifndef CLICKABLELABEL_H +#define CLICKABLELABEL_H + +#include +#include +#include + +class ClickableLabel : public QLabel +{ + Q_OBJECT +public: + explicit ClickableLabel(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); + ~ClickableLabel(); + +signals: + void clicked(); + +protected: + void mousePressEvent(QMouseEvent* event); +}; + +#endif // CLICKABLELABEL_H diff --git a/src/defines.h b/src/defines.h index dee7850..633b06c 100644 --- a/src/defines.h +++ b/src/defines.h @@ -3,10 +3,10 @@ #define VERSION "LibreMediaServerAudio 0.2.0 Antigona Release" #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 LICENSE "GPL 3 Licensed. See LICENSE.txt." #define DEFAULT_FILE "lms-audio.xlm" -#define MAX_LAYERS 16 -#define UI_REFRESH_TIME 200 +#define MAX_LAYERS 4 +#define UI_REFRESH_TIME 1000 // struct where save the DMX settings for each layer struct dmxSetting { diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index deb1a7d..b59a8f1 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -126,6 +126,7 @@ void libreMediaServerAudio::refreshUi() { Status s = m_mae.getStatus(i); if (s == Status::PlayingOnce || s == Status::PlayingLoop) { m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i)); + //m_lmsUi->m_aw->playbackChanged(i, s); } } } @@ -136,6 +137,7 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi) connect(m_ola, SIGNAL(universeReceived(int)), m_lmsUi->m_dmxWidget, SLOT(updateWatchDMX(int))); 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))); }; void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value) @@ -158,4 +160,8 @@ void libreMediaServerAudio::uiPlaybackChanged(int layer, Status s) m_mae.playbackChanged(layer, s); } +void libreMediaServerAudio::uiLoadMedia(int layer, QString s) +{ + m_mae.loadMedia(layer, s.toLatin1().data()); +} #endif diff --git a/src/libremediaserver-audio.h b/src/libremediaserver-audio.h index 9c8f152..6b80f97 100644 --- a/src/libremediaserver-audio.h +++ b/src/libremediaserver-audio.h @@ -56,6 +56,7 @@ private slots: void refreshUi(); void uiSliderChanged(int layer, Slider s, int value); void uiPlaybackChanged(int layer, Status s); + void uiLoadMedia(int layer, QString s); #endif }; diff --git a/src/miniaudioengine.cpp b/src/miniaudioengine.cpp index 7ec94ba..1f2c0b4 100644 --- a/src/miniaudioengine.cpp +++ b/src/miniaudioengine.cpp @@ -122,6 +122,7 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file) MA_SOUND_FLAG_NO_SPATIALIZATION \ /*| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_DECODE \ | MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC \ + | MA_SOUND_FLAG_NO_PITCH \ | MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_STREAM \*/ , NULL, NULL, &m_currentSound[layer]); if (result != MA_SUCCESS) @@ -249,6 +250,7 @@ void MiniAudioEngine::setCursor(int layer, int cursor) ma_sound_get_length_in_pcm_frames(&m_currentSound[layer], &f); f = (cursor * f) / 65025; ma_sound_seek_to_pcm_frame(&m_currentSound[layer], f); + // ToDo: change the loop entry point too } Status MiniAudioEngine::getStatus(int layer)