Mercurial > repos > blastem
diff mediaplayer.c @ 2296:789802d99629
Add basic FLAC decoder and add FLAC playback support to the media player
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 19 Feb 2023 21:12:46 -0800 |
parents | c4980d89614b |
children | 0343f0d5add0 |
line wrap: on
line diff
--- a/mediaplayer.c Fri Feb 10 23:17:43 2023 -0800 +++ b/mediaplayer.c Sun Feb 19 21:12:46 2023 -0800 @@ -443,7 +443,16 @@ void flac_frame(media_player *player) { - render_sleep_ms(15); + for (uint32_t remaining_samples = player->flac->sample_rate / 60; remaining_samples > 0; remaining_samples--) + { + int16_t samples[2]; + if (flac_get_sample(player->flac, samples, 2)) { + render_put_stereo_sample(player->audio, samples[0], samples[1]); + } else { + player->state = STATE_PAUSED; + return; + } + } } void vgm_init(media_player *player, uint32_t opts) @@ -571,6 +580,14 @@ free(player->wave); } +static void flac_player_init(media_player *player) +{ + player->flac = flac_file_from_buffer(player->media->buffer, player->media->size); + if (player->flac) { + player->audio = render_audio_source("Audio File", player->flac->sample_rate, 1, 2); + } +} + static void resume_player(system_header *system) { media_player *player = (media_player *)system; @@ -689,6 +706,9 @@ case AUDIO_WAVE: wave_player_init(player); break; + case AUDIO_FLAC: + flac_player_init(player); + break; } return player;