open file dialog clicking on file/folder labels.
se atasca y se pone a 100%, los faders no refrescan como debieran, parece que se saturan las señales.
This commit is contained in:
parent
5a7a82736f
commit
389966782d
11 changed files with 86 additions and 25 deletions
|
@ -2,6 +2,7 @@ TEMPLATE = app
|
||||||
TARGET = libremediaserver-audio
|
TARGET = libremediaserver-audio
|
||||||
QT += webkitwidgets widgets
|
QT += webkitwidgets widgets
|
||||||
HEADERS += src/libremediaserver-audio.h \
|
HEADERS += src/libremediaserver-audio.h \
|
||||||
|
src/clickablelabel.h \
|
||||||
src/dmxwidget.h \
|
src/dmxwidget.h \
|
||||||
src/libremediaserver-audio-gui.h \
|
src/libremediaserver-audio-gui.h \
|
||||||
src/main.h \
|
src/main.h \
|
||||||
|
@ -16,6 +17,7 @@ HEADERS += src/libremediaserver-audio.h \
|
||||||
src/settings.h \
|
src/settings.h \
|
||||||
src/slidergroup.h
|
src/slidergroup.h
|
||||||
SOURCES += src/main.cpp \
|
SOURCES += src/main.cpp \
|
||||||
|
src/clickablelabel.cpp \
|
||||||
src/dmxwidget.cpp \
|
src/dmxwidget.cpp \
|
||||||
src/libremediaserver-audio-gui.cpp \
|
src/libremediaserver-audio-gui.cpp \
|
||||||
src/miniaudio.c \
|
src/miniaudio.c \
|
||||||
|
|
|
@ -9,7 +9,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
QVBoxLayout *layout = new QVBoxLayout;
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
|
|
||||||
QVBoxLayout *playback = new QVBoxLayout;
|
QVBoxLayout *playback = new QVBoxLayout;
|
||||||
m_folderValue = new QLabel;
|
m_folderValue = new ClickableLabel;
|
||||||
//m_folderValue->setMaximumWidth(160);
|
//m_folderValue->setMaximumWidth(160);
|
||||||
m_folderValue->setAlignment(Qt::AlignHCenter);
|
m_folderValue->setAlignment(Qt::AlignHCenter);
|
||||||
m_folderValue->setStyleSheet(
|
m_folderValue->setStyleSheet(
|
||||||
|
@ -17,7 +17,9 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
"background-color: black;"
|
"background-color: black;"
|
||||||
);
|
);
|
||||||
playback->addWidget(m_folderValue);
|
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->setMaximumWidth(160);
|
||||||
m_fileValue->setAlignment(Qt::AlignHCenter);
|
m_fileValue->setAlignment(Qt::AlignHCenter);
|
||||||
m_fileValue->setStyleSheet(
|
m_fileValue->setStyleSheet(
|
||||||
|
@ -52,6 +54,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
m_progressTime->setMaximumWidth(75);
|
m_progressTime->setMaximumWidth(75);
|
||||||
m_progressTime->setFocusPolicy(Qt::NoFocus);
|
m_progressTime->setFocusPolicy(Qt::NoFocus);
|
||||||
m_progressTime->setAlignment(Qt::AlignHCenter);
|
m_progressTime->setAlignment(Qt::AlignHCenter);
|
||||||
|
m_progressTime->setContentsMargins(0,0,0,0);
|
||||||
m_totalTimeValue = new QTimeEdit;
|
m_totalTimeValue = new QTimeEdit;
|
||||||
m_totalTimeValue->setObjectName("Track Length");
|
m_totalTimeValue->setObjectName("Track Length");
|
||||||
m_totalTimeValue->setToolTip("Track Length");
|
m_totalTimeValue->setToolTip("Track Length");
|
||||||
|
@ -61,6 +64,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
m_totalTimeValue->setMaximumWidth(75);
|
m_totalTimeValue->setMaximumWidth(75);
|
||||||
m_totalTimeValue->setFocusPolicy(Qt::NoFocus);
|
m_totalTimeValue->setFocusPolicy(Qt::NoFocus);
|
||||||
m_totalTimeValue->setAlignment(Qt::AlignHCenter);
|
m_totalTimeValue->setAlignment(Qt::AlignHCenter);
|
||||||
|
m_totalTimeValue->setContentsMargins(0,0,0,0);
|
||||||
QHBoxLayout *status = new QHBoxLayout;
|
QHBoxLayout *status = new QHBoxLayout;
|
||||||
status->addWidget(m_progressTime);
|
status->addWidget(m_progressTime);
|
||||||
status->addWidget(m_totalTimeValue);
|
status->addWidget(m_totalTimeValue);
|
||||||
|
@ -115,13 +119,28 @@ void AudioLayerWidget::toggleSuspendResume()
|
||||||
break;
|
break;
|
||||||
case Status::Paused:
|
case Status::Paused:
|
||||||
case Status::Stopped:
|
case Status::Stopped:
|
||||||
this->setPlaybackStatus(Status::PlayingOnce);
|
//this->setPlaybackStatus(Status::PlayingOnce);
|
||||||
emit uiPlaybackChanged(m_layer, Status::PlayingOnce);
|
emit uiPlaybackChanged(m_layer, Status::PlayingOnce);
|
||||||
case Status::Iddle:
|
case Status::Iddle:
|
||||||
break;
|
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
|
// from DMX signals
|
||||||
void AudioLayerWidget::setVol(float vol)
|
void AudioLayerWidget::setVol(float vol)
|
||||||
{
|
{
|
||||||
|
@ -157,10 +176,12 @@ void AudioLayerWidget::fileLoaded(QString file)
|
||||||
|
|
||||||
void AudioLayerWidget::setPlaybackStatus(Status status)
|
void AudioLayerWidget::setPlaybackStatus(Status status)
|
||||||
{
|
{
|
||||||
|
if (StatusStr[status] == m_suspendResumeButton->text())
|
||||||
|
return;
|
||||||
|
m_suspendResumeButton->blockSignals(true);
|
||||||
m_status = status;
|
m_status = status;
|
||||||
if (status == Status::Stopped)
|
if (status == Status::Stopped)
|
||||||
m_progress->setValue(0);
|
m_progress->setValue(0);
|
||||||
m_suspendResumeButton->blockSignals(true);
|
|
||||||
m_suspendResumeButton->setText(StatusStr[status]);
|
m_suspendResumeButton->setText(StatusStr[status]);
|
||||||
m_suspendResumeButton->blockSignals(false);
|
m_suspendResumeButton->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,13 @@
|
||||||
|
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QTimeEdit>
|
#include <QTimeEdit>
|
||||||
#include <QLabel>
|
#include <QFileDialog>
|
||||||
#include <QProgressBar>
|
#include <QProgressBar>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "slidergroup.h"
|
#include "slidergroup.h"
|
||||||
|
#include "clickablelabel.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
class AudioLayerWidget : public QWidget
|
class AudioLayerWidget : public QWidget
|
||||||
{
|
{
|
||||||
|
@ -28,8 +30,8 @@ private:
|
||||||
Status m_status;
|
Status m_status;
|
||||||
int m_layer;
|
int m_layer;
|
||||||
QPushButton *m_suspendResumeButton;
|
QPushButton *m_suspendResumeButton;
|
||||||
QLabel *m_fileValue;
|
ClickableLabel *m_fileValue;
|
||||||
QLabel * m_folderValue;
|
ClickableLabel * m_folderValue;
|
||||||
SliderGroup *m_volume;
|
SliderGroup *m_volume;
|
||||||
SliderGroup *m_pan;
|
SliderGroup *m_pan;
|
||||||
SliderGroup *m_pitch;
|
SliderGroup *m_pitch;
|
||||||
|
@ -46,10 +48,13 @@ public slots:
|
||||||
void durationChanged(float dur);
|
void durationChanged(float dur);
|
||||||
void refreshUi(float progress);
|
void refreshUi(float progress);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void openMediaDialog();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
void uiSliderChanged(int layer, Slider s, int value);
|
void uiSliderChanged(int layer, Slider s, int value);
|
||||||
|
void uiLoadMedia(int layer, QString s);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AUDIOLAYERWIDGET_H
|
#endif // AUDIOLAYERWIDGET_H
|
||||||
|
|
|
@ -10,6 +10,7 @@ AudioWidget::AudioWidget(QWidget *parent) :
|
||||||
m_layout->insertWidget(i, alw);
|
m_layout->insertWidget(i, alw);
|
||||||
connect(alw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SIGNAL(uiSliderChanged(int, Slider, int)));
|
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(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->setSpacing(0);
|
||||||
m_layout->setContentsMargins(1, 1, 1, 1);
|
m_layout->setContentsMargins(1, 1, 1, 1);
|
||||||
|
@ -50,12 +51,3 @@ void AudioWidget::cursorChanged(int layer, float cursor)
|
||||||
AudioLayerWidget *alw = dynamic_cast<AudioLayerWidget *>(item->widget());
|
AudioLayerWidget *alw = dynamic_cast<AudioLayerWidget *>(item->widget());
|
||||||
alw->refreshUi(cursor);
|
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);
|
|
||||||
}*/
|
|
||||||
|
|
|
@ -21,14 +21,11 @@ public:
|
||||||
void playbackChanged(int layer, Status status);
|
void playbackChanged(int layer, Status status);
|
||||||
void cursorChanged(int layer, float cursor);
|
void cursorChanged(int layer, float cursor);
|
||||||
QHBoxLayout *m_layout;
|
QHBoxLayout *m_layout;
|
||||||
/*
|
|
||||||
public slots:
|
|
||||||
void uiSliderAction(int layer, Slider s, float value);
|
|
||||||
void uiChangePlaybackStatus(int layer, Status s);
|
|
||||||
*/
|
|
||||||
signals:
|
signals:
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
void uiSliderChanged(int layer, Slider s, int vol);
|
void uiSliderChanged(int layer, Slider s, int vol);
|
||||||
|
void uiLoadMedia(int layer, QString s);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AUDIOWIDGET_H
|
#endif // AUDIOWIDGET_H
|
||||||
|
|
13
src/clickablelabel.cpp
Normal file
13
src/clickablelabel.cpp
Normal file
|
@ -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();
|
||||||
|
}
|
22
src/clickablelabel.h
Normal file
22
src/clickablelabel.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef CLICKABLELABEL_H
|
||||||
|
#define CLICKABLELABEL_H
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <Qt>
|
||||||
|
|
||||||
|
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
|
|
@ -3,10 +3,10 @@
|
||||||
|
|
||||||
#define VERSION "LibreMediaServerAudio 0.2.0 Antigona Release"
|
#define VERSION "LibreMediaServerAudio 0.2.0 Antigona Release"
|
||||||
#define COPYRIGHT "(C) 2014-2024 Santi Noreña <lms@criptomart.net>"
|
#define COPYRIGHT "(C) 2014-2024 Santi Noreña <lms@criptomart.net>"
|
||||||
#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 DEFAULT_FILE "lms-audio.xlm"
|
||||||
#define MAX_LAYERS 16
|
#define MAX_LAYERS 4
|
||||||
#define UI_REFRESH_TIME 200
|
#define UI_REFRESH_TIME 1000
|
||||||
|
|
||||||
// struct where save the DMX settings for each layer
|
// struct where save the DMX settings for each layer
|
||||||
struct dmxSetting {
|
struct dmxSetting {
|
||||||
|
|
|
@ -126,6 +126,7 @@ void libreMediaServerAudio::refreshUi() {
|
||||||
Status s = m_mae.getStatus(i);
|
Status s = m_mae.getStatus(i);
|
||||||
if (s == Status::PlayingOnce || s == Status::PlayingLoop) {
|
if (s == Status::PlayingOnce || s == Status::PlayingLoop) {
|
||||||
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
|
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_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(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(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)
|
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);
|
m_mae.playbackChanged(layer, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void libreMediaServerAudio::uiLoadMedia(int layer, QString s)
|
||||||
|
{
|
||||||
|
m_mae.loadMedia(layer, s.toLatin1().data());
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -56,6 +56,7 @@ private slots:
|
||||||
void refreshUi();
|
void refreshUi();
|
||||||
void uiSliderChanged(int layer, Slider s, int value);
|
void uiSliderChanged(int layer, Slider s, int value);
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
|
void uiLoadMedia(int layer, QString s);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,7 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file)
|
||||||
MA_SOUND_FLAG_NO_SPATIALIZATION \
|
MA_SOUND_FLAG_NO_SPATIALIZATION \
|
||||||
/*| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_DECODE \
|
/*| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_DECODE \
|
||||||
| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC \
|
| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC \
|
||||||
|
| MA_SOUND_FLAG_NO_PITCH \
|
||||||
| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_STREAM \*/
|
| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_STREAM \*/
|
||||||
, NULL, NULL, &m_currentSound[layer]);
|
, NULL, NULL, &m_currentSound[layer]);
|
||||||
if (result != MA_SUCCESS)
|
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);
|
ma_sound_get_length_in_pcm_frames(&m_currentSound[layer], &f);
|
||||||
f = (cursor * f) / 65025;
|
f = (cursor * f) / 65025;
|
||||||
ma_sound_seek_to_pcm_frame(&m_currentSound[layer], f);
|
ma_sound_seek_to_pcm_frame(&m_currentSound[layer], f);
|
||||||
|
// ToDo: change the loop entry point too
|
||||||
}
|
}
|
||||||
|
|
||||||
Status MiniAudioEngine::getStatus(int layer)
|
Status MiniAudioEngine::getStatus(int layer)
|
||||||
|
|
Loading…
Add table
Reference in a new issue