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.
|
||||
|
||||
v0.2.0:
|
||||
- BUGFIX: crash at startup and no dmx signal.
|
||||
- Vumeter or indicator about audio output in layer and master, add to sliderGroup.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue