From e39d885f6f91cb32acc268695084454f25d242b0 Mon Sep 17 00:00:00 2001 From: snt Date: Wed, 26 Jun 2024 20:14:51 +0200 Subject: [PATCH] fade in time --- src/defines.h | 1 + src/libremediaserver-audio.cpp | 17 ++++++++++++++--- src/libremediaserver-audio.h | 1 + src/miniaudioengine.cpp | 12 ++++++++++-- src/miniaudioengine.h | 1 + src/showplayer.cpp | 2 +- src/showplayer.h | 1 + 7 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/defines.h b/src/defines.h index 9317a59..e59f28f 100644 --- a/src/defines.h +++ b/src/defines.h @@ -91,6 +91,7 @@ struct layerData { int bus1Vol; int bus2Vol; float level; + int fade; }; struct CueTrack { diff --git a/src/libremediaserver-audio.cpp b/src/libremediaserver-audio.cpp index f86495d..b28219f 100644 --- a/src/libremediaserver-audio.cpp +++ b/src/libremediaserver-audio.cpp @@ -228,7 +228,8 @@ 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(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(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status))); + connect(m_lmsUi->m_showPlayer, SIGNAL(uiSliderChangedFaded(int, Slider, int, int)), this, SLOT(uiSliderChangedFaded(int, Slider, int, int))); + 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))); m_refreshUi = new QTimer(this); connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi())); @@ -245,8 +246,8 @@ void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value) { switch (s){ case Slider::Volume: - m_mae.volChanged(layer, value); - m_updateUi[layer][0] = value; + //m_mae.volChanged(layer, value); + //m_updateUi[layer][0] = value; break; case Slider::Pan: m_mae.panChanged(layer, value); @@ -299,4 +300,14 @@ void libreMediaServerAudio::uiLoadMedia(int layer, QString mediaFile) qWarning() << "ui load media error" << result << "file" << mediaFile << "layer" << layer; } } + +void libreMediaServerAudio::uiSliderChangedFaded(int layer, Slider s, int value, int ms) +{ + switch (s){ + case Slider::Volume: + m_mae.volChanged(layer, value, ms); + m_updateUi[layer][0] = value; + break; + } +} #endif diff --git a/src/libremediaserver-audio.h b/src/libremediaserver-audio.h index 8db0c7e..65b5d11 100644 --- a/src/libremediaserver-audio.h +++ b/src/libremediaserver-audio.h @@ -66,6 +66,7 @@ private: private slots: void refreshUi(); void uiSliderChanged(int layer, Slider s, int value); + void uiSliderChangedFaded(int layer, Slider s, int value, int ms); void uiPlaybackChanged(int layer, Status s); void uiLoadMedia(int layer, QString s); diff --git a/src/miniaudioengine.cpp b/src/miniaudioengine.cpp index 0e54927..9ab9f63 100644 --- a/src/miniaudioengine.cpp +++ b/src/miniaudioengine.cpp @@ -434,8 +434,15 @@ ma_result MiniAudioEngine::printFormatInfo(int layer) // Expects between 0 and 65535 vol value void MiniAudioEngine::volChanged(int layer, int vol) +{ + volChanged(layer, vol, FADE_TIME); +} + +// Expects between 0 and 65535 vol value and fade time in milliseconds +void MiniAudioEngine::volChanged(int layer, int vol, int ms) { m_mae.currentStatus[layer].vol = vol; + m_mae.currentStatus[layer].fade = ms; if (m_mae.mediaLoaded[layer] != MA_TRUE) return; if (m_mae.mediaLoaded[layer] == MA_FALSE && m_mae.currentStatus[layer].updated) @@ -445,9 +452,10 @@ void MiniAudioEngine::volChanged(int layer, int vol) db = 0; } else db = ma_volume_db_to_linear(db); - ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], -1, db, FADE_TIME); + ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], -1, db, ms); } + void MiniAudioEngine::panChanged(int layer, float value) { float result; @@ -507,7 +515,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); if (m_mae.currentStatus[layer].cursor > 0) usleep(FADE_TIME * 1500); // avoid glitch when seeking - ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, FADE_TIME * 2); + ma_sound_set_fade_in_milliseconds(&m_mae.sounds[layer], 0, db, m_mae.currentStatus[layer].fade); default: break; } diff --git a/src/miniaudioengine.h b/src/miniaudioengine.h index 5fde13e..0a1bca8 100644 --- a/src/miniaudioengine.h +++ b/src/miniaudioengine.h @@ -64,6 +64,7 @@ public: bool startEngine(uint layersQty, uint* audioDevicesID, uint audioDevicesQty); ma_result loadMedia(int layer, char *media); void volChanged(int layer, int vol); + void volChanged(int layer, int vol, int ms); void panChanged(int layer, float pan); void pitchChanged(int layer, float pitch); ma_result playbackChanged(int layer, Status status); diff --git a/src/showplayer.cpp b/src/showplayer.cpp index db3d553..4d3998e 100644 --- a/src/showplayer.cpp +++ b/src/showplayer.cpp @@ -56,7 +56,7 @@ void ShowPlayer::go() } void ShowPlayer::updateTrackStateInEngine(CueTrack *track) { - emit uiSliderChanged(track->audioLayer, Slider::Volume, track->volume * 655.35); + emit uiSliderChangedFaded(track->audioLayer, Slider::Volume, track->volume * 655.35, track->fadeIn * 1000); emit uiSliderChanged(track->audioLayer, Slider::Pan, (track->pan + 1) * 128); emit uiSliderChanged(track->audioLayer, Slider::Pitch, track->pitch * 128); emit uiSliderChanged(track->audioLayer, Slider::Bus1, track->bus1 * 255 * 2.55); diff --git a/src/showplayer.h b/src/showplayer.h index 43c3788..0dd4f08 100644 --- a/src/showplayer.h +++ b/src/showplayer.h @@ -45,6 +45,7 @@ private slots: signals: void uiPlaybackChanged(int layer, Status s); void uiSliderChanged(int layer, Slider s, int vol); + void uiSliderChangedFaded(int layer, Slider s, int vol, int ms); void uiLoadMedia(int layer, QString s); };