From: Daniel Drake We don't need to check playback status 100 times per second. Just start and stop the visualization when those operations actually happen. Index: audacious-devel/src/audacious/playback.c =================================================================== --- audacious-devel.orig/src/audacious/playback.c +++ audacious-devel/src/audacious/playback.c @@ -50,6 +50,7 @@ #include "ui_skinselector.h" #include "ui_skinned_playstatus.h" #include "util.h" +#include "visualization.h" #include "playback.h" @@ -121,6 +122,8 @@ playback_initiate(void) gtk_widget_show(mainwin_position); } + vis_playback_start(); + hook_call("playback begin", entry); } @@ -187,6 +190,8 @@ playback_stop(void) if (song_info_timeout_source) g_source_remove(song_info_timeout_source); + vis_playback_stop(); + g_return_if_fail(mainwin_playstatus != NULL); ui_skinned_playstatus_set_buffering(mainwin_playstatus, FALSE); } Index: audacious-devel/src/audacious/ui_main.c =================================================================== --- audacious-devel.orig/src/audacious/ui_main.c +++ audacious-devel/src/audacious/ui_main.c @@ -1572,6 +1572,7 @@ mainwin_stop_pushed(void) ip_data.stop = TRUE; mainwin_clear_song_info(); playback_stop(); + ab_position_a = ab_position_b = -1; ip_data.stop = FALSE; } @@ -3009,13 +3010,6 @@ mainwin_idle_func(gpointer data) GDK_THREADS_ENTER(); - if (playback_get_playing()) - vis_playback_start(); - else { - vis_playback_stop(); - ab_position_a = ab_position_b = -1; - } - draw_main_window(mainwin_force_redraw); if (!count) {