nuevos modos de reproducción: Play Folder, Play Folder Loop, Play Folder

Random.
This commit is contained in:
snt 2024-05-09 14:07:24 +02:00
parent cd0105c9f9
commit f67ad9b1e1
7 changed files with 83 additions and 4 deletions

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);
}
}
}
}