示例#1
0
static void decode_mp3()
{
	int dsp_initialised = 0;
	int nframes = 0;

//	InitMP3Decoder(&DecoderState, &bs);

	mp3_pause = 0;
	next_song_queued = 0;
	decoding_finished = 0;
	while (!decoding_finished) {
		int refill = 0;

		mp3_event_handler();

		if (mp3_pause) {
			continue;
		}

		if (next_song_queued) {
			return;
		}
		
/*		switch (DecodeMP3Frame(&bs, pcm, &DecoderState)) {
		case MP3_FRAME_COMPLETE:
			if (!dsp_initialised) {
				init_dsp(MAX_CHAN, &DecoderState);
				dsp_initialised = 1;
			}
			RenderSound(pcm, &DecoderState);
			remaining_time -= 26;
			nframes++;
			if (nframes % 40 == 0 && rect_wait-- <= 0) {
				draw_time();
			}
			refill = ((bs.Head>=bs.Tail) && (STREAM_BUF_SIZE-bs.Head+bs.Tail < FIFO_THRESH)) || ((bs.Tail >= bs.Head) && (bs.Tail-bs.Head < FIFO_THRESH));
			if (refill) {
				decoding_finished = FillMP3BitStream(&bs) == 0;
			}
			break;
		case MP3_BUFFER_UNDERRUN:
		case MP3_SYNC_NOT_FOUND:
			decoding_finished = FillMP3BitStream(&bs) == 0;
			break;
		case MP3_FRAME_UNDERRUN:
			break;
		case MP3_FRAME_HEADER_INVALID:
			break;
		}*/
	}

	/* did song finished by itself or was Menu pressed? */
	if (FillMP3BitStream(&bs) == 0)
	{
		play_next_track();
	}
}
示例#2
0
static int mp3_do_keystroke(GR_EVENT * event)
{
	switch (event->type) {
	case GR_EVENT_TYPE_KEY_DOWN:
		switch (event->keystroke.ch) {
		case '\r':
		case '\n':
			break;
		case 'm':
			decoding_finished = 1;
			break;
		case '4':
		case 'f':
			play_next_track();
			break;
		case '5':
		case 'w':
			play_prev_track();
			break;
		case '1':
		case 'd':
			mp3_pause = !mp3_pause;
			if (mp3_pause) {
				pz_draw_header(_("MP3 Playback - ||"));
			}
			else {
				pz_draw_header(_("MP3 Playback"));
			}
			break;
		case '3':
		case 'l':
			vol_delta--;
			break;
		case '2':
		case 'r':
			vol_delta++;
			break;
		}
		break;
	}
	return 1;
}
示例#3
0
static void dbus_next_handler(struct con_win *cwin)
{
	play_next_track(cwin);
}