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:
snt 2024-05-04 19:35:12 +02:00
parent 5a7a82736f
commit 389966782d
11 changed files with 86 additions and 25 deletions

View file

@ -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 \

View file

@ -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);
} }

View file

@ -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

View file

@ -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);
}*/

View file

@ -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
View 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
View 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

View file

@ -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 {

View file

@ -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

View file

@ -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
}; };

View file

@ -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)