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(); } }
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; }
static void dbus_next_handler(struct con_win *cwin) { play_next_track(cwin); }