Antigona Release #1
11 changed files with 86 additions and 25 deletions
|
@ -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 \
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -3,11 +3,13 @@
|
|||
|
||||
#include <QPushButton>
|
||||
#include <QTimeEdit>
|
||||
#include <QLabel>
|
||||
#include <QFileDialog>
|
||||
#include <QProgressBar>
|
||||
|
||||
#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
|
||||
|
|
|
@ -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<AudioLayerWidget *>(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);
|
||||
}*/
|
||||
|
|
|
@ -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
|
||||
|
|
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 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 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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue