Replaced r8brain with libsoxr
Signed-off-by: Christopher Snowhill <kode54@gmail.com>xcode15
parent
01c38c9440
commit
57c2adf946
|
@ -49,3 +49,4 @@ Xcode-config/DEVELOPMENT_TEAM.xcconfig
|
||||||
/ThirdParty/speex/libspeex.a
|
/ThirdParty/speex/libspeex.a
|
||||||
/ThirdParty/vorbis/lib/libvorbisfile.3.dylib
|
/ThirdParty/vorbis/lib/libvorbisfile.3.dylib
|
||||||
/ThirdParty/vorbis/lib/libvorbis.0.dylib
|
/ThirdParty/vorbis/lib/libvorbis.0.dylib
|
||||||
|
/ThirdParty/soxr/lib/libsoxr.0.dylib
|
||||||
|
|
|
@ -19,6 +19,3 @@
|
||||||
[submodule "Frameworks/libsidplayfp/sidplayfp"]
|
[submodule "Frameworks/libsidplayfp/sidplayfp"]
|
||||||
path = Frameworks/libsidplayfp/sidplayfp
|
path = Frameworks/libsidplayfp/sidplayfp
|
||||||
url = https://github.com/kode54/libsidplayfp.git
|
url = https://github.com/kode54/libsidplayfp.git
|
||||||
[submodule "Audio/ThirdParty/r8brain-free-src"]
|
|
||||||
path = Audio/ThirdParty/r8brain-free-src
|
|
||||||
url = https://github.com/kode54/r8brain-free-src
|
|
||||||
|
|
|
@ -41,34 +41,9 @@
|
||||||
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DD30B8D0F7000A34E87 /* PluginController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DD30B8D0F7000A34E87 /* PluginController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 17F94DD40B8D0F7000A34E87 /* PluginController.mm */; };
|
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 17F94DD40B8D0F7000A34E87 /* PluginController.mm */; };
|
||||||
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DDC0B8D101100A34E87 /* Plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DDC0B8D101100A34E87 /* Plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
831A4FDC2865A7DC0049CFE4 /* CDSPProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4F9D2865A7DC0049CFE4 /* CDSPProcessor.h */; };
|
831A50142865A7FD0049CFE4 /* rsstate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 831A50132865A7FD0049CFE4 /* rsstate.hpp */; };
|
||||||
831A4FDD2865A7DC0049CFE4 /* CDSPRealFFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4F9E2865A7DC0049CFE4 /* CDSPRealFFT.h */; };
|
831A50162865A8800049CFE4 /* rsstate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831A50152865A8800049CFE4 /* rsstate.cpp */; };
|
||||||
831A4FDE2865A7DC0049CFE4 /* pffft_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA02865A7DC0049CFE4 /* pffft_double.h */; };
|
831A50182865A8B30049CFE4 /* rsstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A50172865A8B30049CFE4 /* rsstate.h */; };
|
||||||
831A4FDF2865A7DC0049CFE4 /* pf_neon_double_from_avx.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA22865A7DC0049CFE4 /* pf_neon_double_from_avx.h */; };
|
|
||||||
831A4FE02865A7DC0049CFE4 /* pf_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA32865A7DC0049CFE4 /* pf_double.h */; };
|
|
||||||
831A4FE12865A7DC0049CFE4 /* pf_neon_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA42865A7DC0049CFE4 /* pf_neon_double.h */; };
|
|
||||||
831A4FE22865A7DC0049CFE4 /* pf_sse2_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA52865A7DC0049CFE4 /* pf_sse2_double.h */; };
|
|
||||||
831A4FE32865A7DC0049CFE4 /* pf_avx_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA62865A7DC0049CFE4 /* pf_avx_double.h */; };
|
|
||||||
831A4FE42865A7DC0049CFE4 /* pf_scalar_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA72865A7DC0049CFE4 /* pf_scalar_double.h */; };
|
|
||||||
831A4FE52865A7DC0049CFE4 /* pffft_priv_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA82865A7DC0049CFE4 /* pffft_priv_impl.h */; };
|
|
||||||
831A4FE62865A7DC0049CFE4 /* pffft_double.c in Sources */ = {isa = PBXBuildFile; fileRef = 831A4FA92865A7DC0049CFE4 /* pffft_double.c */; };
|
|
||||||
831A4FF32865A7DC0049CFE4 /* r8butil.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FB82865A7DC0049CFE4 /* r8butil.h */; };
|
|
||||||
831A4FF52865A7DC0049CFE4 /* r8bbase.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FBA2865A7DC0049CFE4 /* r8bbase.h */; };
|
|
||||||
831A4FFE2865A7DC0049CFE4 /* CDSPSincFilterGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FC42865A7DC0049CFE4 /* CDSPSincFilterGen.h */; };
|
|
||||||
831A50072865A7DC0049CFE4 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 831A4FD02865A7DC0049CFE4 /* LICENSE */; };
|
|
||||||
831A50082865A7DC0049CFE4 /* CDSPResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD12865A7DC0049CFE4 /* CDSPResampler.h */; };
|
|
||||||
831A50092865A7DC0049CFE4 /* CDSPHBUpsampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD22865A7DC0049CFE4 /* CDSPHBUpsampler.h */; };
|
|
||||||
831A500B2865A7DC0049CFE4 /* CDSPBlockConvolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD42865A7DC0049CFE4 /* CDSPBlockConvolver.h */; };
|
|
||||||
831A500C2865A7DC0049CFE4 /* fft4g.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD52865A7DC0049CFE4 /* fft4g.h */; };
|
|
||||||
831A500D2865A7DC0049CFE4 /* CDSPHBDownsampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD62865A7DC0049CFE4 /* CDSPHBDownsampler.h */; };
|
|
||||||
831A500E2865A7DC0049CFE4 /* r8bconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD72865A7DC0049CFE4 /* r8bconf.h */; };
|
|
||||||
831A500F2865A7DC0049CFE4 /* CDSPFracInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD82865A7DC0049CFE4 /* CDSPFracInterpolator.h */; };
|
|
||||||
831A50102865A7DC0049CFE4 /* CDSPFIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD92865A7DC0049CFE4 /* CDSPFIRFilter.h */; };
|
|
||||||
831A50112865A7DC0049CFE4 /* r8bbase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831A4FDA2865A7DC0049CFE4 /* r8bbase.cpp */; };
|
|
||||||
831A50122865A7DC0049CFE4 /* pffft.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FDB2865A7DC0049CFE4 /* pffft.h */; };
|
|
||||||
831A50142865A7FD0049CFE4 /* r8bstate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 831A50132865A7FD0049CFE4 /* r8bstate.hpp */; };
|
|
||||||
831A50162865A8800049CFE4 /* r8bstate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831A50152865A8800049CFE4 /* r8bstate.cpp */; };
|
|
||||||
831A50182865A8B30049CFE4 /* r8bstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A50172865A8B30049CFE4 /* r8bstate.h */; };
|
|
||||||
8328995327CB511000D7F028 /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */; };
|
8328995327CB511000D7F028 /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */; };
|
||||||
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */; };
|
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */; };
|
||||||
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995527CB51B700D7F028 /* SHA256Digest.h */; };
|
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995527CB51B700D7F028 /* SHA256Digest.h */; };
|
||||||
|
@ -93,6 +68,7 @@
|
||||||
835C88B2279811A500E28EAE /* hdcd_decode2.c in Sources */ = {isa = PBXBuildFile; fileRef = 835C88B0279811A500E28EAE /* hdcd_decode2.c */; };
|
835C88B2279811A500E28EAE /* hdcd_decode2.c in Sources */ = {isa = PBXBuildFile; fileRef = 835C88B0279811A500E28EAE /* hdcd_decode2.c */; };
|
||||||
835FAC5E27BCA14D00BA8562 /* BadSampleCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = 835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */; };
|
835FAC5E27BCA14D00BA8562 /* BadSampleCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = 835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */; };
|
||||||
835FAC5F27BCA14D00BA8562 /* BadSampleCleaner.m in Sources */ = {isa = PBXBuildFile; fileRef = 835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */; };
|
835FAC5F27BCA14D00BA8562 /* BadSampleCleaner.m in Sources */ = {isa = PBXBuildFile; fileRef = 835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */; };
|
||||||
|
836DF618298F6F5F00CD0580 /* libsoxr.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 836DF615298F6E8900CD0580 /* libsoxr.0.dylib */; };
|
||||||
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7B27AA0D8A0003F694 /* Accelerate.framework */; };
|
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7B27AA0D8A0003F694 /* Accelerate.framework */; };
|
||||||
83725A9127AA16D50003F694 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7C27AA0D8E0003F694 /* AVFoundation.framework */; };
|
83725A9127AA16D50003F694 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7C27AA0D8E0003F694 /* AVFoundation.framework */; };
|
||||||
8377C64C27B8C51500E8BC0F /* fft_accelerate.c in Sources */ = {isa = PBXBuildFile; fileRef = 8377C64B27B8C51500E8BC0F /* fft_accelerate.c */; };
|
8377C64C27B8C51500E8BC0F /* fft_accelerate.c in Sources */ = {isa = PBXBuildFile; fileRef = 8377C64B27B8C51500E8BC0F /* fft_accelerate.c */; };
|
||||||
|
@ -123,15 +99,6 @@
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
17D21D2B0B8BE6A200D1EBDE /* CopyFiles */ = {
|
|
||||||
isa = PBXCopyFilesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
dstPath = "";
|
|
||||||
dstSubfolderSpec = 10;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
83725A8D27AA0DDB0003F694 /* CopyFiles */ = {
|
83725A8D27AA0DDB0003F694 /* CopyFiles */ = {
|
||||||
isa = PBXCopyFilesBuildPhase;
|
isa = PBXCopyFilesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
@ -182,35 +149,9 @@
|
||||||
17F94DD40B8D0F7000A34E87 /* PluginController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginController.mm; sourceTree = "<group>"; };
|
17F94DD40B8D0F7000A34E87 /* PluginController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginController.mm; sourceTree = "<group>"; };
|
||||||
17F94DDC0B8D101100A34E87 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
|
17F94DDC0B8D101100A34E87 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
|
||||||
32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogAudio_Prefix.pch; sourceTree = "<group>"; };
|
32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogAudio_Prefix.pch; sourceTree = "<group>"; };
|
||||||
831A4F9D2865A7DC0049CFE4 /* CDSPProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPProcessor.h; sourceTree = "<group>"; };
|
831A50132865A7FD0049CFE4 /* rsstate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = rsstate.hpp; sourceTree = "<group>"; };
|
||||||
831A4F9E2865A7DC0049CFE4 /* CDSPRealFFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPRealFFT.h; sourceTree = "<group>"; };
|
831A50152865A8800049CFE4 /* rsstate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rsstate.cpp; sourceTree = "<group>"; };
|
||||||
831A4FA02865A7DC0049CFE4 /* pffft_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft_double.h; sourceTree = "<group>"; };
|
831A50172865A8B30049CFE4 /* rsstate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rsstate.h; sourceTree = "<group>"; };
|
||||||
831A4FA22865A7DC0049CFE4 /* pf_neon_double_from_avx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_neon_double_from_avx.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA32865A7DC0049CFE4 /* pf_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_double.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA42865A7DC0049CFE4 /* pf_neon_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_neon_double.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA52865A7DC0049CFE4 /* pf_sse2_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_sse2_double.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA62865A7DC0049CFE4 /* pf_avx_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_avx_double.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA72865A7DC0049CFE4 /* pf_scalar_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_scalar_double.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA82865A7DC0049CFE4 /* pffft_priv_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft_priv_impl.h; sourceTree = "<group>"; };
|
|
||||||
831A4FA92865A7DC0049CFE4 /* pffft_double.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pffft_double.c; sourceTree = "<group>"; };
|
|
||||||
831A4FB72865A7DC0049CFE4 /* CDSPHBUpsampler.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = CDSPHBUpsampler.inc; sourceTree = "<group>"; };
|
|
||||||
831A4FB82865A7DC0049CFE4 /* r8butil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8butil.h; sourceTree = "<group>"; };
|
|
||||||
831A4FBA2865A7DC0049CFE4 /* r8bbase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8bbase.h; sourceTree = "<group>"; };
|
|
||||||
831A4FC42865A7DC0049CFE4 /* CDSPSincFilterGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPSincFilterGen.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD02865A7DC0049CFE4 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
|
||||||
831A4FD12865A7DC0049CFE4 /* CDSPResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPResampler.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD22865A7DC0049CFE4 /* CDSPHBUpsampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPHBUpsampler.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD42865A7DC0049CFE4 /* CDSPBlockConvolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPBlockConvolver.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD52865A7DC0049CFE4 /* fft4g.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft4g.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD62865A7DC0049CFE4 /* CDSPHBDownsampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPHBDownsampler.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD72865A7DC0049CFE4 /* r8bconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8bconf.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD82865A7DC0049CFE4 /* CDSPFracInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPFracInterpolator.h; sourceTree = "<group>"; };
|
|
||||||
831A4FD92865A7DC0049CFE4 /* CDSPFIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPFIRFilter.h; sourceTree = "<group>"; };
|
|
||||||
831A4FDA2865A7DC0049CFE4 /* r8bbase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = r8bbase.cpp; sourceTree = "<group>"; };
|
|
||||||
831A4FDB2865A7DC0049CFE4 /* pffft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft.h; sourceTree = "<group>"; };
|
|
||||||
831A50132865A7FD0049CFE4 /* r8bstate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = r8bstate.hpp; sourceTree = "<group>"; };
|
|
||||||
831A50152865A8800049CFE4 /* r8bstate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = r8bstate.cpp; sourceTree = "<group>"; };
|
|
||||||
831A50172865A8B30049CFE4 /* r8bstate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = r8bstate.h; sourceTree = "<group>"; };
|
|
||||||
8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RedundantPlaylistDataStore.m; path = ../../Utils/RedundantPlaylistDataStore.m; sourceTree = "<group>"; };
|
8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RedundantPlaylistDataStore.m; path = ../../Utils/RedundantPlaylistDataStore.m; sourceTree = "<group>"; };
|
||||||
8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RedundantPlaylistDataStore.h; path = ../../Utils/RedundantPlaylistDataStore.h; sourceTree = "<group>"; };
|
8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RedundantPlaylistDataStore.h; path = ../../Utils/RedundantPlaylistDataStore.h; sourceTree = "<group>"; };
|
||||||
8328995527CB51B700D7F028 /* SHA256Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHA256Digest.h; path = ../../Utils/SHA256Digest.h; sourceTree = "<group>"; };
|
8328995527CB51B700D7F028 /* SHA256Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHA256Digest.h; path = ../../Utils/SHA256Digest.h; sourceTree = "<group>"; };
|
||||||
|
@ -235,6 +176,7 @@
|
||||||
835C88B0279811A500E28EAE /* hdcd_decode2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hdcd_decode2.c; sourceTree = "<group>"; };
|
835C88B0279811A500E28EAE /* hdcd_decode2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hdcd_decode2.c; sourceTree = "<group>"; };
|
||||||
835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BadSampleCleaner.h; path = Utils/BadSampleCleaner.h; sourceTree = SOURCE_ROOT; };
|
835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BadSampleCleaner.h; path = Utils/BadSampleCleaner.h; sourceTree = SOURCE_ROOT; };
|
||||||
835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BadSampleCleaner.m; path = Utils/BadSampleCleaner.m; sourceTree = SOURCE_ROOT; };
|
835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BadSampleCleaner.m; path = Utils/BadSampleCleaner.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
836DF615298F6E8900CD0580 /* libsoxr.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsoxr.0.dylib; path = ../ThirdParty/soxr/lib/libsoxr.0.dylib; sourceTree = "<group>"; };
|
||||||
83725A7B27AA0D8A0003F694 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
83725A7B27AA0D8A0003F694 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||||
83725A7C27AA0D8E0003F694 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
83725A7C27AA0D8E0003F694 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||||
8377C64B27B8C51500E8BC0F /* fft_accelerate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fft_accelerate.c; sourceTree = "<group>"; };
|
8377C64B27B8C51500E8BC0F /* fft_accelerate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fft_accelerate.c; sourceTree = "<group>"; };
|
||||||
|
@ -277,6 +219,7 @@
|
||||||
8350416D28646149006B32CC /* CoreMedia.framework in Frameworks */,
|
8350416D28646149006B32CC /* CoreMedia.framework in Frameworks */,
|
||||||
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */,
|
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */,
|
||||||
17D21DAD0B8BE76800D1EBDE /* AudioToolbox.framework in Frameworks */,
|
17D21DAD0B8BE76800D1EBDE /* AudioToolbox.framework in Frameworks */,
|
||||||
|
836DF618298F6F5F00CD0580 /* libsoxr.0.dylib in Frameworks */,
|
||||||
17D21DAE0B8BE76800D1EBDE /* AudioUnit.framework in Frameworks */,
|
17D21DAE0B8BE76800D1EBDE /* AudioUnit.framework in Frameworks */,
|
||||||
17D21DAF0B8BE76800D1EBDE /* CoreAudio.framework in Frameworks */,
|
17D21DAF0B8BE76800D1EBDE /* CoreAudio.framework in Frameworks */,
|
||||||
17D21DB00B8BE76800D1EBDE /* CoreAudioKit.framework in Frameworks */,
|
17D21DB00B8BE76800D1EBDE /* CoreAudioKit.framework in Frameworks */,
|
||||||
|
@ -371,6 +314,7 @@
|
||||||
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
|
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
836DF615298F6E8900CD0580 /* libsoxr.0.dylib */,
|
||||||
83725A7B27AA0D8A0003F694 /* Accelerate.framework */,
|
83725A7B27AA0D8A0003F694 /* Accelerate.framework */,
|
||||||
17D21DAA0B8BE76800D1EBDE /* AudioUnit.framework */,
|
17D21DAA0B8BE76800D1EBDE /* AudioUnit.framework */,
|
||||||
17D21DA90B8BE76800D1EBDE /* AudioToolbox.framework */,
|
17D21DA90B8BE76800D1EBDE /* AudioToolbox.framework */,
|
||||||
|
@ -425,10 +369,9 @@
|
||||||
children = (
|
children = (
|
||||||
834A41A4287A90AB00EB9D9B /* fsurround */,
|
834A41A4287A90AB00EB9D9B /* fsurround */,
|
||||||
839E56E02879450300DFB5F4 /* hrtf */,
|
839E56E02879450300DFB5F4 /* hrtf */,
|
||||||
831A50152865A8800049CFE4 /* r8bstate.cpp */,
|
831A50152865A8800049CFE4 /* rsstate.cpp */,
|
||||||
831A50172865A8B30049CFE4 /* r8bstate.h */,
|
831A50172865A8B30049CFE4 /* rsstate.h */,
|
||||||
831A50132865A7FD0049CFE4 /* r8bstate.hpp */,
|
831A50132865A7FD0049CFE4 /* rsstate.hpp */,
|
||||||
831A4F9C2865A7DC0049CFE4 /* r8brain-free-src */,
|
|
||||||
8377C64A27B8C51500E8BC0F /* deadbeef */,
|
8377C64A27B8C51500E8BC0F /* deadbeef */,
|
||||||
835C88AE279811A500E28EAE /* hdcd */,
|
835C88AE279811A500E28EAE /* hdcd */,
|
||||||
17D21DC40B8BE79700D1EBDE /* CoreAudioUtils */,
|
17D21DC40B8BE79700D1EBDE /* CoreAudioUtils */,
|
||||||
|
@ -474,55 +417,6 @@
|
||||||
name = "Other Sources";
|
name = "Other Sources";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
831A4F9C2865A7DC0049CFE4 /* r8brain-free-src */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
831A4F9D2865A7DC0049CFE4 /* CDSPProcessor.h */,
|
|
||||||
831A4F9E2865A7DC0049CFE4 /* CDSPRealFFT.h */,
|
|
||||||
831A4F9F2865A7DC0049CFE4 /* pffft_double */,
|
|
||||||
831A4FB72865A7DC0049CFE4 /* CDSPHBUpsampler.inc */,
|
|
||||||
831A4FB82865A7DC0049CFE4 /* r8butil.h */,
|
|
||||||
831A4FBA2865A7DC0049CFE4 /* r8bbase.h */,
|
|
||||||
831A4FC42865A7DC0049CFE4 /* CDSPSincFilterGen.h */,
|
|
||||||
831A4FD02865A7DC0049CFE4 /* LICENSE */,
|
|
||||||
831A4FD12865A7DC0049CFE4 /* CDSPResampler.h */,
|
|
||||||
831A4FD22865A7DC0049CFE4 /* CDSPHBUpsampler.h */,
|
|
||||||
831A4FD42865A7DC0049CFE4 /* CDSPBlockConvolver.h */,
|
|
||||||
831A4FD52865A7DC0049CFE4 /* fft4g.h */,
|
|
||||||
831A4FD62865A7DC0049CFE4 /* CDSPHBDownsampler.h */,
|
|
||||||
831A4FD72865A7DC0049CFE4 /* r8bconf.h */,
|
|
||||||
831A4FD82865A7DC0049CFE4 /* CDSPFracInterpolator.h */,
|
|
||||||
831A4FD92865A7DC0049CFE4 /* CDSPFIRFilter.h */,
|
|
||||||
831A4FDA2865A7DC0049CFE4 /* r8bbase.cpp */,
|
|
||||||
831A4FDB2865A7DC0049CFE4 /* pffft.h */,
|
|
||||||
);
|
|
||||||
path = "r8brain-free-src";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
831A4F9F2865A7DC0049CFE4 /* pffft_double */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
831A4FA02865A7DC0049CFE4 /* pffft_double.h */,
|
|
||||||
831A4FA12865A7DC0049CFE4 /* simd */,
|
|
||||||
831A4FA82865A7DC0049CFE4 /* pffft_priv_impl.h */,
|
|
||||||
831A4FA92865A7DC0049CFE4 /* pffft_double.c */,
|
|
||||||
);
|
|
||||||
path = pffft_double;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
831A4FA12865A7DC0049CFE4 /* simd */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
831A4FA22865A7DC0049CFE4 /* pf_neon_double_from_avx.h */,
|
|
||||||
831A4FA32865A7DC0049CFE4 /* pf_double.h */,
|
|
||||||
831A4FA42865A7DC0049CFE4 /* pf_neon_double.h */,
|
|
||||||
831A4FA52865A7DC0049CFE4 /* pf_sse2_double.h */,
|
|
||||||
831A4FA62865A7DC0049CFE4 /* pf_avx_double.h */,
|
|
||||||
831A4FA72865A7DC0049CFE4 /* pf_scalar_double.h */,
|
|
||||||
);
|
|
||||||
path = simd;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
834A41A4287A90AB00EB9D9B /* fsurround */ = {
|
834A41A4287A90AB00EB9D9B /* fsurround */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -590,61 +484,39 @@
|
||||||
files = (
|
files = (
|
||||||
839E56E82879450300DFB5F4 /* IHrtfData.h in Headers */,
|
839E56E82879450300DFB5F4 /* IHrtfData.h in Headers */,
|
||||||
17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */,
|
17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */,
|
||||||
831A4FE02865A7DC0049CFE4 /* pf_double.h in Headers */,
|
831A50142865A7FD0049CFE4 /* rsstate.hpp in Headers */,
|
||||||
831A50142865A7FD0049CFE4 /* r8bstate.hpp in Headers */,
|
|
||||||
834A41AC287A90AB00EB9D9B /* channelmaps.h in Headers */,
|
834A41AC287A90AB00EB9D9B /* channelmaps.h in Headers */,
|
||||||
17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */,
|
17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */,
|
||||||
834A41A9287A90AB00EB9D9B /* freesurround_decoder.h in Headers */,
|
834A41A9287A90AB00EB9D9B /* freesurround_decoder.h in Headers */,
|
||||||
17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */,
|
17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */,
|
||||||
8399CF2C27B5D1D5008751F1 /* NSDictionary+Merge.h in Headers */,
|
8399CF2C27B5D1D5008751F1 /* NSDictionary+Merge.h in Headers */,
|
||||||
831A4FF32865A7DC0049CFE4 /* r8butil.h in Headers */,
|
|
||||||
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */,
|
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */,
|
||||||
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */,
|
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */,
|
||||||
831A50102865A7DC0049CFE4 /* CDSPFIRFilter.h in Headers */,
|
|
||||||
831A4FFE2865A7DC0049CFE4 /* CDSPSincFilterGen.h in Headers */,
|
|
||||||
831A4FF52865A7DC0049CFE4 /* r8bbase.h in Headers */,
|
|
||||||
831A50082865A7DC0049CFE4 /* CDSPResampler.h in Headers */,
|
|
||||||
17D21CC50B8BE4BA00D1EBDE /* OutputAVFoundation.h in Headers */,
|
17D21CC50B8BE4BA00D1EBDE /* OutputAVFoundation.h in Headers */,
|
||||||
83504165286447DA006B32CC /* Downmix.h in Headers */,
|
83504165286447DA006B32CC /* Downmix.h in Headers */,
|
||||||
831A4FDE2865A7DC0049CFE4 /* pffft_double.h in Headers */,
|
|
||||||
839E56E52879450300DFB5F4 /* HrtfData.h in Headers */,
|
839E56E52879450300DFB5F4 /* HrtfData.h in Headers */,
|
||||||
83B74281289E027F005AAC28 /* CogAudio-Bridging-Header.h in Headers */,
|
83B74281289E027F005AAC28 /* CogAudio-Bridging-Header.h in Headers */,
|
||||||
831A4FE12865A7DC0049CFE4 /* pf_neon_double.h in Headers */,
|
|
||||||
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */,
|
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */,
|
||||||
17D21CF30B8BE5EF00D1EBDE /* CogSemaphore.h in Headers */,
|
17D21CF30B8BE5EF00D1EBDE /* CogSemaphore.h in Headers */,
|
||||||
839E56E62879450300DFB5F4 /* Endianness.h in Headers */,
|
839E56E62879450300DFB5F4 /* Endianness.h in Headers */,
|
||||||
17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */,
|
17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */,
|
||||||
839E56ED2879515D00DFB5F4 /* HeadphoneFilter.h in Headers */,
|
839E56ED2879515D00DFB5F4 /* HeadphoneFilter.h in Headers */,
|
||||||
17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */,
|
17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */,
|
||||||
831A50182865A8B30049CFE4 /* r8bstate.h in Headers */,
|
831A50182865A8B30049CFE4 /* rsstate.h in Headers */,
|
||||||
831A4FE52865A7DC0049CFE4 /* pffft_priv_impl.h in Headers */,
|
|
||||||
831A4FE42865A7DC0049CFE4 /* pf_scalar_double.h in Headers */,
|
|
||||||
831A500D2865A7DC0049CFE4 /* CDSPHBDownsampler.h in Headers */,
|
|
||||||
831A500C2865A7DC0049CFE4 /* fft4g.h in Headers */,
|
|
||||||
834FD4F027AF93680063BC83 /* ChunkList.h in Headers */,
|
834FD4F027AF93680063BC83 /* ChunkList.h in Headers */,
|
||||||
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */,
|
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */,
|
||||||
831A50122865A7DC0049CFE4 /* pffft.h in Headers */,
|
|
||||||
831A4FDC2865A7DC0049CFE4 /* CDSPProcessor.h in Headers */,
|
|
||||||
831A4FDD2865A7DC0049CFE4 /* CDSPRealFFT.h in Headers */,
|
|
||||||
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */,
|
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */,
|
||||||
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */,
|
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */,
|
||||||
834FD4EB27AF8F380063BC83 /* AudioChunk.h in Headers */,
|
834FD4EB27AF8F380063BC83 /* AudioChunk.h in Headers */,
|
||||||
834A41AF287ABD6F00EB9D9B /* FSurroundFilter.h in Headers */,
|
834A41AF287ABD6F00EB9D9B /* FSurroundFilter.h in Headers */,
|
||||||
17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */,
|
17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */,
|
||||||
831A50092865A7DC0049CFE4 /* CDSPHBUpsampler.h in Headers */,
|
|
||||||
831A500E2865A7DC0049CFE4 /* r8bconf.h in Headers */,
|
|
||||||
8347C7412796C58800FA8A7D /* NSFileHandle+CreateFile.h in Headers */,
|
8347C7412796C58800FA8A7D /* NSFileHandle+CreateFile.h in Headers */,
|
||||||
17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */,
|
17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */,
|
||||||
831A500F2865A7DC0049CFE4 /* CDSPFracInterpolator.h in Headers */,
|
|
||||||
831A4FE22865A7DC0049CFE4 /* pf_sse2_double.h in Headers */,
|
|
||||||
839E56F7287974A100DFB5F4 /* SandboxBroker.h in Headers */,
|
839E56F7287974A100DFB5F4 /* SandboxBroker.h in Headers */,
|
||||||
839065F32853338700636FBB /* dsd2float.h in Headers */,
|
839065F32853338700636FBB /* dsd2float.h in Headers */,
|
||||||
17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */,
|
17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */,
|
||||||
831A4FDF2865A7DC0049CFE4 /* pf_neon_double_from_avx.h in Headers */,
|
|
||||||
831A4FE32865A7DC0049CFE4 /* pf_avx_double.h in Headers */,
|
|
||||||
839366671815923C006DD712 /* CogPluginMulti.h in Headers */,
|
839366671815923C006DD712 /* CogPluginMulti.h in Headers */,
|
||||||
17ADB13C0B97926D00257CA2 /* AudioSource.h in Headers */,
|
17ADB13C0B97926D00257CA2 /* AudioSource.h in Headers */,
|
||||||
831A500B2865A7DC0049CFE4 /* CDSPBlockConvolver.h in Headers */,
|
|
||||||
835C88B1279811A500E28EAE /* hdcd_decode2.h in Headers */,
|
835C88B1279811A500E28EAE /* hdcd_decode2.h in Headers */,
|
||||||
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */,
|
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */,
|
||||||
8384912718080FF100E7332D /* Logging.h in Headers */,
|
8384912718080FF100E7332D /* Logging.h in Headers */,
|
||||||
|
@ -664,7 +536,6 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "CogAudio Framework" */;
|
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "CogAudio Framework" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
17D21D2B0B8BE6A200D1EBDE /* CopyFiles */,
|
|
||||||
8DC2EF500486A6940098B216 /* Headers */,
|
8DC2EF500486A6940098B216 /* Headers */,
|
||||||
8DC2EF540486A6940098B216 /* Sources */,
|
8DC2EF540486A6940098B216 /* Sources */,
|
||||||
8DC2EF560486A6940098B216 /* Frameworks */,
|
8DC2EF560486A6940098B216 /* Frameworks */,
|
||||||
|
@ -718,7 +589,6 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
831A50072865A7DC0049CFE4 /* LICENSE in Resources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -732,11 +602,10 @@
|
||||||
17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */,
|
17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */,
|
||||||
17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */,
|
17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */,
|
||||||
839E56EE2879515D00DFB5F4 /* HeadphoneFilter.mm in Sources */,
|
839E56EE2879515D00DFB5F4 /* HeadphoneFilter.mm in Sources */,
|
||||||
831A50112865A7DC0049CFE4 /* r8bbase.cpp in Sources */,
|
|
||||||
83504166286447DA006B32CC /* Downmix.m in Sources */,
|
83504166286447DA006B32CC /* Downmix.m in Sources */,
|
||||||
8399CF2D27B5D1D5008751F1 /* NSDictionary+Merge.m in Sources */,
|
8399CF2D27B5D1D5008751F1 /* NSDictionary+Merge.m in Sources */,
|
||||||
834A41AB287A90AB00EB9D9B /* channelmaps.cpp in Sources */,
|
834A41AB287A90AB00EB9D9B /* channelmaps.cpp in Sources */,
|
||||||
831A50162865A8800049CFE4 /* r8bstate.cpp in Sources */,
|
831A50162865A8800049CFE4 /* rsstate.cpp in Sources */,
|
||||||
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */,
|
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */,
|
||||||
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */,
|
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */,
|
||||||
17D21CC60B8BE4BA00D1EBDE /* OutputAVFoundation.m in Sources */,
|
17D21CC60B8BE4BA00D1EBDE /* OutputAVFoundation.m in Sources */,
|
||||||
|
@ -753,7 +622,6 @@
|
||||||
17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */,
|
17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */,
|
||||||
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */,
|
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */,
|
||||||
839E56E72879450300DFB5F4 /* HrtfData.cpp in Sources */,
|
839E56E72879450300DFB5F4 /* HrtfData.cpp in Sources */,
|
||||||
831A4FE62865A7DC0049CFE4 /* pffft_double.c in Sources */,
|
|
||||||
17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */,
|
17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */,
|
||||||
8328995827CB51B700D7F028 /* SHA256Digest.m in Sources */,
|
8328995827CB51B700D7F028 /* SHA256Digest.m in Sources */,
|
||||||
17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */,
|
17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */,
|
||||||
|
@ -789,14 +657,12 @@
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||||
"DEBUG=1",
|
HEADER_SEARCH_PATHS = ../ThirdParty/soxr/include;
|
||||||
"R8B_EXTFFT=1",
|
|
||||||
"R8B_PFFFT_DOUBLE=1",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = Info.plist;
|
INFOPLIST_FILE = Info.plist;
|
||||||
INSTALL_PATH = "@executable_path/../Frameworks";
|
INSTALL_PATH = "@executable_path/../Frameworks";
|
||||||
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
||||||
|
LIBRARY_SEARCH_PATHS = ../ThirdParty/soxr/lib;
|
||||||
OTHER_LDFLAGS = "";
|
OTHER_LDFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
||||||
PRODUCT_NAME = CogAudio;
|
PRODUCT_NAME = CogAudio;
|
||||||
|
@ -823,13 +689,12 @@
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||||
"R8B_EXTFFT=1",
|
HEADER_SEARCH_PATHS = ../ThirdParty/soxr/include;
|
||||||
"R8B_PFFFT_DOUBLE=1",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = Info.plist;
|
INFOPLIST_FILE = Info.plist;
|
||||||
INSTALL_PATH = "@executable_path/../Frameworks";
|
INSTALL_PATH = "@executable_path/../Frameworks";
|
||||||
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
||||||
|
LIBRARY_SEARCH_PATHS = ../ThirdParty/soxr/lib;
|
||||||
OTHER_LDFLAGS = "";
|
OTHER_LDFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
||||||
PRODUCT_NAME = CogAudio;
|
PRODUCT_NAME = CogAudio;
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#import <fstream>
|
#import <fstream>
|
||||||
|
|
||||||
#import "r8bstate.h"
|
#import "rsstate.h"
|
||||||
|
|
||||||
#import "HrtfData.h"
|
#import "HrtfData.h"
|
||||||
|
|
||||||
|
@ -205,24 +205,24 @@ static impulseCache *_sharedController = nil;
|
||||||
double sampleRatio = sampleRate / sampleRateOfSource;
|
double sampleRatio = sampleRate / sampleRateOfSource;
|
||||||
int resampledCount = (int)ceil((double)sampleCount * sampleRatio);
|
int resampledCount = (int)ceil((double)sampleCount * sampleRatio);
|
||||||
|
|
||||||
void *r8bstate = r8bstate_new(channelCount * 2, 1024, sampleRateOfSource, sampleRate);
|
void *rsstate = rsstate_new(channelCount * 2, sampleRateOfSource, sampleRate);
|
||||||
|
|
||||||
float *resampledImpulse = (float *)_memalign_malloc(resampledCount * sizeof(float) * channelCount * 2, 16);
|
float *resampledImpulse = (float *)_memalign_malloc(resampledCount * sizeof(float) * channelCount * 2, 16);
|
||||||
if(!resampledImpulse) {
|
if(!resampledImpulse) {
|
||||||
r8bstate_delete(r8bstate);
|
rsstate_delete(rsstate);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t inputDone = 0;
|
size_t inputDone = 0;
|
||||||
size_t outputDone = 0;
|
size_t outputDone = 0;
|
||||||
|
|
||||||
outputDone = r8bstate_resample(r8bstate, impulseData, sampleCount, &inputDone, resampledImpulse, resampledCount);
|
outputDone = rsstate_resample(rsstate, impulseData, sampleCount, &inputDone, resampledImpulse, resampledCount);
|
||||||
|
|
||||||
while(outputDone < resampledCount) {
|
while(outputDone < resampledCount) {
|
||||||
outputDone += r8bstate_flush(r8bstate, resampledImpulse + outputDone * channelCount * 2, resampledCount - outputDone);
|
outputDone += rsstate_flush(rsstate, resampledImpulse + outputDone * channelCount * 2, resampledCount - outputDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
r8bstate_delete(r8bstate);
|
rsstate_delete(rsstate);
|
||||||
|
|
||||||
sampleCount = (int)outputDone;
|
sampleCount = (int)outputDone;
|
||||||
|
|
||||||
|
|
|
@ -40,10 +40,10 @@ using std::atomic_long;
|
||||||
@interface OutputAVFoundation : NSObject {
|
@interface OutputAVFoundation : NSObject {
|
||||||
OutputNode *outputController;
|
OutputNode *outputController;
|
||||||
|
|
||||||
BOOL r8bDone;
|
BOOL rsDone;
|
||||||
void *r8bstate, *r8bold;
|
void *rsstate, *rsold;
|
||||||
|
|
||||||
void *r8bvis;
|
void *rsvis;
|
||||||
double lastVisRate;
|
double lastVisRate;
|
||||||
|
|
||||||
BOOL stopInvoked;
|
BOOL stopInvoked;
|
||||||
|
@ -121,7 +121,7 @@ using std::atomic_long;
|
||||||
|
|
||||||
float *samplePtr;
|
float *samplePtr;
|
||||||
float tempBuffer[512 * 32];
|
float tempBuffer[512 * 32];
|
||||||
float r8bTempBuffer[4096 * 32];
|
float rsTempBuffer[4096 * 32];
|
||||||
float inputBuffer[4096 * 32]; // 4096 samples times maximum supported channel count
|
float inputBuffer[4096 * 32]; // 4096 samples times maximum supported channel count
|
||||||
float fsurroundBuffer[8192 * 6];
|
float fsurroundBuffer[8192 * 6];
|
||||||
float hrtfBuffer[4096 * 2];
|
float hrtfBuffer[4096 * 2];
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
#import <Accelerate/Accelerate.h>
|
#import <Accelerate/Accelerate.h>
|
||||||
|
|
||||||
#import "r8bstate.h"
|
#import "rsstate.h"
|
||||||
|
|
||||||
#import "FSurroundFilter.h"
|
#import "FSurroundFilter.h"
|
||||||
|
|
||||||
|
@ -90,14 +90,14 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
if(formatClipped) {
|
if(formatClipped) {
|
||||||
ALog(@"Sample rate clipped to no more than %f Hz!", maxSampleRate);
|
ALog(@"Sample rate clipped to no more than %f Hz!", maxSampleRate);
|
||||||
if(r8bstate) {
|
if(rsstate) {
|
||||||
r8bold = r8bstate;
|
rsold = rsstate;
|
||||||
r8bstate = NULL;
|
rsstate = NULL;
|
||||||
}
|
}
|
||||||
r8bstate = r8bstate_new(format.mChannelsPerFrame, 1024, srcRate, dstRate);
|
rsstate = rsstate_new(format.mChannelsPerFrame, srcRate, dstRate);
|
||||||
} else if(r8bstate) {
|
} else if(rsstate) {
|
||||||
r8bold = r8bstate;
|
rsold = rsstate;
|
||||||
r8bstate = NULL;
|
rsstate = NULL;
|
||||||
}
|
}
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
newFormat = format;
|
newFormat = format;
|
||||||
|
@ -110,7 +110,7 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
visFormat.mBytesPerPacket = visFormat.mBytesPerFrame * visFormat.mFramesPerPacket;
|
visFormat.mBytesPerPacket = visFormat.mBytesPerFrame * visFormat.mFramesPerPacket;
|
||||||
|
|
||||||
downmixerForVis = [[DownmixProcessor alloc] initWithInputFormat:format inputConfig:config andOutputFormat:visFormat outputConfig:AudioConfigMono];
|
downmixerForVis = [[DownmixProcessor alloc] initWithInputFormat:format inputConfig:config andOutputFormat:visFormat outputConfig:AudioConfigMono];
|
||||||
if(!r8bold) {
|
if(!rsold) {
|
||||||
realStreamFormat = format;
|
realStreamFormat = format;
|
||||||
realStreamChannelConfig = config;
|
realStreamChannelConfig = config;
|
||||||
streamFormatChanged = YES;
|
streamFormatChanged = YES;
|
||||||
|
@ -140,14 +140,14 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
#endif
|
#endif
|
||||||
// It should be fine to request up to double, we'll only get downsampled
|
// It should be fine to request up to double, we'll only get downsampled
|
||||||
const float *outputPtr = (const float *)[samples bytes];
|
const float *outputPtr = (const float *)[samples bytes];
|
||||||
if(r8bstate) {
|
if(rsstate) {
|
||||||
size_t inDone = 0;
|
size_t inDone = 0;
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
size_t framesDone = r8bstate_resample(r8bstate, outputPtr, frameCount, &inDone, &r8bTempBuffer[0], amountToRead);
|
size_t framesDone = rsstate_resample(rsstate, outputPtr, frameCount, &inDone, &rsTempBuffer[0], amountToRead);
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
if(!framesDone) return 0;
|
if(!framesDone) return 0;
|
||||||
frameCount = (int)framesDone;
|
frameCount = (int)framesDone;
|
||||||
outputPtr = &r8bTempBuffer[0];
|
outputPtr = &rsTempBuffer[0];
|
||||||
chunkDuration = frameCount / newFormat.mSampleRate;
|
chunkDuration = frameCount / newFormat.mSampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,11 +159,11 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
|
|
||||||
if(newFormat.mSampleRate != 44100.0) {
|
if(newFormat.mSampleRate != 44100.0) {
|
||||||
if(newFormat.mSampleRate != lastVisRate) {
|
if(newFormat.mSampleRate != lastVisRate) {
|
||||||
if(r8bvis) {
|
if(rsvis) {
|
||||||
for(;;) {
|
for(;;) {
|
||||||
int samplesFlushed;
|
int samplesFlushed;
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
samplesFlushed = (int)r8bstate_flush(r8bvis, &visTemp[0], 8192);
|
samplesFlushed = (int)rsstate_flush(rsvis, &visTemp[0], 8192);
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
if(samplesFlushed) {
|
if(samplesFlushed) {
|
||||||
[visController postVisPCM:visTemp amount:samplesFlushed];
|
[visController postVisPCM:visTemp amount:samplesFlushed];
|
||||||
|
@ -172,23 +172,23 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
r8bstate_delete(r8bvis);
|
rsstate_delete(rsvis);
|
||||||
r8bvis = NULL;
|
rsvis = NULL;
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
}
|
}
|
||||||
lastVisRate = newFormat.mSampleRate;
|
lastVisRate = newFormat.mSampleRate;
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
r8bvis = r8bstate_new(1, 1024, lastVisRate, 44100.0);
|
rsvis = rsstate_new(1, lastVisRate, 44100.0);
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
}
|
}
|
||||||
if(r8bvis) {
|
if(rsvis) {
|
||||||
int samplesProcessed;
|
int samplesProcessed;
|
||||||
size_t totalDone = 0;
|
size_t totalDone = 0;
|
||||||
size_t inDone = 0;
|
size_t inDone = 0;
|
||||||
size_t visFrameCount = frameCount;
|
size_t visFrameCount = frameCount;
|
||||||
{
|
{
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
samplesProcessed = (int)r8bstate_resample(r8bvis, &visAudio[totalDone], visFrameCount, &inDone, &visTemp[0], 8192);
|
samplesProcessed = (int)rsstate_resample(rsvis, &visAudio[totalDone], visFrameCount, &inDone, &visTemp[0], 8192);
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
if(samplesProcessed) {
|
if(samplesProcessed) {
|
||||||
[visController postVisPCM:&visTemp[0] amount:samplesProcessed];
|
[visController postVisPCM:&visTemp[0] amount:samplesProcessed];
|
||||||
|
@ -197,11 +197,11 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
visFrameCount -= inDone;
|
visFrameCount -= inDone;
|
||||||
} while(samplesProcessed && visFrameCount);
|
} while(samplesProcessed && visFrameCount);
|
||||||
}
|
}
|
||||||
} else if(r8bvis) {
|
} else if(rsvis) {
|
||||||
for(;;) {
|
for(;;) {
|
||||||
int samplesFlushed;
|
int samplesFlushed;
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
samplesFlushed = (int)r8bstate_flush(r8bvis, &visTemp[0], 8192);
|
samplesFlushed = (int)rsstate_flush(rsvis, &visTemp[0], 8192);
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
if(samplesFlushed) {
|
if(samplesFlushed) {
|
||||||
[visController postVisPCM:visTemp amount:samplesFlushed];
|
[visController postVisPCM:visTemp amount:samplesFlushed];
|
||||||
|
@ -210,8 +210,8 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
r8bstate_delete(r8bvis);
|
rsstate_delete(rsvis);
|
||||||
r8bvis = NULL;
|
rsvis = NULL;
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
[visController postVisPCM:&visAudio[0] amount:frameCount];
|
[visController postVisPCM:&visAudio[0] amount:frameCount];
|
||||||
} else {
|
} else {
|
||||||
|
@ -795,26 +795,26 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
int samplesRendered;
|
int samplesRendered;
|
||||||
|
|
||||||
if(i == 0) {
|
if(i == 0) {
|
||||||
if(!r8bold) {
|
if(!rsold) {
|
||||||
++i;
|
++i;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
[currentPtsLock lock];
|
[currentPtsLock lock];
|
||||||
samplesRendered = r8bstate_flush(r8bold, &r8bTempBuffer[0], 4096);
|
samplesRendered = rsstate_flush(rsold, &rsTempBuffer[0], 4096);
|
||||||
[currentPtsLock unlock];
|
[currentPtsLock unlock];
|
||||||
if(!samplesRendered) {
|
if(!samplesRendered) {
|
||||||
r8bstate_delete(r8bold);
|
rsstate_delete(rsold);
|
||||||
r8bold = NULL;
|
rsold = NULL;
|
||||||
r8bDone = YES;
|
rsDone = YES;
|
||||||
++i;
|
++i;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
samplePtr = &r8bTempBuffer[0];
|
samplePtr = &rsTempBuffer[0];
|
||||||
} else {
|
} else {
|
||||||
samplesRendered = inputRendered;
|
samplesRendered = inputRendered;
|
||||||
samplePtr = &inputBuffer[0];
|
samplePtr = &inputBuffer[0];
|
||||||
if(r8bDone) {
|
if(rsDone) {
|
||||||
r8bDone = NO;
|
rsDone = NO;
|
||||||
realStreamFormat = newFormat;
|
realStreamFormat = newFormat;
|
||||||
realStreamChannelConfig = newChannelConfig;
|
realStreamChannelConfig = newChannelConfig;
|
||||||
streamFormatChanged = YES;
|
streamFormatChanged = YES;
|
||||||
|
@ -959,11 +959,11 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
|
|
||||||
downmixerForVis = nil;
|
downmixerForVis = nil;
|
||||||
|
|
||||||
r8bDone = NO;
|
rsDone = NO;
|
||||||
r8bstate = NULL;
|
rsstate = NULL;
|
||||||
r8bold = NULL;
|
rsold = NULL;
|
||||||
|
|
||||||
r8bvis = NULL;
|
rsvis = NULL;
|
||||||
lastVisRate = 44100.0;
|
lastVisRate = 44100.0;
|
||||||
|
|
||||||
AudioComponentDescription desc;
|
AudioComponentDescription desc;
|
||||||
|
@ -1079,9 +1079,9 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
OutputNode *outputController = self->outputController;
|
OutputNode *outputController = self->outputController;
|
||||||
double *latencySecondsOut = &self->secondsLatency;
|
double *latencySecondsOut = &self->secondsLatency;
|
||||||
VisualizationController *visController = self->visController;
|
VisualizationController *visController = self->visController;
|
||||||
void **r8bstate = &self->r8bstate;
|
void **rsstate = &self->rsstate;
|
||||||
void **r8bold = &self->r8bold;
|
void **rsold = &self->rsold;
|
||||||
void **r8bvis = &self->r8bvis;
|
void **rsvis = &self->rsvis;
|
||||||
FSurroundFilter *const *fsurroundtest = &self->fsurround;
|
FSurroundFilter *const *fsurroundtest = &self->fsurround;
|
||||||
currentPtsObserver = [renderSynchronizer addPeriodicTimeObserverForInterval:interval
|
currentPtsObserver = [renderSynchronizer addPeriodicTimeObserverForInterval:interval
|
||||||
queue:NULL
|
queue:NULL
|
||||||
|
@ -1101,14 +1101,14 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
double latencySeconds = CMTimeGetSeconds(latencyTime);
|
double latencySeconds = CMTimeGetSeconds(latencyTime);
|
||||||
double latencyVis = 0.0;
|
double latencyVis = 0.0;
|
||||||
[lock lock];
|
[lock lock];
|
||||||
if(*r8bstate) {
|
if(*rsstate) {
|
||||||
latencySeconds += r8bstate_latency(*r8bstate);
|
latencySeconds += rsstate_latency(*rsstate);
|
||||||
}
|
}
|
||||||
if(*r8bold) {
|
if(*rsold) {
|
||||||
latencySeconds += r8bstate_latency(*r8bold);
|
latencySeconds += rsstate_latency(*rsold);
|
||||||
}
|
}
|
||||||
if(*r8bvis) {
|
if(*rsvis) {
|
||||||
latencyVis = r8bstate_latency(*r8bvis);
|
latencyVis = rsstate_latency(*rsvis);
|
||||||
}
|
}
|
||||||
if(*fsurroundtest) {
|
if(*fsurroundtest) {
|
||||||
latencyVis += 2048.0 / [(*fsurroundtest) srate];
|
latencyVis += 2048.0 / [(*fsurroundtest) srate];
|
||||||
|
@ -1268,17 +1268,17 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
#endif
|
#endif
|
||||||
outputController = nil;
|
outputController = nil;
|
||||||
visController = nil;
|
visController = nil;
|
||||||
if(r8bstate) {
|
if(rsstate) {
|
||||||
r8bstate_delete(r8bstate);
|
rsstate_delete(rsstate);
|
||||||
r8bstate = NULL;
|
rsstate = NULL;
|
||||||
}
|
}
|
||||||
if(r8bold) {
|
if(rsold) {
|
||||||
r8bstate_delete(r8bold);
|
rsstate_delete(rsold);
|
||||||
r8bold = NULL;
|
rsold = NULL;
|
||||||
}
|
}
|
||||||
if(r8bvis) {
|
if(rsvis) {
|
||||||
r8bstate_delete(r8bvis);
|
rsstate_delete(rsvis);
|
||||||
r8bvis = NULL;
|
rsvis = NULL;
|
||||||
}
|
}
|
||||||
stopCompleted = YES;
|
stopCompleted = YES;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 8ce873a7e797c9dc39d5c2603eb4a900d71385cb
|
|
|
@ -1,31 +0,0 @@
|
||||||
//
|
|
||||||
// r8bstate.cpp
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 6/24/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "r8bstate.h"
|
|
||||||
#include "r8bstate.hpp"
|
|
||||||
|
|
||||||
void *r8bstate_new(int channelCount, int bufferCapacity, double srcRate,
|
|
||||||
double dstRate) {
|
|
||||||
return (void *)new r8bstate(channelCount, bufferCapacity, srcRate, dstRate);
|
|
||||||
}
|
|
||||||
|
|
||||||
void r8bstate_delete(void *state) {
|
|
||||||
delete(r8bstate *)state;
|
|
||||||
}
|
|
||||||
|
|
||||||
double r8bstate_latency(void *state) {
|
|
||||||
return ((r8bstate *)state)->latency();
|
|
||||||
}
|
|
||||||
|
|
||||||
int r8bstate_resample(void *state, const float *input, size_t inCount, size_t *inDone,
|
|
||||||
float *output, size_t outMax) {
|
|
||||||
return ((r8bstate *)state)->resample(input, inCount, inDone, output, outMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
int r8bstate_flush(void *state, float *output, size_t outMax) {
|
|
||||||
return ((r8bstate *)state)->flush(output, outMax);
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
//
|
|
||||||
// r8bstate.h
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 6/24/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#ifndef r8bstate_h
|
|
||||||
#define r8bstate_h
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void *r8bstate_new(int channelCount, int bufferCapacity, double srcRate,
|
|
||||||
double dstRate);
|
|
||||||
void r8bstate_delete(void *);
|
|
||||||
|
|
||||||
double r8bstate_latency(void *);
|
|
||||||
|
|
||||||
int r8bstate_resample(void *, const float *input, size_t inCount, size_t *inDone,
|
|
||||||
float *output, size_t outMax);
|
|
||||||
|
|
||||||
int r8bstate_flush(void *, float *output, size_t outMax);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* r8bstate_h */
|
|
|
@ -1,165 +0,0 @@
|
||||||
//
|
|
||||||
// r8bstate.hpp
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 3/3/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef r8bstate_hpp
|
|
||||||
#define r8bstate_hpp
|
|
||||||
|
|
||||||
#include <Accelerate/Accelerate.h>
|
|
||||||
|
|
||||||
#include "r8bbase.h"
|
|
||||||
|
|
||||||
#include "CDSPResampler.h"
|
|
||||||
|
|
||||||
struct r8bstate {
|
|
||||||
int channelCount;
|
|
||||||
int bufferCapacity;
|
|
||||||
size_t remainder;
|
|
||||||
uint64_t inProcessed;
|
|
||||||
uint64_t outProcessed;
|
|
||||||
double sampleRatio;
|
|
||||||
double dstRate;
|
|
||||||
r8b::CFixedBuffer<double> InBuf;
|
|
||||||
r8b::CFixedBuffer<double> *OutBufs;
|
|
||||||
r8b::CDSPResampler24 **Resamps;
|
|
||||||
r8bstate(int _channelCount, int _bufferCapacity, double srcRate, double _dstRate)
|
|
||||||
: channelCount(_channelCount), bufferCapacity(_bufferCapacity), inProcessed(0), outProcessed(0), remainder(0), dstRate(_dstRate) {
|
|
||||||
InBuf.alloc(bufferCapacity);
|
|
||||||
OutBufs = new r8b::CFixedBuffer<double>[channelCount];
|
|
||||||
Resamps = new r8b::CDSPResampler24 *[channelCount];
|
|
||||||
for(int i = 0; i < channelCount; ++i) {
|
|
||||||
Resamps[i] = new r8b::CDSPResampler24(srcRate, dstRate, bufferCapacity);
|
|
||||||
}
|
|
||||||
sampleRatio = dstRate / srcRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
~r8bstate() {
|
|
||||||
delete[] OutBufs;
|
|
||||||
for(int i = 0; i < channelCount; ++i) {
|
|
||||||
delete Resamps[i];
|
|
||||||
}
|
|
||||||
delete[] Resamps;
|
|
||||||
}
|
|
||||||
|
|
||||||
double latency() {
|
|
||||||
return (((double)inProcessed * sampleRatio) - (double)outProcessed) / dstRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
int resample(const float *input, size_t inCount, size_t *inDone, float *output, size_t outMax) {
|
|
||||||
int ret = 0;
|
|
||||||
int i;
|
|
||||||
if(inDone) *inDone = 0;
|
|
||||||
while(remainder > 0) {
|
|
||||||
size_t blockCount = remainder;
|
|
||||||
if(blockCount > outMax)
|
|
||||||
blockCount = outMax;
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
vDSP_vdpsp(&OutBufs[i][0], 1, output + i, channelCount, blockCount);
|
|
||||||
}
|
|
||||||
remainder -= blockCount;
|
|
||||||
if(remainder > 0) {
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
memmove(&OutBufs[i][0], &OutBufs[i][blockCount], remainder * sizeof(double));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
output += channelCount * blockCount;
|
|
||||||
outProcessed += blockCount;
|
|
||||||
outMax -= blockCount;
|
|
||||||
ret += blockCount;
|
|
||||||
if(!outMax)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
while(inCount > 0) {
|
|
||||||
size_t blockCount = inCount;
|
|
||||||
if(blockCount > bufferCapacity)
|
|
||||||
blockCount = bufferCapacity;
|
|
||||||
int outputDone = 0;
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
double *outputPointer;
|
|
||||||
vDSP_vspdp(input + i, channelCount, &InBuf[0], 1, blockCount);
|
|
||||||
outputDone = Resamps[i]->process(InBuf, (int)blockCount, outputPointer);
|
|
||||||
if(outputDone) {
|
|
||||||
if(outputDone > outMax) {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outMax);
|
|
||||||
remainder = outputDone - outMax;
|
|
||||||
OutBufs[i].alloc((int)remainder);
|
|
||||||
memcpy(&OutBufs[i][0], outputPointer + outMax, remainder);
|
|
||||||
} else {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outputDone);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
size_t outputActual = outputDone - remainder;
|
|
||||||
input += channelCount * blockCount;
|
|
||||||
output += channelCount * outputActual;
|
|
||||||
inCount -= blockCount;
|
|
||||||
if(inDone) *inDone += blockCount;
|
|
||||||
inProcessed += blockCount;
|
|
||||||
outProcessed += outputActual;
|
|
||||||
outMax -= outputActual;
|
|
||||||
ret += outputActual;
|
|
||||||
if(remainder)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int flush(float *output, size_t outMax) {
|
|
||||||
int ret = 0;
|
|
||||||
int i;
|
|
||||||
if(remainder > 0) {
|
|
||||||
size_t blockCount = remainder;
|
|
||||||
if(blockCount > outMax)
|
|
||||||
blockCount = outMax;
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
vDSP_vdpsp(&OutBufs[i][0], 1, output + i, channelCount, blockCount);
|
|
||||||
}
|
|
||||||
remainder -= blockCount;
|
|
||||||
if(remainder > 0) {
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
memmove(&OutBufs[i][0], &OutBufs[i][blockCount], remainder * sizeof(double));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
output += channelCount * blockCount;
|
|
||||||
outProcessed += blockCount;
|
|
||||||
outMax -= blockCount;
|
|
||||||
ret += blockCount;
|
|
||||||
if(!outMax)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
uint64_t outputWanted = ceil(inProcessed * sampleRatio);
|
|
||||||
memset(&InBuf[0], 0, sizeof(double) * bufferCapacity);
|
|
||||||
while(outProcessed < outputWanted) {
|
|
||||||
int outputDone = 0;
|
|
||||||
for(int i = 0; i < channelCount; ++i) {
|
|
||||||
double *outputPointer;
|
|
||||||
outputDone = Resamps[i]->process(InBuf, bufferCapacity, outputPointer);
|
|
||||||
if(outputDone) {
|
|
||||||
if(outputDone > (outputWanted - outProcessed))
|
|
||||||
outputDone = (int)(outputWanted - outProcessed);
|
|
||||||
if(outputDone > outMax) {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outMax);
|
|
||||||
remainder = outputDone - outMax;
|
|
||||||
OutBufs[i].alloc((int)remainder);
|
|
||||||
memcpy(&OutBufs[i][0], outputPointer + outMax, remainder);
|
|
||||||
} else {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outputDone);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
size_t outputActual = outputDone - remainder;
|
|
||||||
outProcessed += outputActual;
|
|
||||||
output += channelCount * outputActual;
|
|
||||||
outMax -= outputActual;
|
|
||||||
ret += outputActual;
|
|
||||||
if(remainder)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* r8bstate_h */
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// rsstate.cpp
|
||||||
|
// CogAudio Framework
|
||||||
|
//
|
||||||
|
// Created by Christopher Snowhill on 2/4/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "rsstate.h"
|
||||||
|
#include "rsstate.hpp"
|
||||||
|
|
||||||
|
void *rsstate_new(int channelCount, double srcRate, double dstRate) {
|
||||||
|
return (void *)new rsstate(channelCount, srcRate, dstRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rsstate_delete(void *state) {
|
||||||
|
delete(rsstate *)state;
|
||||||
|
}
|
||||||
|
|
||||||
|
double rsstate_latency(void *state) {
|
||||||
|
return ((rsstate *)state)->latency();
|
||||||
|
}
|
||||||
|
|
||||||
|
int rsstate_resample(void *state, const float *input, size_t inCount, size_t *inDone,
|
||||||
|
float *output, size_t outMax) {
|
||||||
|
return ((rsstate *)state)->resample(input, inCount, inDone, output, outMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
int rsstate_flush(void *state, float *output, size_t outMax) {
|
||||||
|
return ((rsstate *)state)->flush(output, outMax);
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
//
|
||||||
|
// rsstate.h
|
||||||
|
// CogAudio Framework
|
||||||
|
//
|
||||||
|
// Created by Christopher Snowhill on 2/4/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifndef rsstate_h
|
||||||
|
#define rsstate_h
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void *rsstate_new(int channelCount, double srcRate, double dstRate);
|
||||||
|
void rsstate_delete(void *);
|
||||||
|
|
||||||
|
double rsstate_latency(void *);
|
||||||
|
|
||||||
|
int rsstate_resample(void *, const float *input, size_t inCount, size_t *inDone,
|
||||||
|
float *output, size_t outMax);
|
||||||
|
|
||||||
|
int rsstate_flush(void *, float *output, size_t outMax);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* rsstate_h */
|
|
@ -0,0 +1,80 @@
|
||||||
|
//
|
||||||
|
// rsstate.hpp
|
||||||
|
// CogAudio Framework
|
||||||
|
//
|
||||||
|
// Created by Christopher Snowhill on 2/3/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef rsstate_hpp
|
||||||
|
#define rsstate_hpp
|
||||||
|
|
||||||
|
#include "soxr.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
struct rsstate {
|
||||||
|
int channelCount;
|
||||||
|
int bufferCapacity;
|
||||||
|
size_t remainder;
|
||||||
|
uint64_t inProcessed;
|
||||||
|
uint64_t outProcessed;
|
||||||
|
double sampleRatio;
|
||||||
|
double dstRate;
|
||||||
|
std::vector<float> SilenceBuf;
|
||||||
|
soxr_t Resampler;
|
||||||
|
rsstate(int _channelCount, double srcRate, double _dstRate)
|
||||||
|
: channelCount(_channelCount), inProcessed(0), outProcessed(0), remainder(0), dstRate(_dstRate) {
|
||||||
|
SilenceBuf.resize(1024 * channelCount);
|
||||||
|
memset(&SilenceBuf[0], 0, 1024 * channelCount * sizeof(float));
|
||||||
|
Resampler = soxr_create(srcRate, dstRate, channelCount, NULL, NULL, NULL, NULL);
|
||||||
|
sampleRatio = dstRate / srcRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
~rsstate() {
|
||||||
|
soxr_delete(Resampler);
|
||||||
|
}
|
||||||
|
|
||||||
|
double latency() {
|
||||||
|
return (((double)inProcessed * sampleRatio) - (double)outProcessed) / dstRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
int resample(const float *input, size_t inCount, size_t *inDone, float *output, size_t outMax) {
|
||||||
|
size_t outDone = 0;
|
||||||
|
soxr_error_t errmsg = soxr_process(Resampler, (soxr_in_t)input, inCount, inDone, (soxr_out_t)output, outMax, &outDone);
|
||||||
|
if(!errmsg) {
|
||||||
|
inProcessed += *inDone;
|
||||||
|
outProcessed += outDone;
|
||||||
|
return (int)outDone;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int flush(float *output, size_t outMax) {
|
||||||
|
size_t outTotal = 0;
|
||||||
|
uint64_t outputWanted = std::ceil(inProcessed * sampleRatio);
|
||||||
|
while(outProcessed < outputWanted) {
|
||||||
|
size_t outWanted = outputWanted - outProcessed;
|
||||||
|
if(outWanted > outMax) {
|
||||||
|
outWanted = outMax;
|
||||||
|
}
|
||||||
|
size_t outDone = 0;
|
||||||
|
size_t inDone = 0;
|
||||||
|
soxr_error_t errmsg = soxr_process(Resampler, (soxr_in_t)(&SilenceBuf[0]), 1024, &inDone, (soxr_out_t)output, outWanted, &outDone);
|
||||||
|
if(!errmsg) {
|
||||||
|
outProcessed += outDone;
|
||||||
|
outTotal += outDone;
|
||||||
|
output += outDone * channelCount;
|
||||||
|
outMax -= outDone;
|
||||||
|
if(!outMax || outProcessed == outputWanted) {
|
||||||
|
return (int)outTotal;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* r8bstate_h */
|
|
@ -132,6 +132,7 @@
|
||||||
835FAC7F27BCDF5B00BA8562 /* libavif.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 835FAC7D27BCDF5B00BA8562 /* libavif.a */; };
|
835FAC7F27BCDF5B00BA8562 /* libavif.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 835FAC7D27BCDF5B00BA8562 /* libavif.a */; };
|
||||||
8360EF6D17F92E56005208A4 /* HighlyComplete.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8360EF0517F92B24005208A4 /* HighlyComplete.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
8360EF6D17F92E56005208A4 /* HighlyComplete.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8360EF0517F92B24005208A4 /* HighlyComplete.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
836D28A818086386005B7299 /* MiniModeMenuTitleTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */; };
|
836D28A818086386005B7299 /* MiniModeMenuTitleTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */; };
|
||||||
|
836DF617298F6F1700CD0580 /* libsoxr.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836DF616298F6EC400CD0580 /* libsoxr.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
836EF0C827BB91E600BF35B2 /* libogg.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C427BB919300BF35B2 /* libogg.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
836EF0C827BB91E600BF35B2 /* libogg.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C427BB919300BF35B2 /* libogg.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
836EF0C927BB91E900BF35B2 /* libvorbisfile.3.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
836EF0C927BB91E900BF35B2 /* libvorbisfile.3.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
836EF0CA27BB91EB00BF35B2 /* libvorbis.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
836EF0CA27BB91EB00BF35B2 /* libvorbis.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
|
@ -743,6 +744,7 @@
|
||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
|
836DF617298F6F1700CD0580 /* libsoxr.0.dylib in CopyFiles */,
|
||||||
836EF0E127BB98AB00BF35B2 /* libopusfile.0.dylib in CopyFiles */,
|
836EF0E127BB98AB00BF35B2 /* libopusfile.0.dylib in CopyFiles */,
|
||||||
836EF0E027BB98A800BF35B2 /* libopus.0.dylib in CopyFiles */,
|
836EF0E027BB98A800BF35B2 /* libopus.0.dylib in CopyFiles */,
|
||||||
836EF0CB27BB91EE00BF35B2 /* libFLAC.12.dylib in CopyFiles */,
|
836EF0CB27BB91EE00BF35B2 /* libFLAC.12.dylib in CopyFiles */,
|
||||||
|
@ -992,6 +994,7 @@
|
||||||
8360EF0017F92B23005208A4 /* HighlyComplete.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyComplete.xcodeproj; path = Plugins/HighlyComplete/HighlyComplete.xcodeproj; sourceTree = "<group>"; };
|
8360EF0017F92B23005208A4 /* HighlyComplete.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyComplete.xcodeproj; path = Plugins/HighlyComplete/HighlyComplete.xcodeproj; sourceTree = "<group>"; };
|
||||||
836D28A618086386005B7299 /* MiniModeMenuTitleTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiniModeMenuTitleTransformer.h; path = Window/MiniModeMenuTitleTransformer.h; sourceTree = "<group>"; };
|
836D28A618086386005B7299 /* MiniModeMenuTitleTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiniModeMenuTitleTransformer.h; path = Window/MiniModeMenuTitleTransformer.h; sourceTree = "<group>"; };
|
||||||
836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MiniModeMenuTitleTransformer.m; path = Window/MiniModeMenuTitleTransformer.m; sourceTree = "<group>"; };
|
836D28A718086386005B7299 /* MiniModeMenuTitleTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MiniModeMenuTitleTransformer.m; path = Window/MiniModeMenuTitleTransformer.m; sourceTree = "<group>"; };
|
||||||
|
836DF616298F6EC400CD0580 /* libsoxr.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsoxr.0.dylib; path = ThirdParty/soxr/lib/libsoxr.0.dylib; sourceTree = "<group>"; };
|
||||||
836EF0C427BB919300BF35B2 /* libogg.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libogg.0.dylib; path = ThirdParty/ogg/lib/libogg.0.dylib; sourceTree = "<group>"; };
|
836EF0C427BB919300BF35B2 /* libogg.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libogg.0.dylib; path = ThirdParty/ogg/lib/libogg.0.dylib; sourceTree = "<group>"; };
|
||||||
836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbis.0.dylib; path = ThirdParty/vorbis/lib/libvorbis.0.dylib; sourceTree = "<group>"; };
|
836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbis.0.dylib; path = ThirdParty/vorbis/lib/libvorbis.0.dylib; sourceTree = "<group>"; };
|
||||||
836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbisfile.3.dylib; path = ThirdParty/vorbis/lib/libvorbisfile.3.dylib; sourceTree = "<group>"; };
|
836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbisfile.3.dylib; path = ThirdParty/vorbis/lib/libvorbisfile.3.dylib; sourceTree = "<group>"; };
|
||||||
|
@ -1211,6 +1214,7 @@
|
||||||
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
836DF616298F6EC400CD0580 /* libsoxr.0.dylib */,
|
||||||
83256B672866617F0036D9C0 /* libmpg123.0.dylib */,
|
83256B672866617F0036D9C0 /* libmpg123.0.dylib */,
|
||||||
835FAC7C27BCDF5B00BA8562 /* libaom.a */,
|
835FAC7C27BCDF5B00BA8562 /* libaom.a */,
|
||||||
835FAC7D27BCDF5B00BA8562 /* libavif.a */,
|
835FAC7D27BCDF5B00BA8562 /* libavif.a */,
|
||||||
|
@ -3095,6 +3099,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
||||||
"$(PROJECT_DIR)/ThirdParty/mpg123/lib",
|
"$(PROJECT_DIR)/ThirdParty/mpg123/lib",
|
||||||
|
"$(PROJECT_DIR)/ThirdParty/soxr/lib",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OTHER_CFLAGS = (
|
OTHER_CFLAGS = (
|
||||||
|
@ -3151,6 +3156,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
||||||
"$(PROJECT_DIR)/ThirdParty/mpg123/lib",
|
"$(PROJECT_DIR)/ThirdParty/mpg123/lib",
|
||||||
|
"$(PROJECT_DIR)/ThirdParty/soxr/lib",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OTHER_CFLAGS = (
|
OTHER_CFLAGS = (
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
Build with CMake, using the following options for x86_64:
|
||||||
|
|
||||||
|
```
|
||||||
|
arch -x86_64 (x86_64 version of cmake) .. -DCMAKE_OSX_ARCHITECTURES="x86_64" -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release|Debug
|
||||||
|
```
|
||||||
|
|
||||||
|
And these for ARM64:
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake .. -DCMAKE_OSX_ARCHITECTURES="arm64" -DCMAKE_OSX_DEPLOYMENT_TARGET="11.0" -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release|Debug
|
||||||
|
```
|
||||||
|
|
||||||
|
(Release|Debug) means one or the other for the separate release/debug builds
|
||||||
|
|
||||||
|
And some minor tweaks with `install_name_tool -id` to make sure that the
|
||||||
|
resulting libsoxr.0.dylib imported libavutil properly, as it seems to want
|
||||||
|
to use that for CPU detection on ARM, even though the only feature being
|
||||||
|
detected is NEON, which is mandatory on the supported Apple Silicon platforms.
|
||||||
|
|
||||||
|
Version 0.1.3 was retrieved from:
|
||||||
|
|
||||||
|
https://downloads.sourceforge.net/project/soxr/soxr-0.1.3-Source.tar.xz
|
||||||
|
|
||||||
|
With the following sha256 hash:
|
||||||
|
|
||||||
|
b111c15fdc8c029989330ff559184198c161100a59312f5dc19ddeb9b5a15889
|
||||||
|
|
||||||
|
|
||||||
|
And a patch from Homebrew was applied to fix ARM64 building:
|
||||||
|
|
||||||
|
https://raw.githubusercontent.com/Homebrew/formula-patches/76868b36263be42440501d3692fd3a258f507d82/libsoxr/arm64_defines.patch
|
||||||
|
|
||||||
|
With the following sha256 hash:
|
||||||
|
|
||||||
|
9df5737a21b9ce70cc136c302e195fad9f9f6c14418566ad021f14bb34bb022c
|
|
@ -0,0 +1,344 @@
|
||||||
|
/* SoX Resampler Library Copyright (c) 2007-18 robs@users.sourceforge.net
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2.1 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this library; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------- Gubbins --------------------------------- */
|
||||||
|
|
||||||
|
#if !defined soxr_included
|
||||||
|
#define soxr_included
|
||||||
|
|
||||||
|
|
||||||
|
#if defined __cplusplus
|
||||||
|
#include <cstddef>
|
||||||
|
extern "C" {
|
||||||
|
#else
|
||||||
|
#include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined SOXR_DLL
|
||||||
|
#if defined soxr_EXPORTS
|
||||||
|
#define SOXR __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define SOXR __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
#elif defined SOXR_VISIBILITY && defined __GNUC__ && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1)
|
||||||
|
#define SOXR __attribute__ ((visibility("default")))
|
||||||
|
#else
|
||||||
|
#define SOXR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct soxr_io_spec soxr_io_spec_t;
|
||||||
|
typedef struct soxr_quality_spec soxr_quality_spec_t;
|
||||||
|
typedef struct soxr_runtime_spec soxr_runtime_spec_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------- API conventions --------------------------------
|
||||||
|
|
||||||
|
Buffer lengths (and occupancies) are expressed as the number of contained
|
||||||
|
samples per channel.
|
||||||
|
|
||||||
|
Parameter names for buffer lengths have the suffix `len'.
|
||||||
|
|
||||||
|
A single-character `i' or 'o' is often used in names to give context as
|
||||||
|
input or output (e.g. ilen, olen). */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------- Version management --------------------------- */
|
||||||
|
|
||||||
|
/* E.g. #if SOXR_THIS_VERSION >= SOXR_VERSION(0,1,1) ... */
|
||||||
|
|
||||||
|
#define SOXR_VERSION(x,y,z) (((x)<<16)|((y)<<8)|(z))
|
||||||
|
#define SOXR_THIS_VERSION SOXR_VERSION(0,1,3)
|
||||||
|
#define SOXR_THIS_VERSION_STR "0.1.3"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------- Type declarations ---------------------------- */
|
||||||
|
|
||||||
|
typedef struct soxr * soxr_t; /* A resampler for 1 or more channels. */
|
||||||
|
typedef char const * soxr_error_t; /* 0:no-error; non-0:error. */
|
||||||
|
|
||||||
|
typedef void * soxr_buf_t; /* 1 buffer of channel-interleaved samples. */
|
||||||
|
typedef void const * soxr_cbuf_t; /* Ditto; read-only. */
|
||||||
|
|
||||||
|
typedef soxr_buf_t const * soxr_bufs_t;/* Or, a separate buffer for each ch. */
|
||||||
|
typedef soxr_cbuf_t const * soxr_cbufs_t; /* Ditto; read-only. */
|
||||||
|
|
||||||
|
typedef void const * soxr_in_t; /* Either a soxr_cbuf_t or soxr_cbufs_t,
|
||||||
|
depending on itype in soxr_io_spec_t. */
|
||||||
|
typedef void * soxr_out_t; /* Either a soxr_buf_t or soxr_bufs_t,
|
||||||
|
depending on otype in soxr_io_spec_t. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------- API main functions --------------------------- */
|
||||||
|
|
||||||
|
SOXR char const * soxr_version(void); /* Query library version: "libsoxr-x.y.z" */
|
||||||
|
|
||||||
|
#define soxr_strerror(e) /* Soxr counterpart to strerror. */ \
|
||||||
|
((e)?(e):"no error")
|
||||||
|
|
||||||
|
|
||||||
|
/* Create a stream resampler: */
|
||||||
|
|
||||||
|
SOXR soxr_t soxr_create(
|
||||||
|
double input_rate, /* Input sample-rate. */
|
||||||
|
double output_rate, /* Output sample-rate. */
|
||||||
|
unsigned num_channels, /* Number of channels to be used. */
|
||||||
|
/* All following arguments are optional (may be set to NULL). */
|
||||||
|
soxr_error_t *, /* To report any error during creation. */
|
||||||
|
soxr_io_spec_t const *, /* To specify non-default I/O formats. */
|
||||||
|
soxr_quality_spec_t const *, /* To specify non-default resampling quality.*/
|
||||||
|
soxr_runtime_spec_t const *);/* To specify non-default runtime resources.
|
||||||
|
|
||||||
|
Default io_spec is per soxr_io_spec(SOXR_FLOAT32_I, SOXR_FLOAT32_I)
|
||||||
|
Default quality_spec is per soxr_quality_spec(SOXR_HQ, 0)
|
||||||
|
Default runtime_spec is per soxr_runtime_spec(1) */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* If not using an app-supplied input function, after creating a stream
|
||||||
|
* resampler, repeatedly call: */
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_process(
|
||||||
|
soxr_t resampler, /* As returned by soxr_create. */
|
||||||
|
/* Input (to be resampled): */
|
||||||
|
soxr_in_t in, /* Input buffer(s); may be NULL (see below). */
|
||||||
|
size_t ilen, /* Input buf. length (samples per channel). */
|
||||||
|
size_t * idone, /* To return actual # samples used (<= ilen). */
|
||||||
|
/* Output (resampled): */
|
||||||
|
soxr_out_t out, /* Output buffer(s).*/
|
||||||
|
size_t olen, /* Output buf. length (samples per channel). */
|
||||||
|
size_t * odone); /* To return actual # samples out (<= olen).
|
||||||
|
|
||||||
|
Note that no special meaning is associated with ilen or olen equal to
|
||||||
|
zero. End-of-input (i.e. no data is available nor shall be available)
|
||||||
|
may be indicated by seting `in' to NULL. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* If using an app-supplied input function, it must look and behave like this:*/
|
||||||
|
|
||||||
|
typedef size_t /* data_len */
|
||||||
|
(* soxr_input_fn_t)( /* Supply data to be resampled. */
|
||||||
|
void * input_fn_state, /* As given to soxr_set_input_fn (below). */
|
||||||
|
soxr_in_t * data, /* Returned data; see below. N.B. ptr to ptr(s)*/
|
||||||
|
size_t requested_len); /* Samples per channel, >= returned data_len.
|
||||||
|
|
||||||
|
data_len *data Indicates Meaning
|
||||||
|
------- ------- ------------ -------------------------
|
||||||
|
!=0 !=0 Success *data contains data to be
|
||||||
|
input to the resampler.
|
||||||
|
0 !=0 (or End-of-input No data is available nor
|
||||||
|
not set) shall be available.
|
||||||
|
0 0 Failure An error occurred whilst trying to
|
||||||
|
source data to be input to the resampler. */
|
||||||
|
|
||||||
|
/* and be registered with a previously created stream resampler using: */
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_set_input_fn(/* Set (or reset) an input function.*/
|
||||||
|
soxr_t resampler, /* As returned by soxr_create. */
|
||||||
|
soxr_input_fn_t, /* Function to supply data to be resampled.*/
|
||||||
|
void * input_fn_state, /* If needed by the input function. */
|
||||||
|
size_t max_ilen); /* Maximum value for input fn. requested_len.*/
|
||||||
|
|
||||||
|
/* then repeatedly call: */
|
||||||
|
|
||||||
|
SOXR size_t /*odone*/ soxr_output(/* Resample and output a block of data.*/
|
||||||
|
soxr_t resampler, /* As returned by soxr_create. */
|
||||||
|
soxr_out_t data, /* App-supplied buffer(s) for resampled data.*/
|
||||||
|
size_t olen); /* Amount of data to output; >= odone. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Common stream resampler operations: */
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_error(soxr_t); /* Query error status. */
|
||||||
|
SOXR size_t * soxr_num_clips(soxr_t); /* Query int. clip counter (for R/W). */
|
||||||
|
SOXR double soxr_delay(soxr_t); /* Query current delay in output samples.*/
|
||||||
|
SOXR char const * soxr_engine(soxr_t); /* Query resampling engine name. */
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_clear(soxr_t); /* Ready for fresh signal, same config. */
|
||||||
|
SOXR void soxr_delete(soxr_t); /* Free resources. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* `Short-cut', single call to resample a (probably short) signal held entirely
|
||||||
|
* in memory. See soxr_create and soxr_process above for parameter details.
|
||||||
|
* Note that unlike soxr_create however, the default quality spec. for
|
||||||
|
* soxr_oneshot is per soxr_quality_spec(SOXR_LQ, 0). */
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_oneshot(
|
||||||
|
double input_rate,
|
||||||
|
double output_rate,
|
||||||
|
unsigned num_channels,
|
||||||
|
soxr_in_t in , size_t ilen, size_t * idone,
|
||||||
|
soxr_out_t out, size_t olen, size_t * odone,
|
||||||
|
soxr_io_spec_t const *,
|
||||||
|
soxr_quality_spec_t const *,
|
||||||
|
soxr_runtime_spec_t const *);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* For variable-rate resampling. See example # 5 for how to create a
|
||||||
|
* variable-rate resampler and how to use this function. */
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_set_io_ratio(soxr_t, double io_ratio, size_t slew_len);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------- API type definitions -------------------------- */
|
||||||
|
|
||||||
|
typedef enum { /* Datatypes supported for I/O to/from the resampler: */
|
||||||
|
/* Internal; do not use: */
|
||||||
|
SOXR_FLOAT32, SOXR_FLOAT64, SOXR_INT32, SOXR_INT16, SOXR_SPLIT = 4,
|
||||||
|
|
||||||
|
/* Use for interleaved channels: */
|
||||||
|
SOXR_FLOAT32_I = SOXR_FLOAT32, SOXR_FLOAT64_I, SOXR_INT32_I, SOXR_INT16_I,
|
||||||
|
|
||||||
|
/* Use for split channels: */
|
||||||
|
SOXR_FLOAT32_S = SOXR_SPLIT , SOXR_FLOAT64_S, SOXR_INT32_S, SOXR_INT16_S
|
||||||
|
|
||||||
|
} soxr_datatype_t;
|
||||||
|
|
||||||
|
#define soxr_datatype_size(x) /* Returns `sizeof' a soxr_datatype_t sample. */\
|
||||||
|
((unsigned char *)"\4\10\4\2")[(x)&3]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct soxr_io_spec { /* Typically */
|
||||||
|
soxr_datatype_t itype; /* Input datatype. SOXR_FLOAT32_I */
|
||||||
|
soxr_datatype_t otype; /* Output datatype. SOXR_FLOAT32_I */
|
||||||
|
double scale; /* Linear gain to apply during resampling. 1 */
|
||||||
|
void * e; /* Reserved for internal use 0 */
|
||||||
|
unsigned long flags; /* Per the following #defines. 0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SOXR_TPDF 0 /* Applicable only if otype is INT16. */
|
||||||
|
#define SOXR_NO_DITHER 8u /* Disable the above. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct soxr_quality_spec { /* Typically */
|
||||||
|
double precision; /* Conversion precision (in bits). 20 */
|
||||||
|
double phase_response; /* 0=minimum, ... 50=linear, ... 100=maximum 50 */
|
||||||
|
double passband_end; /* 0dB pt. bandwidth to preserve; nyquist=1 0.913*/
|
||||||
|
double stopband_begin; /* Aliasing/imaging control; > passband_end 1 */
|
||||||
|
void * e; /* Reserved for internal use. 0 */
|
||||||
|
unsigned long flags; /* Per the following #defines. 0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SOXR_ROLLOFF_SMALL 0u /* <= 0.01 dB */
|
||||||
|
#define SOXR_ROLLOFF_MEDIUM 1u /* <= 0.35 dB */
|
||||||
|
#define SOXR_ROLLOFF_NONE 2u /* For Chebyshev bandwidth. */
|
||||||
|
|
||||||
|
#define SOXR_HI_PREC_CLOCK 8u /* Increase `irrational' ratio accuracy. */
|
||||||
|
#define SOXR_DOUBLE_PRECISION 16u /* Use D.P. calcs even if precision <= 20. */
|
||||||
|
#define SOXR_VR 32u /* Variable-rate resampling. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct soxr_runtime_spec { /* Typically */
|
||||||
|
unsigned log2_min_dft_size; /* For DFT efficiency. [8,15] 10 */
|
||||||
|
unsigned log2_large_dft_size; /* For DFT efficiency. [8,20] 17 */
|
||||||
|
unsigned coef_size_kbytes; /* For SOXR_COEF_INTERP_AUTO (below). 400 */
|
||||||
|
unsigned num_threads; /* 0: per OMP_NUM_THREADS; 1: 1 thread. 1 */
|
||||||
|
void * e; /* Reserved for internal use. 0 */
|
||||||
|
unsigned long flags; /* Per the following #defines. 0 */
|
||||||
|
};
|
||||||
|
/* For `irrational' ratios only: */
|
||||||
|
#define SOXR_COEF_INTERP_AUTO 0u /* Auto select coef. interpolation. */
|
||||||
|
#define SOXR_COEF_INTERP_LOW 2u /* Man. select: less CPU, more memory. */
|
||||||
|
#define SOXR_COEF_INTERP_HIGH 3u /* Man. select: more CPU, less memory. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------- API type constructors ------------------------- */
|
||||||
|
|
||||||
|
/* These functions allow setting of the most commonly-used structure
|
||||||
|
* parameters, with other parameters being given default values. The default
|
||||||
|
* values may then be overridden, directly in the structure, if needed. */
|
||||||
|
|
||||||
|
SOXR soxr_quality_spec_t soxr_quality_spec(
|
||||||
|
unsigned long recipe, /* Per the #defines immediately below. */
|
||||||
|
unsigned long flags); /* As soxr_quality_spec_t.flags. */
|
||||||
|
|
||||||
|
/* The 5 standard qualities found in SoX: */
|
||||||
|
#define SOXR_QQ 0 /* 'Quick' cubic interpolation. */
|
||||||
|
#define SOXR_LQ 1 /* 'Low' 16-bit with larger rolloff. */
|
||||||
|
#define SOXR_MQ 2 /* 'Medium' 16-bit with medium rolloff. */
|
||||||
|
#define SOXR_HQ SOXR_20_BITQ /* 'High quality'. */
|
||||||
|
#define SOXR_VHQ SOXR_28_BITQ /* 'Very high quality'. */
|
||||||
|
|
||||||
|
#define SOXR_16_BITQ 3
|
||||||
|
#define SOXR_20_BITQ 4
|
||||||
|
#define SOXR_24_BITQ 5
|
||||||
|
#define SOXR_28_BITQ 6
|
||||||
|
#define SOXR_32_BITQ 7
|
||||||
|
/* Reserved for internal use (to be removed): */
|
||||||
|
#define SOXR_LSR0Q 8 /* 'Best sinc'. */
|
||||||
|
#define SOXR_LSR1Q 9 /* 'Medium sinc'. */
|
||||||
|
#define SOXR_LSR2Q 10 /* 'Fast sinc'. */
|
||||||
|
|
||||||
|
#define SOXR_LINEAR_PHASE 0x00
|
||||||
|
#define SOXR_INTERMEDIATE_PHASE 0x10
|
||||||
|
#define SOXR_MINIMUM_PHASE 0x30
|
||||||
|
|
||||||
|
#define SOXR_STEEP_FILTER 0x40
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SOXR soxr_runtime_spec_t soxr_runtime_spec(
|
||||||
|
unsigned num_threads);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SOXR soxr_io_spec_t soxr_io_spec(
|
||||||
|
soxr_datatype_t itype,
|
||||||
|
soxr_datatype_t otype);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------- Advanced use only ---------------------------- */
|
||||||
|
|
||||||
|
/* For new designs, the following functions/usage will probably not be needed.
|
||||||
|
* They might be useful when adding soxr into an existing design where values
|
||||||
|
* for the resampling-rate and/or number-of-channels parameters to soxr_create
|
||||||
|
* are not available when that function will be called. In such cases, the
|
||||||
|
* relevant soxr_create parameter(s) can be given as 0, then one or both of the
|
||||||
|
* following (as appropriate) later invoked (but prior to calling soxr_process
|
||||||
|
* or soxr_output):
|
||||||
|
*
|
||||||
|
* soxr_set_error(soxr, soxr_set_io_ratio(soxr, io_ratio, 0));
|
||||||
|
* soxr_set_error(soxr, soxr_set_num_channels(soxr, num_channels));
|
||||||
|
*/
|
||||||
|
|
||||||
|
SOXR soxr_error_t soxr_set_error(soxr_t, soxr_error_t);
|
||||||
|
SOXR soxr_error_t soxr_set_num_channels(soxr_t, unsigned);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#undef SOXR
|
||||||
|
|
||||||
|
#if defined __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -35,7 +35,6 @@
|
||||||
<br><br>
|
<br><br>
|
||||||
<em>This program has been made possible through contributions from users like you.</em>
|
<em>This program has been made possible through contributions from users like you.</em>
|
||||||
<br><br> All Cog code is copyrighted by me, and is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog contains bits of other code from third parties that are under their own licenses.
|
<br><br> All Cog code is copyrighted by me, and is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog contains bits of other code from third parties that are under their own licenses.
|
||||||
<br><br> Sample rate converter designed by Aleksey Vaneev of Voxengo.
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
<br><br>
|
<br><br>
|
||||||
<em>Este programa ha sido posible gracias a las contribuciones de usuarios y usuarias como tú.</em>
|
<em>Este programa ha sido posible gracias a las contribuciones de usuarios y usuarias como tú.</em>
|
||||||
<br><br> Todo el código de Cog es de mi propiedad, y está licenciado bajo la <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog contiene código de terceros que están bajo sus propias licencias.
|
<br><br> Todo el código de Cog es de mi propiedad, y está licenciado bajo la <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog contiene código de terceros que están bajo sus propias licencias.
|
||||||
<br><br> Convertidor de frecuencia de muestreo diseñado por Aleksey Vaneev de Voxengo.
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
<br><br>
|
<br><br>
|
||||||
<em>This program has been made possible through contributions from users like you.</em>
|
<em>This program has been made possible through contributions from users like you.</em>
|
||||||
<br><br> All Cog code is copyrighted by me, and is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog contains bits of other code from third parties that are under their own licenses.
|
<br><br> All Cog code is copyrighted by me, and is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog contains bits of other code from third parties that are under their own licenses.
|
||||||
<br><br> Sample rate converter designed by Aleksey Vaneev of Voxengo.
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
<br><br>
|
<br><br>
|
||||||
<em>Создние этой программы стало возможным благодаря вкладу таких пользователей, как вы.</em>
|
<em>Создние этой программы стало возможным благодаря вкладу таких пользователей, как вы.</em>
|
||||||
<br><br> Весь код Cog защищен моим авторским правом и распространяется под лицензией <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog содержит фрагменты другого кода от третьих сторон, который находятся под их собственными лицензиями.
|
<br><br> Весь код Cog защищен моим авторским правом и распространяется под лицензией <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GPL</a>. Cog содержит фрагменты другого кода от третьих сторон, который находятся под их собственными лицензиями.
|
||||||
<br><br> Преобразователь частоты дискретизации, разработан Aleksey Vaneev из Voxengo.
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue