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;