better ui, change colors and font
This commit is contained in:
parent
1fccbf64fd
commit
88704cd726
9 changed files with 129 additions and 97 deletions
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue