From b40d5eecc51bf8e0b27c69fa39df4d651e44a4ed Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Tue, 1 Feb 2022 19:04:06 -0800 Subject: [PATCH] GME: Play SPC and SFM files at 32 kHz And let the player itself resample them, as necessary. Signed-off-by: Christopher Snowhill --- Plugins/GME/GameDecoder.h | 3 ++- Plugins/GME/GameDecoder.m | 15 ++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Plugins/GME/GameDecoder.h b/Plugins/GME/GameDecoder.h index 05a8bc1ff..e97e3ddc7 100755 --- a/Plugins/GME/GameDecoder.h +++ b/Plugins/GME/GameDecoder.h @@ -12,11 +12,12 @@ #import "Plugin.h" -extern gme_err_t readCallback( void* data, void* out, long count ); +extern gme_err_t readCallback( void* data, void* out, int count ); @interface GameDecoder : NSObject { Music_Emu* emu; id source; + long sampleRate; long length; long fade; NSString* codec; diff --git a/Plugins/GME/GameDecoder.m b/Plugins/GME/GameDecoder.m index 975454e8a..58a362318 100755 --- a/Plugins/GME/GameDecoder.m +++ b/Plugins/GME/GameDecoder.m @@ -14,10 +14,10 @@ @implementation GameDecoder -gme_err_t readCallback( void* data, void* out, long count ) +gme_err_t readCallback( void* data, void* out, int count ) { id source = (__bridge id)data; - DLog(@"Amount: %li", count); + DLog(@"Amount: %i", count); int n = (int) [source read:out amount:count]; DLog(@"Read: %i", n); if (n <= 0) { @@ -57,8 +57,13 @@ gme_err_t readCallback( void* data, void* out, long count ) ALog(@"GME: No type!"); return NO; } + + sampleRate = 44100; + + if (type == gme_spc_type || type == gme_sfm_type) + sampleRate = 32000; - emu = gme_new_emu(type, 44100); + emu = gme_new_emu(type, sampleRate); if (!emu) { ALog(@"GME: No new emu!"); @@ -154,8 +159,8 @@ gme_err_t readCallback( void* data, void* out, long count ) { return [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:0], @"bitrate", - [NSNumber numberWithFloat:44100], @"sampleRate", - [NSNumber numberWithLong:length*44.1], @"totalFrames", + [NSNumber numberWithFloat:(float)sampleRate], @"sampleRate", + [NSNumber numberWithLong:length*((float)sampleRate * 0.001)], @"totalFrames", [NSNumber numberWithInt:sizeof(short)*8], @"bitsPerSample", //Samples are short [NSNumber numberWithInt:2], @"channels", //output from gme_play is in stereo [NSNumber numberWithBool:[source seekable]], @"seekable",