Antigona Release #1

Merged
snt merged 49 commits from filters into main 2024-05-26 12:42:53 +00:00
7 changed files with 83 additions and 4 deletions
Showing only changes of commit f67ad9b1e1 - Show all commits

View file

@ -51,5 +51,4 @@ v 0.2.1
- Tests: errors on wrong conf file.
v0.2.0:
- BUGFIX: crash at startup and no dmx signal.
- Vumeter or indicator about audio output in layer and master, add to sliderGroup.

View file

@ -22,7 +22,10 @@ enum Status
Paused,
PlayingOnce,
PlayingLoop,
Iddle
Iddle,
PlayingFolder,
PlayingFolderLoop,
PlayingFolderRandom
};
static const char* StatusStr[] =
@ -30,8 +33,11 @@ static const char* StatusStr[] =
"Stop",
"Pause",
"Playing One",
"Playing Loop",
"Playing One Loop",
"Iddle",
"Playing Folder",
"Playing Folder Loop",
"Playing Folder Random",
0x0
};
@ -52,5 +58,8 @@ struct layerData {
int pan;
int pitch;
float duration;
int address;
unsigned int universe;
int device;
};
#endif // DEFINES_H

View file

@ -70,6 +70,14 @@ void libreMediaServerAudio::loadMedia(int layer, int folder, int file)
#endif
m_mae.printFormatInfo(layer);
}
if (m_currentStatus[layer] == Status::PlayingFolder \
|| (m_currentStatus[layer] == Status::PlayingFolderLoop)\
|| (m_currentStatus[layer] == Status::PlayingFolderRandom)) {
m_played.append(file);
} else if (m_currentStatus[layer] == Status::PlayingOnce \
|| m_currentStatus[layer] == Status::PlayingLoop) {
m_played.clear();
}
}
void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
@ -102,6 +110,12 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
s = Status::Paused;
else if (aux == 3)
s = Status::PlayingLoop;
else if (aux == 4)
s = Status::PlayingFolder;
else if (aux == 5)
s = Status::PlayingFolderLoop;
else if (aux == 6)
s = Status::PlayingFolderRandom;
m_mae.playbackChanged(layer, s);
m_currentStatus[layer] = s;
qInfo() << "Layer" << layer << StatusStr[s];
@ -131,10 +145,58 @@ void libreMediaServerAudio::refreshUi() {
}
if (m_updateUi[i][3] >= 0 \
|| m_currentStatus[i] == Status::PlayingOnce\
|| m_currentStatus[i] == Status::PlayingLoop) {
|| m_currentStatus[i] == Status::PlayingLoop\
|| m_currentStatus[i] == Status::PlayingFolder\
|| m_currentStatus[i] == Status::PlayingFolderLoop
|| m_currentStatus[i] == Status::PlayingFolderRandom) {
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
m_updateUi[i][3] = -1;
}
if (m_mae.getAtEnd(i)) {
if (m_played.isEmpty())
m_played.append(m_ola->getValue(i, DMX_FILE));
if (m_currentStatus[i] == Status::PlayingOnce) {
m_currentStatus[i] = Status::Stopped;
}
if (m_currentStatus[i] == Status::PlayingFolder) {
uint last = m_played.last();
int folder = m_ola->getValue(i, DMX_FOLDER);
last++;
if (last < m_mediaLibrary->getMediaFolderCount(folder)) {
this->loadMedia(i, folder, last);
m_mae.playbackChanged(i, Status::PlayingFolder);
}
else {
m_currentStatus[i] = Status::Stopped;
m_lmsUi->m_aw->playbackChanged(i, Status::Stopped);
}
}
if (m_currentStatus[i] == Status::PlayingFolderLoop) {
uint last = m_played.last();
int folder = m_ola->getValue(i, DMX_FOLDER);
last++;
if (last >= m_mediaLibrary->getMediaFolderCount(folder)) {
this->loadMedia(i, folder, 0);
m_mae.playbackChanged(i, Status::PlayingFolderLoop);
} else {
this->loadMedia(i, folder, last);
m_mae.playbackChanged(i, Status::PlayingFolder);
}
}
if (m_currentStatus[i] == Status::PlayingFolderRandom) {
int last = -1;
int folder = m_ola->getValue(i, DMX_FOLDER);
if (uint(abs(m_played.size())) >= m_mediaLibrary->getMediaFolderCount(folder))
m_played.clear();
while (last == -1) {
last = rand() % m_mediaLibrary->getMediaFolderCount(folder);
if (m_played.contains(last))
last = -1;
}
this->loadMedia(i, folder, last);
m_mae.playbackChanged(i, Status::PlayingFolderRandom);
}
}
}
}

View file

@ -52,6 +52,7 @@ private:
Status m_currentStatus[MAX_LAYERS];
QList<dmxSetting> m_dmxSettings;
bool m_ui;
QList<int> m_played;
#ifndef NOGUI
QTimer *m_refreshUi;
libreMediaServerAudioUi *m_lmsUi;

View file

@ -29,6 +29,9 @@ public:
MediaLibrary(QObject *parent = 0);
QString requestNewFile(int folder, int layer);
void initMediaLibrary();
inline uint getMediaFolderCount(int folder) {
return m_media->at(folder).m_ElementCount;
}
private:
QList<MediaFolder> *m_media;

View file

@ -247,6 +247,9 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
result = ma_sound_start(&m_currentSound[layer]);
break;
case Status::PlayingOnce:
case Status::PlayingFolder:
case Status::PlayingFolderLoop:
case Status::PlayingFolderRandom:
ma_sound_set_stop_time_in_milliseconds(&m_currentSound[layer], ~(ma_uint64)0);
ma_sound_set_looping(&m_currentSound[layer], false);
result = ma_sound_start(&m_currentSound[layer]);

View file

@ -5,6 +5,7 @@
#include "miniaudio.h"
#include "defines.h" // MAX_LAYERS
#include <QDebug> // prints messages
#define MA_DEBUG_OUTPUT
class MiniAudioEngine
{
@ -29,6 +30,7 @@ protected:
Status getStatus(int layer);
inline float getVol(int layer) {
return ma_sound_get_volume(&m_currentSound[layer]); }
inline bool getAtEnd(int layer) { return m_currentSound[layer].atEnd; }
private:
ma_resource_manager_config resourceManagerConfig;