comparison 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
comparison
equal deleted inserted replaced
2295:eb45ad9d8a3f 2296:789802d99629
441 } 441 }
442 } 442 }
443 443
444 void flac_frame(media_player *player) 444 void flac_frame(media_player *player)
445 { 445 {
446 render_sleep_ms(15); 446 for (uint32_t remaining_samples = player->flac->sample_rate / 60; remaining_samples > 0; remaining_samples--)
447 {
448 int16_t samples[2];
449 if (flac_get_sample(player->flac, samples, 2)) {
450 render_put_stereo_sample(player->audio, samples[0], samples[1]);
451 } else {
452 player->state = STATE_PAUSED;
453 return;
454 }
455 }
447 } 456 }
448 457
449 void vgm_init(media_player *player, uint32_t opts) 458 void vgm_init(media_player *player, uint32_t opts)
450 { 459 {
451 player->vgm = calloc(1, sizeof(vgm_header)); 460 player->vgm = calloc(1, sizeof(vgm_header));
569 format_error: 578 format_error:
570 player->media_type = MEDIA_UNKNOWN; 579 player->media_type = MEDIA_UNKNOWN;
571 free(player->wave); 580 free(player->wave);
572 } 581 }
573 582
583 static void flac_player_init(media_player *player)
584 {
585 player->flac = flac_file_from_buffer(player->media->buffer, player->media->size);
586 if (player->flac) {
587 player->audio = render_audio_source("Audio File", player->flac->sample_rate, 1, 2);
588 }
589 }
590
574 static void resume_player(system_header *system) 591 static void resume_player(system_header *system)
575 { 592 {
576 media_player *player = (media_player *)system; 593 media_player *player = (media_player *)system;
577 player->should_return = 0; 594 player->should_return = 0;
578 while (!player->header.should_exit && !player->should_return) 595 while (!player->header.should_exit && !player->should_return)
687 vgm_init(player, opts); 704 vgm_init(player, opts);
688 break; 705 break;
689 case AUDIO_WAVE: 706 case AUDIO_WAVE:
690 wave_player_init(player); 707 wave_player_init(player);
691 break; 708 break;
709 case AUDIO_FLAC:
710 flac_player_init(player);
711 break;
692 } 712 }
693 713
694 return player; 714 return player;
695 } 715 }