From c4c9a741ef87e3f56692367899b5988c8bf203a1 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Tue, 11 Jan 2022 04:00:34 -0800 Subject: [PATCH] Replaced AudioToolbox converter process with homebrew solution, using the RetroArch sinc resampler --- Application/AppController.m | 2 + Audio/AudioPlayer.m | 4 - Audio/Chain/ConverterNode.h | 27 +- Audio/Chain/ConverterNode.m | 567 ++- Audio/Chain/InputNode.h | 2 - Audio/Chain/InputNode.m | 9 - Audio/CogAudio.xcodeproj/project.pbxproj | 323 +- .../Preferences/Base.lproj/Preferences.xib | 54 +- .../OutputResamplerBehaviorArrayController.h | 13 + .../OutputResamplerBehaviorArrayController.m | 42 + .../Preferences.xcodeproj/project.pbxproj | 6 + ThirdParty/RetroArch/config.h | 22 + .../audio/conversion/s16_to_float.c | 110 + .../audio/conversion/s32_to_float.c | 107 + .../audio/resampler/audio_resampler.c | 197 + .../audio/resampler/drivers/sinc_resampler.c | 1079 +++++ .../libretro-common/encodings/encoding_utf.c | 512 +++ .../libretro-common/features/features_cpu.c | 877 ++++ .../libretro-common/file/config_file.c | 1505 +++++++ .../file/config_file_userdata.c | 171 + .../libretro-common/file/file_path.c | 1391 ++++++ .../libretro-common/file/file_path_io.c | 151 + .../libretro-common/include/array/rhmap.h | 284 ++ .../include/audio/audio_resampler.h | 198 + .../include/audio/conversion/s16_to_float.h | 55 + .../include/audio/conversion/s32_to_float.h | 55 + .../libretro-common/include/boolean.h | 39 + .../include/compat/fopen_utf8.h | 34 + .../libretro-common/include/compat/msvc.h | 126 + .../include/compat/posix_string.h | 60 + .../include/compat/strcasestr.h | 48 + .../libretro-common/include/compat/strl.h | 59 + .../libretro-common/include/encodings/utf.h | 67 + .../include/features/features_cpu.h | 75 + .../include/file/config_file.h | 225 + .../include/file/config_file_userdata.h | 64 + .../libretro-common/include/file/file_path.h | 538 +++ .../libretro-common/include/filters.h | 93 + .../libretro-common/include/libretro.h | 3894 +++++++++++++++++ .../include/lists/string_list.h | 186 + .../libretro-common/include/memalign.h | 40 + .../libretro-common/include/retro_assert.h | 35 + .../include/retro_common_api.h | 119 + .../include/retro_environment.h | 114 + .../libretro-common/include/retro_inline.h | 39 + .../libretro-common/include/retro_math.h | 190 + .../include/retro_miscellaneous.h | 207 + .../libretro-common/include/retro_timers.h | 112 + .../include/streams/file_stream.h | 117 + .../include/string/stdstring.h | 269 ++ .../libretro-common/include/time/rtime.h | 48 + .../libretro-common/include/vfs/vfs.h | 111 + .../include/vfs/vfs_implementation.h | 82 + .../libretro-common/lists/string_list.c | 554 +++ .../libretro-common/memmap/memalign.c | 63 + .../libretro-common/streams/file_stream.c | 682 +++ .../libretro-common/string/stdstring.c | 536 +++ .../RetroArch/libretro-common/time/rtime.c | 81 + .../libretro-common/vfs/vfs_implementation.c | 1335 ++++++ 59 files changed, 17751 insertions(+), 254 deletions(-) create mode 100644 Preferences/Preferences/OutputResamplerBehaviorArrayController.h create mode 100644 Preferences/Preferences/OutputResamplerBehaviorArrayController.m create mode 100644 ThirdParty/RetroArch/config.h create mode 100644 ThirdParty/RetroArch/libretro-common/audio/conversion/s16_to_float.c create mode 100644 ThirdParty/RetroArch/libretro-common/audio/conversion/s32_to_float.c create mode 100644 ThirdParty/RetroArch/libretro-common/audio/resampler/audio_resampler.c create mode 100644 ThirdParty/RetroArch/libretro-common/audio/resampler/drivers/sinc_resampler.c create mode 100644 ThirdParty/RetroArch/libretro-common/encodings/encoding_utf.c create mode 100644 ThirdParty/RetroArch/libretro-common/features/features_cpu.c create mode 100644 ThirdParty/RetroArch/libretro-common/file/config_file.c create mode 100644 ThirdParty/RetroArch/libretro-common/file/config_file_userdata.c create mode 100644 ThirdParty/RetroArch/libretro-common/file/file_path.c create mode 100644 ThirdParty/RetroArch/libretro-common/file/file_path_io.c create mode 100644 ThirdParty/RetroArch/libretro-common/include/array/rhmap.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/audio/audio_resampler.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/audio/conversion/s16_to_float.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/audio/conversion/s32_to_float.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/boolean.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/compat/fopen_utf8.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/compat/msvc.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/compat/posix_string.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/compat/strcasestr.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/compat/strl.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/encodings/utf.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/features/features_cpu.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/file/config_file.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/file/config_file_userdata.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/file/file_path.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/filters.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/libretro.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/lists/string_list.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/memalign.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_assert.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_common_api.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_environment.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_inline.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_math.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_miscellaneous.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/retro_timers.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/streams/file_stream.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/string/stdstring.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/time/rtime.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/vfs/vfs.h create mode 100644 ThirdParty/RetroArch/libretro-common/include/vfs/vfs_implementation.h create mode 100644 ThirdParty/RetroArch/libretro-common/lists/string_list.c create mode 100644 ThirdParty/RetroArch/libretro-common/memmap/memalign.c create mode 100644 ThirdParty/RetroArch/libretro-common/streams/file_stream.c create mode 100644 ThirdParty/RetroArch/libretro-common/string/stdstring.c create mode 100644 ThirdParty/RetroArch/libretro-common/time/rtime.c create mode 100644 ThirdParty/RetroArch/libretro-common/vfs/vfs_implementation.c diff --git a/Application/AppController.m b/Application/AppController.m index b8bcc763f..109b4667d 100644 --- a/Application/AppController.m +++ b/Application/AppController.m @@ -466,6 +466,8 @@ void* kAppControllerContext = &kAppControllerContext; [userDefaultsValuesDict setObject:@"cubic" forKey:@"resampling"]; + [userDefaultsValuesDict setObject:@"normal" forKey:@"outputResampling"]; + [userDefaultsValuesDict setObject:[NSNumber numberWithInteger:CogStatusStopped] forKey:@"lastPlaybackStatus"]; [userDefaultsValuesDict setObject:[NSNumber numberWithInteger:-1] forKey:@"lastTrackPlaying"]; [userDefaultsValuesDict setObject:[NSNumber numberWithDouble:0] forKey:@"lastTrackPosition"]; diff --git a/Audio/AudioPlayer.m b/Audio/AudioPlayer.m index 75ce0b081..77c4732bc 100644 --- a/Audio/AudioPlayer.m +++ b/Audio/AudioPlayer.m @@ -60,9 +60,6 @@ - (void)play:(NSURL *)url withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi startPaused:(BOOL)paused andSeekTo:(double)time { - if (output) { - [output close]; - } @synchronized(chainQueue) { for (id anObject in chainQueue) { @@ -240,7 +237,6 @@ { //Need to reset everything's buffers, and then seek? /*HACK TO TEST HOW WELL THIS WOULD WORK*/ - [self play:[[bufferChain inputNode] stealDecoder] startPaused:paused]; [output seek:time]; [bufferChain seek:time]; /*END HACK*/ diff --git a/Audio/Chain/ConverterNode.h b/Audio/Chain/ConverterNode.h index 21170933a..12042e102 100644 --- a/Audio/Chain/ConverterNode.h +++ b/Audio/Chain/ConverterNode.h @@ -12,32 +12,41 @@ #import #import +#import