fade out when stop or pause
This commit is contained in:
parent
aa713fd9be
commit
b4988a1307
8 changed files with 28 additions and 19 deletions
|
@ -38,6 +38,7 @@ private slots:
|
||||||
signals:
|
signals:
|
||||||
void cueFinished(int layer);
|
void cueFinished(int layer);
|
||||||
void goAction(int layer);
|
void goAction(int layer);
|
||||||
|
void NewFunction(CueTrack *track);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CUETRACKWIDGET_H
|
#endif // CUETRACKWIDGET_H
|
||||||
|
|
|
@ -91,7 +91,8 @@ struct layerData {
|
||||||
int bus1Vol;
|
int bus1Vol;
|
||||||
int bus2Vol;
|
int bus2Vol;
|
||||||
float level;
|
float level;
|
||||||
int fade;
|
int fadeIn;
|
||||||
|
int fadeOut;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CueTrack {
|
struct CueTrack {
|
||||||
|
|
|
@ -73,8 +73,8 @@ void libreMediaServerAudio::loadMedia(int layer, int folder, int file)
|
||||||
m_mae.loadMedia(layer, mediaFile.toLatin1().data());
|
m_mae.loadMedia(layer, mediaFile.toLatin1().data());
|
||||||
m_currentMedia[layer] = mediaFile;
|
m_currentMedia[layer] = mediaFile;
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
if (m_ui)
|
if (m_ui)
|
||||||
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
|
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
|
||||||
#endif
|
#endif
|
||||||
m_mae.printFormatInfo(layer);
|
m_mae.printFormatInfo(layer);
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
|
||||||
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
||||||
connect(m_lmsUi->m_aw, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
connect(m_lmsUi->m_aw, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChangedFaded(int, Slider, int, int)), this, SLOT(uiSliderChangedFaded(int, Slider, int, int)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChangedFaded(int, Slider, int, int, int)), this, SLOT(uiSliderChangedFaded(int, Slider, int, int, int)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
|
||||||
connect(m_lmsUi->m_showPlayer, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
connect(m_lmsUi->m_showPlayer, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
|
||||||
m_refreshUi = new QTimer(this);
|
m_refreshUi = new QTimer(this);
|
||||||
|
@ -301,11 +301,11 @@ void libreMediaServerAudio::uiLoadMedia(int layer, QString mediaFile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void libreMediaServerAudio::uiSliderChangedFaded(int layer, Slider s, int value, int ms)
|
void libreMediaServerAudio::uiSliderChangedFaded(int layer, Slider s, int value, int fadeIn, int fadeOut)
|
||||||
{
|
{
|
||||||
switch (s){
|
switch (s){
|
||||||
case Slider::Volume:
|
case Slider::Volume:
|
||||||
m_mae.volChanged(layer, value, ms);
|
m_mae.volChanged(layer, value, fadeIn, fadeOut);
|
||||||
m_updateUi[layer][0] = value;
|
m_updateUi[layer][0] = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ private:
|
||||||
private slots:
|
private slots:
|
||||||
void refreshUi();
|
void refreshUi();
|
||||||
void uiSliderChanged(int layer, Slider s, int value);
|
void uiSliderChanged(int layer, Slider s, int value);
|
||||||
void uiSliderChangedFaded(int layer, Slider s, int value, int ms);
|
void uiSliderChangedFaded(int layer, Slider s, int value, int fadeIn, int fadeOut);
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
void uiLoadMedia(int layer, QString s);
|
void uiLoadMedia(int layer, QString s);
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,8 @@ bool MiniAudioEngine::startEngine(uint layers, uint* audioDevicesId, uint audioD
|
||||||
m_mae.currentStatus[i].vol = 0.0f;
|
m_mae.currentStatus[i].vol = 0.0f;
|
||||||
m_mae.currentStatus[i].cursor = 0;
|
m_mae.currentStatus[i].cursor = 0;
|
||||||
m_mae.currentStatus[i].updated = MA_FALSE;
|
m_mae.currentStatus[i].updated = MA_FALSE;
|
||||||
|
m_mae.currentStatus[i].fadeIn = FADE_TIME;
|
||||||
|
m_mae.currentStatus[i].fadeOut = FADE_TIME;
|
||||||
}
|
}
|
||||||
result = this->startContext();
|
result = this->startContext();
|
||||||
if (result != MA_SUCCESS) return false;
|
if (result != MA_SUCCESS) return false;
|
||||||
|
@ -435,14 +437,15 @@ ma_result MiniAudioEngine::printFormatInfo(int layer)
|
||||||
// Expects between 0 and 65535 vol value
|
// Expects between 0 and 65535 vol value
|
||||||
void MiniAudioEngine::volChanged(int layer, int vol)
|
void MiniAudioEngine::volChanged(int layer, int vol)
|
||||||
{
|
{
|
||||||
volChanged(layer, vol, FADE_TIME);
|
volChanged(layer, vol, FADE_TIME, FADE_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expects between 0 and 65535 vol value and fade time in milliseconds
|
// Expects between 0 and 65535 vol value and fade time in milliseconds
|
||||||
void MiniAudioEngine::volChanged(int layer, int vol, int ms)
|
void MiniAudioEngine::volChanged(int layer, int vol, int fadeIn, int fadeOut)
|
||||||
{
|
{
|
||||||
m_mae.currentStatus[layer].vol = vol;
|
m_mae.currentStatus[layer].vol = vol;
|
||||||
m_mae.currentStatus[layer].fade = ms;
|
m_mae.currentStatus[layer].fadeIn = fadeIn;
|
||||||
|
m_mae.currentStatus[layer].fadeOut = fadeOut;
|
||||||
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
||||||
return;
|
return;
|
||||||
if (m_mae.mediaLoaded[layer] == MA_FALSE && m_mae.currentStatus[layer].updated)
|
if (m_mae.mediaLoaded[layer] == MA_FALSE && m_mae.currentStatus[layer].updated)
|
||||||
|
@ -452,10 +455,9 @@ void MiniAudioEngine::volChanged(int layer, int vol, int ms)
|
||||||
db = 0;
|
db = 0;
|
||||||
} else
|
} else
|
||||||
db = ma_volume_db_to_linear(db);
|
db = ma_volume_db_to_linear(db);
|
||||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], -1, db, ms);
|
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], -1, db, fadeIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MiniAudioEngine::panChanged(int layer, float value)
|
void MiniAudioEngine::panChanged(int layer, float value)
|
||||||
{
|
{
|
||||||
float result;
|
float result;
|
||||||
|
@ -483,18 +485,20 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
||||||
ma_result result = MA_SUCCESS;
|
ma_result result = MA_SUCCESS;
|
||||||
float db = 0;
|
float db = 0;
|
||||||
bool loop = false;
|
bool loop = false;
|
||||||
|
bool playAtBegin = false;
|
||||||
|
|
||||||
|
if (status == Status::Stopped)
|
||||||
|
playAtBegin = true;
|
||||||
m_mae.currentStatus[layer].status = status;
|
m_mae.currentStatus[layer].status = status;
|
||||||
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
if (m_mae.mediaLoaded[layer] != MA_TRUE)
|
||||||
return MA_DOES_NOT_EXIST;
|
return MA_DOES_NOT_EXIST;
|
||||||
m_mae.currentStatus[layer].updated = false;
|
m_mae.currentStatus[layer].updated = false;
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case Status::Paused:
|
case Status::Paused:
|
||||||
result = ma_sound_stop_with_fade_in_milliseconds(&m_mae.sounds[layer], FADE_TIME);
|
result = ma_sound_stop_with_fade_in_milliseconds(&m_mae.sounds[layer], m_mae.currentStatus[layer].fadeOut);
|
||||||
break;
|
break;
|
||||||
case Status::Stopped:
|
case Status::Stopped:
|
||||||
ma_sound_stop_with_fade_in_milliseconds(&m_mae.sounds[layer], 0.0f);
|
ma_sound_stop_with_fade_in_milliseconds(&m_mae.sounds[layer], m_mae.currentStatus[layer].fadeOut);
|
||||||
result = this->seekToCursor(layer, m_mae.currentStatus[layer].cursor);
|
|
||||||
break;
|
break;
|
||||||
case Status::PlayingLoop:
|
case Status::PlayingLoop:
|
||||||
loop = true;
|
loop = true;
|
||||||
|
@ -505,6 +509,8 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
||||||
case Status::PlayingFolder:
|
case Status::PlayingFolder:
|
||||||
case Status::PlayingFolderLoop:
|
case Status::PlayingFolderLoop:
|
||||||
case Status::PlayingFolderRandom:
|
case Status::PlayingFolderRandom:
|
||||||
|
if (playAtBegin)
|
||||||
|
this->seekToCursor(layer, 0);
|
||||||
ma_sound_set_looping(&m_mae.sounds[layer], loop);
|
ma_sound_set_looping(&m_mae.sounds[layer], loop);
|
||||||
if (ma_sound_is_playing(&m_mae.sounds[layer])) break;
|
if (ma_sound_is_playing(&m_mae.sounds[layer])) break;
|
||||||
ma_sound_set_stop_time_in_milliseconds(&m_mae.sounds[layer], ~(ma_uint64)0);
|
ma_sound_set_stop_time_in_milliseconds(&m_mae.sounds[layer], ~(ma_uint64)0);
|
||||||
|
@ -515,7 +521,7 @@ ma_result MiniAudioEngine::playbackChanged(int layer, Status status)
|
||||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0.000001f, 0.000000f, FADE_TIME);
|
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0.000001f, 0.000000f, FADE_TIME);
|
||||||
if (m_mae.currentStatus[layer].cursor > 0)
|
if (m_mae.currentStatus[layer].cursor > 0)
|
||||||
usleep(FADE_TIME * 1500); // avoid glitch when seeking
|
usleep(FADE_TIME * 1500); // avoid glitch when seeking
|
||||||
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, m_mae.currentStatus[layer].fade);
|
ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, m_mae.currentStatus[layer].fadeIn);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ public:
|
||||||
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty);
|
||||||
ma_result loadMedia(int layer, char *media);
|
ma_result loadMedia(int layer, char *media);
|
||||||
void volChanged(int layer, int vol);
|
void volChanged(int layer, int vol);
|
||||||
void volChanged(int layer, int vol, int ms);
|
void volChanged(int layer, int vol, int fadeIn, int fadeOut);
|
||||||
void panChanged(int layer, float pan);
|
void panChanged(int layer, float pan);
|
||||||
void pitchChanged(int layer, float pitch);
|
void pitchChanged(int layer, float pitch);
|
||||||
ma_result playbackChanged(int layer, Status status);
|
ma_result playbackChanged(int layer, Status status);
|
||||||
|
|
|
@ -20,6 +20,7 @@ ShowPlayer::ShowPlayer(QWidget *parent) :
|
||||||
current[i] = nullptr;
|
current[i] = nullptr;
|
||||||
prevCue[i] = nullptr;
|
prevCue[i] = nullptr;
|
||||||
}
|
}
|
||||||
|
ui->nextCue->setNextCue();
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowPlayer::~ShowPlayer() {}
|
ShowPlayer::~ShowPlayer() {}
|
||||||
|
@ -72,7 +73,7 @@ void ShowPlayer::fade(Slider s, int start, CueTrack *track) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowPlayer::updateTrackStateInEngine(CueTrack *track) {
|
void ShowPlayer::updateTrackStateInEngine(CueTrack *track) {
|
||||||
emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn * 1000);
|
emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn * 1000, track->fadeOut * 1000);
|
||||||
if (prevCue[track->audioLayer] != nullptr) {
|
if (prevCue[track->audioLayer] != nullptr) {
|
||||||
if (prevCue[track->audioLayer]->pan != track->pan)
|
if (prevCue[track->audioLayer]->pan != track->pan)
|
||||||
fade(Slider::Pan, prevCue[track->audioLayer]->pan, track);
|
fade(Slider::Pan, prevCue[track->audioLayer]->pan, track);
|
||||||
|
|
|
@ -55,7 +55,7 @@ private slots:
|
||||||
signals:
|
signals:
|
||||||
void uiPlaybackChanged(int layer, Status s);
|
void uiPlaybackChanged(int layer, Status s);
|
||||||
void uiSliderChanged(int layer, Slider s, int vol);
|
void uiSliderChanged(int layer, Slider s, int vol);
|
||||||
void uiSliderChangedFaded(int layer, Slider s, int vol, int ms);
|
void uiSliderChangedFaded(int layer, Slider s, int vol, int fadeIn, int fadeOut);
|
||||||
void uiLoadMedia(int layer, QString s);
|
void uiLoadMedia(int layer, QString s);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue