From 72480efdcbe12b095ee61758b7ecfe521ac0157f Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Sun, 22 Dec 2019 22:03:01 +0300 Subject: [PATCH] MSF: Added MSA extension [Sonic & Sega All-Stars Racing (PS3)] --- src/meta/msf.c | 51 +++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/meta/msf.c b/src/meta/msf.c index e9947598..9dc94fd5 100644 --- a/src/meta/msf.c +++ b/src/meta/msf.c @@ -12,9 +12,10 @@ VGMSTREAM * init_vgmstream_msf(STREAMFILE *streamFile) { /* checks */ /* .msf: standard + * .msa: Sonic & Sega All-Stars Racing (PS3) * .at3: Silent Hill HD Collection (PS3) * .mp3: Darkstalkers Resurrection (PS3) */ - if (!check_extensions(streamFile,"msf,at3,mp3")) + if (!check_extensions(streamFile,"msf,msa,at3,mp3")) goto fail; /* check header "MSF" + version-char, usually: @@ -65,8 +66,8 @@ VGMSTREAM * init_vgmstream_msf(STREAMFILE *streamFile) { case 0x00: /* PCM (Big Endian) */ case 0x01: { /* PCM (Little Endian) [Smash Cars (PS3)] */ vgmstream->coding_type = codec==0 ? coding_PCM16BE : coding_PCM16LE; - vgmstream->layout_type = channel_count == 1 ? layout_none : layout_interleave; - vgmstream->interleave_block_size = 2; + vgmstream->layout_type = layout_interleave; + vgmstream->interleave_block_size = 0x02; vgmstream->num_samples = pcm_bytes_to_samples(data_size, channel_count,16); if (loop_flag){ @@ -125,28 +126,7 @@ VGMSTREAM * init_vgmstream_msf(STREAMFILE *streamFile) { break; } #endif -#if defined(VGM_USE_FFMPEG) && !defined(VGM_USE_MPEG) - case 0x07: { /* MPEG (CBR LAME MP3) [Dengeki Bunko Fighting Climax (PS3)] */ - ffmpeg_codec_data *ffmpeg_data = NULL; - - ffmpeg_data = init_ffmpeg_offset(streamFile, start_offset, streamFile->get_size(streamFile) ); - if ( !ffmpeg_data ) goto fail; - vgmstream->codec_data = ffmpeg_data; - vgmstream->coding_type = coding_FFmpeg; - vgmstream->layout_type = layout_none; - - vgmstream->num_samples = (int64_t)data_size * ffmpeg_data->sampleRate * 8 / ffmpeg_data->bitrate; - if (loop_flag) { - vgmstream->loop_start_sample = (int64_t)loop_start * ffmpeg_data->sampleRate * 8 / ffmpeg_data->bitrate; - vgmstream->loop_end_sample = (int64_t)loop_end * ffmpeg_data->sampleRate * 8 / ffmpeg_data->bitrate; - /* loops are always aligned to CBR frame beginnings */ - } - - /* encoder delay varies between 1152 (1f), 528, 576, etc; probably not actually skipped */ - break; - } -#endif -#ifdef VGM_USE_MPEG +#if defined(VGM_USE_MPEG) case 0x07: { /* MPEG (CBR LAME MP3) [Dengeki Bunko Fighting Climax (PS3)] */ mpeg_codec_data *mpeg_data = NULL; @@ -162,6 +142,27 @@ VGMSTREAM * init_vgmstream_msf(STREAMFILE *streamFile) { /* loops are always aligned to CBR frame beginnings */ } + /* encoder delay varies between 1152 (1f), 528, 576, etc; probably not actually skipped */ + break; + } +#elif defined(VGM_USE_FFMPEG) + case 0x07: + { /* MPEG (CBR LAME MP3) [Dengeki Bunko Fighting Climax (PS3)] */ + ffmpeg_codec_data *ffmpeg_data = NULL; + + ffmpeg_data = init_ffmpeg_offset(streamFile, start_offset, streamFile->get_size(streamFile)); + if (!ffmpeg_data) goto fail; + vgmstream->codec_data = ffmpeg_data; + vgmstream->coding_type = coding_FFmpeg; + vgmstream->layout_type = layout_none; + + vgmstream->num_samples = (int64_t)data_size * ffmpeg_data->sampleRate * 8 / ffmpeg_data->bitrate; + if (loop_flag) { + vgmstream->loop_start_sample = (int64_t)loop_start * ffmpeg_data->sampleRate * 8 / ffmpeg_data->bitrate; + vgmstream->loop_end_sample = (int64_t)loop_end * ffmpeg_data->sampleRate * 8 / ffmpeg_data->bitrate; + /* loops are always aligned to CBR frame beginnings */ + } + /* encoder delay varies between 1152 (1f), 528, 576, etc; probably not actually skipped */ break; }