better ui, change colors and font

This commit is contained in:
snt 2024-05-04 15:05:45 +02:00
parent 1fccbf64fd
commit 88704cd726
9 changed files with 129 additions and 97 deletions

View file

@ -4,39 +4,47 @@ Libre Media Server Audio - An Open source Media Server for arts and performing.
https://git.criptomart.net/libremediaserver
*******************************************************************************
Lbre Media Server ChangeLog
Libre Media Server ChangeLog
v 0.2.0 Antigona (24/04/2024)
+ change engine to miniaudio because is imposible pan in SFML and it has not access to low API and audio processing.
+ Refactor all audio methods to MiniAudioEngine.
v 0.2.0 Antígona (24/04/2024)
+ Change audio engine to miniaudio because is imposible pan in SFML and it has not access to low API and audio processing.
+ Refactor all audio methods to MiniAudioEngine class.
+ Select sound device output.
+ pan.
+ Show faders values.
+ play offset.
+ Pan.
+ Show faders values. New SliderGroup class.
+ Entry Point 16 bits.
+ Refactor AudioMasterWidget to AudioDMXReceptionWidget.
+ mp3, flac, wav (mp3 has given some errors seeking cursor...).
+ settings dialog not working, only read the conf file at startup.
+ variable number of layers.
+ olathread, send double channels only once for each dmx frame buffer.
+ Read mp3, flac, wav (mp3 has given some errors seeking cursor...).
+ Removed settings dialog, only read xml conf file at startup.
+ Real dynamic variable number of layers based on conf file setting.
+ OlaThread send double channels (volume, entry point, load media) only once for each dmx frame buffer.
+ Terminal mode without graphical interface. All audio methods has been refactorized out of QWidget world.
+ Compilation without GUI (-DNOGUI).
+ New Status "Iddle" in playbacks if is not loaded.
+ New DMX personality version, better sort for audio needs (first load media, set vol, pan, etc, last playback order);
v 0.1.3 Unreleased (19/04/2024)
v 0.1.3 Leúcade (19/04/2024)
+ Ubuntu 22.04 jammy.
+ Use SFML as audio engine.
+ Qt 5.15.3.
+ pitch.
+ loop.
+ Pitch.
+ Loop.
v 0.1.2 Mayordomo (12/08/2015)
- GUI config
- Several bugs tested in real world
- variable layers
- SFML as audio engine
- GUI config.
- Several bugs tested in real world.
- Variable layers.
- SFML as audio engine.
v 0.1.1 Pascual (24/09/2014)
+ First Version: 4 layers playing .ogg
+ Needs Open Lighting Arquitecture => 0.9.0
+ Pure Data as audio engine
+ First Version: 4 layers playing .ogg.
+ Needs Open Lighting Arquitecture => 0.9.0.
+ Pure Data as audio engine.

View file

@ -20,8 +20,8 @@ v 0.2.2
+ hay que empaquetar OLA, incluirlo en el binario, o implementar sACN y linkarlo estáticamente.
+ https://github.com/ETCLabs/sACN
- Qt6.
- audio processing (eq, rev, compresor, ...) por master y capa.
- CIPT/MSex, send icons play-pause-stop.
- Audio processing (eq, rev, compresor, ...) by master and layer.
- CIPT/MSex, send icons play/pause/stop.
- Rasp build.
- Octopus Sound Card support (6 outputs - 8 inputs).
@ -41,15 +41,13 @@ v 0.2.1
- audio device linked, outputs will be redirected there.
- dmx address + universe settings.
- Rose noise and sine generator in menu to test system.
- Keyboards strokes, load media files from ui.
- Dar la opción clickeando en el widget de tiempo de poner una cuenta atrás en vez de hacia delante.
- Ui/Ux; Keyboards strokes, load media files from ui.
- Ui/Ux: Dar la opción clickeando en el widget de tiempo de poner una cuenta atrás en vez de hacia delante.
- Logs, verbosity, timestamp.
- Bufgix: depurar errores cuando no carga la librería de medias, cambia el númmero de capas, cambia el universo, etc.
- New control mode without pitch control, it saves resources. MA_SOUND_FLAG_NO_PITCH
- New play mode without pitch control, it saves resources. MA_SOUND_FLAG_NO_PITCH
- Vumeter or indicator about audio output in layer and master.
- SettingsDialog.
- Load/save conf file.
- ¿stop offset? is it needed?
- decouple MiniAudioEngine from AudioWidget, starts whith no gui or with audio in a dedicated thread.
- New Status "Iddle" in playbacks if is not loaded.
- check return errors, we are too happy....
- ¿Exit Point? is it needed?
- Hardening: check return errors, i'm too happy....
- Tests: errors on wrong conf file.

View file

@ -8,9 +8,31 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
{
QVBoxLayout *layout = new QVBoxLayout;
QVBoxLayout *playback = new QVBoxLayout;
m_folderValue = new QLabel;
//m_folderValue->setMaximumWidth(160);
m_folderValue->setAlignment(Qt::AlignHCenter);
m_folderValue->setStyleSheet(
"color: white;"
"background-color: black;"
);
playback->addWidget(m_folderValue);
m_fileValue = new QLabel;
//m_fileValue->setMaximumWidth(160);
m_fileValue->setAlignment(Qt::AlignHCenter);
m_fileValue->setStyleSheet(
"color: white;"
"background-color: black;"
);
playback->addWidget(m_fileValue);
playback->setSpacing(0);
playback->setContentsMargins(0, 0, 0, 0);
layout->addLayout(playback);
m_suspendResumeButton = new QPushButton(this);
m_suspendResumeButton->setText(StatusStr[Status::Iddle]);
m_suspendResumeButton->setMaximumWidth(200);
//m_suspendResumeButton->setMaximumWidth(180);
//connect(m_suspendResumeButton, SIGNAL(clicked()), SLOT(toggleSuspendResume()));
layout->addWidget(m_suspendResumeButton);
@ -19,7 +41,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
m_progress->setRange(0, 0);
m_progress->setValue(0);
m_progress->setFormat("%v / %m");
m_progress->setMaximumWidth(200);
//m_progress->setMaximumWidth(180);
layout->addWidget(m_progress);
m_progressTime = new QTimeEdit;
@ -28,7 +50,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
m_progressTime->setDisplayFormat("h:mm:ss:zzz");
m_progressTime->setReadOnly(true);
m_progressTime->setButtonSymbols(QAbstractSpinBox::NoButtons);
m_progressTime->setMaximumWidth(88);
//m_progressTime->setMaximumWidth(80);
m_progressTime->setFocusPolicy(Qt::NoFocus);
m_totalTimeValue = new QTimeEdit;
m_totalTimeValue->setObjectName("Track Length");
@ -36,32 +58,28 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
m_totalTimeValue->setDisplayFormat("h:mm:ss:zzz");
m_totalTimeValue->setReadOnly(true);
m_totalTimeValue->setButtonSymbols(QAbstractSpinBox::NoButtons);
m_totalTimeValue->setMaximumWidth(88);
//m_totalTimeValue->setMaximumWidth(80);
m_totalTimeValue->setFocusPolicy(Qt::NoFocus);
QHBoxLayout *status = new QHBoxLayout;
status->addWidget(m_progressTime);
status->addWidget(m_totalTimeValue);
layout->addLayout(status);
QVBoxLayout *playback = new QVBoxLayout;
m_folderValue = new QLabel;
m_folderValue->setMaximumWidth(200);
playback->addWidget(m_folderValue);
m_fileValue = new QLabel;
m_fileValue->setMaximumWidth(200);
playback->addWidget(m_fileValue);
layout->addLayout(playback);
QHBoxLayout *volumeBox = new QHBoxLayout;
m_volume = new SliderGroup(0 , 100, 2, NULL);
m_volume = new SliderGroup("Vol", 0 , 100, 2, NULL);
volumeBox->addWidget(m_volume);
connect(m_volume, SIGNAL(valueChanged(float)), this, SLOT(volumeChanged(float)));
m_pan = new SliderGroup(0 , 255, 0, NULL);
m_pan = new SliderGroup("Pan", 0 , 255, 0, NULL);
volumeBox->addWidget(m_pan);
connect(m_pan, SIGNAL(valueChanged(float)), this, SLOT(panChanged(float)));
m_pitch = new SliderGroup(0 , 255, 0, NULL);
m_pitch = new SliderGroup("Pitch", 0 , 255, 0, NULL);
volumeBox->addWidget(m_pitch);
volumeBox->setSpacing(0);
volumeBox->setContentsMargins(0, 0, 0, 0);
connect(m_pitch, SIGNAL(valueChanged(float)), this, SLOT(pitchChanged(float)));
layout->addLayout(volumeBox);
layout->setAlignment(Qt::AlignHCenter);
layout->setSpacing(0);
layout->setContentsMargins(2, 2, 2, 2);
this->setLayout(layout);
}

View file

@ -10,6 +10,8 @@ AudioWidget::AudioWidget() :
connect(alw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderAction(int, Slider, int)));
connect(alw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiChangePlaybackStatus(int, Status)));
}
m_layout->setSpacing(0);
m_layout->setContentsMargins(0, 0, 0, 0);
setLayout(m_layout);
}

View file

@ -9,6 +9,8 @@ dmxWidget::dmxWidget(QWidget *parent) :
QVBoxLayout *vbox = new QVBoxLayout;
m_receiveDMX->setText("DMX Signal");
vbox->addWidget(m_receiveDMX);
vbox->setSpacing(1);
vbox->setContentsMargins(1, 1, 1, 1);
this->setLayout(vbox);
connect(m_watchDMX, SIGNAL(timeout()),
this, SLOT(watchDMXExpired()));

View file

@ -32,8 +32,16 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
QDockWidget *topWidget = new QDockWidget(tr("Master"), this);
topWidget->setAllowedAreas(Qt::TopDockWidgetArea);
topWidget->setWidget(m_dmxWidget);
topWidget->setContentsMargins(0, 0, 0, 0);
addDockWidget(Qt::TopDockWidgetArea, topWidget);
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
this->setContentsMargins(5, 5, 5, 5);
this->setStyleSheet(
"color: white;"
"background-color: gray;"
"selection-color: blue;"
"selection-background-color: green"
);
}
libreMediaServerAudioUi::~libreMediaServerAudioUi()

View file

@ -1,19 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Santi Noreña belfegor@gmail.com</author>
<author>Santi Noreña lms@criptomart.net</author>
<class>LibreMediaServerAudio</class>
<widget class="QMainWindow" name="LibreMediaServerAudio">
<widget class="QMainWindow" name="LibreMediaServer Audio">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>114</width>
<height>218</height>
<width>800</width>
<height>800</height>
</rect>
</property>
<property name="font">
<font>
<family>Unifont</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="windowTitle">
<string>LibreMediaServer</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</iconset>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
@ -21,7 +33,7 @@
<x>0</x>
<y>0</y>
<width>114</width>
<height>22</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -32,47 +44,9 @@
</widget>
<addaction name="menuFile"/>
</widget>
<action name="actionExit">
<property name="text">
<string>Exit</string>
</property>
</action>
<action name="actionOpen_conf">
<property name="text">
<string>Open Configuration...</string>
</property>
</action>
<action name="actionSave_conf">
<property name="text">
<string>Save Configuration...</string>
</property>
</action>
<action name="action_Settings">
<property name="text">
<string>Settings...</string>
</property>
</action>
<action name="actionInitMSEX">
<property name="checkable">
<bool>false</bool>
</property>
<property name="text">
<string>Init</string>
</property>
</action>
<action name="actionIP_Address">
<property name="text">
<string>IP Address</string>
</property>
</action>
<action name="actionMake_Thumbs">
<property name="text">
<string>Make Thumbs</string>
</property>
</action>
<action name="actionLaunch_OLA_Setup">
<property name="text">
<string>OLA Setup...</string>
<string>OLA Setup</string>
</property>
</action>
</widget>

View file

@ -1,6 +1,7 @@
#include "slidergroup.h"
SliderGroup::SliderGroup(int min,
SliderGroup::SliderGroup(QString name,
int min,
int max,
int decimals,
QWidget *parent)
@ -8,23 +9,43 @@ SliderGroup::SliderGroup(int min,
{
QVBoxLayout *layout = new QVBoxLayout;
layout->setAlignment(Qt::AlignHCenter);
this->setMaximumWidth(65);
layout->setContentsMargins(0, 0, 0, 0);
//this->setMaximumWidth(40);
slider = new QSlider(Qt::Orientation::Vertical);
slider->setFocusPolicy(Qt::StrongFocus);
slider->setTickPosition(QSlider::TicksBothSides);
slider->setTickInterval((max - min) / 11);
slider->setMinimumHeight(100);
slider->setSingleStep(1);
slider->setRange(min, max);
slider->setMaximumWidth(65);
//slider->setMaximumWidth(40);
slider->setToolTip(name);
slider->setStyleSheet("QSlider {"
"border: 1px solid #999999;"
"margin: 0px;"
"height: 200px;"
"width: 40px;}"
);
slider->setContentsMargins(0, 0, 0, 0);
valueBox = new QDoubleSpinBox();
valueBox->setFocusPolicy(Qt::NoFocus);
valueBox->setButtonSymbols(QAbstractSpinBox::NoButtons);
valueBox->setMaximumWidth(65);
//valueBox->setMaximumWidth(40);
valueBox->setRange(min, max);
valueBox->setDecimals(decimals);
valueBox->setObjectName(name);
valueBox->setToolTip(name);
valueBox->setAlignment(Qt::AlignHCenter);
valueBox->setContentsMargins(0, 0, 0, 0);
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int)));
layout->addWidget(slider);
layout->addWidget(valueBox);
this->setStyleSheet("border: 1px solid #999999;"
"width: 40px;"
"margin: 0px;"
);
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
this->setLayout(layout);
}

View file

@ -11,7 +11,8 @@ class SliderGroup : public QWidget
Q_OBJECT
public:
SliderGroup(int min,
SliderGroup(QString name,
int min,
int max,
int decimals,
QWidget *parent = nullptr);