nuevos modos de reproducción: Play Folder, Play Folder Loop, Play Folder
Random.
This commit is contained in:
parent
cd0105c9f9
commit
f67ad9b1e1
7 changed files with 83 additions and 4 deletions
|
@ -51,5 +51,4 @@ v 0.2.1
|
||||||
- Tests: errors on wrong conf file.
|
- Tests: errors on wrong conf file.
|
||||||
|
|
||||||
v0.2.0:
|
v0.2.0:
|
||||||
- BUGFIX: crash at startup and no dmx signal.
|
|
||||||
- Vumeter or indicator about audio output in layer and master, add to sliderGroup.
|
- Vumeter or indicator about audio output in layer and master, add to sliderGroup.
|
||||||
|
|
|
@ -22,7 +22,10 @@ enum Status
|
||||||
Paused,
|
Paused,
|
||||||
PlayingOnce,
|
PlayingOnce,
|
||||||
PlayingLoop,
|
PlayingLoop,
|
||||||
Iddle
|
Iddle,
|
||||||
|
PlayingFolder,
|
||||||
|
PlayingFolderLoop,
|
||||||
|
PlayingFolderRandom
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* StatusStr[] =
|
static const char* StatusStr[] =
|
||||||
|
@ -30,8 +33,11 @@ static const char* StatusStr[] =
|
||||||
"Stop",
|
"Stop",
|
||||||
"Pause",
|
"Pause",
|
||||||
"Playing One",
|
"Playing One",
|
||||||
"Playing Loop",
|
"Playing One Loop",
|
||||||
"Iddle",
|
"Iddle",
|
||||||
|
"Playing Folder",
|
||||||
|
"Playing Folder Loop",
|
||||||
|
"Playing Folder Random",
|
||||||
0x0
|
0x0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -52,5 +58,8 @@ struct layerData {
|
||||||
int pan;
|
int pan;
|
||||||
int pitch;
|
int pitch;
|
||||||
float duration;
|
float duration;
|
||||||
|
int address;
|
||||||
|
unsigned int universe;
|
||||||
|
int device;
|
||||||
};
|
};
|
||||||
#endif // DEFINES_H
|
#endif // DEFINES_H
|
||||||
|
|
|
@ -70,6 +70,14 @@ void libreMediaServerAudio::loadMedia(int layer, int folder, int file)
|
||||||
#endif
|
#endif
|
||||||
m_mae.printFormatInfo(layer);
|
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)
|
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;
|
s = Status::Paused;
|
||||||
else if (aux == 3)
|
else if (aux == 3)
|
||||||
s = Status::PlayingLoop;
|
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_mae.playbackChanged(layer, s);
|
||||||
m_currentStatus[layer] = s;
|
m_currentStatus[layer] = s;
|
||||||
qInfo() << "Layer" << layer << StatusStr[s];
|
qInfo() << "Layer" << layer << StatusStr[s];
|
||||||
|
@ -131,10 +145,58 @@ void libreMediaServerAudio::refreshUi() {
|
||||||
}
|
}
|
||||||
if (m_updateUi[i][3] >= 0 \
|
if (m_updateUi[i][3] >= 0 \
|
||||||
|| m_currentStatus[i] == Status::PlayingOnce\
|
|| 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_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
|
||||||
m_updateUi[i][3] = -1;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ private:
|
||||||
Status m_currentStatus[MAX_LAYERS];
|
Status m_currentStatus[MAX_LAYERS];
|
||||||
QList<dmxSetting> m_dmxSettings;
|
QList<dmxSetting> m_dmxSettings;
|
||||||
bool m_ui;
|
bool m_ui;
|
||||||
|
QList<int> m_played;
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
QTimer *m_refreshUi;
|
QTimer *m_refreshUi;
|
||||||
libreMediaServerAudioUi *m_lmsUi;
|
libreMediaServerAudioUi *m_lmsUi;
|
||||||
|
|
|
@ -29,6 +29,9 @@ public:
|
||||||
MediaLibrary(QObject *parent = 0);
|
MediaLibrary(QObject *parent = 0);
|
||||||
QString requestNewFile(int folder, int layer);
|
QString requestNewFile(int folder, int layer);
|
||||||
void initMediaLibrary();
|
void initMediaLibrary();
|
||||||
|
inline uint getMediaFolderCount(int folder) {
|
||||||
|
return m_media->at(folder).m_ElementCount;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<MediaFolder> *m_media;
|
QList<MediaFolder> *m_media;
|
||||||
|
|
|
@ -247,6 +247,9 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
||||||
result = ma_sound_start(&m_currentSound[layer]);
|
result = ma_sound_start(&m_currentSound[layer]);
|
||||||
break;
|
break;
|
||||||
case Status::PlayingOnce:
|
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_stop_time_in_milliseconds(&m_currentSound[layer], ~(ma_uint64)0);
|
||||||
ma_sound_set_looping(&m_currentSound[layer], false);
|
ma_sound_set_looping(&m_currentSound[layer], false);
|
||||||
result = ma_sound_start(&m_currentSound[layer]);
|
result = ma_sound_start(&m_currentSound[layer]);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "miniaudio.h"
|
#include "miniaudio.h"
|
||||||
#include "defines.h" // MAX_LAYERS
|
#include "defines.h" // MAX_LAYERS
|
||||||
#include <QDebug> // prints messages
|
#include <QDebug> // prints messages
|
||||||
|
#define MA_DEBUG_OUTPUT
|
||||||
|
|
||||||
class MiniAudioEngine
|
class MiniAudioEngine
|
||||||
{
|
{
|
||||||
|
@ -29,6 +30,7 @@ protected:
|
||||||
Status getStatus(int layer);
|
Status getStatus(int layer);
|
||||||
inline float getVol(int layer) {
|
inline float getVol(int layer) {
|
||||||
return ma_sound_get_volume(&m_currentSound[layer]); }
|
return ma_sound_get_volume(&m_currentSound[layer]); }
|
||||||
|
inline bool getAtEnd(int layer) { return m_currentSound[layer].atEnd; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ma_resource_manager_config resourceManagerConfig;
|
ma_resource_manager_config resourceManagerConfig;
|
||||||
|
|
Loading…
Add table
Reference in a new issue