This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch main
in repository eradio.
View the commit online.
commit 9750f25ef32d2b6b2fe83317adfe990bbe0e532a
Author: politebot <[email protected]>
AuthorDate: Wed Oct 22 17:00:20 2025 -0500
Dual audio during visualizer fix
---
src/radio_player.c | 18 ++++++++++++------
src/ui.c | 15 ++++++++++++---
src/visualizer.c | 26 ++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 9 deletions(-)
diff --git a/src/radio_player.c b/src/radio_player.c
index 36a2d54..5845c5d 100644
--- a/src/radio_player.c
+++ b/src/radio_player.c
@@ -148,11 +148,14 @@ radio_player_play(AppData *ad, const char *url, const char *station_name)
}
emotion_object_file_set(ad->emotion, url);
- emotion_object_play_set(ad->emotion, EINA_TRUE);
ad->playing = EINA_TRUE;
- // Start visualizer playback if active
- visualizer_play(ad);
+ // If visualizer is active, let it handle playback
+ if (ad->visualizer_active) {
+ visualizer_play(ad);
+ } else {
+ emotion_object_play_set(ad->emotion, EINA_TRUE);
+ }
if (ad->play_pause_item)
elm_toolbar_item_icon_set(ad->play_pause_item, "media-playback-pause");
@@ -175,13 +178,16 @@ radio_player_play(AppData *ad, const char *url, const char *station_name)
void
radio_player_stop(AppData *ad)
{
+ // Stop visualizer if active
+ if (ad->visualizer_active) {
+ visualizer_stop(ad);
+ }
+
+ // Stop main player
emotion_object_play_set(ad->emotion, EINA_FALSE);
emotion_object_position_set(ad->emotion, 0.0);
ad->playing = EINA_FALSE;
- // Stop visualizer if active
- visualizer_stop(ad);
-
// Cancel all timers
if (stream_error_timer)
{
diff --git a/src/ui.c b/src/ui.c
index 792b589..fd1b459 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -251,7 +251,7 @@ ui_create(AppData *ad)
ad->play_pause_item = elm_toolbar_item_append(ad->controls_toolbar, "media-playback-start", "Play/Pause", _play_pause_btn_clicked_cb, ad);
ad->stop_item = elm_toolbar_item_append(ad->controls_toolbar, "media-playback-stop", "Stop", _stop_btn_clicked_cb, ad);
- ad->visualizer_item = elm_toolbar_item_append(ad->controls_toolbar, "media-video", "Visualizer", _visualizer_btn_clicked_cb, ad);
+ ad->visualizer_item = elm_toolbar_item_append(ad->controls_toolbar, "preferences-desktop-theme", "Visualizer", _visualizer_btn_clicked_cb, ad);
evas_object_smart_callback_add(ad->search_btn, "clicked", _search_btn_clicked_cb, ad);
evas_object_smart_callback_add(ad->search_entry, "activated", _search_entry_activated_cb, ad);
@@ -390,10 +390,19 @@ static void
_volume_slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
AppData *ad = data;
- if (!ad || !ad->emotion) return;
+ if (!ad) return;
double volume = elm_slider_value_get(obj);
- emotion_object_audio_volume_set(ad->emotion, volume);
+
+ // Set volume for main emotion object if it exists
+ if (ad->emotion) {
+ emotion_object_audio_volume_set(ad->emotion, volume);
+ }
+
+ // Set volume for visualizer emotion object if it exists
+ if (ad->visualizer_emotion) {
+ emotion_object_audio_volume_set(ad->visualizer_emotion, volume);
+ }
}
void
diff --git a/src/visualizer.c b/src/visualizer.c
index c1cd736..9cb5224 100644
--- a/src/visualizer.c
+++ b/src/visualizer.c
@@ -54,6 +54,12 @@ visualizer_show(AppData *ad)
// Set GOOM visualization
emotion_object_vis_set(ad->visualizer_emotion, EMOTION_VIS_GOOM);
+ // Set initial volume to match the current volume slider setting
+ if (ad->volume_slider) {
+ double current_volume = elm_slider_value_get(ad->volume_slider);
+ emotion_object_audio_volume_set(ad->visualizer_emotion, current_volume);
+ }
+
// Add title change callback for window title updates
evas_object_smart_callback_add(ad->visualizer_emotion, "title_change", _visualizer_title_changed_cb, ad);
@@ -64,11 +70,15 @@ visualizer_show(AppData *ad)
evas_object_show(ad->visualizer_emotion);
// If there's already a station playing, connect the visualizer to it
+ // BUT pause the main player to prevent dual audio
if (ad->playing && ad->emotion)
{
const char *current_url = emotion_object_file_get(ad->emotion);
if (current_url)
{
+ // Pause the main player to prevent dual audio
+ emotion_object_play_set(ad->emotion, EINA_FALSE);
+ // Connect visualizer to the same station
emotion_object_file_set(ad->visualizer_emotion, current_url);
emotion_object_play_set(ad->visualizer_emotion, EINA_TRUE);
}
@@ -84,6 +94,7 @@ visualizer_hide(AppData *ad)
if (!ad->visualizer_active)
return;
+ // Stop the visualizer player and restore main player if needed
if (ad->visualizer_emotion)
{
emotion_object_play_set(ad->visualizer_emotion, EINA_FALSE);
@@ -91,6 +102,12 @@ visualizer_hide(AppData *ad)
ad->visualizer_emotion = NULL;
}
+ // If we were playing before showing visualizer, restore main player
+ if (ad->playing && ad->emotion)
+ {
+ emotion_object_play_set(ad->emotion, EINA_TRUE);
+ }
+
if (ad->visualizer_win)
{
evas_object_del(ad->visualizer_win);
@@ -124,6 +141,9 @@ visualizer_play(AppData *ad)
if (!ad->visualizer_active || !ad->visualizer_emotion)
return;
+ // Pause main player and start visualizer player
+ if (ad->emotion)
+ emotion_object_play_set(ad->emotion, EINA_FALSE);
emotion_object_play_set(ad->visualizer_emotion, EINA_TRUE);
}
@@ -134,6 +154,9 @@ visualizer_pause(AppData *ad)
return;
emotion_object_play_set(ad->visualizer_emotion, EINA_FALSE);
+ // Resume main player if it was playing
+ if (ad->playing && ad->emotion)
+ emotion_object_play_set(ad->emotion, EINA_TRUE);
}
void
@@ -144,6 +167,9 @@ visualizer_stop(AppData *ad)
emotion_object_play_set(ad->visualizer_emotion, EINA_FALSE);
emotion_object_position_set(ad->visualizer_emotion, 0.0);
+ // Only resume main player if we're not in a global stop operation
+ if (ad->playing && ad->emotion)
+ emotion_object_play_set(ad->emotion, EINA_TRUE);
}
void
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.