void _hardware_event(int event) { switch(event) { case HE_FREQ_UP: tuner_tune_by(g_tuner, 10); tuner_debug(); break; case HE_FREQ_DOWN: tuner_tune_by(g_tuner, -10); tuner_debug(); break; case HE_CHANNEL1: tuner_goto(g_tuner, 0); tuner_debug(); break; case HE_CHANNEL2: tuner_goto(g_tuner, 1); tuner_debug(); break; case HE_CHANNEL3: tuner_goto(g_tuner, 2); tuner_debug(); break; case HE_CHANNEL4: tuner_goto(g_tuner, 3); tuner_debug(); break; case HE_CHANNEL5: tuner_goto(g_tuner, 4); tuner_debug(); break; case HE_PLAY_PAUSE: if (g_is_playing) { printf("Pause playback\n"); sp_session_player_play(g_sess, 0); g_is_playing = 0; } else { printf("Resume playback\n"); sp_session_player_play(g_sess, 1); g_is_playing = 1; } notify_main_thread(g_sess); break; case HE_SKIP_NEXT: hardware_banner("Skip", 100); track_ended(1); notify_main_thread(g_sess); break; } }
void spotify_mainthread(sp_session *session, boost::function<void()> f) { pthread_mutex_lock(&g_gazify.inbox_mutex); g_gazify.inbox.push_back(f); notify_main_thread(session); pthread_mutex_unlock(&g_gazify.inbox_mutex); }
static void on_end_of_track(sp_session *session) { debug("callback: on end of track"); audio_fifo_flush(&g_audiofifo); sp_session_player_play(session, 0); notify_main_thread(g_session); queue_go_next(g_session); }
/** * A track has ended. Remove it from the playlist. * * Called from the main loop when the music_delivery() callback has set g_playback_done. */ static void track_ended(bool startNext) { printf("track_ended startNext=%d\n", startNext); int tracks = 0; if (g_currenttrack) { printf("track_ended: stopping current track.\n"); g_currenttrack = NULL; sp_session_player_unload(g_sess); g_is_playing = 0; } audio_fifo_flush(&g_musicfifo); notify_main_thread(g_sess); audio_fifo_flush(&g_musicfifo); usleep(50000); if (startNext) { printf("track_ended: play next track.\n"); try_jukebox_start(); usleep(50000); notify_main_thread(g_sess); banner_track(); } }
static void try_jukebox_start(void) { sp_track *t; printf("try_jukebox_start\n"); if (!g_jukeboxlist) return; int nt = sp_playlist_num_tracks(g_jukeboxlist); if (!nt) { fprintf(stderr, "jukebox: No tracks in playlist. Waiting\n"); return; } if (nt > 2) { int tmp = g_track_index; while (tmp == g_track_index) tmp = rand() % nt; g_track_index = tmp; } else { g_track_index = rand() % nt; } printf("play track %d of %d\n", g_track_index, nt); t = sp_playlist_track(g_jukeboxlist, g_track_index); printf("t=%X\n", t); if (g_currenttrack && t != g_currenttrack) { printf("stopping currently playing..\n"); /* Someone changed the current track */ // audio_fifo_flush(&g_musicfifo); // sp_session_player_unload(g_sess); // g_currenttrack = NULL; } if (!t) return; int err = sp_track_error(t); if (err != SP_ERROR_OK /*&& err != SP_ERROR_IS_LOADING*/) { printf("track error? %d\n", err); return; } if (g_currenttrack == t) { printf("not starting the same track.\n"); return; } g_currenttrack = t; printf("jukebox: Now playing \"%s\"...\n", sp_track_name(t)); sp_artist *art = sp_track_artist(t, 0); if (art != NULL) { printf("jukebox: By \"%s\"...\n", sp_artist_name(art)); sprintf( g_last_track_name, "%s by %s", sp_track_name(t), sp_artist_name(art) ); } else { sprintf( g_last_track_name, "%s", sp_track_name(t) ); } fflush(stdout); sp_session_player_load(g_sess, t); usleep(100000); sp_session_player_play(g_sess, 1); usleep(100000); g_is_playing = 1; notify_main_thread(g_sess); printf("after try_jukebox_start\n"); tuner_debug(); }