示例#1
0
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;
	}
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
/**
 * 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();
	}
}
示例#5
0
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();
}