From 927b65a4a5d74b96f046985a73eff23131165082 Mon Sep 17 00:00:00 2001 From: vspader Date: Sat, 24 Feb 2007 20:36:27 +0000 Subject: [PATCH] Merged with cog-audio-framework branch. Cog now uses plugins. --- .../AppController.h | 0 .../AppController.m | 0 .../PlaybackController.h | 13 +- .../PlaybackController.m | 44 +- Audio/AudioDecoder.h | 18 + Audio/AudioDecoder.m | 25 + Audio/AudioMetadataReader.h | 18 + Audio/AudioMetadataReader.m | 26 + Audio/AudioPlayer.h | 76 + Audio/AudioPlayer.m | 284 + Audio/AudioPropertiesReader.h | 18 + Audio/AudioPropertiesReader.m | 26 + {Sound => Audio/Chain}/BufferChain.h | 21 +- {Sound => Audio/Chain}/BufferChain.m | 46 +- {Sound => Audio/Chain}/ConverterNode.h | 0 {Sound => Audio/Chain}/ConverterNode.m | 48 +- {Sound => Audio/Chain}/InputNode.h | 10 +- {Sound => Audio/Chain}/InputNode.m | 45 +- {Sound => Audio/Chain}/Node.h | 2 +- {Sound => Audio/Chain}/Node.m | 0 {Sound => Audio/Chain}/OutputNode.h | 7 +- {Sound => Audio/Chain}/OutputNode.m | 4 + Audio/CogAudio.xcodeproj/project.pbxproj | 519 ++ Audio/CogAudio_Prefix.pch | 7 + .../Decoders}/CoreAudioFile.h | 0 .../Decoders}/CoreAudioFile.m | 0 .../SoundFile => Audio/Decoders}/FlacFile.h | 0 .../SoundFile => Audio/Decoders}/FlacFile.m | 0 .../SoundFile => Audio/Decoders}/GameFile.h | 0 .../SoundFile => Audio/Decoders}/GameFile.mm | 0 {Sound/SoundFile => Audio/Decoders}/MADFile.h | 0 {Sound/SoundFile => Audio/Decoders}/MADFile.m | 0 .../Decoders}/MonkeysFile.h | 0 .../Decoders}/MonkeysFile.mm | 0 .../Decoders}/MusepackFile.h | 0 .../Decoders}/MusepackFile.m | 0 {Sound/SoundFile => Audio/Decoders}/ShnFile.h | 0 .../SoundFile => Audio/Decoders}/ShnFile.mm | 0 .../SoundFile => Audio/Decoders}/SoundFile.h | 0 .../SoundFile => Audio/Decoders}/SoundFile.mm | 0 .../SoundFile => Audio/Decoders}/VorbisFile.h | 8 + .../SoundFile => Audio/Decoders}/VorbisFile.m | 0 .../Decoders}/WavPackFile.h | 0 .../Decoders}/WavPackFile.m | 0 {Libraries/FLAC => Audio}/Info.plist | 0 {Sound => Audio/Output}/OutputCoreAudio.h | 8 +- {Sound => Audio/Output}/OutputCoreAudio.m | 6 +- Audio/Plugin.h | 34 + Audio/PluginController.h | 28 + Audio/PluginController.m | 206 + {Sound => Audio}/Status.h | 0 .../CoreAudioUtils/CoreAudioUtils.h | 30 + .../CoreAudioUtils/CoreAudioUtils.m | 90 + .../VirtualRingBuffer/VirtualRingBuffer.h | 88 + .../VirtualRingBuffer/VirtualRingBuffer.m | 309 + Audio/Utils/DBLog.h | 21 + Audio/Utils/DBLog.m | 25 + Audio/Utils/Semaphore.h | 21 + Audio/Utils/Semaphore.m | 43 + COMPILE | 4 +- Cog.xcodeproj/project.pbxproj | 912 ++- Custom/InfoView.h | 8 - Custom/InfoView.m | 21 - English.lproj/MainMenu.nib/info.nib | 15 +- English.lproj/MainMenu.nib/keyedobjects.nib | Bin 63107 -> 60181 bytes FileDrawer/FileTreeWatcher.h | 2 +- .../FLAC/English.lproj/InfoPlist.strings | Bin {Libraries/MAC => Frameworks/FLAC}/Info.plist | 0 .../FLAC/OggFLAC Framework-Info.plist | 0 {Libraries => Frameworks}/FLAC/config_osx.h | 0 .../FLAC/flac-1.1.2/AUTHORS | 0 .../FLAC/flac-1.1.2/COPYING.FDL | 0 .../FLAC/flac-1.1.2/COPYING.GPL | 0 .../FLAC/flac-1.1.2/COPYING.LGPL | 0 .../FLAC/flac-1.1.2/COPYING.Xiph | 0 .../FLAC/flac-1.1.2/Makefile | 0 .../FLAC/flac-1.1.2/Makefile.am | 0 .../FLAC/flac-1.1.2/Makefile.in | 0 .../FLAC/flac-1.1.2/Makefile.lite | 0 .../FLAC/flac-1.1.2/README | 0 .../FLAC/flac-1.1.2/autogen.sh | 0 .../FLAC/flac-1.1.2/config.guess | 0 .../FLAC/flac-1.1.2/config.h | 0 .../FLAC/flac-1.1.2/config.h.in | 0 .../FLAC/flac-1.1.2/config.log | 0 .../FLAC/flac-1.1.2/config.rpath | 0 .../FLAC/flac-1.1.2/config.status | 0 .../FLAC/flac-1.1.2/config.sub | 0 .../FLAC/flac-1.1.2/configure | 0 .../FLAC/flac-1.1.2/configure.in | 0 .../FLAC/flac-1.1.2/include/FLAC++/Makefile | 0 .../flac-1.1.2/include/FLAC++/Makefile.am | 0 .../flac-1.1.2/include/FLAC++/Makefile.in | 0 .../FLAC/flac-1.1.2/include/FLAC++/all.h | 0 .../FLAC/flac-1.1.2/include/FLAC++/decoder.h | 0 .../FLAC/flac-1.1.2/include/FLAC++/encoder.h | 0 .../FLAC/flac-1.1.2/include/FLAC++/export.h | 0 .../FLAC/flac-1.1.2/include/FLAC++/metadata.h | 0 .../FLAC/flac-1.1.2/include/FLAC/Makefile | 0 .../FLAC/flac-1.1.2/include/FLAC/Makefile.am | 0 .../FLAC/flac-1.1.2/include/FLAC/Makefile.in | 0 .../FLAC/flac-1.1.2/include/FLAC/all.h | 0 .../FLAC/flac-1.1.2/include/FLAC/assert.h | 0 .../FLAC/flac-1.1.2/include/FLAC/callback.h | 0 .../FLAC/flac-1.1.2/include/FLAC/export.h | 0 .../flac-1.1.2/include/FLAC/file_decoder.h | 0 .../flac-1.1.2/include/FLAC/file_encoder.h | 0 .../FLAC/flac-1.1.2/include/FLAC/format.h | 0 .../FLAC/flac-1.1.2/include/FLAC/metadata.h | 0 .../FLAC/flac-1.1.2/include/FLAC/ordinals.h | 0 .../include/FLAC/seekable_stream_decoder.h | 0 .../include/FLAC/seekable_stream_encoder.h | 0 .../flac-1.1.2/include/FLAC/stream_decoder.h | 0 .../flac-1.1.2/include/FLAC/stream_encoder.h | 0 .../FLAC/flac-1.1.2/include/Makefile | 0 .../FLAC/flac-1.1.2/include/Makefile.am | 0 .../FLAC/flac-1.1.2/include/Makefile.in | 0 .../flac-1.1.2/include/OggFLAC++/Makefile | 0 .../flac-1.1.2/include/OggFLAC++/Makefile.am | 0 .../flac-1.1.2/include/OggFLAC++/Makefile.in | 0 .../FLAC/flac-1.1.2/include/OggFLAC++/all.h | 0 .../flac-1.1.2/include/OggFLAC++/decoder.h | 0 .../flac-1.1.2/include/OggFLAC++/encoder.h | 0 .../flac-1.1.2/include/OggFLAC++/export.h | 0 .../FLAC/flac-1.1.2/include/OggFLAC/Makefile | 0 .../flac-1.1.2/include/OggFLAC/Makefile.am | 0 .../flac-1.1.2/include/OggFLAC/Makefile.in | 0 .../FLAC/flac-1.1.2/include/OggFLAC/all.h | 0 .../FLAC/flac-1.1.2/include/OggFLAC/export.h | 0 .../flac-1.1.2/include/OggFLAC/file_decoder.h | 0 .../flac-1.1.2/include/OggFLAC/file_encoder.h | 0 .../include/OggFLAC/seekable_stream_decoder.h | 0 .../include/OggFLAC/seekable_stream_encoder.h | 0 .../include/OggFLAC/stream_decoder.h | 0 .../include/OggFLAC/stream_encoder.h | 0 .../FLAC/flac-1.1.2/include/share/Makefile | 0 .../FLAC/flac-1.1.2/include/share/Makefile.am | 0 .../FLAC/flac-1.1.2/include/share/Makefile.in | 0 .../FLAC/flac-1.1.2/include/share/getopt.h | 0 .../FLAC/flac-1.1.2/include/share/grabbag.h | 0 .../flac-1.1.2/include/share/grabbag/Makefile | 0 .../include/share/grabbag/Makefile.am | 0 .../include/share/grabbag/Makefile.in | 0 .../include/share/grabbag/cuesheet.h | 0 .../flac-1.1.2/include/share/grabbag/file.h | 0 .../include/share/grabbag/replaygain.h | 0 .../include/share/grabbag/seektable.h | 0 .../include/share/replaygain_analysis.h | 0 .../include/share/replaygain_synthesis.h | 0 .../FLAC/flac-1.1.2/include/share/utf8.h | 0 .../FLAC/flac-1.1.2/src/flac/.deps/analyze.Po | 0 .../FLAC/flac-1.1.2/src/flac/.deps/decode.Po | 0 .../FLAC/flac-1.1.2/src/flac/.deps/encode.Po | 0 .../src/flac/.deps/local_string_utils.Po | 0 .../FLAC/flac-1.1.2/src/flac/.deps/main.Po | 0 .../FLAC/flac-1.1.2/src/flac/.deps/utils.Po | 0 .../src/flac/.deps/vorbiscomment.Po | 0 .../FLAC/flac-1.1.2/src/flac/Makefile | 0 .../FLAC/flac-1.1.2/src/flac/Makefile.am | 0 .../FLAC/flac-1.1.2/src/flac/Makefile.in | 0 .../FLAC/flac-1.1.2/src/flac/Makefile.lite | 0 .../FLAC/flac-1.1.2/src/flac/analyze.c | 0 .../FLAC/flac-1.1.2/src/flac/analyze.h | 0 .../FLAC/flac-1.1.2/src/flac/decode.c | 0 .../FLAC/flac-1.1.2/src/flac/decode.h | 0 .../FLAC/flac-1.1.2/src/flac/encode.c | 0 .../FLAC/flac-1.1.2/src/flac/encode.h | 0 .../FLAC/flac-1.1.2/src/flac/flac.dsp | 0 .../flac-1.1.2/src/flac/local_string_utils.c | 0 .../flac-1.1.2/src/flac/local_string_utils.h | 0 .../FLAC/flac-1.1.2/src/flac/main.c | 0 .../FLAC/flac-1.1.2/src/flac/utils.c | 0 .../FLAC/flac-1.1.2/src/flac/utils.h | 0 .../FLAC/flac-1.1.2/src/flac/vorbiscomment.c | 0 .../FLAC/flac-1.1.2/src/flac/vorbiscomment.h | 0 .../src/libFLAC++/.deps/file_decoder.Plo | 0 .../src/libFLAC++/.deps/file_encoder.Plo | 0 .../src/libFLAC++/.deps/metadata.Plo | 0 .../.deps/seekable_stream_decoder.Plo | 0 .../.deps/seekable_stream_encoder.Plo | 0 .../src/libFLAC++/.deps/stream_decoder.Plo | 0 .../src/libFLAC++/.deps/stream_encoder.Plo | 0 .../FLAC/flac-1.1.2/src/libFLAC++/Makefile | 0 .../FLAC/flac-1.1.2/src/libFLAC++/Makefile.am | 0 .../FLAC/flac-1.1.2/src/libFLAC++/Makefile.in | 0 .../flac-1.1.2/src/libFLAC++/Makefile.lite | 0 .../flac-1.1.2/src/libFLAC++/file_decoder.cpp | 0 .../flac-1.1.2/src/libFLAC++/file_encoder.cpp | 0 .../flac-1.1.2/src/libFLAC++/libFLAC++.m4 | 0 .../src/libFLAC++/libFLAC++_dynamic.dsp | 0 .../src/libFLAC++/libFLAC++_static.dsp | 0 .../flac-1.1.2/src/libFLAC++/metadata.cpp | 0 .../src/libFLAC++/seekable_stream_decoder.cpp | 0 .../src/libFLAC++/seekable_stream_encoder.cpp | 0 .../src/libFLAC++/stream_decoder.cpp | 0 .../src/libFLAC++/stream_encoder.cpp | 0 .../src/libFLAC/.deps/bitbuffer.Plo | 0 .../flac-1.1.2/src/libFLAC/.deps/bitmath.Plo | 0 .../FLAC/flac-1.1.2/src/libFLAC/.deps/cpu.Plo | 0 .../FLAC/flac-1.1.2/src/libFLAC/.deps/crc.Plo | 0 .../src/libFLAC/.deps/file_decoder.Plo | 0 .../src/libFLAC/.deps/file_encoder.Plo | 0 .../flac-1.1.2/src/libFLAC/.deps/fixed.Plo | 0 .../flac-1.1.2/src/libFLAC/.deps/float.Plo | 0 .../flac-1.1.2/src/libFLAC/.deps/format.Plo | 0 .../FLAC/flac-1.1.2/src/libFLAC/.deps/lpc.Plo | 0 .../FLAC/flac-1.1.2/src/libFLAC/.deps/md5.Plo | 0 .../flac-1.1.2/src/libFLAC/.deps/memory.Plo | 0 .../src/libFLAC/.deps/metadata_iterators.Plo | 0 .../src/libFLAC/.deps/metadata_object.Plo | 0 .../libFLAC/.deps/seekable_stream_decoder.Plo | 0 .../libFLAC/.deps/seekable_stream_encoder.Plo | 0 .../src/libFLAC/.deps/stream_decoder.Plo | 0 .../src/libFLAC/.deps/stream_encoder.Plo | 0 .../libFLAC/.deps/stream_encoder_framing.Plo | 0 .../FLAC/flac-1.1.2/src/libFLAC/Makefile | 0 .../FLAC/flac-1.1.2/src/libFLAC/Makefile.am | 0 .../FLAC/flac-1.1.2/src/libFLAC/Makefile.in | 0 .../FLAC/flac-1.1.2/src/libFLAC/Makefile.lite | 0 .../FLAC/flac-1.1.2/src/libFLAC/bitbuffer.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/bitmath.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/cpu.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/crc.c | 0 .../flac-1.1.2/src/libFLAC/file_decoder.c | 0 .../flac-1.1.2/src/libFLAC/file_encoder.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/fixed.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/float.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/format.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile | 0 .../flac-1.1.2/src/libFLAC/ia32/Makefile.am | 0 .../flac-1.1.2/src/libFLAC/ia32/Makefile.in | 0 .../flac-1.1.2/src/libFLAC/ia32/cpu_asm.nasm | 0 .../src/libFLAC/ia32/fixed_asm.nasm | 0 .../flac-1.1.2/src/libFLAC/ia32/lpc_asm.nasm | 0 .../FLAC/flac-1.1.2/src/libFLAC/ia32/nasm.h | 0 .../flac-1.1.2/src/libFLAC/include/Makefile | 0 .../src/libFLAC/include/Makefile.am | 0 .../src/libFLAC/include/Makefile.in | 0 .../src/libFLAC/include/private/Makefile | 0 .../src/libFLAC/include/private/Makefile.am | 0 .../src/libFLAC/include/private/Makefile.in | 0 .../src/libFLAC/include/private/all.h | 0 .../src/libFLAC/include/private/bitbuffer.h | 0 .../src/libFLAC/include/private/bitmath.h | 0 .../src/libFLAC/include/private/cpu.h | 0 .../src/libFLAC/include/private/crc.h | 0 .../src/libFLAC/include/private/fixed.h | 0 .../src/libFLAC/include/private/float.h | 0 .../src/libFLAC/include/private/format.h | 0 .../src/libFLAC/include/private/lpc.h | 0 .../src/libFLAC/include/private/md5.h | 0 .../src/libFLAC/include/private/memory.h | 0 .../src/libFLAC/include/private/metadata.h | 0 .../include/private/stream_encoder_framing.h | 0 .../src/libFLAC/include/protected/Makefile | 0 .../src/libFLAC/include/protected/Makefile.am | 0 .../src/libFLAC/include/protected/Makefile.in | 0 .../src/libFLAC/include/protected/all.h | 0 .../libFLAC/include/protected/file_decoder.h | 0 .../libFLAC/include/protected/file_encoder.h | 0 .../protected/seekable_stream_decoder.h | 0 .../protected/seekable_stream_encoder.h | 0 .../include/protected/stream_decoder.h | 0 .../include/protected/stream_encoder.h | 0 .../FLAC/flac-1.1.2/src/libFLAC/libFLAC.m4 | 0 .../src/libFLAC/libFLAC_dynamic.dsp | 0 .../flac-1.1.2/src/libFLAC/libFLAC_static.dsp | 0 .../FLAC/flac-1.1.2/src/libFLAC/lpc.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/md5.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/memory.c | 0 .../src/libFLAC/metadata_iterators.c | 0 .../flac-1.1.2/src/libFLAC/metadata_object.c | 0 .../FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile | 0 .../flac-1.1.2/src/libFLAC/ppc/Makefile.am | 0 .../flac-1.1.2/src/libFLAC/ppc/Makefile.in | 0 .../flac-1.1.2/src/libFLAC/ppc/as/Makefile | 0 .../flac-1.1.2/src/libFLAC/ppc/as/Makefile.am | 0 .../flac-1.1.2/src/libFLAC/ppc/as/Makefile.in | 0 .../flac-1.1.2/src/libFLAC/ppc/as/lpc_asm.s | 0 .../flac-1.1.2/src/libFLAC/ppc/gas/Makefile | 0 .../src/libFLAC/ppc/gas/Makefile.am | 0 .../src/libFLAC/ppc/gas/Makefile.in | 0 .../flac-1.1.2/src/libFLAC/ppc/gas/lpc_asm.s | 0 .../src/libFLAC/seekable_stream_decoder.c | 0 .../src/libFLAC/seekable_stream_encoder.c | 0 .../flac-1.1.2/src/libFLAC/stream_decoder.c | 0 .../flac-1.1.2/src/libFLAC/stream_encoder.c | 0 .../src/libFLAC/stream_encoder_framing.c | 0 .../src/libOggFLAC++/.deps/file_decoder.Plo | 0 .../src/libOggFLAC++/.deps/file_encoder.Plo | 0 .../.deps/seekable_stream_decoder.Plo | 0 .../.deps/seekable_stream_encoder.Plo | 0 .../src/libOggFLAC++/.deps/stream_decoder.Plo | 0 .../src/libOggFLAC++/.deps/stream_encoder.Plo | 0 .../FLAC/flac-1.1.2/src/libOggFLAC++/Makefile | 0 .../flac-1.1.2/src/libOggFLAC++/Makefile.am | 0 .../flac-1.1.2/src/libOggFLAC++/Makefile.in | 0 .../flac-1.1.2/src/libOggFLAC++/Makefile.lite | 0 .../src/libOggFLAC++/file_decoder.cpp | 0 .../src/libOggFLAC++/file_encoder.cpp | 0 .../src/libOggFLAC++/libOggFLAC++.m4 | 0 .../src/libOggFLAC++/libOggFLAC++_dynamic.dsp | 0 .../src/libOggFLAC++/libOggFLAC++_static.dsp | 0 .../libOggFLAC++/seekable_stream_decoder.cpp | 0 .../libOggFLAC++/seekable_stream_encoder.cpp | 0 .../src/libOggFLAC++/stream_decoder.cpp | 0 .../src/libOggFLAC++/stream_encoder.cpp | 0 .../src/libOggFLAC/.deps/file_decoder.Plo | 0 .../src/libOggFLAC/.deps/file_encoder.Plo | 0 .../libOggFLAC/.deps/ogg_decoder_aspect.Plo | 0 .../libOggFLAC/.deps/ogg_encoder_aspect.Plo | 0 .../src/libOggFLAC/.deps/ogg_helper.Plo | 0 .../src/libOggFLAC/.deps/ogg_mapping.Plo | 0 .../.deps/seekable_stream_decoder.Plo | 0 .../.deps/seekable_stream_encoder.Plo | 0 .../src/libOggFLAC/.deps/stream_decoder.Plo | 0 .../src/libOggFLAC/.deps/stream_encoder.Plo | 0 .../FLAC/flac-1.1.2/src/libOggFLAC/Makefile | 0 .../flac-1.1.2/src/libOggFLAC/Makefile.am | 0 .../flac-1.1.2/src/libOggFLAC/Makefile.in | 0 .../flac-1.1.2/src/libOggFLAC/Makefile.lite | 0 .../flac-1.1.2/src/libOggFLAC/file_decoder.c | 0 .../flac-1.1.2/src/libOggFLAC/file_encoder.c | 0 .../src/libOggFLAC/include/Makefile | 0 .../src/libOggFLAC/include/Makefile.am | 0 .../src/libOggFLAC/include/Makefile.in | 0 .../src/libOggFLAC/include/private/Makefile | 0 .../libOggFLAC/include/private/Makefile.am | 0 .../libOggFLAC/include/private/Makefile.in | 0 .../src/libOggFLAC/include/private/all.h | 0 .../include/private/ogg_decoder_aspect.h | 0 .../include/private/ogg_encoder_aspect.h | 0 .../libOggFLAC/include/private/ogg_helper.h | 0 .../libOggFLAC/include/private/ogg_mapping.h | 0 .../src/libOggFLAC/include/protected/Makefile | 0 .../libOggFLAC/include/protected/Makefile.am | 0 .../libOggFLAC/include/protected/Makefile.in | 0 .../src/libOggFLAC/include/protected/all.h | 0 .../include/protected/file_decoder.h | 0 .../include/protected/file_encoder.h | 0 .../protected/seekable_stream_decoder.h | 0 .../protected/seekable_stream_encoder.h | 0 .../include/protected/stream_decoder.h | 0 .../include/protected/stream_encoder.h | 0 .../flac-1.1.2/src/libOggFLAC/libOggFLAC.m4 | 0 .../src/libOggFLAC/libOggFLAC_dynamic.dsp | 0 .../src/libOggFLAC/libOggFLAC_static.dsp | 0 .../src/libOggFLAC/ogg_decoder_aspect.c | 0 .../src/libOggFLAC/ogg_encoder_aspect.c | 0 .../flac-1.1.2/src/libOggFLAC/ogg_helper.c | 0 .../flac-1.1.2/src/libOggFLAC/ogg_mapping.c | 0 .../src/libOggFLAC/seekable_stream_decoder.c | 0 .../src/libOggFLAC/seekable_stream_encoder.c | 0 .../src/libOggFLAC/stream_decoder.c | 0 .../src/libOggFLAC/stream_encoder.c | 0 .../flac-1.1.2/src/metaflac/.deps/main.Po | 0 .../src/metaflac/.deps/operations.Po | 0 .../.deps/operations_shorthand_cuesheet.Po | 0 .../.deps/operations_shorthand_seektable.Po | 0 .../.deps/operations_shorthand_streaminfo.Po | 0 .../operations_shorthand_vorbiscomment.Po | 0 .../flac-1.1.2/src/metaflac/.deps/options.Po | 0 .../flac-1.1.2/src/metaflac/.deps/usage.Po | 0 .../flac-1.1.2/src/metaflac/.deps/utils.Po | 0 .../FLAC/flac-1.1.2/src/metaflac/Makefile | 0 .../FLAC/flac-1.1.2/src/metaflac/Makefile.am | 0 .../FLAC/flac-1.1.2/src/metaflac/Makefile.in | 0 .../flac-1.1.2/src/metaflac/Makefile.lite | 0 .../FLAC/flac-1.1.2/src/metaflac/main.c | 0 .../FLAC/flac-1.1.2/src/metaflac/metaflac.dsp | 0 .../FLAC/flac-1.1.2/src/metaflac/operations.c | 0 .../FLAC/flac-1.1.2/src/metaflac/operations.h | 0 .../metaflac/operations_shorthand_cuesheet.c | 0 .../metaflac/operations_shorthand_seektable.c | 0 .../operations_shorthand_streaminfo.c | 0 .../operations_shorthand_vorbiscomment.c | 0 .../FLAC/flac-1.1.2/src/metaflac/options.c | 0 .../FLAC/flac-1.1.2/src/metaflac/options.h | 0 .../FLAC/flac-1.1.2/src/metaflac/usage.c | 0 .../FLAC/flac-1.1.2/src/metaflac/usage.h | 0 .../FLAC/flac-1.1.2/src/metaflac/utils.c | 0 .../FLAC/flac-1.1.2/src/metaflac/utils.h | 0 .../FLAC/flac-1.1.2/src/share/Makefile | 0 .../FLAC/flac-1.1.2/src/share/Makefile.am | 0 .../FLAC/flac-1.1.2/src/share/Makefile.in | 0 .../FLAC/flac-1.1.2/src/share/Makefile.lite | 0 .../FLAC/flac-1.1.2/src/share/README | 0 .../src/share/getopt/.deps/getopt.Po | 0 .../src/share/getopt/.deps/getopt1.Po | 0 .../FLAC/flac-1.1.2/src/share/getopt/Makefile | 0 .../flac-1.1.2/src/share/getopt/Makefile.am | 0 .../flac-1.1.2/src/share/getopt/Makefile.in | 0 .../flac-1.1.2/src/share/getopt/Makefile.lite | 0 .../FLAC/flac-1.1.2/src/share/getopt/getopt.c | 0 .../flac-1.1.2/src/share/getopt/getopt1.c | 0 .../src/share/getopt/getopt_static.dsp | 0 .../src/share/grabbag/.deps/cuesheet.Plo | 0 .../src/share/grabbag/.deps/file.Plo | 0 .../src/share/grabbag/.deps/replaygain.Plo | 0 .../src/share/grabbag/.deps/seektable.Plo | 0 .../flac-1.1.2/src/share/grabbag/Makefile | 0 .../flac-1.1.2/src/share/grabbag/Makefile.am | 0 .../flac-1.1.2/src/share/grabbag/Makefile.in | 0 .../src/share/grabbag/Makefile.lite | 0 .../flac-1.1.2/src/share/grabbag/cuesheet.c | 0 .../FLAC/flac-1.1.2/src/share/grabbag/file.c | 0 .../src/share/grabbag/grabbag_static.dsp | 0 .../flac-1.1.2/src/share/grabbag/replaygain.c | 0 .../flac-1.1.2/src/share/grabbag/seektable.c | 0 .../.deps/replaygain_analysis.Plo | 0 .../src/share/replaygain_analysis/Makefile | 0 .../src/share/replaygain_analysis/Makefile.am | 0 .../src/share/replaygain_analysis/Makefile.in | 0 .../share/replaygain_analysis/Makefile.lite | 0 .../replaygain_analysis/replaygain_analysis.c | 0 .../replaygain_analysis_static.dsp | 0 .../.deps/replaygain_synthesis.Plo | 0 .../src/share/replaygain_synthesis/Makefile | 0 .../share/replaygain_synthesis/Makefile.am | 0 .../share/replaygain_synthesis/Makefile.in | 0 .../share/replaygain_synthesis/Makefile.lite | 0 .../replaygain_synthesis/include/Makefile | 0 .../replaygain_synthesis/include/Makefile.am | 0 .../replaygain_synthesis/include/Makefile.in | 0 .../include/private/Makefile | 0 .../include/private/Makefile.am | 0 .../include/private/Makefile.in | 0 .../include/private/fast_float_math_hack.h | 0 .../replaygain_synthesis.c | 0 .../replaygain_synthesis_static.dsp | 0 .../src/share/utf8/.deps/charset.Plo | 0 .../src/share/utf8/.deps/iconvert.Plo | 0 .../flac-1.1.2/src/share/utf8/.deps/utf8.Plo | 0 .../FLAC/flac-1.1.2/src/share/utf8/Makefile | 0 .../flac-1.1.2/src/share/utf8/Makefile.am | 0 .../flac-1.1.2/src/share/utf8/Makefile.in | 0 .../flac-1.1.2/src/share/utf8/Makefile.lite | 0 .../FLAC/flac-1.1.2/src/share/utf8/charmaps.h | 0 .../FLAC/flac-1.1.2/src/share/utf8/charset.c | 0 .../FLAC/flac-1.1.2/src/share/utf8/charset.h | 0 .../flac-1.1.2/src/share/utf8/charset_test.c | 0 .../flac-1.1.2/src/share/utf8/charsetmap.h | 0 .../FLAC/flac-1.1.2/src/share/utf8/iconvert.c | 0 .../FLAC/flac-1.1.2/src/share/utf8/makemap.c | 0 .../FLAC/flac-1.1.2/src/share/utf8/utf8.c | 0 .../flac-1.1.2/src/share/utf8/utf8_static.dsp | 0 .../FLAC/flac.xcodeproj/me.mode1 | 0 .../FLAC/flac.xcodeproj/me.pbxuser | 0 .../FLAC/flac.xcodeproj/project.pbxproj | 89 +- .../FLAC/flac_Prefix.pch | 0 .../ID3Tag/English.lproj/InfoPlist.strings | Bin .../ID3Tag/Files/CHANGES | 0 .../ID3Tag/Files/COPYING | 0 .../ID3Tag/Files/COPYRIGHT | 0 .../ID3Tag/Files/CREDITS | 0 .../ID3Tag/Files/INSTALL | 0 .../ID3Tag/Files/Makefile.am | 0 .../ID3Tag/Files/Makefile.in | 0 {Libraries => Frameworks}/ID3Tag/Files/README | 0 {Libraries => Frameworks}/ID3Tag/Files/TODO | 0 .../ID3Tag/Files/VERSION | 0 .../ID3Tag/Files/aclocal.m4 | 0 .../ID3Tag/Files/compat.c | 0 .../ID3Tag/Files/compat.gperf | 0 .../ID3Tag/Files/compat.h | 0 .../ID3Tag/Files/config.guess | 0 .../ID3Tag/Files/config.h.in | 0 .../ID3Tag/Files/config.sub | 0 .../ID3Tag/Files/configure | 0 .../ID3Tag/Files/configure.ac | 0 {Libraries => Frameworks}/ID3Tag/Files/crc.c | 0 {Libraries => Frameworks}/ID3Tag/Files/crc.h | 0 .../ID3Tag/Files/debug.c | 0 .../ID3Tag/Files/debug.h | 0 .../ID3Tag/Files/depcomp | 0 .../ID3Tag/Files/field.c | 0 .../ID3Tag/Files/field.h | 0 {Libraries => Frameworks}/ID3Tag/Files/file.c | 0 {Libraries => Frameworks}/ID3Tag/Files/file.h | 0 .../ID3Tag/Files/frame.c | 0 .../ID3Tag/Files/frame.h | 0 .../ID3Tag/Files/frametype.c | 0 .../ID3Tag/Files/frametype.gperf | 0 .../ID3Tag/Files/frametype.h | 0 .../ID3Tag/Files/genre.c | 0 .../ID3Tag/Files/genre.dat | 0 .../ID3Tag/Files/genre.dat.in | 0 .../ID3Tag/Files/genre.dat.sed | 0 .../ID3Tag/Files/genre.h | 0 .../ID3Tag/Files/global.h | 0 .../ID3Tag/Files/id3tag.h | 0 .../ID3Tag/Files/install-sh | 0 .../ID3Tag/Files/latin1.c | 0 .../ID3Tag/Files/latin1.h | 0 .../ID3Tag/Files/libid3tag.list.in | 0 .../ID3Tag/Files/ltmain.sh | 0 .../ID3Tag/Files/missing | 0 .../ID3Tag/Files/mkinstalldirs | 0 .../ID3Tag/Files/msvc++/Makefile.am | 0 .../ID3Tag/Files/msvc++/Makefile.in | 0 .../ID3Tag/Files/msvc++/config.h | 0 .../ID3Tag/Files/msvc++/libid3tag.dsp | 0 .../ID3Tag/Files/parse.c | 0 .../ID3Tag/Files/parse.h | 0 .../ID3Tag/Files/render.c | 0 .../ID3Tag/Files/render.h | 0 {Libraries => Frameworks}/ID3Tag/Files/tag.c | 0 {Libraries => Frameworks}/ID3Tag/Files/tag.h | 0 {Libraries => Frameworks}/ID3Tag/Files/ucs4.c | 0 {Libraries => Frameworks}/ID3Tag/Files/ucs4.h | 0 .../ID3Tag/Files/utf16.c | 0 .../ID3Tag/Files/utf16.h | 0 {Libraries => Frameworks}/ID3Tag/Files/utf8.c | 0 {Libraries => Frameworks}/ID3Tag/Files/utf8.h | 0 {Libraries => Frameworks}/ID3Tag/Files/util.c | 0 {Libraries => Frameworks}/ID3Tag/Files/util.h | 0 .../ID3Tag/Files/version.c | 0 .../ID3Tag/Files/version.h | 0 .../ID3Tag/ID3Tag.xcodeproj/project.pbxproj | 4 +- {Libraries => Frameworks}/ID3Tag/Info.plist | 0 .../MAC/English.lproj/InfoPlist.strings | Bin .../MPCDec => Frameworks/MAC}/Info.plist | 0 .../MAC/MAC.xcodeproj/me.mode1 | 0 .../MAC/MAC.xcodeproj/me.pbxuser | 0 .../MAC/MAC.xcodeproj/project.pbxproj | 27 +- {Libraries => Frameworks}/MAC/MAC_Prefix.pch | 0 {Libraries => Frameworks}/MAC/mac-src/AUTHORS | 0 {Libraries => Frameworks}/MAC/mac-src/COPYING | 0 .../MAC/mac-src/ChangeLog | 0 {Libraries => Frameworks}/MAC/mac-src/INSTALL | 0 .../MAC/mac-src/Makefile.am | 0 .../MAC/mac-src/Makefile.in | 0 {Libraries => Frameworks}/MAC/mac-src/NEWS | 0 {Libraries => Frameworks}/MAC/mac-src/README | 0 {Libraries => Frameworks}/MAC/mac-src/TODO | 0 .../MAC/mac-src/aclocal.m4 | 0 .../MAC/mac-src/config.guess | 0 .../MAC/mac-src/config.sub | 0 .../MAC/mac-src/configure | 0 .../MAC/mac-src/configure.in | 0 {Libraries => Frameworks}/MAC/mac-src/depcomp | 0 .../MAC/mac-src/install-sh | 0 .../MAC/mac-src/ltmain.sh | 0 {Libraries => Frameworks}/MAC/mac-src/missing | 0 .../MAC/mac-src/src/Console/Console.cpp | 0 .../MAC/mac-src/src/Console/Makefile.am | 0 .../MAC/mac-src/src/Console/Makefile.in | 0 .../MAC/mac-src/src/Credits.txt | 0 .../mac-src/src/Examples/Analyze/Makefile.am | 0 .../mac-src/src/Examples/Analyze/Makefile.in | 0 .../src/Examples/Analyze/Sample1/Makefile.am | 0 .../src/Examples/Analyze/Sample1/Makefile.in | 0 .../src/Examples/Analyze/Sample1/Sample1.cpp | 0 .../MAC/mac-src/src/Examples/Makefile.am | 0 .../MAC/mac-src/src/Examples/Makefile.in | 0 .../MAC/mac-src/src/History.txt | 0 .../MAC/mac-src/src/License.htm | 0 .../MAC/mac-src/src/MACLib/APECompress.cpp | 0 .../MAC/mac-src/src/MACLib/APECompress.h | 0 .../mac-src/src/MACLib/APECompressCore.cpp | 0 .../MAC/mac-src/src/MACLib/APECompressCore.h | 0 .../mac-src/src/MACLib/APECompressCreate.cpp | 0 .../mac-src/src/MACLib/APECompressCreate.h | 0 .../MAC/mac-src/src/MACLib/APEDecompress.cpp | 0 .../MAC/mac-src/src/MACLib/APEDecompress.h | 0 .../MAC/mac-src/src/MACLib/APEHeader.cpp | 0 .../MAC/mac-src/src/MACLib/APEHeader.h | 0 .../MAC/mac-src/src/MACLib/APEInfo.cpp | 0 .../MAC/mac-src/src/MACLib/APEInfo.h | 0 .../MAC/mac-src/src/MACLib/APELink.cpp | 0 .../MAC/mac-src/src/MACLib/APELink.h | 0 .../MAC/mac-src/src/MACLib/APESimple.cpp | 0 .../MAC/mac-src/src/MACLib/APETag.cpp | 0 .../MAC/mac-src/src/MACLib/APETag.h | 0 .../mac-src/src/MACLib/Assembly/Assembly.h | 0 .../mac-src/src/MACLib/Assembly/Assembly.nas | 0 .../mac-src/src/MACLib/Assembly/Makefile.am | 0 .../mac-src/src/MACLib/Assembly/Makefile.in | 0 .../MAC/mac-src/src/MACLib/Assembly/Tools.inc | 0 .../mac-src/src/MACLib/Assembly/common.cpp | 0 .../MAC/mac-src/src/MACLib/BitArray.cpp | 0 .../MAC/mac-src/src/MACLib/BitArray.h | 0 .../MAC/mac-src/src/MACLib/MACLib.cpp | 0 .../MAC/mac-src/src/MACLib/MACLib.h | 0 .../mac-src/src/MACLib/MACProgressHelper.cpp | 0 .../mac-src/src/MACLib/MACProgressHelper.h | 0 .../MAC/mac-src/src/MACLib/MD5.cpp | 0 .../MAC/mac-src/src/MACLib/MD5.h | 0 .../MAC/mac-src/src/MACLib/Makefile.am | 0 .../MAC/mac-src/src/MACLib/Makefile.in | 0 .../mac-src/src/MACLib/MultichannelNNFilter.h | 0 .../MAC/mac-src/src/MACLib/NNFilter.cpp | 0 .../MAC/mac-src/src/MACLib/NNFilter.h | 0 .../MAC/mac-src/src/MACLib/NewPredictor.cpp | 0 .../MAC/mac-src/src/MACLib/NewPredictor.h | 0 .../src/MACLib/Old/APEDecompressCore.cpp | 0 .../src/MACLib/Old/APEDecompressCore.h | 0 .../src/MACLib/Old/APEDecompressOld.cpp | 0 .../mac-src/src/MACLib/Old/APEDecompressOld.h | 0 .../mac-src/src/MACLib/Old/Anti-Predictor.cpp | 0 .../mac-src/src/MACLib/Old/Anti-Predictor.h | 0 .../src/MACLib/Old/AntiPredictorExtraHigh.cpp | 0 .../src/MACLib/Old/AntiPredictorFast.cpp | 0 .../src/MACLib/Old/AntiPredictorHigh.cpp | 0 .../src/MACLib/Old/AntiPredictorNormal.cpp | 0 .../MAC/mac-src/src/MACLib/Old/Makefile.am | 0 .../MAC/mac-src/src/MACLib/Old/Makefile.in | 0 .../mac-src/src/MACLib/Old/UnBitArrayOld.cpp | 0 .../mac-src/src/MACLib/Old/UnBitArrayOld.h | 0 .../MAC/mac-src/src/MACLib/Old/UnMAC.cpp | 0 .../MAC/mac-src/src/MACLib/Old/UnMAC.h | 0 .../MAC/mac-src/src/MACLib/Predictor.h | 0 .../MAC/mac-src/src/MACLib/Prepare.cpp | 0 .../MAC/mac-src/src/MACLib/Prepare.h | 0 .../src/MACLib/ScaledFirstOrderFilter.h | 0 .../MAC/mac-src/src/MACLib/StartFilter.h | 0 .../MAC/mac-src/src/MACLib/UnBitArray.cpp | 0 .../MAC/mac-src/src/MACLib/UnBitArray.h | 0 .../MAC/mac-src/src/MACLib/UnBitArrayBase.cpp | 0 .../MAC/mac-src/src/MACLib/UnBitArrayBase.h | 0 .../MAC/mac-src/src/MACLib/WAVInputSource.cpp | 0 .../MAC/mac-src/src/MACLib/WAVInputSource.h | 0 .../MAC/mac-src/src/Makefile.am | 0 .../MAC/mac-src/src/Makefile.in | 0 .../MAC/mac-src/src/Readme.htm | 0 .../MAC/mac-src/src/Shared/APEInfoDialog.cpp | 0 .../MAC/mac-src/src/Shared/APEInfoDialog.h | 0 .../MAC/mac-src/src/Shared/All.h | 0 .../mac-src/src/Shared/CharacterHelper.cpp | 0 .../MAC/mac-src/src/Shared/CharacterHelper.h | 0 .../MAC/mac-src/src/Shared/CircleBuffer.cpp | 0 .../MAC/mac-src/src/Shared/CircleBuffer.h | 0 .../mac-src/src/Shared/GlobalFunctions.cpp | 0 .../MAC/mac-src/src/Shared/GlobalFunctions.h | 0 .../MAC/mac-src/src/Shared/ID3Genres.h | 0 .../MAC/mac-src/src/Shared/IO.h | 0 .../MAC/mac-src/src/Shared/MACUtils.cpp | 0 .../MAC/mac-src/src/Shared/MACUtils.h | 0 .../MAC/mac-src/src/Shared/Makefile.am | 0 .../MAC/mac-src/src/Shared/Makefile.in | 0 .../MAC/mac-src/src/Shared/NoWindows.h | 0 .../MAC/mac-src/src/Shared/RollBuffer.h | 0 .../MAC/mac-src/src/Shared/SmartPtr.h | 0 .../MAC/mac-src/src/Shared/StdLibFileIO.cpp | 0 .../MAC/mac-src/src/Shared/StdLibFileIO.h | 0 .../MAC/mac-src/src/Shared/StdString.h | 0 .../MAC/mac-src/src/Shared/Unicows.cpp | 0 .../MAC/mac-src/src/Shared/WAVInfoDialog.cpp | 0 .../MAC/mac-src/src/Shared/WAVInfoDialog.h | 0 .../MAC/mac-src/src/Shared/WinFileIO.cpp | 0 .../MAC/mac-src/src/Shared/WinFileIO.h | 0 .../MAC/mac-src/src/Shared/config.h | 0 .../MAC/mac-src/src/Shared/config.h.in | 0 .../MAC/mac-src/strip_fPIC.sh | 0 .../MAD/English.lproj/InfoPlist.strings | Bin {Libraries => Frameworks}/MAD/Files/CHANGES | 0 {Libraries => Frameworks}/MAD/Files/COPYING | 0 {Libraries => Frameworks}/MAD/Files/COPYRIGHT | 0 {Libraries => Frameworks}/MAD/Files/CREDITS | 0 {Libraries => Frameworks}/MAD/Files/D.dat | 0 {Libraries => Frameworks}/MAD/Files/INSTALL | 0 .../MAD/Files/Makefile.am | 0 .../MAD/Files/Makefile.in | 0 {Libraries => Frameworks}/MAD/Files/README | 0 {Libraries => Frameworks}/MAD/Files/TODO | 0 {Libraries => Frameworks}/MAD/Files/VERSION | 0 .../MAD/Files/aclocal.m4 | 0 {Libraries => Frameworks}/MAD/Files/bit.c | 0 {Libraries => Frameworks}/MAD/Files/bit.h | 0 .../MAD/Files/config.guess | 0 {Libraries => Frameworks}/MAD/Files/config.h | 0 .../MAD/Files/config.h.in | 0 .../MAD/Files/config.sub | 0 {Libraries => Frameworks}/MAD/Files/configure | 0 .../MAD/Files/configure.ac | 0 {Libraries => Frameworks}/MAD/Files/decoder.c | 0 {Libraries => Frameworks}/MAD/Files/decoder.h | 0 {Libraries => Frameworks}/MAD/Files/depcomp | 0 {Libraries => Frameworks}/MAD/Files/fixed.c | 0 {Libraries => Frameworks}/MAD/Files/fixed.h | 0 {Libraries => Frameworks}/MAD/Files/frame.c | 0 {Libraries => Frameworks}/MAD/Files/frame.h | 0 {Libraries => Frameworks}/MAD/Files/global.h | 0 {Libraries => Frameworks}/MAD/Files/huffman.c | 0 {Libraries => Frameworks}/MAD/Files/huffman.h | 0 .../MAD/Files/imdct_l_arm.S | 0 .../MAD/Files/imdct_s.dat | 0 .../MAD/Files/install-sh | 0 {Libraries => Frameworks}/MAD/Files/layer12.c | 0 {Libraries => Frameworks}/MAD/Files/layer12.h | 0 {Libraries => Frameworks}/MAD/Files/layer3.c | 0 {Libraries => Frameworks}/MAD/Files/layer3.h | 0 .../MAD/Files/libmad.list.in | 0 {Libraries => Frameworks}/MAD/Files/ltmain.sh | 0 {Libraries => Frameworks}/MAD/Files/mad.h | 0 {Libraries => Frameworks}/MAD/Files/mad.h.sed | 0 {Libraries => Frameworks}/MAD/Files/minimad.c | 0 {Libraries => Frameworks}/MAD/Files/missing | 0 .../MAD/Files/mkinstalldirs | 0 .../MAD/Files/msvc++/Makefile.am | 0 .../MAD/Files/msvc++/Makefile.in | 0 .../MAD/Files/msvc++/config.h | 0 .../MAD/Files/msvc++/libmad.dsp | 0 .../MAD/Files/msvc++/mad.h | 0 .../MAD/Files/qc_table.dat | 0 .../MAD/Files/rq_table.dat | 0 .../MAD/Files/sf_table.dat | 0 {Libraries => Frameworks}/MAD/Files/stream.c | 0 {Libraries => Frameworks}/MAD/Files/stream.h | 0 {Libraries => Frameworks}/MAD/Files/synth.c | 0 {Libraries => Frameworks}/MAD/Files/synth.h | 0 {Libraries => Frameworks}/MAD/Files/timer.c | 0 {Libraries => Frameworks}/MAD/Files/timer.h | 0 {Libraries => Frameworks}/MAD/Files/version.c | 0 {Libraries => Frameworks}/MAD/Files/version.h | 0 {Libraries => Frameworks}/MAD/Info.plist | 0 .../MAD/MAD.xcodeproj/project.pbxproj | 4 +- .../MPCDec/English.lproj/InfoPlist.strings | Bin .../MPCDec/Files/AUTHORS | 0 .../MPCDec/Files/COPYING | 0 .../MPCDec/Files/ChangeLog | 0 .../MPCDec/Files/INSTALL | 0 {Libraries => Frameworks}/MPCDec/Files/README | 0 .../MPCDec/Files/include/config.h | 0 .../MPCDec/Files/include/mainpage.h | 0 .../Files/include/mpcdec/config_types.h | 0 .../Files/include/mpcdec/config_types.h.in | 0 .../Files/include/mpcdec/config_win32.h | 0 .../MPCDec/Files/include/mpcdec/decoder.h | 0 .../MPCDec/Files/include/mpcdec/huffman.h | 0 .../MPCDec/Files/include/mpcdec/internal.h | 0 .../MPCDec/Files/include/mpcdec/math.h | 0 .../MPCDec/Files/include/mpcdec/mpcdec.h | 0 .../MPCDec/Files/include/mpcdec/reader.h | 0 .../MPCDec/Files/include/mpcdec/requant.h | 0 .../MPCDec/Files/include/mpcdec/streaminfo.h | 0 .../MPCDec/Files/src/huffsv46.c | 0 .../MPCDec/Files/src/huffsv7.c | 0 .../MPCDec/Files/src/idtag.c | 0 .../MPCDec/Files/src/mpc_decoder.c | 0 .../MPCDec/Files/src/mpc_reader.c | 0 .../MPCDec/Files/src/requant.c | 0 .../MPCDec/Files/src/sample.cpp | 0 .../MPCDec/Files/src/streaminfo.c | 0 .../MPCDec/Files/src/synth_filter.c | 0 .../Shorten => Frameworks/MPCDec}/Info.plist | 0 .../MPCDec/MPCDec.xcodeproj/project.pbxproj | 27 +- .../Ogg/English.lproj/InfoPlist.strings | Bin {Libraries => Frameworks}/Ogg/Info.plist | 0 .../Ogg/libogg-1.1.3/AUTHORS | 0 .../Ogg/libogg-1.1.3/CHANGES | 0 .../Ogg/libogg-1.1.3/COPYING | 0 .../Ogg/libogg-1.1.3/Makefile.am | 0 .../Ogg/libogg-1.1.3/Makefile.in | 0 .../Ogg/libogg-1.1.3/README | 0 .../Ogg/libogg-1.1.3/aclocal.m4 | 0 .../Ogg/libogg-1.1.3/compile | 0 .../Ogg/libogg-1.1.3/config.guess | 0 .../Ogg/libogg-1.1.3/config.h.in | 0 .../Ogg/libogg-1.1.3/config.sub | 0 .../Ogg/libogg-1.1.3/configure | 0 .../Ogg/libogg-1.1.3/configure.in | 0 .../Ogg/libogg-1.1.3/debian/.cvsignore | 0 .../Ogg/libogg-1.1.3/debian/changelog | 0 .../Ogg/libogg-1.1.3/debian/control | 0 .../Ogg/libogg-1.1.3/debian/copyright | 0 .../Ogg/libogg-1.1.3/debian/libogg-dev.docs | 0 .../libogg-1.1.3/debian/libogg-dev.install | 0 .../libogg-1.1.3/debian/libogg0.README.Debian | 0 .../Ogg/libogg-1.1.3/debian/libogg0.install | 0 .../Ogg/libogg-1.1.3/debian/rules | 0 .../Ogg/libogg-1.1.3/debian/watch | 0 .../Ogg/libogg-1.1.3/depcomp | 0 .../Ogg/libogg-1.1.3/doc/Makefile.am | 0 .../Ogg/libogg-1.1.3/doc/Makefile.in | 0 .../Ogg/libogg-1.1.3/doc/framing.html | 0 .../Ogg/libogg-1.1.3/doc/index.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/Makefile.am | 0 .../Ogg/libogg-1.1.3/doc/libogg/Makefile.in | 0 .../libogg-1.1.3/doc/libogg/bitpacking.html | 0 .../doc/libogg/datastructures.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/decoding.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/encoding.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/general.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/index.html | 0 .../libogg-1.1.3/doc/libogg/ogg_packet.html | 0 .../doc/libogg/ogg_packet_clear.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/ogg_page.html | 0 .../libogg-1.1.3/doc/libogg/ogg_page_bos.html | 0 .../doc/libogg/ogg_page_checksum_set.html | 0 .../doc/libogg/ogg_page_continued.html | 0 .../libogg-1.1.3/doc/libogg/ogg_page_eos.html | 0 .../doc/libogg/ogg_page_granulepos.html | 0 .../doc/libogg/ogg_page_packets.html | 0 .../doc/libogg/ogg_page_pageno.html | 0 .../doc/libogg/ogg_page_serialno.html | 0 .../doc/libogg/ogg_page_version.html | 0 .../doc/libogg/ogg_stream_clear.html | 0 .../doc/libogg/ogg_stream_destroy.html | 0 .../doc/libogg/ogg_stream_eos.html | 0 .../doc/libogg/ogg_stream_flush.html | 0 .../doc/libogg/ogg_stream_init.html | 0 .../doc/libogg/ogg_stream_packetin.html | 0 .../doc/libogg/ogg_stream_packetout.html | 0 .../doc/libogg/ogg_stream_packetpeek.html | 0 .../doc/libogg/ogg_stream_pagein.html | 0 .../doc/libogg/ogg_stream_pageout.html | 0 .../doc/libogg/ogg_stream_reset.html | 0 .../doc/libogg/ogg_stream_reset_serialno.html | 0 .../doc/libogg/ogg_stream_state.html | 0 .../doc/libogg/ogg_sync_buffer.html | 0 .../doc/libogg/ogg_sync_clear.html | 0 .../doc/libogg/ogg_sync_destroy.html | 0 .../doc/libogg/ogg_sync_init.html | 0 .../doc/libogg/ogg_sync_pageout.html | 0 .../doc/libogg/ogg_sync_pageseek.html | 0 .../doc/libogg/ogg_sync_reset.html | 0 .../doc/libogg/ogg_sync_state.html | 0 .../doc/libogg/ogg_sync_wrote.html | 0 .../libogg-1.1.3/doc/libogg/oggpack_adv.html | 0 .../libogg-1.1.3/doc/libogg/oggpack_adv1.html | 0 .../libogg-1.1.3/doc/libogg/oggpack_bits.html | 0 .../doc/libogg/oggpack_buffer.html | 0 .../doc/libogg/oggpack_bytes.html | 0 .../doc/libogg/oggpack_get_buffer.html | 0 .../libogg-1.1.3/doc/libogg/oggpack_look.html | 0 .../doc/libogg/oggpack_look1.html | 0 .../libogg-1.1.3/doc/libogg/oggpack_read.html | 0 .../doc/libogg/oggpack_read1.html | 0 .../doc/libogg/oggpack_readinit.html | 0 .../doc/libogg/oggpack_reset.html | 0 .../doc/libogg/oggpack_write.html | 0 .../doc/libogg/oggpack_writealign.html | 0 .../doc/libogg/oggpack_writeclear.html | 0 .../doc/libogg/oggpack_writecopy.html | 0 .../doc/libogg/oggpack_writeinit.html | 0 .../doc/libogg/oggpack_writetrunc.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/overview.html | 0 .../libogg-1.1.3/doc/libogg/reference.html | 0 .../Ogg/libogg-1.1.3/doc/libogg/style.css | 0 .../doc/libogg/vorbis_comment.html | 0 .../libogg-1.1.3/doc/libogg/vorbis_info.html | 0 .../Ogg/libogg-1.1.3/doc/ogg-multiplex.html | 0 .../Ogg/libogg-1.1.3/doc/oggstream.html | 0 .../Ogg/libogg-1.1.3/doc/rfc3533.txt | 0 .../Ogg/libogg-1.1.3/doc/rfc3534.txt | 0 .../Ogg/libogg-1.1.3/doc/stream.png | Bin .../Ogg/libogg-1.1.3/doc/vorbisword2.png | Bin .../Ogg/libogg-1.1.3/doc/white-ogg.png | Bin .../Ogg/libogg-1.1.3/doc/white-xifish.png | Bin .../Ogg/libogg-1.1.3/include/Makefile.am | 0 .../Ogg/libogg-1.1.3/include/Makefile.in | 0 .../Ogg/libogg-1.1.3/include/ogg/Makefile.am | 0 .../Ogg/libogg-1.1.3/include/ogg/Makefile.in | 0 .../include/ogg/config_types.h.in | 0 .../Ogg/libogg-1.1.3/include/ogg/ogg.h | 0 .../Ogg/libogg-1.1.3/include/ogg/os_types.h | 0 .../Ogg/libogg-1.1.3/install-sh | 0 .../Ogg/libogg-1.1.3/libogg.spec | 0 .../Ogg/libogg-1.1.3/libogg.spec.in | 0 .../Ogg/libogg-1.1.3/ltmain.sh | 0 .../Ogg/libogg-1.1.3/macos/compat/strdup.c | 0 .../Ogg/libogg-1.1.3/macos/compat/sys/types.h | 0 .../Ogg/libogg-1.1.3/macos/libogg.mcp | Bin .../Ogg/libogg-1.1.3/macos/libogg.mcp.exp | 0 .../macosx/English.lproj/InfoPlist.strings | Bin .../Ogg/libogg-1.1.3/macosx/Info.plist | 0 .../macosx/Ogg.xcodeproj/me.mode1 | 0 .../macosx/Ogg.xcodeproj/me.pbxuser | 0 .../macosx/Ogg.xcodeproj/project.pbxproj | 0 .../Ogg/libogg-1.1.3/macosx/Ogg_Prefix.pch | 0 .../Ogg/libogg-1.1.3/missing | 0 .../Ogg/libogg-1.1.3/ogg-uninstalled.pc.in | 0 .../Ogg/libogg-1.1.3/ogg.m4 | 0 .../Ogg/libogg-1.1.3/ogg.pc.in | 0 .../Ogg/libogg-1.1.3/src/Makefile.am | 0 .../Ogg/libogg-1.1.3/src/Makefile.in | 0 .../Ogg/libogg-1.1.3/src/bitwise.c | 0 .../Ogg/libogg-1.1.3/src/framing.c | 0 .../Ogg/libogg-1.1.3/win32/Makefile.am | 0 .../Ogg/libogg-1.1.3/win32/Makefile.in | 0 .../libogg-1.1.3/win32/build_ogg_dynamic.bat | 0 .../win32/build_ogg_dynamic_debug.bat | 0 .../libogg-1.1.3/win32/build_ogg_static.bat | 0 .../win32/build_ogg_static_debug.bat | 0 .../Ogg/libogg-1.1.3/win32/ogg.def | 0 .../Ogg/libogg-1.1.3/win32/ogg.dsw | 0 .../Ogg/libogg-1.1.3/win32/ogg_dynamic.dsp | 0 .../Ogg/libogg-1.1.3/win32/ogg_static.dsp | 0 {Libraries => Frameworks}/Ogg/libogg-src | 0 .../Ogg/ogg.xcodeproj/me.mode1 | 0 .../Ogg/ogg.xcodeproj/me.pbxuser | 0 .../Ogg/ogg.xcodeproj/project.pbxproj | 27 +- {Libraries => Frameworks}/Ogg/ogg_Prefix.pch | 0 {Libraries => Frameworks}/SOURCES | 0 .../Shorten/English.lproj/InfoPlist.strings | Bin .../Shorten/Files/AUTHORS | 0 .../Shorten/Files/COPYING | 0 .../Shorten/Files/ChangeLog | 0 .../Shorten/Files/Makefile.am | 0 {Libraries => Frameworks}/Shorten/Files/NEWS | 0 .../Shorten/Files/README | 0 {Libraries => Frameworks}/Shorten/Files/TODO | 0 .../Shorten/Files/configure.ac | 0 .../Shorten/Files/shorten/Makefile.am | 0 .../Shorten/Files/shorten/doc/LICENSE.shorten | 0 .../Files/shorten/doc/xmms-shn/AUTHORS | 0 .../Files/shorten/doc/xmms-shn/CREDITS | 0 .../Shorten/Files/shorten/doc/xmms-shn/NEWS | 0 .../Shorten/Files/shorten/doc/xmms-shn/README | 0 .../Shorten/Files/shorten/include/bitshift.h | 0 .../Shorten/Files/shorten/include/config.h | 0 .../Shorten/Files/shorten/include/config.h.in | 0 .../Shorten/Files/shorten/include/decode.h | 0 .../Files/shorten/include/ringbuffer.h | 0 .../Shorten/Files/shorten/include/shn.h | 0 .../Files/shorten/include/shn_reader.h | 0 .../Shorten/Files/shorten/include/shorten.h | 0 .../Shorten/Files/shorten/src/Makefile.am | 0 .../Shorten/Files/shorten/src/array.c | 0 .../Shorten/Files/shorten/src/array.cpp | 0 .../Shorten/Files/shorten/src/convert.c | 0 .../Shorten/Files/shorten/src/decode.c | 0 .../Shorten/Files/shorten/src/fixio.c | 0 .../Shorten/Files/shorten/src/fixio.cpp | 0 .../Shorten/Files/shorten/src/id3v2.c | 0 .../Shorten/Files/shorten/src/misc.c | 0 .../Shorten/Files/shorten/src/output.c | 0 .../Shorten/Files/shorten/src/ringbuffer.cpp | 0 .../Shorten/Files/shorten/src/seek.c | 0 .../Shorten/Files/shorten/src/seek.cpp | 0 .../Shorten/Files/shorten/src/shn_reader.cpp | 0 .../Shorten/Files/shorten/src/shorten.c | 0 .../Shorten/Files/shorten/src/sulawalaw.c | 0 .../Shorten/Files/shorten/src/vario.c | 0 .../Shorten/Files/shorten/src/vario.cpp | 0 .../Shorten/Files/shorten/src/wave.c | 0 .../Shorten/Files/shorten/util/Makefile.am | 0 .../Shorten/Files/shorten/util/Sulawalaw.c | 0 .../Shorten/Files/shorten/util/array.c | 0 .../Shorten/Files/shorten/util/exit.c | 0 .../Shorten/Files/shorten/util/mkbshift.c | 0 .../Shorten/Files/shorten/util/mkbshift.h | 0 .../Shorten/Files/src/Makefile.am | 0 .../Shorten/Files/src/libinputshorten.c | 0 .../SndFile => Frameworks/Shorten}/Info.plist | 0 .../Shorten/Shorten.xcodeproj/project.pbxproj | 27 +- .../TagLib}/English.lproj/InfoPlist.strings | Bin .../TagLib/Files/AUTHORS | 0 .../TagLib/Files/COPYING | 0 .../TagLib/Files/ChangeLog | 0 .../TagLib/Files/INSTALL | 0 .../TagLib/Files/Makefile.am | 0 .../TagLib/Files/Makefile.cvs | 0 .../TagLib/Files/Makefile.in | 0 {Libraries => Frameworks}/TagLib/Files/README | 0 {Libraries => Frameworks}/TagLib/Files/TODO | 0 .../TagLib/Files/bindings/c/tag_c.cpp | 0 .../TagLib/Files/bindings/c/tag_c.h | 0 .../TagLib/Files/config.h | 0 .../TagLib/Files/taglib/ape/Makefile.am | 0 .../TagLib/Files/taglib/ape/Makefile.in | 0 .../Files/taglib/ape/ape-tag-format.txt | 0 .../TagLib/Files/taglib/ape/apefooter.cpp | 0 .../TagLib/Files/taglib/ape/apefooter.h | 0 .../TagLib/Files/taglib/ape/apeitem.cpp | 0 .../TagLib/Files/taglib/ape/apeitem.h | 0 .../TagLib/Files/taglib/ape/apetag.cpp | 0 .../TagLib/Files/taglib/ape/apetag.h | 0 .../TagLib/Files/taglib/audioproperties.cpp | 0 .../TagLib/Files/taglib/audioproperties.h | 0 .../TagLib/Files/taglib/configure.in.bot | 0 .../TagLib/Files/taglib/configure.in.in | 0 .../TagLib/Files/taglib/fileref.cpp | 0 .../TagLib/Files/taglib/fileref.h | 0 .../TagLib/Files/taglib/flac/Makefile.am | 0 .../TagLib/Files/taglib/flac/Makefile.in | 0 .../TagLib/Files/taglib/flac/flacfile.cpp | 0 .../TagLib/Files/taglib/flac/flacfile.h | 0 .../Files/taglib/flac/flacproperties.cpp | 0 .../TagLib/Files/taglib/flac/flacproperties.h | 0 .../TagLib/Files/taglib/flac/flactag.h | 0 .../TagLib/Files/taglib/mpc/Makefile.am | 0 .../TagLib/Files/taglib/mpc/Makefile.in | 0 .../TagLib/Files/taglib/mpc/combinedtag.h | 0 .../TagLib/Files/taglib/mpc/mpcfile.cpp | 0 .../TagLib/Files/taglib/mpc/mpcfile.h | 0 .../TagLib/Files/taglib/mpc/mpcproperties.cpp | 0 .../TagLib/Files/taglib/mpc/mpcproperties.h | 0 .../TagLib/Files/taglib/mpeg/Makefile.am | 0 .../TagLib/Files/taglib/mpeg/Makefile.in | 0 .../Files/taglib/mpeg/id3v1/Makefile.am | 0 .../Files/taglib/mpeg/id3v1/Makefile.in | 0 .../Files/taglib/mpeg/id3v1/id3v1genres.cpp | 0 .../Files/taglib/mpeg/id3v1/id3v1genres.h | 0 .../Files/taglib/mpeg/id3v1/id3v1tag.cpp | 0 .../TagLib/Files/taglib/mpeg/id3v1/id3v1tag.h | 0 .../Files/taglib/mpeg/id3v2/Makefile.am | 0 .../Files/taglib/mpeg/id3v2/Makefile.in | 0 .../taglib/mpeg/id3v2/frames/Makefile.am | 0 .../taglib/mpeg/id3v2/frames/Makefile.in | 0 .../id3v2/frames/attachedpictureframe.cpp | 0 .../mpeg/id3v2/frames/attachedpictureframe.h | 0 .../mpeg/id3v2/frames/commentsframe.cpp | 0 .../taglib/mpeg/id3v2/frames/commentsframe.h | 0 .../mpeg/id3v2/frames/relativevolumeframe.cpp | 0 .../mpeg/id3v2/frames/relativevolumeframe.h | 0 .../id3v2/frames/textidentificationframe.cpp | 0 .../id3v2/frames/textidentificationframe.h | 0 .../frames/uniquefileidentifierframe.cpp | 0 .../id3v2/frames/uniquefileidentifierframe.h | 0 .../taglib/mpeg/id3v2/frames/unknownframe.cpp | 0 .../taglib/mpeg/id3v2/frames/unknownframe.h | 0 .../taglib/mpeg/id3v2/id3v2.4.0-frames.txt | 0 .../taglib/mpeg/id3v2/id3v2.4.0-structure.txt | 0 .../taglib/mpeg/id3v2/id3v2extendedheader.cpp | 0 .../taglib/mpeg/id3v2/id3v2extendedheader.h | 0 .../Files/taglib/mpeg/id3v2/id3v2footer.cpp | 0 .../Files/taglib/mpeg/id3v2/id3v2footer.h | 0 .../Files/taglib/mpeg/id3v2/id3v2frame.cpp | 0 .../Files/taglib/mpeg/id3v2/id3v2frame.h | 0 .../taglib/mpeg/id3v2/id3v2framefactory.cpp | 0 .../taglib/mpeg/id3v2/id3v2framefactory.h | 0 .../Files/taglib/mpeg/id3v2/id3v2header.cpp | 0 .../Files/taglib/mpeg/id3v2/id3v2header.h | 0 .../taglib/mpeg/id3v2/id3v2synchdata.cpp | 0 .../Files/taglib/mpeg/id3v2/id3v2synchdata.h | 0 .../Files/taglib/mpeg/id3v2/id3v2tag.cpp | 0 .../TagLib/Files/taglib/mpeg/id3v2/id3v2tag.h | 0 .../TagLib/Files/taglib/mpeg/mpegfile.cpp | 0 .../TagLib/Files/taglib/mpeg/mpegfile.h | 0 .../TagLib/Files/taglib/mpeg/mpegheader.cpp | 0 .../TagLib/Files/taglib/mpeg/mpegheader.h | 0 .../Files/taglib/mpeg/mpegproperties.cpp | 0 .../TagLib/Files/taglib/mpeg/mpegproperties.h | 0 .../TagLib/Files/taglib/mpeg/xingheader.cpp | 0 .../TagLib/Files/taglib/mpeg/xingheader.h | 0 .../TagLib/Files/taglib/ogg/Makefile.am | 0 .../TagLib/Files/taglib/ogg/Makefile.in | 0 .../TagLib/Files/taglib/ogg/flac/Makefile.am | 0 .../TagLib/Files/taglib/ogg/flac/Makefile.in | 0 .../Files/taglib/ogg/flac/oggflacfile.cpp | 0 .../Files/taglib/ogg/flac/oggflacfile.h | 0 .../TagLib/Files/taglib/ogg/oggfile.cpp | 0 .../TagLib/Files/taglib/ogg/oggfile.h | 0 .../TagLib/Files/taglib/ogg/oggpage.cpp | 0 .../TagLib/Files/taglib/ogg/oggpage.h | 0 .../TagLib/Files/taglib/ogg/oggpageheader.cpp | 0 .../TagLib/Files/taglib/ogg/oggpageheader.h | 0 .../Files/taglib/ogg/vorbis/Makefile.am | 0 .../Files/taglib/ogg/vorbis/Makefile.in | 0 .../Files/taglib/ogg/vorbis/vorbisfile.cpp | 0 .../Files/taglib/ogg/vorbis/vorbisfile.h | 0 .../taglib/ogg/vorbis/vorbisproperties.cpp | 0 .../taglib/ogg/vorbis/vorbisproperties.h | 0 .../TagLib/Files/taglib/ogg/xiphcomment.cpp | 0 .../TagLib/Files/taglib/ogg/xiphcomment.h | 0 .../TagLib/Files/taglib/tag.cpp | 0 .../TagLib/Files/taglib/tag.h | 0 .../TagLib/Files/taglib/taglib-config.in | 0 .../TagLib/Files/taglib/toolkit/Makefile.am | 0 .../TagLib/Files/taglib/toolkit/Makefile.in | 0 .../TagLib/Files/taglib/toolkit/taglib.h | 0 .../Files/taglib/toolkit/tbytevector.cpp | 0 .../TagLib/Files/taglib/toolkit/tbytevector.h | 0 .../Files/taglib/toolkit/tbytevectorlist.cpp | 0 .../Files/taglib/toolkit/tbytevectorlist.h | 0 .../TagLib/Files/taglib/toolkit/tdebug.cpp | 0 .../TagLib/Files/taglib/toolkit/tdebug.h | 0 .../TagLib/Files/taglib/toolkit/tfile.cpp | 0 .../TagLib/Files/taglib/toolkit/tfile.h | 0 .../TagLib/Files/taglib/toolkit/tlist.h | 0 .../TagLib/Files/taglib/toolkit/tlist.tcc | 0 .../TagLib/Files/taglib/toolkit/tmap.h | 0 .../TagLib/Files/taglib/toolkit/tmap.tcc | 0 .../TagLib/Files/taglib/toolkit/tstring.cpp | 0 .../TagLib/Files/taglib/toolkit/tstring.h | 0 .../Files/taglib/toolkit/tstringlist.cpp | 0 .../TagLib/Files/taglib/toolkit/tstringlist.h | 0 .../TagLib/Files/taglib/toolkit/unicode.cpp | 0 .../TagLib/Files/taglib/toolkit/unicode.h | 0 {Libraries => Frameworks}/TagLib/Info.plist | 0 .../TagLib/TagLib.xcodeproj/project.pbxproj | 4 +- {Libraries => Frameworks}/Vorbis/.cvsignore | 0 .../Vorbis}/English.lproj/InfoPlist.strings | Bin .../Vorbis/Files/AUTHORS | 0 .../Vorbis/Files/CHANGES | 0 .../Vorbis/Files/COPYING | 0 {Libraries => Frameworks}/Vorbis/Files/README | 0 .../Vorbis/Files/include/.cvsignore | 0 .../Vorbis/Files/include/Makefile.am | 0 .../Vorbis/Files/include/vorbis/.cvsignore | 0 .../Vorbis/Files/include/vorbis/Makefile.am | 0 .../Vorbis/Files/include/vorbis/codec.h | 0 .../Vorbis/Files/include/vorbis/vorbisenc.h | 0 .../Vorbis/Files/include/vorbis/vorbisfile.h | 0 .../Vorbis/Files/lib/.cvsignore | 0 .../Vorbis/Files/lib/Makefile.am | 0 .../Vorbis/Files/lib/analysis.c | 0 .../Vorbis/Files/lib/backends.h | 0 .../Vorbis/Files/lib/barkmel.c | 0 .../Vorbis/Files/lib/bitrate.c | 0 .../Vorbis/Files/lib/bitrate.h | 0 .../Vorbis/Files/lib/block.c | 0 .../Vorbis/Files/lib/books/.cvsignore | 0 .../Vorbis/Files/lib/books/Makefile.am | 0 .../Vorbis/Files/lib/books/coupled/.cvsignore | 0 .../Files/lib/books/coupled/Makefile.am | 0 .../lib/books/coupled/res_books_stereo.h | 0 .../Vorbis/Files/lib/books/floor/.cvsignore | 0 .../Vorbis/Files/lib/books/floor/Makefile.am | 0 .../Files/lib/books/floor/floor_books.h | 0 .../Files/lib/books/uncoupled/.cvsignore | 0 .../Files/lib/books/uncoupled/Makefile.am | 0 .../lib/books/uncoupled/res_books_uncoupled.h | 0 .../Vorbis/Files/lib/codebook.c | 0 .../Vorbis/Files/lib/codebook.h | 0 .../Vorbis/Files/lib/codec_internal.h | 0 .../Vorbis/Files/lib/envelope.c | 0 .../Vorbis/Files/lib/envelope.h | 0 .../Vorbis/Files/lib/floor0.c | 0 .../Vorbis/Files/lib/floor1.c | 0 .../Vorbis/Files/lib/highlevel.h | 0 .../Vorbis/Files/lib/info.c | 0 .../Vorbis/Files/lib/lookup.c | 0 .../Vorbis/Files/lib/lookup.h | 0 .../Vorbis/Files/lib/lookup_data.h | 0 .../Vorbis/Files/lib/lookups.pl | 0 .../Vorbis/Files/lib/lpc.c | 0 .../Vorbis/Files/lib/lpc.h | 0 .../Vorbis/Files/lib/lsp.c | 0 .../Vorbis/Files/lib/lsp.h | 0 .../Vorbis/Files/lib/mapping0.c | 0 .../Vorbis/Files/lib/masking.h | 0 .../Vorbis/Files/lib/mdct.c | 0 .../Vorbis/Files/lib/mdct.h | 0 .../Vorbis/Files/lib/misc.c | 0 .../Vorbis/Files/lib/misc.h | 0 .../Vorbis/Files/lib/modes/.cvsignore | 0 .../Vorbis/Files/lib/modes/Makefile.am | 0 .../Vorbis/Files/lib/modes/floor_all.h | 0 .../Vorbis/Files/lib/modes/psych_11.h | 0 .../Vorbis/Files/lib/modes/psych_16.h | 0 .../Vorbis/Files/lib/modes/psych_44.h | 0 .../Vorbis/Files/lib/modes/psych_8.h | 0 .../Vorbis/Files/lib/modes/residue_16.h | 0 .../Vorbis/Files/lib/modes/residue_44.h | 0 .../Vorbis/Files/lib/modes/residue_44u.h | 0 .../Vorbis/Files/lib/modes/residue_8.h | 0 .../Vorbis/Files/lib/modes/setup_11.h | 0 .../Vorbis/Files/lib/modes/setup_16.h | 0 .../Vorbis/Files/lib/modes/setup_22.h | 0 .../Vorbis/Files/lib/modes/setup_32.h | 0 .../Vorbis/Files/lib/modes/setup_44.h | 0 .../Vorbis/Files/lib/modes/setup_44u.h | 0 .../Vorbis/Files/lib/modes/setup_8.h | 0 .../Vorbis/Files/lib/modes/setup_X.h | 0 .../Vorbis/Files/lib/os.h | 0 .../Vorbis/Files/lib/psy.c | 0 .../Vorbis/Files/lib/psy.h | 0 .../Vorbis/Files/lib/psytune.c | 0 .../Vorbis/Files/lib/registry.c | 0 .../Vorbis/Files/lib/registry.h | 0 .../Vorbis/Files/lib/res0.c | 0 .../Vorbis/Files/lib/scales.h | 0 .../Vorbis/Files/lib/sharedbook.c | 0 .../Vorbis/Files/lib/smallft.c | 0 .../Vorbis/Files/lib/smallft.h | 0 .../Vorbis/Files/lib/synthesis.c | 0 .../Vorbis/Files/lib/tone.c | 0 .../Vorbis/Files/lib/vorbisenc.c | 0 .../Vorbis/Files/lib/vorbisfile.c | 0 .../Vorbis/Files/lib/window.c | 0 .../Vorbis/Files/lib/window.h | 0 .../Vorbis/Files/todo.txt | 0 {Libraries => Frameworks}/Vorbis/Info.plist | 0 .../Vorbis/Vorbis.xcodeproj/project.pbxproj | 67 +- .../WavPack}/English.lproj/InfoPlist.strings | Bin .../WavPack/Files/AUTHORS | 0 .../WavPack/Files/ChangeLog | 0 .../WavPack/Files/Makefile.am | 0 {Libraries => Frameworks}/WavPack/Files/NEWS | 0 .../WavPack/Files/README | 0 .../WavPack/Files/autogen.sh | 0 .../WavPack/Files/bits.c | 0 .../WavPack/Files/compile | 0 .../WavPack/Files/configure.ac | 0 .../WavPack/Files/depcomp | 0 .../WavPack/Files/extra1.c | 0 .../WavPack/Files/extra2.c | 0 .../WavPack/Files/float.c | 0 .../WavPack/Files/format.txt | 0 .../WavPack/Files/install-sh | 0 .../WavPack/Files/license.txt | 0 {Libraries => Frameworks}/WavPack/Files/md5.c | 0 {Libraries => Frameworks}/WavPack/Files/md5.h | 0 .../WavPack/Files/metadata.c | 0 .../WavPack/Files/missing | 0 .../WavPack/Files/pack.c | 0 .../WavPack/Files/unpack.c | 0 .../WavPack/Files/unpack3.c | 0 .../WavPack/Files/unpack3.h | 0 .../WavPack/Files/utils.c | 0 .../WavPack/Files/wavpack.c | 0 .../WavPack/Files/wavpack.h | 0 .../WavPack/Files/wavpack.pc.in | 0 .../WavPack/Files/words.c | 0 .../WavPack/Files/wputils.c | 0 .../WavPack/Files/wputils.h | 0 .../WavPack/Files/wvunpack.c | 0 {Libraries => Frameworks}/WavPack/Info.plist | 0 .../WavPack/WavPack.xcodeproj/project.pbxproj | 33 +- {Cog Help => Help}/Cog Help.helpindex | Bin {Cog Help => Help}/images/add_gray.png | Bin {Cog Help => Help}/images/info_gray.png | Bin {Cog Help => Help}/images/logo.png | Bin {Cog Help => Help}/images/remove_gray.png | Bin {Cog Help => Help}/images/repeat_off.png | Bin {Cog Help => Help}/images/repeat_on.png | Bin {Cog Help => Help}/images/shuffle_off.png | Bin {Cog Help => Help}/images/shuffle_on.png | Bin {Cog Help => Help}/images/wheel.png | Bin {Cog Help => Help}/index.html | 0 Icons/files_off.png | Bin 474 -> 0 bytes Icons/files_on.png | Bin 638 -> 0 bytes Icons/info_off.png | Bin 682 -> 0 bytes Icons/info_on.png | Bin 931 -> 0 bytes Icons/repeat_off.png | Bin 664 -> 0 bytes Icons/repeat_on.png | Bin 1101 -> 0 bytes Icons/shuffle_off.png | Bin 655 -> 0 bytes Icons/shuffle_on.png | Bin 1059 -> 0 bytes {Icons => Images}/add_blue.png | Bin {Icons => Images}/add_gray.png | Bin Images/file_blue.png | Bin 0 -> 1885 bytes Images/file_gray.png | Bin 0 -> 1902 bytes Images/info_blue.png | Bin 0 -> 1848 bytes Images/info_gray.png | Bin 0 -> 1855 bytes {Icons => Images}/next_blue.png | Bin {Icons => Images}/next_gray.png | Bin {Icons => Images}/pause_blue.png | Bin {Icons => Images}/pause_gray.png | Bin {Icons => Images}/play_blue.png | Bin {Icons => Images}/play_gray.png | Bin {Icons => Images}/prev_blue.png | Bin {Icons => Images}/prev_gray.png | Bin {Icons => Images}/remove_blue.png | Bin {Icons => Images}/remove_gray.png | Bin Images/repeat_off.png | Bin 0 -> 1856 bytes Images/repeat_on.png | Bin 0 -> 2024 bytes Images/shuffle_off.png | Bin 0 -> 1796 bytes Images/shuffle_on.png | Bin 0 -> 1816 bytes {Icons => Images}/volume_high.png | Bin {Icons => Images}/volume_low.png | Bin Info.plist | 2 +- .../Ogg.pbxindex/categories.pbxbtree | Bin 84 -> 0 bytes .../Ogg.build/Ogg.pbxindex/cdecls.pbxbtree | Bin 434424 -> 0 bytes .../Ogg.build/Ogg.pbxindex/decls.pbxbtree | Bin 433332 -> 0 bytes .../Ogg.build/Ogg.pbxindex/files.pbxbtree | Bin 3804 -> 0 bytes .../Ogg.build/Ogg.pbxindex/imports.pbxbtree | Bin 8372 -> 0 bytes .../Ogg.build/Ogg.pbxindex/pbxindex.header | Bin 20 -> 0 bytes .../Ogg.build/Ogg.pbxindex/protocols.pbxbtree | Bin 84 -> 0 bytes .../Ogg.build/Ogg.pbxindex/refs.pbxbtree | Bin 292768 -> 0 bytes .../Ogg.pbxindex/strings.pbxstrings/control | Bin 524312 -> 0 bytes .../Ogg.pbxindex/strings.pbxstrings/strings | Bin 903126 -> 0 bytes .../Ogg.pbxindex/subclasses.pbxbtree | Bin 108 -> 0 bytes .../Ogg.pbxindex/symbols0.pbxsymbols | Bin 974688 -> 0 bytes Libraries/SndFile/Files/AUTHORS | 14 - Libraries/SndFile/Files/COPYING | 503 -- Libraries/SndFile/Files/ChangeLog | 5161 ----------------- Libraries/SndFile/Files/INSTALL | 182 - Libraries/SndFile/Files/NEWS | 98 - Libraries/SndFile/Files/README | 74 - Libraries/SndFile/Files/TODO | 42 - Libraries/SndFile/Files/src/G72x/ChangeLog | 50 - Libraries/SndFile/Files/src/G72x/Makefile | 483 -- Libraries/SndFile/Files/src/G72x/Makefile.am | 28 - Libraries/SndFile/Files/src/G72x/Makefile.in | 483 -- Libraries/SndFile/Files/src/G72x/README | 0 .../SndFile/Files/src/G72x/README.original | 94 - Libraries/SndFile/Files/src/G72x/g721.c | 162 - Libraries/SndFile/Files/src/G72x/g723_16.c | 169 - Libraries/SndFile/Files/src/G72x/g723_24.c | 146 - Libraries/SndFile/Files/src/G72x/g723_40.c | 160 - Libraries/SndFile/Files/src/G72x/g72x.c | 652 --- Libraries/SndFile/Files/src/G72x/g72x.h | 99 - Libraries/SndFile/Files/src/G72x/g72x_priv.h | 118 - Libraries/SndFile/Files/src/G72x/g72x_test.c | 222 - Libraries/SndFile/Files/src/GSM610/COPYRIGHT | 16 - Libraries/SndFile/Files/src/GSM610/ChangeLog | 56 - Libraries/SndFile/Files/src/GSM610/Makefile | 474 -- .../SndFile/Files/src/GSM610/Makefile.am | 21 - .../SndFile/Files/src/GSM610/Makefile.in | 474 -- Libraries/SndFile/Files/src/GSM610/README | 36 - Libraries/SndFile/Files/src/GSM610/add.c | 248 - Libraries/SndFile/Files/src/GSM610/code.c | 97 - Libraries/SndFile/Files/src/GSM610/config.h | 33 - Libraries/SndFile/Files/src/GSM610/decode.c | 67 - Libraries/SndFile/Files/src/GSM610/gsm.h | 58 - .../SndFile/Files/src/GSM610/gsm610_priv.h | 308 - .../SndFile/Files/src/GSM610/gsm_create.c | 44 - .../SndFile/Files/src/GSM610/gsm_decode.c | 366 -- .../SndFile/Files/src/GSM610/gsm_destroy.c | 31 - .../SndFile/Files/src/GSM610/gsm_encode.c | 456 -- .../SndFile/Files/src/GSM610/gsm_option.c | 74 - .../SndFile/Files/src/GSM610/long_term.c | 951 --- Libraries/SndFile/Files/src/GSM610/lpc.c | 341 -- .../SndFile/Files/src/GSM610/preprocess.c | 115 - Libraries/SndFile/Files/src/GSM610/rpe.c | 490 -- .../SndFile/Files/src/GSM610/short_term.c | 427 -- Libraries/SndFile/Files/src/GSM610/table.c | 69 - Libraries/SndFile/Files/src/Makefile | 852 --- Libraries/SndFile/Files/src/Makefile.am | 102 - Libraries/SndFile/Files/src/Makefile.in | 852 --- Libraries/SndFile/Files/src/Symbols.darwin | 36 - Libraries/SndFile/Files/src/Symbols.linux | 42 - Libraries/SndFile/Files/src/aiff.c | 1479 ----- Libraries/SndFile/Files/src/alaw.c | 544 -- Libraries/SndFile/Files/src/au.c | 453 -- Libraries/SndFile/Files/src/avr.c | 254 - Libraries/SndFile/Files/src/caf.c | 538 -- Libraries/SndFile/Files/src/command.c | 338 -- Libraries/SndFile/Files/src/common.c | 1287 ---- Libraries/SndFile/Files/src/common.h | 755 --- Libraries/SndFile/Files/src/config.h | 265 - Libraries/SndFile/Files/src/config.h.in | 256 - .../SndFile/Files/src/create_symbols_file.py | 152 - Libraries/SndFile/Files/src/cygsndfile.def | 39 - Libraries/SndFile/Files/src/dither.c | 535 -- Libraries/SndFile/Files/src/double64.c | 1009 ---- Libraries/SndFile/Files/src/dwd.c | 210 - Libraries/SndFile/Files/src/dwvw.c | 671 --- Libraries/SndFile/Files/src/file_io.c | 1537 ----- Libraries/SndFile/Files/src/flac.c | 1156 ---- Libraries/SndFile/Files/src/float32.c | 961 --- Libraries/SndFile/Files/src/float_cast.h | 262 - Libraries/SndFile/Files/src/g72x.c | 615 -- Libraries/SndFile/Files/src/gsm610.c | 628 -- Libraries/SndFile/Files/src/htk.c | 225 - Libraries/SndFile/Files/src/ima_adpcm.c | 976 ---- Libraries/SndFile/Files/src/interleave.c | 306 - Libraries/SndFile/Files/src/ircam.c | 331 -- Libraries/SndFile/Files/src/libsndfile.def | 39 - Libraries/SndFile/Files/src/macbinary3.c | 58 - Libraries/SndFile/Files/src/macos.c | 63 - Libraries/SndFile/Files/src/mat4.c | 394 -- Libraries/SndFile/Files/src/mat5.c | 507 -- Libraries/SndFile/Files/src/ms_adpcm.c | 834 --- Libraries/SndFile/Files/src/nist.c | 367 -- Libraries/SndFile/Files/src/ogg.c | 44 - Libraries/SndFile/Files/src/paf.c | 843 --- Libraries/SndFile/Files/src/pcm.c | 2899 --------- Libraries/SndFile/Files/src/pvf.c | 199 - Libraries/SndFile/Files/src/raw.c | 111 - Libraries/SndFile/Files/src/rx2.c | 326 -- Libraries/SndFile/Files/src/sd2.c | 613 -- Libraries/SndFile/Files/src/sds.c | 993 ---- Libraries/SndFile/Files/src/sf_unistd.h | 67 - Libraries/SndFile/Files/src/sfconfig.h | 108 - Libraries/SndFile/Files/src/sfendian.h | 256 - Libraries/SndFile/Files/src/sndfile.c | 2642 --------- Libraries/SndFile/Files/src/sndfile.h | 530 -- Libraries/SndFile/Files/src/sndfile.h.in | 530 -- Libraries/SndFile/Files/src/stamp-h1 | 1 - Libraries/SndFile/Files/src/strings.c | 204 - Libraries/SndFile/Files/src/svx.c | 410 -- Libraries/SndFile/Files/src/test_endswap.c | 233 - Libraries/SndFile/Files/src/test_endswap.def | 28 - Libraries/SndFile/Files/src/test_endswap.tpl | 126 - Libraries/SndFile/Files/src/test_file_io.c | 448 -- Libraries/SndFile/Files/src/test_log_printf.c | 138 - Libraries/SndFile/Files/src/txw.c | 379 -- Libraries/SndFile/Files/src/ulaw.c | 1047 ---- Libraries/SndFile/Files/src/voc.c | 878 --- Libraries/SndFile/Files/src/vox_adpcm.c | 537 -- Libraries/SndFile/Files/src/w64.c | 578 -- Libraries/SndFile/Files/src/wav.c | 1543 ----- Libraries/SndFile/Files/src/wav_w64.c | 494 -- Libraries/SndFile/Files/src/wav_w64.h | 283 - Libraries/SndFile/Files/src/wve.c | 125 - Libraries/SndFile/Files/src/xi.c | 1204 ---- .../SndFile/SndFile.xcodeproj/project.pbxproj | 611 -- .../WavPack/English.lproj/InfoPlist.strings | Bin 204 -> 0 bytes Old/Sound.h | 134 - Old/Sound.m | 768 --- Old/SoundController.h | 61 - Old/SoundController.m | 345 -- Playlist/PlaylistController.m | 6 +- Playlist/PlaylistEntry.h | 10 +- Playlist/PlaylistEntry.m | 266 +- .../CoreAudio.xcodeproj/project.pbxproj | 270 + Plugins/CoreAudio/CoreAudioCodec.h | 17 + Plugins/CoreAudio/CoreAudioCodec.m | 39 + Plugins/CoreAudio/CoreAudioDecoder.h | 48 + Plugins/CoreAudio/CoreAudioDecoder.m | 344 ++ Plugins/CoreAudio/CoreAudioPropertiesReader.h | 19 + Plugins/CoreAudio/CoreAudioPropertiesReader.m | 38 + Plugins/CoreAudio/CoreAudio_Prefix.pch | 7 + Plugins/CoreAudio/Info.plist | 26 + Plugins/Flac/Flac.xcodeproj/project.pbxproj | 297 + Plugins/Flac/FlacCodec.h | 17 + Plugins/Flac/FlacCodec.m | 38 + Plugins/Flac/FlacDecoder.h | 35 + Plugins/Flac/FlacDecoder.m | 184 + Plugins/Flac/FlacPropertiesReader.h | 19 + Plugins/Flac/FlacPropertiesReader.m | 38 + Plugins/Flac/Flac_Prefix.pch | 7 + Plugins/Flac/Info.plist | 26 + Plugins/MAD/Info.plist | 26 + Plugins/MAD/MAD.xcodeproj/project.pbxproj | 319 + Plugins/MAD/MADCodec.h | 17 + Plugins/MAD/MADCodec.m | 38 + Plugins/MAD/MADDecoder.h | 49 + Plugins/MAD/MADDecoder.m | 581 ++ Plugins/MAD/MADPropertiesReader.h | 19 + Plugins/MAD/MADPropertiesReader.m | 38 + Plugins/MAD/MAD_Prefix.pch | 7 + Plugins/MonkeysAudio/Info.plist | 26 + .../MonkeysAudio.xcodeproj/project.pbxproj | 297 + Plugins/MonkeysAudio/MonkeysAudioCodec.h | 17 + Plugins/MonkeysAudio/MonkeysAudioCodec.mm | 38 + Plugins/MonkeysAudio/MonkeysAudioDecoder.h | 25 + Plugins/MonkeysAudio/MonkeysAudioDecoder.mm | 93 + .../MonkeysAudioPropertiesReader.h | 19 + .../MonkeysAudioPropertiesReader.mm | 38 + Plugins/MonkeysAudio/MonkeysAudio_Prefix.pch | 7 + Plugins/Musepack/Info.plist | 26 + .../Musepack.xcodeproj/project.pbxproj | 301 + Plugins/Musepack/MusepackCodec.h | 17 + Plugins/Musepack/MusepackCodec.m | 38 + Plugins/Musepack/MusepackDecoder.h | 31 + Plugins/Musepack/MusepackDecoder.m | 159 + Plugins/Musepack/MusepackPropertiesReader.h | 19 + Plugins/Musepack/MusepackPropertiesReader.m | 38 + Plugins/Musepack/Musepack_Prefix.pch | 7 + Plugins/Shorten/Info.plist | 26 + .../Shorten/Shorten.xcodeproj/project.pbxproj | 297 + Plugins/Shorten/ShortenCodec.h | 17 + Plugins/Shorten/ShortenCodec.mm | 38 + Plugins/Shorten/ShortenDecoder.h | 30 + Plugins/Shorten/ShortenDecoder.mm | 145 + Plugins/Shorten/ShortenPropertiesReader.h | 19 + Plugins/Shorten/ShortenPropertiesReader.mm | 38 + Plugins/Shorten/Shorten_Prefix.pch | 7 + Plugins/TagLib/Info.plist | 26 + .../TagLib/TagLib.xcodeproj/project.pbxproj | 291 + Plugins/TagLib/TagLibMetadataReader.h | 18 + Plugins/TagLib/TagLibMetadataReader.m | 80 + Plugins/TagLib/TagLibPlugin.h | 17 + Plugins/TagLib/TagLibPlugin.m | 37 + Plugins/TagLib/TagLib_Prefix.pch | 7 + Plugins/Vorbis/Info.plist | 26 + .../Vorbis/Vorbis.xcodeproj/project.pbxproj | 311 + Plugins/Vorbis/VorbisCodec.h | 17 + Plugins/Vorbis/VorbisCodec.m | 38 + Plugins/Vorbis/VorbisDecoder.h | 35 + Plugins/Vorbis/VorbisDecoder.m | 85 + Plugins/Vorbis/VorbisPropertiesReader.h | 19 + Plugins/Vorbis/VorbisPropertiesReader.m | 38 + Plugins/Vorbis/Vorbis_Prefix.pch | 7 + Plugins/WavPack/Info.plist | 26 + .../WavPack/WavPack.xcodeproj/project.pbxproj | 297 + Plugins/WavPack/WavPackCodec.h | 17 + Plugins/WavPack/WavPackCodec.m | 38 + Plugins/WavPack/WavPackDecoder.h | 25 + Plugins/WavPack/WavPackDecoder.m | 91 + Plugins/WavPack/WavPackPropertiesReader.h | 19 + Plugins/WavPack/WavPackPropertiesReader.m | 38 + Plugins/WavPack/WavPack_Prefix.pch | 7 + Scripts/build_dependencies.sh | 10 + .../build_frameworks.sh | 4 +- Scripts/build_plugins.sh | 10 + .../build_preferences.sh | 4 +- .../load_localization.sh | 0 .../update_strings.sh | 0 Sound/SOUNDTODO | 41 - Sound/SoundController.h | 48 - Sound/SoundController.m | 215 - Sound/SoundFile/AACFile.h | 33 - Sound/SoundFile/AACFile.m | 174 - Sound/SoundFile/MPEGFile.h | 18 - Sound/SoundFile/MPEGFile.mm | 112 - Sound/SoundFile/WaveFile.h | 20 - Sound/SoundFile/WaveFile.m | 123 - TODO | 3 - .../AMRemovableColumnsTableView.h | 0 .../AMRemovableColumnsTableView.m | 0 .../AMRemovableTableColumn.h | 0 .../AMRemovableTableColumn.m | 0 ThirdParty/AppleRemote/AppleRemote.h | 199 + ThirdParty/AppleRemote/AppleRemote.m | 713 +++ ThirdParty/CoreAudioUtils/CoreAudioUtils.h | 24 + ThirdParty/CoreAudioUtils/CoreAudioUtils.m | 49 + .../Frameworks/Sparkle.framework/Headers | 1 + .../Frameworks/Sparkle.framework/Resources | 1 + .../Frameworks/Sparkle.framework/Sparkle | 1 + .../A/Headers/NSApplication+AppCopies.h | 13 + .../A/Headers/NSFileManager+Authentication.h | 11 + .../A/Headers/NSFileManager+Verification.h | 15 + .../Versions/A/Headers/NSString+extras.h | 61 + .../Versions/A/Headers/RSS.h | 98 + .../Versions/A/Headers/SUAppcast.h | 27 + .../Versions/A/Headers/SUAppcastItem.h | 57 + .../A/Headers/SUAutomaticUpdateAlert.h | 21 + .../Versions/A/Headers/SUConstants.h | 20 + .../Versions/A/Headers/SUStatusChecker.h | 26 + .../Versions/A/Headers/SUStatusController.h | 33 + .../Versions/A/Headers/SUUnarchiver.h | 25 + .../Versions/A/Headers/SUUpdateAlert.h | 40 + .../Versions/A/Headers/SUUpdater.h | 55 + .../Versions/A/Headers/SUUtilities.h | 20 + .../Versions/A/Headers/Sparkle.h | 22 + .../Versions/A/Resources/Info.plist | 22 + .../A/Resources/SUStatus.nib/classes.nib | 12 + .../A/Resources/SUStatus.nib/info.nib | 16 + .../A/Resources/SUStatus.nib/keyedobjects.nib | Bin 0 -> 6873 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6589 bytes .../ca.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../ca.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10881 bytes .../A/Resources/ca.lproj/Sparkle.strings | Bin 0 -> 7138 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6559 bytes .../cs.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../cs.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10744 bytes .../A/Resources/cs.lproj/Sparkle.strings | Bin 0 -> 6978 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../cy.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../cy.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10691 bytes .../A/Resources/cy.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6438 bytes .../da.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../da.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10841 bytes .../A/Resources/da.lproj/Sparkle.strings | Bin 0 -> 6944 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6406 bytes .../de.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../de.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10689 bytes .../A/Resources/de.lproj/Sparkle.strings | Bin 0 -> 6938 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 16 + .../keyedobjects.nib | Bin 0 -> 6571 bytes .../en.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../en.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/en.lproj/Sparkle.strings | Bin 0 -> 6908 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../es.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../es.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/es.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6583 bytes .../fi.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../fi.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10787 bytes .../A/Resources/fi.lproj/Sparkle.strings | Bin 0 -> 6954 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6548 bytes .../fr.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../fr.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10882 bytes .../A/Resources/fr.lproj/Sparkle.strings | Bin 0 -> 7344 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6498 bytes .../he.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../he.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10712 bytes .../A/Resources/he.lproj/Sparkle.strings | Bin 0 -> 6212 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../hu.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../hu.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/hu.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../id.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../id.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/id.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../is.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../is.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/is.lproj/Sparkle.strings | Bin 0 -> 6942 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6415 bytes .../it.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../it.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10700 bytes .../A/Resources/it.lproj/Sparkle.strings | Bin 0 -> 7170 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6450 bytes .../ja.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../ja.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10724 bytes .../A/Resources/ja.lproj/Sparkle.strings | Bin 0 -> 5994 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../ko.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../ko.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/ko.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../nl.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../nl.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/nl.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../no.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../no.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/no.lproj/Sparkle.strings | Bin 0 -> 7056 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6565 bytes .../pl.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../pl.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10720 bytes .../A/Resources/pl.lproj/Sparkle.strings | Bin 0 -> 7076 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../ru.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../ru.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/ru.lproj/Sparkle.strings | Bin 0 -> 6922 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6574 bytes .../sk.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../sk.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10776 bytes .../A/Resources/sk.lproj/Sparkle.strings | Bin 0 -> 6902 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../sv.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../sv.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/sv.lproj/Sparkle.strings | Bin 0 -> 6912 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../th.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../th.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10691 bytes .../A/Resources/th.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6568 bytes .../tr.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../tr.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10773 bytes .../A/Resources/tr.lproj/Sparkle.strings | Bin 0 -> 6936 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6346 bytes .../zh_CN.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../zh_CN.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10489 bytes .../A/Resources/zh_CN.lproj/Sparkle.strings | Bin 0 -> 5536 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 + .../SUAutomaticUpdateAlert.nib/info.nib | 12 + .../keyedobjects.nib | Bin 0 -> 6380 bytes .../zh_TW.lproj/SUUpdateAlert.nib/classes.nib | 21 + .../zh_TW.lproj/SUUpdateAlert.nib/info.nib | 16 + .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10742 bytes .../A/Resources/zh_TW.lproj/Sparkle.strings | Bin 0 -> 8562 bytes .../Sparkle.framework/Versions/A/Sparkle | Bin 0 -> 197376 bytes .../Sparkle.framework/Versions/Current | 1 + .../ImageTextCell}/ImageTextCell.h | 0 .../ImageTextCell}/ImageTextCell.m | 0 .../KFTypeSelectTableView.h | 0 .../KFTypeSelectTableView.m | 0 .../NDHotKeys}/NDHotKeyControl.h | 0 .../NDHotKeys}/NDHotKeyControl.m | 0 .../NDHotKeys}/NDHotKeyEvent.h | 0 .../NDHotKeys}/NDHotKeyEvent.m | 0 .../UKKQueue/UKFNSubscribeFileWatcher.h | 0 .../UKKQueue/UKFNSubscribeFileWatcher.m | 0 .../UKKQueue/UKFileWatcher.h | 0 .../UKKQueue/UKFileWatcher.m | 0 .../UKKQueue/UKKQueue Readme.txt | 0 .../UKKQueue/UKKQueue.h | 0 .../UKKQueue/UKKQueue.m | 0 .../UKKQueue/UKMainThreadProxy.h | 0 .../UKKQueue/UKMainThreadProxy.m | 0 {Custom => Utils}/ClickField.h | 0 {Custom => Utils}/ClickField.m | 0 {Custom => Utils}/DragScrollView.h | 0 {Custom => Utils}/DragScrollView.m | 0 {Custom => Utils}/TrackingCell.h | 0 {Custom => Utils}/TrackingCell.m | 0 {Custom => Utils}/TrackingSlider.h | 0 {Custom => Utils}/TrackingSlider.m | 0 build_dependencies.sh | 8 - xchat/cog.py | 37 - xchat/cog.script | 9 - xchat/cog_test.py | 26 - 1728 files changed, 11772 insertions(+), 56867 deletions(-) rename AppController.h => Application/AppController.h (100%) rename AppController.m => Application/AppController.m (100%) rename PlaybackController.h => Application/PlaybackController.h (78%) rename PlaybackController.m => Application/PlaybackController.m (86%) create mode 100644 Audio/AudioDecoder.h create mode 100644 Audio/AudioDecoder.m create mode 100644 Audio/AudioMetadataReader.h create mode 100644 Audio/AudioMetadataReader.m create mode 100644 Audio/AudioPlayer.h create mode 100644 Audio/AudioPlayer.m create mode 100644 Audio/AudioPropertiesReader.h create mode 100644 Audio/AudioPropertiesReader.m rename {Sound => Audio/Chain}/BufferChain.h (62%) rename {Sound => Audio/Chain}/BufferChain.m (71%) rename {Sound => Audio/Chain}/ConverterNode.h (100%) rename {Sound => Audio/Chain}/ConverterNode.m (82%) rename {Sound => Audio/Chain}/InputNode.h (76%) rename {Sound => Audio/Chain}/InputNode.m (58%) rename {Sound => Audio/Chain}/Node.h (95%) rename {Sound => Audio/Chain}/Node.m (100%) rename {Sound => Audio/Chain}/OutputNode.h (91%) rename {Sound => Audio/Chain}/OutputNode.m (96%) create mode 100644 Audio/CogAudio.xcodeproj/project.pbxproj create mode 100644 Audio/CogAudio_Prefix.pch rename {Sound/SoundFile => Audio/Decoders}/CoreAudioFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/CoreAudioFile.m (100%) rename {Sound/SoundFile => Audio/Decoders}/FlacFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/FlacFile.m (100%) rename {Sound/SoundFile => Audio/Decoders}/GameFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/GameFile.mm (100%) rename {Sound/SoundFile => Audio/Decoders}/MADFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/MADFile.m (100%) rename {Sound/SoundFile => Audio/Decoders}/MonkeysFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/MonkeysFile.mm (100%) rename {Sound/SoundFile => Audio/Decoders}/MusepackFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/MusepackFile.m (100%) rename {Sound/SoundFile => Audio/Decoders}/ShnFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/ShnFile.mm (100%) rename {Sound/SoundFile => Audio/Decoders}/SoundFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/SoundFile.mm (100%) rename {Sound/SoundFile => Audio/Decoders}/VorbisFile.h (77%) rename {Sound/SoundFile => Audio/Decoders}/VorbisFile.m (100%) rename {Sound/SoundFile => Audio/Decoders}/WavPackFile.h (100%) rename {Sound/SoundFile => Audio/Decoders}/WavPackFile.m (100%) rename {Libraries/FLAC => Audio}/Info.plist (100%) rename {Sound => Audio/Output}/OutputCoreAudio.h (81%) rename {Sound => Audio/Output}/OutputCoreAudio.m (98%) create mode 100644 Audio/Plugin.h create mode 100644 Audio/PluginController.h create mode 100644 Audio/PluginController.m rename {Sound => Audio}/Status.h (100%) create mode 100644 Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.h create mode 100644 Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.m create mode 100644 Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.h create mode 100644 Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.m create mode 100644 Audio/Utils/DBLog.h create mode 100644 Audio/Utils/DBLog.m create mode 100644 Audio/Utils/Semaphore.h create mode 100644 Audio/Utils/Semaphore.m delete mode 100644 Custom/InfoView.h delete mode 100644 Custom/InfoView.m rename {Libraries => Frameworks}/FLAC/English.lproj/InfoPlist.strings (100%) rename {Libraries/MAC => Frameworks/FLAC}/Info.plist (100%) rename {Libraries => Frameworks}/FLAC/OggFLAC Framework-Info.plist (100%) rename {Libraries => Frameworks}/FLAC/config_osx.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/AUTHORS (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/COPYING.FDL (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/COPYING.GPL (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/COPYING.LGPL (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/COPYING.Xiph (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/README (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/autogen.sh (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.guess (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.h.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.log (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.rpath (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.status (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/config.sub (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/configure (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/configure.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/export.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC++/metadata.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/assert.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/callback.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/export.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/file_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/file_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/format.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/metadata.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/ordinals.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/seekable_stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/seekable_stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/FLAC/stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC++/export.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/export.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/file_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/file_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/OggFLAC/stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/getopt.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/cuesheet.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/file.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/replaygain.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/grabbag/seektable.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/replaygain_analysis.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/replaygain_synthesis.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/include/share/utf8.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/analyze.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/decode.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/encode.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/local_string_utils.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/main.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/utils.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/.deps/vorbiscomment.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/analyze.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/analyze.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/decode.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/decode.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/encode.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/encode.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/flac.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/local_string_utils.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/local_string_utils.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/main.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/utils.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/utils.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/vorbiscomment.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/flac/vorbiscomment.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/metadata.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/file_decoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/file_encoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++.m4 (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_dynamic.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/metadata.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_decoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_encoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/stream_decoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC++/stream_encoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/bitbuffer.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/bitmath.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/cpu.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/crc.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/file_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/file_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/fixed.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/float.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/format.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/lpc.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/md5.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/memory.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_iterators.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_object.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder_framing.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/bitbuffer.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/bitmath.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/cpu.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/crc.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/file_decoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/file_encoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/fixed.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/float.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/format.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/cpu_asm.nasm (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/fixed_asm.nasm (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/lpc_asm.nasm (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ia32/nasm.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/bitbuffer.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/bitmath.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/cpu.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/crc.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/fixed.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/float.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/format.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/lpc.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/md5.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/memory.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/metadata.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/private/stream_encoder_framing.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/libFLAC.m4 (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/libFLAC_dynamic.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/libFLAC_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/lpc.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/md5.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/memory.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/metadata_iterators.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/metadata_object.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/as/lpc_asm.s (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/lpc_asm.s (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_decoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_encoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/stream_decoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/stream_encoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libFLAC/stream_encoder_framing.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/file_decoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/file_encoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++.m4 (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_dynamic.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_decoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_encoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/stream_decoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC++/stream_encoder.cpp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_decoder_aspect.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_encoder_aspect.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_helper.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_mapping.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_decoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_encoder.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/file_decoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/file_encoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_decoder_aspect.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_encoder_aspect.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_helper.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_mapping.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/all.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_decoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_encoder.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC.m4 (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_dynamic.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/ogg_decoder_aspect.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/ogg_encoder_aspect.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/ogg_helper.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/ogg_mapping.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_decoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_encoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/stream_decoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/libOggFLAC/stream_encoder.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/main.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/operations.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_cuesheet.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_seektable.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_streaminfo.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_vorbiscomment.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/options.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/usage.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/.deps/utils.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/main.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/metaflac.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/operations.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/operations.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_cuesheet.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_seektable.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_streaminfo.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_vorbiscomment.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/options.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/options.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/usage.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/usage.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/utils.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/metaflac/utils.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/README (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt1.Po (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/getopt.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/getopt1.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/getopt/getopt_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/.deps/cuesheet.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/.deps/file.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/.deps/replaygain.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/.deps/seektable.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/cuesheet.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/file.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/grabbag_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/replaygain.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/grabbag/seektable.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/.deps/replaygain_analysis.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/.deps/replaygain_synthesis.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/fast_float_math_hack.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/.deps/charset.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/.deps/iconvert.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/.deps/utf8.Plo (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/Makefile (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/Makefile.am (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/Makefile.in (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/Makefile.lite (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/charmaps.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/charset.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/charset.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/charset_test.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/charsetmap.h (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/iconvert.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/makemap.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/utf8.c (100%) rename {Libraries => Frameworks}/FLAC/flac-1.1.2/src/share/utf8/utf8_static.dsp (100%) rename {Libraries => Frameworks}/FLAC/flac.xcodeproj/me.mode1 (100%) rename {Libraries => Frameworks}/FLAC/flac.xcodeproj/me.pbxuser (100%) rename {Libraries => Frameworks}/FLAC/flac.xcodeproj/project.pbxproj (95%) rename {Libraries => Frameworks}/FLAC/flac_Prefix.pch (100%) rename {Libraries => Frameworks}/ID3Tag/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/ID3Tag/Files/CHANGES (100%) rename {Libraries => Frameworks}/ID3Tag/Files/COPYING (100%) rename {Libraries => Frameworks}/ID3Tag/Files/COPYRIGHT (100%) rename {Libraries => Frameworks}/ID3Tag/Files/CREDITS (100%) rename {Libraries => Frameworks}/ID3Tag/Files/INSTALL (100%) rename {Libraries => Frameworks}/ID3Tag/Files/Makefile.am (100%) rename {Libraries => Frameworks}/ID3Tag/Files/Makefile.in (100%) rename {Libraries => Frameworks}/ID3Tag/Files/README (100%) rename {Libraries => Frameworks}/ID3Tag/Files/TODO (100%) rename {Libraries => Frameworks}/ID3Tag/Files/VERSION (100%) rename {Libraries => Frameworks}/ID3Tag/Files/aclocal.m4 (100%) rename {Libraries => Frameworks}/ID3Tag/Files/compat.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/compat.gperf (100%) rename {Libraries => Frameworks}/ID3Tag/Files/compat.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/config.guess (100%) rename {Libraries => Frameworks}/ID3Tag/Files/config.h.in (100%) rename {Libraries => Frameworks}/ID3Tag/Files/config.sub (100%) rename {Libraries => Frameworks}/ID3Tag/Files/configure (100%) rename {Libraries => Frameworks}/ID3Tag/Files/configure.ac (100%) rename {Libraries => Frameworks}/ID3Tag/Files/crc.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/crc.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/debug.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/debug.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/depcomp (100%) rename {Libraries => Frameworks}/ID3Tag/Files/field.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/field.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/file.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/file.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/frame.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/frame.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/frametype.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/frametype.gperf (100%) rename {Libraries => Frameworks}/ID3Tag/Files/frametype.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/genre.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/genre.dat (100%) rename {Libraries => Frameworks}/ID3Tag/Files/genre.dat.in (100%) rename {Libraries => Frameworks}/ID3Tag/Files/genre.dat.sed (100%) rename {Libraries => Frameworks}/ID3Tag/Files/genre.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/global.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/id3tag.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/install-sh (100%) rename {Libraries => Frameworks}/ID3Tag/Files/latin1.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/latin1.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/libid3tag.list.in (100%) rename {Libraries => Frameworks}/ID3Tag/Files/ltmain.sh (100%) rename {Libraries => Frameworks}/ID3Tag/Files/missing (100%) rename {Libraries => Frameworks}/ID3Tag/Files/mkinstalldirs (100%) rename {Libraries => Frameworks}/ID3Tag/Files/msvc++/Makefile.am (100%) rename {Libraries => Frameworks}/ID3Tag/Files/msvc++/Makefile.in (100%) rename {Libraries => Frameworks}/ID3Tag/Files/msvc++/config.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/msvc++/libid3tag.dsp (100%) rename {Libraries => Frameworks}/ID3Tag/Files/parse.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/parse.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/render.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/render.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/tag.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/tag.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/ucs4.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/ucs4.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/utf16.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/utf16.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/utf8.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/utf8.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/util.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/util.h (100%) rename {Libraries => Frameworks}/ID3Tag/Files/version.c (100%) rename {Libraries => Frameworks}/ID3Tag/Files/version.h (100%) rename {Libraries => Frameworks}/ID3Tag/ID3Tag.xcodeproj/project.pbxproj (99%) rename {Libraries => Frameworks}/ID3Tag/Info.plist (100%) rename {Libraries => Frameworks}/MAC/English.lproj/InfoPlist.strings (100%) rename {Libraries/MPCDec => Frameworks/MAC}/Info.plist (100%) rename {Libraries => Frameworks}/MAC/MAC.xcodeproj/me.mode1 (100%) rename {Libraries => Frameworks}/MAC/MAC.xcodeproj/me.pbxuser (100%) rename {Libraries => Frameworks}/MAC/MAC.xcodeproj/project.pbxproj (98%) rename {Libraries => Frameworks}/MAC/MAC_Prefix.pch (100%) rename {Libraries => Frameworks}/MAC/mac-src/AUTHORS (100%) rename {Libraries => Frameworks}/MAC/mac-src/COPYING (100%) rename {Libraries => Frameworks}/MAC/mac-src/ChangeLog (100%) rename {Libraries => Frameworks}/MAC/mac-src/INSTALL (100%) rename {Libraries => Frameworks}/MAC/mac-src/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/NEWS (100%) rename {Libraries => Frameworks}/MAC/mac-src/README (100%) rename {Libraries => Frameworks}/MAC/mac-src/TODO (100%) rename {Libraries => Frameworks}/MAC/mac-src/aclocal.m4 (100%) rename {Libraries => Frameworks}/MAC/mac-src/config.guess (100%) rename {Libraries => Frameworks}/MAC/mac-src/config.sub (100%) rename {Libraries => Frameworks}/MAC/mac-src/configure (100%) rename {Libraries => Frameworks}/MAC/mac-src/configure.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/depcomp (100%) rename {Libraries => Frameworks}/MAC/mac-src/install-sh (100%) rename {Libraries => Frameworks}/MAC/mac-src/ltmain.sh (100%) rename {Libraries => Frameworks}/MAC/mac-src/missing (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Console/Console.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Console/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Console/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Credits.txt (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Analyze/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Analyze/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Analyze/Sample1/Sample1.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Examples/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/History.txt (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/License.htm (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APECompress.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APECompress.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APECompressCore.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APECompressCore.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APECompressCreate.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APECompressCreate.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APEDecompress.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APEDecompress.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APEHeader.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APEHeader.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APEInfo.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APEInfo.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APELink.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APELink.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APESimple.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APETag.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/APETag.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Assembly/Assembly.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Assembly/Assembly.nas (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Assembly/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Assembly/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Assembly/Tools.inc (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Assembly/common.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/BitArray.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/BitArray.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MACLib.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MACLib.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MACProgressHelper.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MACProgressHelper.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MD5.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MD5.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/MultichannelNNFilter.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/NNFilter.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/NNFilter.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/NewPredictor.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/NewPredictor.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/APEDecompressCore.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/APEDecompressCore.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/APEDecompressOld.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/APEDecompressOld.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/Anti-Predictor.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/Anti-Predictor.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/AntiPredictorExtraHigh.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/AntiPredictorFast.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/AntiPredictorHigh.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/AntiPredictorNormal.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/UnMAC.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Old/UnMAC.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Predictor.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Prepare.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/Prepare.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/ScaledFirstOrderFilter.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/StartFilter.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/UnBitArray.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/UnBitArray.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/UnBitArrayBase.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/UnBitArrayBase.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/WAVInputSource.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/MACLib/WAVInputSource.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Readme.htm (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/APEInfoDialog.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/APEInfoDialog.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/All.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/CharacterHelper.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/CharacterHelper.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/CircleBuffer.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/CircleBuffer.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/GlobalFunctions.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/GlobalFunctions.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/ID3Genres.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/IO.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/MACUtils.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/MACUtils.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/Makefile.am (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/Makefile.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/NoWindows.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/RollBuffer.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/SmartPtr.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/StdLibFileIO.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/StdLibFileIO.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/StdString.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/Unicows.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/WAVInfoDialog.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/WAVInfoDialog.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/WinFileIO.cpp (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/WinFileIO.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/config.h (100%) rename {Libraries => Frameworks}/MAC/mac-src/src/Shared/config.h.in (100%) rename {Libraries => Frameworks}/MAC/mac-src/strip_fPIC.sh (100%) rename {Libraries => Frameworks}/MAD/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/MAD/Files/CHANGES (100%) rename {Libraries => Frameworks}/MAD/Files/COPYING (100%) rename {Libraries => Frameworks}/MAD/Files/COPYRIGHT (100%) rename {Libraries => Frameworks}/MAD/Files/CREDITS (100%) rename {Libraries => Frameworks}/MAD/Files/D.dat (100%) rename {Libraries => Frameworks}/MAD/Files/INSTALL (100%) rename {Libraries => Frameworks}/MAD/Files/Makefile.am (100%) rename {Libraries => Frameworks}/MAD/Files/Makefile.in (100%) rename {Libraries => Frameworks}/MAD/Files/README (100%) rename {Libraries => Frameworks}/MAD/Files/TODO (100%) rename {Libraries => Frameworks}/MAD/Files/VERSION (100%) rename {Libraries => Frameworks}/MAD/Files/aclocal.m4 (100%) rename {Libraries => Frameworks}/MAD/Files/bit.c (100%) rename {Libraries => Frameworks}/MAD/Files/bit.h (100%) rename {Libraries => Frameworks}/MAD/Files/config.guess (100%) rename {Libraries => Frameworks}/MAD/Files/config.h (100%) rename {Libraries => Frameworks}/MAD/Files/config.h.in (100%) rename {Libraries => Frameworks}/MAD/Files/config.sub (100%) rename {Libraries => Frameworks}/MAD/Files/configure (100%) rename {Libraries => Frameworks}/MAD/Files/configure.ac (100%) rename {Libraries => Frameworks}/MAD/Files/decoder.c (100%) rename {Libraries => Frameworks}/MAD/Files/decoder.h (100%) rename {Libraries => Frameworks}/MAD/Files/depcomp (100%) rename {Libraries => Frameworks}/MAD/Files/fixed.c (100%) rename {Libraries => Frameworks}/MAD/Files/fixed.h (100%) rename {Libraries => Frameworks}/MAD/Files/frame.c (100%) rename {Libraries => Frameworks}/MAD/Files/frame.h (100%) rename {Libraries => Frameworks}/MAD/Files/global.h (100%) rename {Libraries => Frameworks}/MAD/Files/huffman.c (100%) rename {Libraries => Frameworks}/MAD/Files/huffman.h (100%) rename {Libraries => Frameworks}/MAD/Files/imdct_l_arm.S (100%) rename {Libraries => Frameworks}/MAD/Files/imdct_s.dat (100%) rename {Libraries => Frameworks}/MAD/Files/install-sh (100%) rename {Libraries => Frameworks}/MAD/Files/layer12.c (100%) rename {Libraries => Frameworks}/MAD/Files/layer12.h (100%) rename {Libraries => Frameworks}/MAD/Files/layer3.c (100%) rename {Libraries => Frameworks}/MAD/Files/layer3.h (100%) rename {Libraries => Frameworks}/MAD/Files/libmad.list.in (100%) rename {Libraries => Frameworks}/MAD/Files/ltmain.sh (100%) rename {Libraries => Frameworks}/MAD/Files/mad.h (100%) rename {Libraries => Frameworks}/MAD/Files/mad.h.sed (100%) rename {Libraries => Frameworks}/MAD/Files/minimad.c (100%) rename {Libraries => Frameworks}/MAD/Files/missing (100%) rename {Libraries => Frameworks}/MAD/Files/mkinstalldirs (100%) rename {Libraries => Frameworks}/MAD/Files/msvc++/Makefile.am (100%) rename {Libraries => Frameworks}/MAD/Files/msvc++/Makefile.in (100%) rename {Libraries => Frameworks}/MAD/Files/msvc++/config.h (100%) rename {Libraries => Frameworks}/MAD/Files/msvc++/libmad.dsp (100%) rename {Libraries => Frameworks}/MAD/Files/msvc++/mad.h (100%) rename {Libraries => Frameworks}/MAD/Files/qc_table.dat (100%) rename {Libraries => Frameworks}/MAD/Files/rq_table.dat (100%) rename {Libraries => Frameworks}/MAD/Files/sf_table.dat (100%) rename {Libraries => Frameworks}/MAD/Files/stream.c (100%) rename {Libraries => Frameworks}/MAD/Files/stream.h (100%) rename {Libraries => Frameworks}/MAD/Files/synth.c (100%) rename {Libraries => Frameworks}/MAD/Files/synth.h (100%) rename {Libraries => Frameworks}/MAD/Files/timer.c (100%) rename {Libraries => Frameworks}/MAD/Files/timer.h (100%) rename {Libraries => Frameworks}/MAD/Files/version.c (100%) rename {Libraries => Frameworks}/MAD/Files/version.h (100%) rename {Libraries => Frameworks}/MAD/Info.plist (100%) rename {Libraries => Frameworks}/MAD/MAD.xcodeproj/project.pbxproj (99%) rename {Libraries => Frameworks}/MPCDec/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/MPCDec/Files/AUTHORS (100%) rename {Libraries => Frameworks}/MPCDec/Files/COPYING (100%) rename {Libraries => Frameworks}/MPCDec/Files/ChangeLog (100%) rename {Libraries => Frameworks}/MPCDec/Files/INSTALL (100%) rename {Libraries => Frameworks}/MPCDec/Files/README (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/config.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mainpage.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/config_types.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/config_types.h.in (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/config_win32.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/decoder.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/huffman.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/internal.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/math.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/mpcdec.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/reader.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/requant.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/include/mpcdec/streaminfo.h (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/huffsv46.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/huffsv7.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/idtag.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/mpc_decoder.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/mpc_reader.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/requant.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/sample.cpp (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/streaminfo.c (100%) rename {Libraries => Frameworks}/MPCDec/Files/src/synth_filter.c (100%) rename {Libraries/Shorten => Frameworks/MPCDec}/Info.plist (100%) rename {Libraries => Frameworks}/MPCDec/MPCDec.xcodeproj/project.pbxproj (96%) rename {Libraries => Frameworks}/Ogg/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/Ogg/Info.plist (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/AUTHORS (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/CHANGES (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/COPYING (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/README (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/aclocal.m4 (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/compile (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/config.guess (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/config.h.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/config.sub (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/configure (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/configure.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/.cvsignore (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/changelog (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/control (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/copyright (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/libogg-dev.docs (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/libogg-dev.install (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/libogg0.README.Debian (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/libogg0.install (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/rules (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/debian/watch (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/depcomp (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/framing.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/index.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/bitpacking.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/datastructures.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/decoding.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/encoding.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/general.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/index.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_packet.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_packet_clear.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_bos.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_checksum_set.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_continued.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_eos.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_granulepos.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_packets.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_pageno.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_serialno.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_page_version.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_clear.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_destroy.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_eos.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_flush.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_init.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetin.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetout.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetpeek.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pagein.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pageout.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset_serialno.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_state.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_buffer.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_clear.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_destroy.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_init.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageout.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageseek.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_reset.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_state.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_wrote.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv1.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_bits.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_buffer.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_bytes.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_get_buffer.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_look.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_look1.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_read.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_read1.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_readinit.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_reset.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_write.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_writealign.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeclear.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_writecopy.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeinit.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/oggpack_writetrunc.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/overview.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/reference.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/style.css (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/vorbis_comment.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/libogg/vorbis_info.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/ogg-multiplex.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/oggstream.html (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/rfc3533.txt (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/rfc3534.txt (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/stream.png (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/vorbisword2.png (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/white-ogg.png (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/doc/white-xifish.png (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/ogg/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/ogg/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/ogg/config_types.h.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/ogg/ogg.h (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/include/ogg/os_types.h (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/install-sh (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/libogg.spec (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/libogg.spec.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/ltmain.sh (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macos/compat/strdup.c (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macos/compat/sys/types.h (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macos/libogg.mcp (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macos/libogg.mcp.exp (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macosx/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macosx/Info.plist (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.mode1 (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.pbxuser (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/project.pbxproj (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/macosx/Ogg_Prefix.pch (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/missing (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/ogg-uninstalled.pc.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/ogg.m4 (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/ogg.pc.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/src/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/src/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/src/bitwise.c (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/src/framing.c (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/Makefile.am (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/Makefile.in (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/build_ogg_dynamic.bat (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/build_ogg_dynamic_debug.bat (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/build_ogg_static.bat (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/build_ogg_static_debug.bat (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/ogg.def (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/ogg.dsw (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/ogg_dynamic.dsp (100%) rename {Libraries => Frameworks}/Ogg/libogg-1.1.3/win32/ogg_static.dsp (100%) rename {Libraries => Frameworks}/Ogg/libogg-src (100%) rename {Libraries => Frameworks}/Ogg/ogg.xcodeproj/me.mode1 (100%) rename {Libraries => Frameworks}/Ogg/ogg.xcodeproj/me.pbxuser (100%) rename {Libraries => Frameworks}/Ogg/ogg.xcodeproj/project.pbxproj (95%) rename {Libraries => Frameworks}/Ogg/ogg_Prefix.pch (100%) rename {Libraries => Frameworks}/SOURCES (100%) rename {Libraries => Frameworks}/Shorten/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/Shorten/Files/AUTHORS (100%) rename {Libraries => Frameworks}/Shorten/Files/COPYING (100%) rename {Libraries => Frameworks}/Shorten/Files/ChangeLog (100%) rename {Libraries => Frameworks}/Shorten/Files/Makefile.am (100%) rename {Libraries => Frameworks}/Shorten/Files/NEWS (100%) rename {Libraries => Frameworks}/Shorten/Files/README (100%) rename {Libraries => Frameworks}/Shorten/Files/TODO (100%) rename {Libraries => Frameworks}/Shorten/Files/configure.ac (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/Makefile.am (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/doc/LICENSE.shorten (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/doc/xmms-shn/AUTHORS (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/doc/xmms-shn/CREDITS (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/doc/xmms-shn/NEWS (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/doc/xmms-shn/README (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/bitshift.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/config.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/config.h.in (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/decode.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/ringbuffer.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/shn.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/shn_reader.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/include/shorten.h (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/Makefile.am (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/array.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/array.cpp (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/convert.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/decode.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/fixio.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/fixio.cpp (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/id3v2.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/misc.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/output.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/ringbuffer.cpp (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/seek.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/seek.cpp (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/shn_reader.cpp (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/shorten.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/sulawalaw.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/vario.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/vario.cpp (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/src/wave.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/util/Makefile.am (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/util/Sulawalaw.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/util/array.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/util/exit.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/util/mkbshift.c (100%) rename {Libraries => Frameworks}/Shorten/Files/shorten/util/mkbshift.h (100%) rename {Libraries => Frameworks}/Shorten/Files/src/Makefile.am (100%) rename {Libraries => Frameworks}/Shorten/Files/src/libinputshorten.c (100%) rename {Libraries/SndFile => Frameworks/Shorten}/Info.plist (100%) rename {Libraries => Frameworks}/Shorten/Shorten.xcodeproj/project.pbxproj (95%) rename {Libraries/SndFile => Frameworks/TagLib}/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/TagLib/Files/AUTHORS (100%) rename {Libraries => Frameworks}/TagLib/Files/COPYING (100%) rename {Libraries => Frameworks}/TagLib/Files/ChangeLog (100%) rename {Libraries => Frameworks}/TagLib/Files/INSTALL (100%) rename {Libraries => Frameworks}/TagLib/Files/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/Makefile.cvs (100%) rename {Libraries => Frameworks}/TagLib/Files/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/README (100%) rename {Libraries => Frameworks}/TagLib/Files/TODO (100%) rename {Libraries => Frameworks}/TagLib/Files/bindings/c/tag_c.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/bindings/c/tag_c.h (100%) rename {Libraries => Frameworks}/TagLib/Files/config.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/ape-tag-format.txt (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/apefooter.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/apefooter.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/apeitem.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/apeitem.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/apetag.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ape/apetag.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/audioproperties.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/audioproperties.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/configure.in.bot (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/configure.in.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/fileref.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/fileref.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/flacfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/flacfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/flacproperties.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/flacproperties.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/flac/flactag.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/combinedtag.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/mpcfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/mpcfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/mpcproperties.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpc/mpcproperties.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v1/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v1/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-frames.txt (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-structure.txt (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2header.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2header.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/mpegfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/mpegfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/mpegheader.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/mpegheader.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/mpegproperties.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/mpegproperties.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/xingheader.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/mpeg/xingheader.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/flac/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/flac/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/flac/oggflacfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/flac/oggflacfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/oggfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/oggfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/oggpage.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/oggpage.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/oggpageheader.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/oggpageheader.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/vorbis/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/vorbis/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/vorbis/vorbisfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/vorbis/vorbisfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/xiphcomment.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/ogg/xiphcomment.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/tag.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/tag.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/taglib-config.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/Makefile.am (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/Makefile.in (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/taglib.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tbytevector.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tbytevector.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tbytevectorlist.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tbytevectorlist.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tdebug.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tdebug.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tfile.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tfile.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tlist.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tlist.tcc (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tmap.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tmap.tcc (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tstring.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tstring.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tstringlist.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/tstringlist.h (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/unicode.cpp (100%) rename {Libraries => Frameworks}/TagLib/Files/taglib/toolkit/unicode.h (100%) rename {Libraries => Frameworks}/TagLib/Info.plist (100%) rename {Libraries => Frameworks}/TagLib/TagLib.xcodeproj/project.pbxproj (99%) rename {Libraries => Frameworks}/Vorbis/.cvsignore (100%) rename {Libraries/TagLib => Frameworks/Vorbis}/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/Vorbis/Files/AUTHORS (100%) rename {Libraries => Frameworks}/Vorbis/Files/CHANGES (100%) rename {Libraries => Frameworks}/Vorbis/Files/COPYING (100%) rename {Libraries => Frameworks}/Vorbis/Files/README (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/vorbis/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/vorbis/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/vorbis/codec.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/vorbis/vorbisenc.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/include/vorbis/vorbisfile.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/analysis.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/backends.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/barkmel.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/bitrate.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/bitrate.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/block.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/coupled/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/coupled/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/coupled/res_books_stereo.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/floor/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/floor/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/floor/floor_books.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/uncoupled/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/uncoupled/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/books/uncoupled/res_books_uncoupled.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/codebook.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/codebook.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/codec_internal.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/envelope.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/envelope.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/floor0.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/floor1.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/highlevel.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/info.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lookup.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lookup.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lookup_data.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lookups.pl (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lpc.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lpc.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lsp.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/lsp.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/mapping0.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/masking.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/mdct.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/mdct.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/misc.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/misc.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/.cvsignore (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/Makefile.am (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/floor_all.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/psych_11.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/psych_16.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/psych_44.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/psych_8.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/residue_16.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/residue_44.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/residue_44u.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/residue_8.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_11.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_16.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_22.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_32.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_44.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_44u.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_8.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/modes/setup_X.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/os.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/psy.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/psy.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/psytune.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/registry.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/registry.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/res0.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/scales.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/sharedbook.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/smallft.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/smallft.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/synthesis.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/tone.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/vorbisenc.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/vorbisfile.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/window.c (100%) rename {Libraries => Frameworks}/Vorbis/Files/lib/window.h (100%) rename {Libraries => Frameworks}/Vorbis/Files/todo.txt (100%) rename {Libraries => Frameworks}/Vorbis/Info.plist (100%) rename {Libraries => Frameworks}/Vorbis/Vorbis.xcodeproj/project.pbxproj (95%) rename {Libraries/Vorbis => Frameworks/WavPack}/English.lproj/InfoPlist.strings (100%) rename {Libraries => Frameworks}/WavPack/Files/AUTHORS (100%) rename {Libraries => Frameworks}/WavPack/Files/ChangeLog (100%) rename {Libraries => Frameworks}/WavPack/Files/Makefile.am (100%) rename {Libraries => Frameworks}/WavPack/Files/NEWS (100%) rename {Libraries => Frameworks}/WavPack/Files/README (100%) rename {Libraries => Frameworks}/WavPack/Files/autogen.sh (100%) rename {Libraries => Frameworks}/WavPack/Files/bits.c (100%) rename {Libraries => Frameworks}/WavPack/Files/compile (100%) rename {Libraries => Frameworks}/WavPack/Files/configure.ac (100%) rename {Libraries => Frameworks}/WavPack/Files/depcomp (100%) rename {Libraries => Frameworks}/WavPack/Files/extra1.c (100%) rename {Libraries => Frameworks}/WavPack/Files/extra2.c (100%) rename {Libraries => Frameworks}/WavPack/Files/float.c (100%) rename {Libraries => Frameworks}/WavPack/Files/format.txt (100%) rename {Libraries => Frameworks}/WavPack/Files/install-sh (100%) rename {Libraries => Frameworks}/WavPack/Files/license.txt (100%) rename {Libraries => Frameworks}/WavPack/Files/md5.c (100%) rename {Libraries => Frameworks}/WavPack/Files/md5.h (100%) rename {Libraries => Frameworks}/WavPack/Files/metadata.c (100%) rename {Libraries => Frameworks}/WavPack/Files/missing (100%) rename {Libraries => Frameworks}/WavPack/Files/pack.c (100%) rename {Libraries => Frameworks}/WavPack/Files/unpack.c (100%) rename {Libraries => Frameworks}/WavPack/Files/unpack3.c (100%) rename {Libraries => Frameworks}/WavPack/Files/unpack3.h (100%) rename {Libraries => Frameworks}/WavPack/Files/utils.c (100%) rename {Libraries => Frameworks}/WavPack/Files/wavpack.c (100%) rename {Libraries => Frameworks}/WavPack/Files/wavpack.h (100%) rename {Libraries => Frameworks}/WavPack/Files/wavpack.pc.in (100%) rename {Libraries => Frameworks}/WavPack/Files/words.c (100%) rename {Libraries => Frameworks}/WavPack/Files/wputils.c (100%) rename {Libraries => Frameworks}/WavPack/Files/wputils.h (100%) rename {Libraries => Frameworks}/WavPack/Files/wvunpack.c (100%) rename {Libraries => Frameworks}/WavPack/Info.plist (100%) rename {Libraries => Frameworks}/WavPack/WavPack.xcodeproj/project.pbxproj (96%) rename {Cog Help => Help}/Cog Help.helpindex (100%) rename {Cog Help => Help}/images/add_gray.png (100%) rename {Cog Help => Help}/images/info_gray.png (100%) rename {Cog Help => Help}/images/logo.png (100%) rename {Cog Help => Help}/images/remove_gray.png (100%) rename {Cog Help => Help}/images/repeat_off.png (100%) rename {Cog Help => Help}/images/repeat_on.png (100%) rename {Cog Help => Help}/images/shuffle_off.png (100%) rename {Cog Help => Help}/images/shuffle_on.png (100%) rename {Cog Help => Help}/images/wheel.png (100%) rename {Cog Help => Help}/index.html (100%) delete mode 100644 Icons/files_off.png delete mode 100644 Icons/files_on.png delete mode 100644 Icons/info_off.png delete mode 100644 Icons/info_on.png delete mode 100644 Icons/repeat_off.png delete mode 100644 Icons/repeat_on.png delete mode 100644 Icons/shuffle_off.png delete mode 100644 Icons/shuffle_on.png rename {Icons => Images}/add_blue.png (100%) rename {Icons => Images}/add_gray.png (100%) create mode 100644 Images/file_blue.png create mode 100644 Images/file_gray.png create mode 100644 Images/info_blue.png create mode 100644 Images/info_gray.png rename {Icons => Images}/next_blue.png (100%) rename {Icons => Images}/next_gray.png (100%) rename {Icons => Images}/pause_blue.png (100%) rename {Icons => Images}/pause_gray.png (100%) rename {Icons => Images}/play_blue.png (100%) rename {Icons => Images}/play_gray.png (100%) rename {Icons => Images}/prev_blue.png (100%) rename {Icons => Images}/prev_gray.png (100%) rename {Icons => Images}/remove_blue.png (100%) rename {Icons => Images}/remove_gray.png (100%) create mode 100644 Images/repeat_off.png create mode 100644 Images/repeat_on.png create mode 100644 Images/shuffle_off.png create mode 100644 Images/shuffle_on.png rename {Icons => Images}/volume_high.png (100%) rename {Icons => Images}/volume_low.png (100%) delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/categories.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/cdecls.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/decls.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/files.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/imports.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/pbxindex.header delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/protocols.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/refs.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/strings.pbxstrings/control delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/strings.pbxstrings/strings delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/subclasses.pbxbtree delete mode 100644 Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/symbols0.pbxsymbols delete mode 100644 Libraries/SndFile/Files/AUTHORS delete mode 100644 Libraries/SndFile/Files/COPYING delete mode 100644 Libraries/SndFile/Files/ChangeLog delete mode 100644 Libraries/SndFile/Files/INSTALL delete mode 100644 Libraries/SndFile/Files/NEWS delete mode 100644 Libraries/SndFile/Files/README delete mode 100644 Libraries/SndFile/Files/TODO delete mode 100644 Libraries/SndFile/Files/src/G72x/ChangeLog delete mode 100644 Libraries/SndFile/Files/src/G72x/Makefile delete mode 100644 Libraries/SndFile/Files/src/G72x/Makefile.am delete mode 100644 Libraries/SndFile/Files/src/G72x/Makefile.in delete mode 100644 Libraries/SndFile/Files/src/G72x/README delete mode 100644 Libraries/SndFile/Files/src/G72x/README.original delete mode 100644 Libraries/SndFile/Files/src/G72x/g721.c delete mode 100644 Libraries/SndFile/Files/src/G72x/g723_16.c delete mode 100644 Libraries/SndFile/Files/src/G72x/g723_24.c delete mode 100644 Libraries/SndFile/Files/src/G72x/g723_40.c delete mode 100644 Libraries/SndFile/Files/src/G72x/g72x.c delete mode 100644 Libraries/SndFile/Files/src/G72x/g72x.h delete mode 100644 Libraries/SndFile/Files/src/G72x/g72x_priv.h delete mode 100644 Libraries/SndFile/Files/src/G72x/g72x_test.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/COPYRIGHT delete mode 100644 Libraries/SndFile/Files/src/GSM610/ChangeLog delete mode 100644 Libraries/SndFile/Files/src/GSM610/Makefile delete mode 100644 Libraries/SndFile/Files/src/GSM610/Makefile.am delete mode 100644 Libraries/SndFile/Files/src/GSM610/Makefile.in delete mode 100644 Libraries/SndFile/Files/src/GSM610/README delete mode 100644 Libraries/SndFile/Files/src/GSM610/add.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/code.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/config.h delete mode 100644 Libraries/SndFile/Files/src/GSM610/decode.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm.h delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm610_priv.h delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm_create.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm_decode.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm_destroy.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm_encode.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/gsm_option.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/long_term.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/lpc.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/preprocess.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/rpe.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/short_term.c delete mode 100644 Libraries/SndFile/Files/src/GSM610/table.c delete mode 100644 Libraries/SndFile/Files/src/Makefile delete mode 100644 Libraries/SndFile/Files/src/Makefile.am delete mode 100644 Libraries/SndFile/Files/src/Makefile.in delete mode 100644 Libraries/SndFile/Files/src/Symbols.darwin delete mode 100644 Libraries/SndFile/Files/src/Symbols.linux delete mode 100644 Libraries/SndFile/Files/src/aiff.c delete mode 100644 Libraries/SndFile/Files/src/alaw.c delete mode 100644 Libraries/SndFile/Files/src/au.c delete mode 100644 Libraries/SndFile/Files/src/avr.c delete mode 100644 Libraries/SndFile/Files/src/caf.c delete mode 100644 Libraries/SndFile/Files/src/command.c delete mode 100644 Libraries/SndFile/Files/src/common.c delete mode 100644 Libraries/SndFile/Files/src/common.h delete mode 100644 Libraries/SndFile/Files/src/config.h delete mode 100644 Libraries/SndFile/Files/src/config.h.in delete mode 100755 Libraries/SndFile/Files/src/create_symbols_file.py delete mode 100644 Libraries/SndFile/Files/src/cygsndfile.def delete mode 100644 Libraries/SndFile/Files/src/dither.c delete mode 100644 Libraries/SndFile/Files/src/double64.c delete mode 100644 Libraries/SndFile/Files/src/dwd.c delete mode 100644 Libraries/SndFile/Files/src/dwvw.c delete mode 100644 Libraries/SndFile/Files/src/file_io.c delete mode 100644 Libraries/SndFile/Files/src/flac.c delete mode 100644 Libraries/SndFile/Files/src/float32.c delete mode 100644 Libraries/SndFile/Files/src/float_cast.h delete mode 100644 Libraries/SndFile/Files/src/g72x.c delete mode 100644 Libraries/SndFile/Files/src/gsm610.c delete mode 100644 Libraries/SndFile/Files/src/htk.c delete mode 100644 Libraries/SndFile/Files/src/ima_adpcm.c delete mode 100644 Libraries/SndFile/Files/src/interleave.c delete mode 100644 Libraries/SndFile/Files/src/ircam.c delete mode 100644 Libraries/SndFile/Files/src/libsndfile.def delete mode 100644 Libraries/SndFile/Files/src/macbinary3.c delete mode 100644 Libraries/SndFile/Files/src/macos.c delete mode 100644 Libraries/SndFile/Files/src/mat4.c delete mode 100644 Libraries/SndFile/Files/src/mat5.c delete mode 100644 Libraries/SndFile/Files/src/ms_adpcm.c delete mode 100644 Libraries/SndFile/Files/src/nist.c delete mode 100644 Libraries/SndFile/Files/src/ogg.c delete mode 100644 Libraries/SndFile/Files/src/paf.c delete mode 100644 Libraries/SndFile/Files/src/pcm.c delete mode 100644 Libraries/SndFile/Files/src/pvf.c delete mode 100644 Libraries/SndFile/Files/src/raw.c delete mode 100644 Libraries/SndFile/Files/src/rx2.c delete mode 100644 Libraries/SndFile/Files/src/sd2.c delete mode 100644 Libraries/SndFile/Files/src/sds.c delete mode 100644 Libraries/SndFile/Files/src/sf_unistd.h delete mode 100644 Libraries/SndFile/Files/src/sfconfig.h delete mode 100644 Libraries/SndFile/Files/src/sfendian.h delete mode 100644 Libraries/SndFile/Files/src/sndfile.c delete mode 100644 Libraries/SndFile/Files/src/sndfile.h delete mode 100644 Libraries/SndFile/Files/src/sndfile.h.in delete mode 100644 Libraries/SndFile/Files/src/stamp-h1 delete mode 100644 Libraries/SndFile/Files/src/strings.c delete mode 100644 Libraries/SndFile/Files/src/svx.c delete mode 100644 Libraries/SndFile/Files/src/test_endswap.c delete mode 100644 Libraries/SndFile/Files/src/test_endswap.def delete mode 100644 Libraries/SndFile/Files/src/test_endswap.tpl delete mode 100644 Libraries/SndFile/Files/src/test_file_io.c delete mode 100644 Libraries/SndFile/Files/src/test_log_printf.c delete mode 100644 Libraries/SndFile/Files/src/txw.c delete mode 100644 Libraries/SndFile/Files/src/ulaw.c delete mode 100644 Libraries/SndFile/Files/src/voc.c delete mode 100644 Libraries/SndFile/Files/src/vox_adpcm.c delete mode 100644 Libraries/SndFile/Files/src/w64.c delete mode 100644 Libraries/SndFile/Files/src/wav.c delete mode 100644 Libraries/SndFile/Files/src/wav_w64.c delete mode 100644 Libraries/SndFile/Files/src/wav_w64.h delete mode 100644 Libraries/SndFile/Files/src/wve.c delete mode 100644 Libraries/SndFile/Files/src/xi.c delete mode 100644 Libraries/SndFile/SndFile.xcodeproj/project.pbxproj delete mode 100644 Libraries/WavPack/English.lproj/InfoPlist.strings delete mode 100644 Old/Sound.h delete mode 100644 Old/Sound.m delete mode 100644 Old/SoundController.h delete mode 100644 Old/SoundController.m create mode 100644 Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj create mode 100644 Plugins/CoreAudio/CoreAudioCodec.h create mode 100644 Plugins/CoreAudio/CoreAudioCodec.m create mode 100644 Plugins/CoreAudio/CoreAudioDecoder.h create mode 100644 Plugins/CoreAudio/CoreAudioDecoder.m create mode 100644 Plugins/CoreAudio/CoreAudioPropertiesReader.h create mode 100644 Plugins/CoreAudio/CoreAudioPropertiesReader.m create mode 100644 Plugins/CoreAudio/CoreAudio_Prefix.pch create mode 100644 Plugins/CoreAudio/Info.plist create mode 100644 Plugins/Flac/Flac.xcodeproj/project.pbxproj create mode 100644 Plugins/Flac/FlacCodec.h create mode 100644 Plugins/Flac/FlacCodec.m create mode 100644 Plugins/Flac/FlacDecoder.h create mode 100644 Plugins/Flac/FlacDecoder.m create mode 100644 Plugins/Flac/FlacPropertiesReader.h create mode 100644 Plugins/Flac/FlacPropertiesReader.m create mode 100644 Plugins/Flac/Flac_Prefix.pch create mode 100644 Plugins/Flac/Info.plist create mode 100644 Plugins/MAD/Info.plist create mode 100644 Plugins/MAD/MAD.xcodeproj/project.pbxproj create mode 100644 Plugins/MAD/MADCodec.h create mode 100644 Plugins/MAD/MADCodec.m create mode 100644 Plugins/MAD/MADDecoder.h create mode 100644 Plugins/MAD/MADDecoder.m create mode 100644 Plugins/MAD/MADPropertiesReader.h create mode 100644 Plugins/MAD/MADPropertiesReader.m create mode 100644 Plugins/MAD/MAD_Prefix.pch create mode 100644 Plugins/MonkeysAudio/Info.plist create mode 100644 Plugins/MonkeysAudio/MonkeysAudio.xcodeproj/project.pbxproj create mode 100644 Plugins/MonkeysAudio/MonkeysAudioCodec.h create mode 100644 Plugins/MonkeysAudio/MonkeysAudioCodec.mm create mode 100644 Plugins/MonkeysAudio/MonkeysAudioDecoder.h create mode 100644 Plugins/MonkeysAudio/MonkeysAudioDecoder.mm create mode 100644 Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.h create mode 100644 Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm create mode 100644 Plugins/MonkeysAudio/MonkeysAudio_Prefix.pch create mode 100644 Plugins/Musepack/Info.plist create mode 100644 Plugins/Musepack/Musepack.xcodeproj/project.pbxproj create mode 100644 Plugins/Musepack/MusepackCodec.h create mode 100644 Plugins/Musepack/MusepackCodec.m create mode 100644 Plugins/Musepack/MusepackDecoder.h create mode 100644 Plugins/Musepack/MusepackDecoder.m create mode 100644 Plugins/Musepack/MusepackPropertiesReader.h create mode 100644 Plugins/Musepack/MusepackPropertiesReader.m create mode 100644 Plugins/Musepack/Musepack_Prefix.pch create mode 100644 Plugins/Shorten/Info.plist create mode 100644 Plugins/Shorten/Shorten.xcodeproj/project.pbxproj create mode 100644 Plugins/Shorten/ShortenCodec.h create mode 100644 Plugins/Shorten/ShortenCodec.mm create mode 100644 Plugins/Shorten/ShortenDecoder.h create mode 100644 Plugins/Shorten/ShortenDecoder.mm create mode 100644 Plugins/Shorten/ShortenPropertiesReader.h create mode 100644 Plugins/Shorten/ShortenPropertiesReader.mm create mode 100644 Plugins/Shorten/Shorten_Prefix.pch create mode 100644 Plugins/TagLib/Info.plist create mode 100644 Plugins/TagLib/TagLib.xcodeproj/project.pbxproj create mode 100644 Plugins/TagLib/TagLibMetadataReader.h create mode 100644 Plugins/TagLib/TagLibMetadataReader.m create mode 100644 Plugins/TagLib/TagLibPlugin.h create mode 100644 Plugins/TagLib/TagLibPlugin.m create mode 100644 Plugins/TagLib/TagLib_Prefix.pch create mode 100644 Plugins/Vorbis/Info.plist create mode 100644 Plugins/Vorbis/Vorbis.xcodeproj/project.pbxproj create mode 100644 Plugins/Vorbis/VorbisCodec.h create mode 100644 Plugins/Vorbis/VorbisCodec.m create mode 100644 Plugins/Vorbis/VorbisDecoder.h create mode 100644 Plugins/Vorbis/VorbisDecoder.m create mode 100644 Plugins/Vorbis/VorbisPropertiesReader.h create mode 100644 Plugins/Vorbis/VorbisPropertiesReader.m create mode 100644 Plugins/Vorbis/Vorbis_Prefix.pch create mode 100644 Plugins/WavPack/Info.plist create mode 100644 Plugins/WavPack/WavPack.xcodeproj/project.pbxproj create mode 100644 Plugins/WavPack/WavPackCodec.h create mode 100644 Plugins/WavPack/WavPackCodec.m create mode 100644 Plugins/WavPack/WavPackDecoder.h create mode 100644 Plugins/WavPack/WavPackDecoder.m create mode 100644 Plugins/WavPack/WavPackPropertiesReader.h create mode 100644 Plugins/WavPack/WavPackPropertiesReader.m create mode 100644 Plugins/WavPack/WavPack_Prefix.pch create mode 100755 Scripts/build_dependencies.sh rename Libraries/build_libs.sh => Scripts/build_frameworks.sh (84%) create mode 100755 Scripts/build_plugins.sh rename Preferences/build_prefs.sh => Scripts/build_preferences.sh (77%) rename load_localization.sh => Scripts/load_localization.sh (100%) rename update_strings.sh => Scripts/update_strings.sh (100%) delete mode 100644 Sound/SOUNDTODO delete mode 100644 Sound/SoundController.h delete mode 100644 Sound/SoundController.m delete mode 100644 Sound/SoundFile/AACFile.h delete mode 100644 Sound/SoundFile/AACFile.m delete mode 100644 Sound/SoundFile/MPEGFile.h delete mode 100644 Sound/SoundFile/MPEGFile.mm delete mode 100644 Sound/SoundFile/WaveFile.h delete mode 100644 Sound/SoundFile/WaveFile.m delete mode 100644 TODO rename {Custom => ThirdParty/AMRemovableColumnsTableView}/AMRemovableColumnsTableView.h (100%) rename {Custom => ThirdParty/AMRemovableColumnsTableView}/AMRemovableColumnsTableView.m (100%) rename {Custom => ThirdParty/AMRemovableColumnsTableView}/AMRemovableTableColumn.h (100%) rename {Custom => ThirdParty/AMRemovableColumnsTableView}/AMRemovableTableColumn.m (100%) create mode 100644 ThirdParty/AppleRemote/AppleRemote.h create mode 100644 ThirdParty/AppleRemote/AppleRemote.m create mode 100644 ThirdParty/CoreAudioUtils/CoreAudioUtils.h create mode 100644 ThirdParty/CoreAudioUtils/CoreAudioUtils.m create mode 120000 ThirdParty/Frameworks/Sparkle.framework/Headers create mode 120000 ThirdParty/Frameworks/Sparkle.framework/Resources create mode 120000 ThirdParty/Frameworks/Sparkle.framework/Sparkle create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h create mode 100755 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h create mode 100755 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUtilities.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/info.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings create mode 100755 ThirdParty/Frameworks/Sparkle.framework/Versions/A/Sparkle create mode 120000 ThirdParty/Frameworks/Sparkle.framework/Versions/Current rename {FileDrawer => ThirdParty/ImageTextCell}/ImageTextCell.h (100%) rename {FileDrawer => ThirdParty/ImageTextCell}/ImageTextCell.m (100%) rename {Custom => ThirdParty/KFTypeSelectTableView}/KFTypeSelectTableView.h (100%) rename {Custom => ThirdParty/KFTypeSelectTableView}/KFTypeSelectTableView.m (100%) rename {Custom => ThirdParty/NDHotKeys}/NDHotKeyControl.h (100%) rename {Custom => ThirdParty/NDHotKeys}/NDHotKeyControl.m (100%) rename {Custom => ThirdParty/NDHotKeys}/NDHotKeyEvent.h (100%) rename {Custom => ThirdParty/NDHotKeys}/NDHotKeyEvent.m (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKFNSubscribeFileWatcher.h (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKFNSubscribeFileWatcher.m (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKFileWatcher.h (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKFileWatcher.m (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKKQueue Readme.txt (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKKQueue.h (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKKQueue.m (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKMainThreadProxy.h (100%) rename {FileDrawer => ThirdParty}/UKKQueue/UKMainThreadProxy.m (100%) rename {Custom => Utils}/ClickField.h (100%) rename {Custom => Utils}/ClickField.m (100%) rename {Custom => Utils}/DragScrollView.h (100%) rename {Custom => Utils}/DragScrollView.m (100%) rename {Custom => Utils}/TrackingCell.h (100%) rename {Custom => Utils}/TrackingCell.m (100%) rename {Custom => Utils}/TrackingSlider.h (100%) rename {Custom => Utils}/TrackingSlider.m (100%) delete mode 100755 build_dependencies.sh delete mode 100644 xchat/cog.py delete mode 100644 xchat/cog.script delete mode 100644 xchat/cog_test.py diff --git a/AppController.h b/Application/AppController.h similarity index 100% rename from AppController.h rename to Application/AppController.h diff --git a/AppController.m b/Application/AppController.m similarity index 100% rename from AppController.m rename to Application/AppController.m diff --git a/PlaybackController.h b/Application/PlaybackController.h similarity index 78% rename from PlaybackController.h rename to Application/PlaybackController.h index ada95f374..00d5aa3df 100644 --- a/PlaybackController.h +++ b/Application/PlaybackController.h @@ -1,8 +1,8 @@ -/* SoundController */ +/* PlaybackController */ #import -#import "SoundController.h" +#import "CogAudio/AudioPlayer.h" #import "PlaylistController.h" #import "TrackingSlider.h" @@ -26,7 +26,7 @@ NSTimer *positionTimer; BOOL waitingForPlay; //No sneaky changing on us - SoundController *soundController; + AudioPlayer *audioPlayer; int playbackStatus; @@ -59,11 +59,4 @@ - (void)playEntryAtIndex:(int)i; - (void)playEntry:(PlaylistEntry *)pe; - -//Methods since this is SoundController's delegate -- (void)delegateNotifyStatusUpdate:(NSNumber *)status; -- (void)delegateNotifyBitrateUpdate:(float)bitrate; -- (void)delegateNotifySongChanged; -- (void)delegateRequestNextSong:(PlaylistEntry *)pe; - @end diff --git a/PlaybackController.m b/Application/PlaybackController.m similarity index 86% rename from PlaybackController.m rename to Application/PlaybackController.m index 10f0636c8..cd4e48aa1 100644 --- a/PlaybackController.m +++ b/Application/PlaybackController.m @@ -2,7 +2,7 @@ #import "PlaylistView.h" #import "DBLog.h" -#import "Status.h" +#import "CogAudio/Status.h" @implementation PlaybackController @@ -11,7 +11,8 @@ self = [super init]; if (self) { - soundController = [[SoundController alloc] initWithDelegate:self]; + audioPlayer = [[AudioPlayer alloc] init]; + [audioPlayer setDelegate:self]; playbackStatus = kCogStatusStopped; showTimeRemaining = NO; @@ -48,20 +49,20 @@ - (IBAction)pause:(id)sender { // DBLog(@"Pause Sent!"); - [soundController pause]; + [audioPlayer pause]; } - (IBAction)resume:(id)sender { // DBLog(@"Resume Sent!"); - [soundController resume]; + [audioPlayer resume]; } - (IBAction)stop:(id)sender { // DBLog(@"Stop Sent!"); - [soundController stop]; + [audioPlayer stop]; } //called by double-clicking on table @@ -92,8 +93,8 @@ [self updateTimeField:0.0f]; - [soundController play:pe]; - [soundController setVolume:currentVolume]; + [audioPlayer play:[NSURL fileURLWithPath:[pe filename]] withUserInfo:pe]; + [audioPlayer setVolume:currentVolume]; } - (IBAction)next:(id)sender @@ -130,7 +131,7 @@ time = [positionSlider doubleValue]; if ([sender tracking] == NO) // check if user stopped sliding before playing audio - [soundController seekToTime:time]; + [audioPlayer seekToTime:time]; [self updateTimeField:time]; } @@ -173,7 +174,7 @@ currentVolume = percent * [sender maxValue]; - [soundController setVolume:currentVolume]; + [audioPlayer setVolume:currentVolume]; } - (IBAction)volumeDown:(id)sender @@ -187,7 +188,7 @@ currentVolume = percent * [volumeSlider maxValue]; - [soundController setVolume:currentVolume]; + [audioPlayer setVolume:currentVolume]; } - (IBAction)volumeUp:(id)sender @@ -201,7 +202,7 @@ currentVolume = percent * [volumeSlider maxValue]; - [soundController setVolume:currentVolume]; + [audioPlayer setVolume:currentVolume]; } @@ -230,8 +231,9 @@ [self updateTimeField:[positionSlider doubleValue]]; } -- (void)delegateRequestNextEntry:(PlaylistEntry *)curEntry +- (void)audioPlayer:(AudioPlayer *)player requestNextStream:(id)userInfo { + PlaylistEntry *curEntry = (PlaylistEntry *)userInfo; PlaylistEntry *pe; if ([playlistController shuffle] == YES) @@ -244,16 +246,18 @@ } if (pe == nil) - [soundController setNextEntry:nil]; + [player setNextStream:nil]; else { DBLog(@"NEXT SONG: %@", [pe filename]); - [soundController setNextEntry:pe]; + [player setNextStream:[NSURL fileURLWithPath:[pe filename]] withUserInfo:pe]; } } -- (void)delegateNotifySongChanged:(PlaylistEntry *)pe +- (void)audioPlayer:(AudioPlayer *)player streamChanged:(id)userInfo { + PlaylistEntry *pe = (PlaylistEntry *)userInfo; + [playlistController setCurrentEntry:pe]; [positionSlider setDoubleValue:0.0f]; @@ -262,14 +266,9 @@ } -- (void)delegateNotifyBitrateUpdate:(float)bitrate -{ - // [bitrateField setIntValue:bitrate]; -} - - (void)updatePosition:(id)sender { - double pos = [soundController amountPlayed]; + double pos = [audioPlayer amountPlayed]; if ([positionSlider tracking] == NO) { @@ -280,7 +279,8 @@ } -- (void)delegateNotifyStatusUpdate:(NSNumber *)s + +- (void)audioPlayer:(AudioPlayer *)player statusChanged:(id)s { int status = [s intValue]; if (status == kCogStatusStopped || status == kCogStatusPaused) diff --git a/Audio/AudioDecoder.h b/Audio/AudioDecoder.h new file mode 100644 index 000000000..db6c65595 --- /dev/null +++ b/Audio/AudioDecoder.h @@ -0,0 +1,18 @@ +// +// AudioDecoder.h +// CogAudio +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "PluginController.h" + +@interface AudioDecoder : NSObject { +} + ++ audioDecoderForURL:(NSURL *)url; + +@end diff --git a/Audio/AudioDecoder.m b/Audio/AudioDecoder.m new file mode 100644 index 000000000..7b653b67f --- /dev/null +++ b/Audio/AudioDecoder.m @@ -0,0 +1,25 @@ +// +// AudioDecoder.m +// CogAudio +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "AudioDecoder.h" + + +@implementation AudioDecoder + ++ audioDecoderForURL:(NSURL *)url +{ + NSString *ext = [[url path] pathExtension]; + + NSDictionary *decoders = [[PluginController sharedPluginController] decoders]; + + Class decoder = NSClassFromString([decoders objectForKey:ext]); + + return [[[decoder alloc] init] autorelease]; +} + +@end diff --git a/Audio/AudioMetadataReader.h b/Audio/AudioMetadataReader.h new file mode 100644 index 000000000..20784f3c9 --- /dev/null +++ b/Audio/AudioMetadataReader.h @@ -0,0 +1,18 @@ +// +// AudioMetadataReader.h +// CogAudio +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface AudioMetadataReader : NSObject { + +} + ++ (NSDictionary *)metadataForURL:(NSURL *)url; + +@end diff --git a/Audio/AudioMetadataReader.m b/Audio/AudioMetadataReader.m new file mode 100644 index 000000000..993bd15a0 --- /dev/null +++ b/Audio/AudioMetadataReader.m @@ -0,0 +1,26 @@ +// +// AudioMetadataReader.m +// CogAudio +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "AudioMetadataReader.h" +#import "PluginController.h" + +@implementation AudioMetadataReader + ++ (NSDictionary *)metadataForURL:(NSURL *)url +{ + NSString *ext = [[url path] pathExtension]; + + NSDictionary *metadataReaders = [[PluginController sharedPluginController] metadataReaders]; + + Class metadataReader = NSClassFromString([metadataReaders objectForKey:ext]); + + return [[[[metadataReader alloc] init] autorelease] metadataForURL:url]; + +} + +@end diff --git a/Audio/AudioPlayer.h b/Audio/AudioPlayer.h new file mode 100644 index 000000000..6dfe7b1c8 --- /dev/null +++ b/Audio/AudioPlayer.h @@ -0,0 +1,76 @@ +// +// AudioController.h +// Cog +// +// Created by Vincent Spader on 8/7/05. +// Copyright 2005 Vincent Spader. All rights reserved. +// + +#import + +@class BufferChain; +@class OutputNode; + +@interface AudioPlayer : NSObject +{ + BufferChain *bufferChain; + OutputNode *output; + + NSMutableArray *chainQueue; + + NSURL *nextStream; + id nextStreamUserInfo; + + id delegate; +} + +- (id)init; + +- (void)setDelegate:(id)d; +- (id)delegate; + +- (void)play:(NSURL *)url; +- (void)play:(NSURL *)url withUserInfo:(id)userInfo; + +- (void)stop; +- (void)pause; +- (void)resume; + +- (void)seekToTime:(double)time; +- (void)setVolume:(double)v; + +- (double)amountPlayed; + +- (void)setNextStream:(NSURL *)url; +- (void)setNextStream:(NSURL *)url withUserInfo:(id)userInfo; + ++ (NSArray *)fileTypes; + +@end + +@interface AudioPlayer (Private) //Dont use this stuff! + +- (OutputNode *) output; +- (BufferChain *) bufferChain; +- (id)initWithDelegate:(id)d; + +- (void)setPlaybackStatus:(int)s; + +- (void)requestNextStream:(id)userInfo; +- (void)requestNextStreamMainThread:(id)userInfo; +- (void)notifyStreamChanged:(id)userInfo; +- (void)notifyStreamChangedMainThread:(id)userInfo; + +- (void)endOfInputReached:(BufferChain *)sender; +- (void)setShouldContinue:(BOOL)s; +- (BufferChain *)bufferChain; +- (void)endOfInputPlayed; +- (void)sendDelegateMethod:(SEL)selector withObject:(id)obj waitUntilDone:(BOOL)wait; +@end + +@protocol AudioPlayerDelegate +- (void)audioPlayer:(AudioPlayer *)player requestNextStream:(id)userInfo; //You must use setNextStream in this method +- (void)audioPlayer:(AudioPlayer *)player streamChanged:(id)userInfo; +- (void)audioPlayer:(AudioPlayer *)player changedStatus:(id)status; +@end + diff --git a/Audio/AudioPlayer.m b/Audio/AudioPlayer.m new file mode 100644 index 000000000..66a41954b --- /dev/null +++ b/Audio/AudioPlayer.m @@ -0,0 +1,284 @@ +// +// AudioController.m +// Cog +// +// Created by Vincent Spader on 8/7/05. +// Copyright 2005 Vincent Spader. All rights reserved. +// + +#import "AudioPlayer.h" +#import "BufferChain.h" +#import "OutputNode.h" +#import "Status.h" + + + +@implementation AudioPlayer + +- (id)init +{ + self = [super init]; + if (self) + { + output = NULL; + bufferChain = NULL; + + chainQueue = [[NSMutableArray alloc] init]; + } + + return self; +} + +- (void)setDelegate:(id)d +{ + delegate = d; +} + +- (id)delegate { + return delegate; +} + +- (void)play:(NSURL *)url +{ + [self play:url withUserInfo:nil]; +} + + +- (void)play:(NSURL *)url withUserInfo:(id)userInfo +{ + if (output) + { + [output release]; + } + output = [[OutputNode alloc] initWithController:self previous:nil]; + [output setup]; + + NSEnumerator *enumerator = [chainQueue objectEnumerator]; + id anObject; + while (anObject = [enumerator nextObject]) + { + [anObject setShouldContinue:NO]; + } + [chainQueue removeAllObjects]; + + if (bufferChain) + { + [bufferChain setShouldContinue:NO]; + + [bufferChain release]; + } + bufferChain = [[BufferChain alloc] initWithController:self]; + + while (![bufferChain open:url withOutputFormat:[output format]]) + { + [bufferChain release]; + + [self requestNextStream: userInfo]; + + url = nextStream; + if (url == nil) + { + return; + } + + userInfo = nextStreamUserInfo; + + [self notifyStreamChanged:userInfo]; + + bufferChain = [[BufferChain alloc] initWithController:self]; + } + + [bufferChain setUserInfo:userInfo]; + + [self setShouldContinue:YES]; + DBLog(@"DETACHING THREADS"); + + [output launchThread]; + [bufferChain launchThreads]; + + [self setPlaybackStatus:kCogStatusPlaying]; +} + +- (void)stop +{ + //Set shouldoContinue to NO on allll things + [self setShouldContinue:NO]; + [self setPlaybackStatus:kCogStatusStopped]; +} + +- (void)pause +{ + [output pause]; + + [self setPlaybackStatus:kCogStatusPaused]; +} + +- (void)resume +{ + [output resume]; + + [self setPlaybackStatus:kCogStatusPlaying]; +} + +- (void)seekToTime:(double)time +{ + //Need to reset everything's buffers, and then seek? + /*HACK TO TEST HOW WELL THIS WOULD WORK*/ + [bufferChain seek:time]; + [output seek:time]; + + + /*END HACK*/ +} + +- (void)setVolume:(double)v +{ + [output setVolume:v]; +} + +- (void)setNextStream:(NSURL *)url +{ + [self setNextStream:url withUserInfo:nil]; +} + +- (void)setNextStream:(NSURL *)url withUserInfo:(id)userInfo +{ + [url retain]; + [nextStream release]; + nextStream = url; + + [userInfo retain]; + [nextStreamUserInfo release]; + nextStreamUserInfo = userInfo; + +} + + +- (void)setShouldContinue:(BOOL)s +{ + [bufferChain setShouldContinue:s]; + [output setShouldContinue:s]; +} + +- (double)amountPlayed +{ + return [output amountPlayed]; +} + + + + +- (void)requestNextStream:(id)userInfo +{ + [self sendDelegateMethod:@selector(audioPlayer:requestNextStream:) withObject:userInfo waitUntilDone:YES]; +} + +- (void)notifyStreamChanged:(id)userInfo +{ + [self sendDelegateMethod:@selector(audioPlayer:streamChanged:) withObject:userInfo waitUntilDone:NO]; +} + + + +- (void)endOfInputReached:(BufferChain *)sender //Sender is a BufferChain +{ + BufferChain *newChain = nil; + + nextStreamUserInfo = [sender userInfo]; + [nextStreamUserInfo retain]; //Retained because when setNextStream is called, it will be released!!! + + do { + [newChain release]; + [self requestNextStream: nextStreamUserInfo]; + + if (nextStream == nil) + { + return; + } + + newChain = [[BufferChain alloc] initWithController:self]; + } while (![newChain open:nextStream withOutputFormat:[output format]]); + + [newChain setUserInfo: nextStreamUserInfo]; + + [newChain setShouldContinue:YES]; + [newChain launchThreads]; + + [chainQueue insertObject:newChain atIndex:[chainQueue count]]; + + [newChain release]; +} + +- (void)endOfInputPlayed +{ + if ([chainQueue count] <= 0) + { + //End of playlist + DBLog(@"STOPPED"); + [self stop]; + + return; + } +// NSLog(@"SWAPPING BUFFERS"); + [bufferChain release]; + + DBLog(@"END OF INPUT PLAYED"); + bufferChain = [chainQueue objectAtIndex:0]; + [bufferChain retain]; + + [chainQueue removeObjectAtIndex:0]; + + [self notifyStreamChanged:[bufferChain userInfo]]; + [output setEndOfStream:NO]; +} + +- (void)sendDelegateMethod:(SEL)selector withObject:(id)obj waitUntilDone:(BOOL)wait +{ + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[delegate methodSignatureForSelector:selector]]; + [invocation setSelector:selector]; + [invocation setArgument:&self atIndex:2]; //Indexes start at 2, the first being self, the second being command. + [invocation setArgument:&obj atIndex:3]; + + [self performSelectorOnMainThread:@selector(sendDelegateMethodMainThread:) withObject:invocation waitUntilDone:wait]; +} + + +- (void)sendDelegateMethodMainThread:(id)invocation +{ + [invocation invokeWithTarget:delegate]; +} + +- (void)setPlaybackStatus:(int)status +{ + [self sendDelegateMethod:@selector(audioPlayer:statusChanged:) withObject:[NSNumber numberWithInt:status] waitUntilDone:NO]; +} + +- (BufferChain *)bufferChain +{ + return bufferChain; +} + +- (OutputNode *) output +{ + return output; +} + ++ (NSArray *)fileTypes +{ + PluginController *pluginController = [PluginController sharedPluginController]; + + NSArray *decoderTypes = [[pluginController decoders] allKeys]; + NSArray *metdataReaderTypes = [[pluginController metadataReaders] allKeys]; + NSArray *propertiesReaderTypes = [[pluginController propertiesReaders] allKeys]; + + NSMutableSet *types = [NSMutableSet set]; + + [types addObjectsFromArray:decoderTypes]; + [types addObjectsFromArray:metdataReaderTypes]; + [types addObjectsFromArray:propertiesReaderTypes]; + + return [types allObjects]; +} + + +@end diff --git a/Audio/AudioPropertiesReader.h b/Audio/AudioPropertiesReader.h new file mode 100644 index 000000000..ee932155c --- /dev/null +++ b/Audio/AudioPropertiesReader.h @@ -0,0 +1,18 @@ +// +// AudioMetadataReader.h +// CogAudio +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface AudioPropertiesReader : NSObject { + +} + ++ (NSDictionary *)propertiesForURL:(NSURL *)url; + +@end diff --git a/Audio/AudioPropertiesReader.m b/Audio/AudioPropertiesReader.m new file mode 100644 index 000000000..056a37c1f --- /dev/null +++ b/Audio/AudioPropertiesReader.m @@ -0,0 +1,26 @@ +// +// AudioMetadataReader.m +// CogAudio +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "AudioPropertiesReader.h" +#import "PluginController.h" + +@implementation AudioPropertiesReader + ++ (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSString *ext = [[url path] pathExtension]; + + NSDictionary *propertiesReaders = [[PluginController sharedPluginController] propertiesReaders]; + + Class propertiesReader = NSClassFromString([propertiesReaders objectForKey:ext]); + + return [[[[propertiesReader alloc] init] autorelease] propertiesForURL:url]; + +} + +@end diff --git a/Sound/BufferChain.h b/Audio/Chain/BufferChain.h similarity index 62% rename from Sound/BufferChain.h rename to Audio/Chain/BufferChain.h index bb01f54bb..318651f8f 100644 --- a/Sound/BufferChain.h +++ b/Audio/Chain/BufferChain.h @@ -10,28 +10,37 @@ #import "InputNode.h" #import "ConverterNode.h" -#import "SoundController.h" -#import "PlaylistEntry.h" +#import "AudioPlayer.h" @interface BufferChain : NSObject { InputNode *inputNode; ConverterNode *converterNode; - PlaylistEntry *playlistEntry; - NSArray *effects; //Not needed as of now, but for EFFECTS PLUGINS OF THE FUTURE! + NSURL *streamURL; + id userInfo; id finalNode; //Final buffer in the chain. - id soundController; + id controller; } - (id)initWithController:(id)c; - (void)buildChain; -- (BOOL)open:(PlaylistEntry *)pe; +- (BOOL)open:(NSURL *)url withOutputFormat:(AudioStreamBasicDescription)outputFormat; - (void)seek:(double)time; - (void)launchThreads; - (id)finalNode; +- (id)userInfo; +- (void)setUserInfo:(id)i; + +- (NSURL *)streamURL; + +- (void)setShouldContinue:(BOOL)s; + +- (void)endOfInputReached; + + @end diff --git a/Sound/BufferChain.m b/Audio/Chain/BufferChain.m similarity index 71% rename from Sound/BufferChain.m rename to Audio/Chain/BufferChain.m index 7124fed86..28c64bc3c 100644 --- a/Sound/BufferChain.m +++ b/Audio/Chain/BufferChain.m @@ -8,6 +8,7 @@ #import "BufferChain.h" #import "OutputNode.h" +#import "CoreAudioUtils.h" @implementation BufferChain @@ -16,8 +17,9 @@ self = [super init]; if (self) { - soundController = c; - playlistEntry = nil; + controller = c; + streamURL = nil; + userInfo = nil; inputNode = nil; converterNode = nil; } @@ -36,19 +38,20 @@ finalNode = converterNode; } -- (BOOL)open:(PlaylistEntry *)pe -{ - [pe retain]; - [playlistEntry release]; - NSLog(@"THEY ARE THE SAME?!"); - playlistEntry = pe; +- (BOOL)open:(NSURL *)url withOutputFormat:(AudioStreamBasicDescription)outputFormat +{ + [url retain]; + [streamURL release]; + streamURL = url; [self buildChain]; - NSLog(@"Filename in bufferchain: %@, %i %i", [pe filename], playlistEntry, pe); - if (![inputNode open:[playlistEntry filename]]) + if (![inputNode open:url]) return NO; + + AudioStreamBasicDescription inputFormat; + inputFormat = propertiesToASBD([inputNode properties]); - [converterNode setupWithInputFormat:(AudioStreamBasicDescription)[inputNode format] outputFormat:[[soundController output] format] ]; + [converterNode setupWithInputFormat:inputFormat outputFormat:outputFormat ]; return YES; } @@ -61,10 +64,21 @@ [converterNode launchThread]; } +- (void)setUserInfo:(id)i +{ + [i retain]; + [userInfo release]; + userInfo = i; +} + +- (id)userInfo +{ + return userInfo; +} + - (void)dealloc { - NSLog(@"Releasing playlistEntry: %i", [playlistEntry retainCount]); - [playlistEntry release]; + [userInfo release]; [inputNode release]; @@ -100,7 +114,7 @@ - (void)endOfInputReached { - [soundController endOfInputReached:self]; + [controller endOfInputReached:self]; } @@ -109,9 +123,9 @@ return finalNode; } -- (PlaylistEntry *)playlistEntry +- (NSURL *)streamURL { - return playlistEntry; + return streamURL; } - (void)setShouldContinue:(BOOL)s diff --git a/Sound/ConverterNode.h b/Audio/Chain/ConverterNode.h similarity index 100% rename from Sound/ConverterNode.h rename to Audio/Chain/ConverterNode.h diff --git a/Sound/ConverterNode.m b/Audio/Chain/ConverterNode.m similarity index 82% rename from Sound/ConverterNode.m rename to Audio/Chain/ConverterNode.m index 993d620a2..448aeaefa 100644 --- a/Sound/ConverterNode.m +++ b/Audio/Chain/ConverterNode.m @@ -36,11 +36,8 @@ void PrintStreamDesc (AudioStreamBasicDescription *inDesc) static OSStatus ACInputProc(AudioConverterRef inAudioConverter, UInt32* ioNumberDataPackets, AudioBufferList* ioData, AudioStreamPacketDescription** outDataPacketDescription, void* inUserData) { ConverterNode *converter = (ConverterNode *)inUserData; - id previousNode = [converter previousNode]; OSStatus err = noErr; - void *readPtr; int amountToWrite; - int availInput; int amountRead; if ([converter shouldContinue] == NO || [converter endOfStream] == YES) @@ -59,14 +56,7 @@ static OSStatus ACInputProc(AudioConverterRef inAudioConverter, UInt32* ioNumber converter->callbackBuffer = malloc(amountToWrite); amountRead = [converter readData:converter->callbackBuffer amount:amountToWrite]; -/* if ([converter endOfStream] == YES) - { - ioData->mBuffers[0].mDataByteSize = 0; - *ioNumberDataPackets = 0; - - return noErr; - } -*/ if (amountRead == 0) + if (amountRead == 0) { ioData->mBuffers[0].mDataByteSize = 0; *ioNumberDataPackets = 0; @@ -74,42 +64,6 @@ static OSStatus ACInputProc(AudioConverterRef inAudioConverter, UInt32* ioNumber return 100; //Keep asking for data } - /* - availInput = [[previousNode buffer] lengthAvailableToReadReturningPointer:&readPtr]; - if (availInput == 0 ) - { -// NSLog(@"0 INPUT"); - ioData->mBuffers[0].mDataByteSize = 0; - *ioNumberDataPackets = 0; - - if ([previousNode endOfStream] == YES) - { - NSLog(@"END OF CONVERTER INPUT"); - [converter setEndOfStream:YES]; - [converter setShouldContinue:NO]; - - return noErr; - } - - return 100; //Keep asking for data - } - - if (amountToWrite > availInput) - amountToWrite = availInput; - - *ioNumberDataPackets = amountToWrite/(converter->inputFormat.mBytesPerPacket); - - if (converter->callbackBuffer != NULL) - free(converter->callbackBuffer); - converter->callbackBuffer = malloc(amountToWrite); - memcpy(converter->callbackBuffer, readPtr, amountToWrite); - - if (amountToWrite > 0) - { - [[previousNode buffer] didReadLength:amountToWrite]; - [[previousNode semaphore] signal]; - } -*/ // NSLog(@"Amount read: %@ %i", converter, amountRead); ioData->mBuffers[0].mData = converter->callbackBuffer; ioData->mBuffers[0].mDataByteSize = amountRead; diff --git a/Sound/InputNode.h b/Audio/Chain/InputNode.h similarity index 76% rename from Sound/InputNode.h rename to Audio/Chain/InputNode.h index 8ac936ef9..f0d728961 100644 --- a/Sound/InputNode.h +++ b/Audio/Chain/InputNode.h @@ -12,20 +12,20 @@ #import #import -#import "SoundFile.h" +#import "AudioDecoder.h" #import "Node.h" +#import "Plugin.h" @interface InputNode : Node { - AudioStreamBasicDescription format; - - SoundFile *soundFile; + id decoder; BOOL shouldSeek; double seekTime; } +- (BOOL)open:(NSURL *)url; - (void)process; -- (AudioStreamBasicDescription) format; +- (NSDictionary *) properties; - (void)seek:(double)time; diff --git a/Sound/InputNode.m b/Audio/Chain/InputNode.m similarity index 58% rename from Sound/InputNode.m rename to Audio/Chain/InputNode.m index e3ded6e76..8a6dd05a4 100644 --- a/Sound/InputNode.m +++ b/Audio/Chain/InputNode.m @@ -7,27 +7,33 @@ // #import "InputNode.h" - +#import "BufferChain.h" @implementation InputNode -- (BOOL)open:(NSString *)filename +- (BOOL)open:(NSURL *)url { - NSLog(@"Opening: %@", filename); - soundFile = [SoundFile open:filename]; - if (soundFile == nil) + NSLog(@"Opening: %@", url); + decoder = [AudioDecoder audioDecoderForURL:url]; + [decoder retain]; + + NSLog(@"Got decoder...%@", decoder); + if (decoder == nil) return NO; -/* while (soundFile == nil) + + if (![decoder open:url]) + return NO; + +/* while (decoder == nil) { - NSString *nextSong = [controller invalidSoundFile]; - if (nextSong == nil) + NSURL *nextStream = [controller invalidDecoder]; + if (nextStream == nil) return NO; - soundFile = [SoundFile open:nextSong]; + decoder = [AudioDecoder audioDecoderForURL:nextStream]; + [decoder open:nextStream]; } */ - [soundFile getFormat:&format]; - shouldContinue = YES; shouldSeek = NO; @@ -48,11 +54,11 @@ if (shouldSeek == YES) { NSLog(@"Actually seeking"); - [soundFile seekToTime:seekTime]; + [decoder seekToTime:seekTime]; shouldSeek = NO; } - amountRead = [soundFile fillBuffer:buf ofSize: chunk_size]; + amountRead = [decoder fillBuffer:buf ofSize: chunk_size]; if (amountRead <= 0) { endOfStream = YES; @@ -64,7 +70,7 @@ } free(buf); - [soundFile close]; + [decoder close]; NSLog(@"CLOSED: %i", self); } @@ -76,9 +82,16 @@ shouldSeek = YES; } -- (AudioStreamBasicDescription) format +- (void)dealloc { - return format; + [decoder release]; + + [super dealloc]; +} + +- (NSDictionary *) properties +{ + return [decoder properties]; } @end diff --git a/Sound/Node.h b/Audio/Chain/Node.h similarity index 95% rename from Sound/Node.h rename to Audio/Chain/Node.h index ef5b7144f..9d7338bd5 100644 --- a/Sound/Node.h +++ b/Audio/Chain/Node.h @@ -25,7 +25,7 @@ BOOL shouldContinue; BOOL endOfStream; //All data is now in buffer } -- (id)initWithPrevious:(id)p; +- (id)initWithController:(id)c previous:(id)p; - (int)writeData:(void *)ptr amount:(int)a; - (int)readData:(void *)ptr amount:(int)a; diff --git a/Sound/Node.m b/Audio/Chain/Node.m similarity index 100% rename from Sound/Node.m rename to Audio/Chain/Node.m diff --git a/Sound/OutputNode.h b/Audio/Chain/OutputNode.h similarity index 91% rename from Sound/OutputNode.h rename to Audio/Chain/OutputNode.h index 448c08fdc..6d0308c08 100644 --- a/Sound/OutputNode.h +++ b/Audio/Chain/OutputNode.h @@ -22,8 +22,6 @@ OutputCoreAudio *output; } -- (id)initWithController:(id)c previousLink:p; - - (double)amountPlayed; - (void)setup; @@ -38,4 +36,9 @@ - (void)setVolume:(double) v; +- (void)setShouldContinue:(BOOL)s; + +- (void)pause; +- (void)resume; + @end diff --git a/Sound/OutputNode.m b/Audio/Chain/OutputNode.m similarity index 96% rename from Sound/OutputNode.m rename to Audio/Chain/OutputNode.m index 2b0d36935..ea9ac657e 100644 --- a/Sound/OutputNode.m +++ b/Audio/Chain/OutputNode.m @@ -8,6 +8,8 @@ #import "OutputNode.h" #import "OutputCoreAudio.h" +#import "AudioPlayer.h" +#import "BufferChain.h" @implementation OutputNode @@ -92,6 +94,8 @@ - (void)dealloc { [output release]; + + [super dealloc]; } - (void)setVolume:(double) v diff --git a/Audio/CogAudio.xcodeproj/project.pbxproj b/Audio/CogAudio.xcodeproj/project.pbxproj new file mode 100644 index 000000000..ec6306dbc --- /dev/null +++ b/Audio/CogAudio.xcodeproj/project.pbxproj @@ -0,0 +1,519 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A2D3C30B8D1D37000778C4 /* AudioDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 17A2D3C40B8D1D37000778C4 /* AudioDecoder.m */; }; + 17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B6192E0B909BC300BC003F /* AudioPropertiesReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17B619310B909BC300BC003F /* AudioPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 17B6192F0B909BC300BC003F /* AudioPropertiesReader.m */; }; + 17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C940210B900909008627D6 /* AudioMetadataReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C940220B900909008627D6 /* AudioMetadataReader.m */; }; + 17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C760B8BE4BA00D1EBDE /* BufferChain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C770B8BE4BA00D1EBDE /* BufferChain.m */; }; + 17D21CA30B8BE4BA00D1EBDE /* ConverterNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C780B8BE4BA00D1EBDE /* ConverterNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CA40B8BE4BA00D1EBDE /* ConverterNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C790B8BE4BA00D1EBDE /* ConverterNode.m */; }; + 17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C7A0B8BE4BA00D1EBDE /* InputNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7B0B8BE4BA00D1EBDE /* InputNode.m */; }; + 17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C7C0B8BE4BA00D1EBDE /* Node.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7D0B8BE4BA00D1EBDE /* Node.m */; }; + 17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */; }; + 17D21CC50B8BE4BA00D1EBDE /* OutputCoreAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C9C0B8BE4BA00D1EBDE /* OutputCoreAudio.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CC60B8BE4BA00D1EBDE /* OutputCoreAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C9D0B8BE4BA00D1EBDE /* OutputCoreAudio.m */; }; + 17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C9E0B8BE4BA00D1EBDE /* Status.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CDF0B8BE5B400D1EBDE /* VirtualRingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21CDA0B8BE5B400D1EBDE /* VirtualRingBuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CE00B8BE5B400D1EBDE /* VirtualRingBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21CDB0B8BE5B400D1EBDE /* VirtualRingBuffer.m */; }; + 17D21CE10B8BE5B400D1EBDE /* DBLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21CDD0B8BE5B400D1EBDE /* DBLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CE20B8BE5B400D1EBDE /* DBLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21CDE0B8BE5B400D1EBDE /* DBLog.m */; }; + 17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */; }; + 17D21DAD0B8BE76800D1EBDE /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17D21DA90B8BE76800D1EBDE /* AudioToolbox.framework */; }; + 17D21DAE0B8BE76800D1EBDE /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17D21DAA0B8BE76800D1EBDE /* AudioUnit.framework */; }; + 17D21DAF0B8BE76800D1EBDE /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17D21DAB0B8BE76800D1EBDE /* CoreAudio.framework */; }; + 17D21DB00B8BE76800D1EBDE /* CoreAudioKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17D21DAC0B8BE76800D1EBDE /* CoreAudioKit.framework */; }; + 17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21DC50B8BE79700D1EBDE /* CoreAudioUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21DC80B8BE79700D1EBDE /* CoreAudioUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21DC60B8BE79700D1EBDE /* CoreAudioUtils.m */; }; + 17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21EBB0B8BF44000D1EBDE /* AudioPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21EBC0B8BF44000D1EBDE /* AudioPlayer.m */; }; + 17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DD30B8D0F7000A34E87 /* PluginController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17F94DD60B8D0F7000A34E87 /* PluginController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F94DD40B8D0F7000A34E87 /* PluginController.m */; }; + 17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DDC0B8D101100A34E87 /* Plugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 17D21D2B0B8BE6A200D1EBDE /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 17A2D3C30B8D1D37000778C4 /* AudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioDecoder.h; sourceTree = ""; }; + 17A2D3C40B8D1D37000778C4 /* AudioDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioDecoder.m; sourceTree = ""; }; + 17B6192E0B909BC300BC003F /* AudioPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AudioPropertiesReader.h; sourceTree = ""; }; + 17B6192F0B909BC300BC003F /* AudioPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AudioPropertiesReader.m; sourceTree = ""; }; + 17C940210B900909008627D6 /* AudioMetadataReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioMetadataReader.h; sourceTree = ""; }; + 17C940220B900909008627D6 /* AudioMetadataReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioMetadataReader.m; sourceTree = ""; }; + 17D21C760B8BE4BA00D1EBDE /* BufferChain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BufferChain.h; sourceTree = ""; }; + 17D21C770B8BE4BA00D1EBDE /* BufferChain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = BufferChain.m; sourceTree = ""; }; + 17D21C780B8BE4BA00D1EBDE /* ConverterNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ConverterNode.h; sourceTree = ""; }; + 17D21C790B8BE4BA00D1EBDE /* ConverterNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ConverterNode.m; sourceTree = ""; }; + 17D21C7A0B8BE4BA00D1EBDE /* InputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = InputNode.h; sourceTree = ""; }; + 17D21C7B0B8BE4BA00D1EBDE /* InputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = InputNode.m; sourceTree = ""; }; + 17D21C7C0B8BE4BA00D1EBDE /* Node.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Node.h; sourceTree = ""; }; + 17D21C7D0B8BE4BA00D1EBDE /* Node.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Node.m; sourceTree = ""; }; + 17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputNode.h; sourceTree = ""; }; + 17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputNode.m; sourceTree = ""; }; + 17D21C9C0B8BE4BA00D1EBDE /* OutputCoreAudio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputCoreAudio.h; sourceTree = ""; }; + 17D21C9D0B8BE4BA00D1EBDE /* OutputCoreAudio.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputCoreAudio.m; sourceTree = ""; }; + 17D21C9E0B8BE4BA00D1EBDE /* Status.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Status.h; sourceTree = ""; }; + 17D21CDA0B8BE5B400D1EBDE /* VirtualRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VirtualRingBuffer.h; sourceTree = ""; }; + 17D21CDB0B8BE5B400D1EBDE /* VirtualRingBuffer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VirtualRingBuffer.m; sourceTree = ""; }; + 17D21CDD0B8BE5B400D1EBDE /* DBLog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DBLog.h; sourceTree = ""; }; + 17D21CDE0B8BE5B400D1EBDE /* DBLog.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DBLog.m; sourceTree = ""; }; + 17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Semaphore.h; sourceTree = ""; }; + 17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Semaphore.m; sourceTree = ""; }; + 17D21DA90B8BE76800D1EBDE /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + 17D21DAA0B8BE76800D1EBDE /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; + 17D21DAB0B8BE76800D1EBDE /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + 17D21DAC0B8BE76800D1EBDE /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = /System/Library/Frameworks/CoreAudioKit.framework; sourceTree = ""; }; + 17D21DC50B8BE79700D1EBDE /* CoreAudioUtils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioUtils.h; sourceTree = ""; }; + 17D21DC60B8BE79700D1EBDE /* CoreAudioUtils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioUtils.m; sourceTree = ""; }; + 17D21EBB0B8BF44000D1EBDE /* AudioPlayer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AudioPlayer.h; sourceTree = ""; }; + 17D21EBC0B8BF44000D1EBDE /* AudioPlayer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AudioPlayer.m; sourceTree = ""; }; + 17F94DD30B8D0F7000A34E87 /* PluginController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginController.h; sourceTree = ""; }; + 17F94DD40B8D0F7000A34E87 /* PluginController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PluginController.m; sourceTree = ""; }; + 17F94DDC0B8D101100A34E87 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = ""; }; + 32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogAudio_Prefix.pch; sourceTree = ""; }; + 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8DC2EF5B0486A6940098B216 /* CogAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CogAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DC2EF560486A6940098B216 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */, + 17D21DAD0B8BE76800D1EBDE /* AudioToolbox.framework in Frameworks */, + 17D21DAE0B8BE76800D1EBDE /* AudioUnit.framework in Frameworks */, + 17D21DAF0B8BE76800D1EBDE /* CoreAudio.framework in Frameworks */, + 17D21DB00B8BE76800D1EBDE /* CoreAudioKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DFFF38A50411DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 8DC2EF5B0486A6940098B216 /* CogAudio.framework */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* CogAudio */ = { + isa = PBXGroup; + children = ( + 08FB77AEFE84172EC02AAC07 /* Classes */, + 32C88DFF0371C24200C91783 /* Other Sources */, + 089C1665FE841158C02AAC07 /* Resources */, + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, + 034768DFFF38A50411DB9C8B /* Products */, + ); + name = CogAudio; + sourceTree = ""; + }; + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */, + 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8DC2EF5A0486A6940098B216 /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AEFE84172EC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 17F94DDC0B8D101100A34E87 /* Plugin.h */, + 17D21EBB0B8BF44000D1EBDE /* AudioPlayer.h */, + 17D21EBC0B8BF44000D1EBDE /* AudioPlayer.m */, + 17A2D3C30B8D1D37000778C4 /* AudioDecoder.h */, + 17A2D3C40B8D1D37000778C4 /* AudioDecoder.m */, + 17C940210B900909008627D6 /* AudioMetadataReader.h */, + 17C940220B900909008627D6 /* AudioMetadataReader.m */, + 17B6192E0B909BC300BC003F /* AudioPropertiesReader.h */, + 17B6192F0B909BC300BC003F /* AudioPropertiesReader.m */, + 17F94DD30B8D0F7000A34E87 /* PluginController.h */, + 17F94DD40B8D0F7000A34E87 /* PluginController.m */, + 17D21C750B8BE4BA00D1EBDE /* Chain */, + 17D21C9B0B8BE4BA00D1EBDE /* Output */, + 17D21C9E0B8BE4BA00D1EBDE /* Status.h */, + 17D21CD80B8BE5B400D1EBDE /* ThirdParty */, + 17D21CDC0B8BE5B400D1EBDE /* Utils */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 17D21DA90B8BE76800D1EBDE /* AudioToolbox.framework */, + 17D21DAA0B8BE76800D1EBDE /* AudioUnit.framework */, + 17D21DAB0B8BE76800D1EBDE /* CoreAudio.framework */, + 17D21DAC0B8BE76800D1EBDE /* CoreAudioKit.framework */, + 0867D6A5FE840307C02AAC07 /* AppKit.framework */, + D2F7E79907B2D74100F64583 /* CoreData.framework */, + 0867D69BFE84028FC02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 17D21C750B8BE4BA00D1EBDE /* Chain */ = { + isa = PBXGroup; + children = ( + 17D21C760B8BE4BA00D1EBDE /* BufferChain.h */, + 17D21C770B8BE4BA00D1EBDE /* BufferChain.m */, + 17D21C780B8BE4BA00D1EBDE /* ConverterNode.h */, + 17D21C790B8BE4BA00D1EBDE /* ConverterNode.m */, + 17D21C7A0B8BE4BA00D1EBDE /* InputNode.h */, + 17D21C7B0B8BE4BA00D1EBDE /* InputNode.m */, + 17D21C7C0B8BE4BA00D1EBDE /* Node.h */, + 17D21C7D0B8BE4BA00D1EBDE /* Node.m */, + 17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */, + 17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */, + ); + path = Chain; + sourceTree = ""; + }; + 17D21C9B0B8BE4BA00D1EBDE /* Output */ = { + isa = PBXGroup; + children = ( + 17D21C9C0B8BE4BA00D1EBDE /* OutputCoreAudio.h */, + 17D21C9D0B8BE4BA00D1EBDE /* OutputCoreAudio.m */, + ); + path = Output; + sourceTree = ""; + }; + 17D21CD80B8BE5B400D1EBDE /* ThirdParty */ = { + isa = PBXGroup; + children = ( + 17D21DC40B8BE79700D1EBDE /* CoreAudioUtils */, + 17D21CD90B8BE5B400D1EBDE /* VirtualRingBuffer */, + ); + path = ThirdParty; + sourceTree = ""; + }; + 17D21CD90B8BE5B400D1EBDE /* VirtualRingBuffer */ = { + isa = PBXGroup; + children = ( + 17D21CDA0B8BE5B400D1EBDE /* VirtualRingBuffer.h */, + 17D21CDB0B8BE5B400D1EBDE /* VirtualRingBuffer.m */, + ); + path = VirtualRingBuffer; + sourceTree = ""; + }; + 17D21CDC0B8BE5B400D1EBDE /* Utils */ = { + isa = PBXGroup; + children = ( + 17D21CDD0B8BE5B400D1EBDE /* DBLog.h */, + 17D21CDE0B8BE5B400D1EBDE /* DBLog.m */, + 17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */, + 17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */, + ); + path = Utils; + sourceTree = ""; + }; + 17D21DC40B8BE79700D1EBDE /* CoreAudioUtils */ = { + isa = PBXGroup; + children = ( + 17D21DC50B8BE79700D1EBDE /* CoreAudioUtils.h */, + 17D21DC60B8BE79700D1EBDE /* CoreAudioUtils.m */, + ); + path = CoreAudioUtils; + sourceTree = ""; + }; + 32C88DFF0371C24200C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8DC2EF500486A6940098B216 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */, + 17D21CA30B8BE4BA00D1EBDE /* ConverterNode.h in Headers */, + 17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */, + 17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */, + 17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */, + 17D21CC50B8BE4BA00D1EBDE /* OutputCoreAudio.h in Headers */, + 17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */, + 17D21CDF0B8BE5B400D1EBDE /* VirtualRingBuffer.h in Headers */, + 17D21CE10B8BE5B400D1EBDE /* DBLog.h in Headers */, + 17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */, + 17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */, + 17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */, + 17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */, + 17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */, + 17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */, + 17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */, + 17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 8DC2EF4F0486A6940098B216 /* CogAudio */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "CogAudio" */; + buildPhases = ( + 17D21D2B0B8BE6A200D1EBDE /* CopyFiles */, + 8DC2EF500486A6940098B216 /* Headers */, + 8DC2EF540486A6940098B216 /* Sources */, + 8DC2EF560486A6940098B216 /* Frameworks */, + 8DC2EF520486A6940098B216 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CogAudio; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = CogAudio; + productReference = 8DC2EF5B0486A6940098B216 /* CogAudio.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "CogAudio" */; + hasScannedForEncodings = 1; + mainGroup = 0867D691FE84028FC02AAC07 /* CogAudio */; + productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; + projectDirPath = ""; + targets = ( + 8DC2EF4F0486A6940098B216 /* CogAudio */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8DC2EF520486A6940098B216 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DC2EF540486A6940098B216 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */, + 17D21CA40B8BE4BA00D1EBDE /* ConverterNode.m in Sources */, + 17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */, + 17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */, + 17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */, + 17D21CC60B8BE4BA00D1EBDE /* OutputCoreAudio.m in Sources */, + 17D21CE00B8BE5B400D1EBDE /* VirtualRingBuffer.m in Sources */, + 17D21CE20B8BE5B400D1EBDE /* DBLog.m in Sources */, + 17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */, + 17D21DC80B8BE79700D1EBDE /* CoreAudioUtils.m in Sources */, + 17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */, + 17F94DD60B8D0F7000A34E87 /* PluginController.m in Sources */, + 17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */, + 17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */, + 17B619310B909BC300BC003F /* AudioPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB91AE08733DA50010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_4)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_5)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_6)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_7)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_8)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_9)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_10)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../FLAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_10 = "\"$(SRCROOT)/../WavPack/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../ID3Tag/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../MAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_4 = "\"$(SRCROOT)/../MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_5 = "\"$(SRCROOT)/../MPCDec/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_6 = "\"$(SRCROOT)/../Ogg/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_7 = "\"$(SRCROOT)/../Shorten/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_8 = "\"$(SRCROOT)/../TagLib/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_9 = "\"$(SRCROOT)/../Vorbis/build/Release\""; + FRAMEWORK_VERSION = A; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = CogAudio_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@executable_path/../Frameworks"; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = CogAudio; + WARNING_LDFLAGS = ""; + WRAPPER_EXTENSION = framework; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB91AF08733DA50010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_4)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_5)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_6)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_7)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_8)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_9)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_10)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../FLAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_10 = "\"$(SRCROOT)/../WavPack/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../ID3Tag/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../MAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_4 = "\"$(SRCROOT)/../MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_5 = "\"$(SRCROOT)/../MPCDec/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_6 = "\"$(SRCROOT)/../Ogg/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_7 = "\"$(SRCROOT)/../Shorten/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_8 = "\"$(SRCROOT)/../TagLib/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_9 = "\"$(SRCROOT)/../Vorbis/build/Release\""; + FRAMEWORK_VERSION = A; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = CogAudio_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@executable_path/../Frameworks"; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = CogAudio; + WARNING_LDFLAGS = ""; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; + 1DEB91B208733DA50010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB91B308733DA50010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "CogAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91AE08733DA50010E9CD /* Debug */, + 1DEB91AF08733DA50010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "CogAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91B208733DA50010E9CD /* Debug */, + 1DEB91B308733DA50010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/Audio/CogAudio_Prefix.pch b/Audio/CogAudio_Prefix.pch new file mode 100644 index 000000000..142f8365e --- /dev/null +++ b/Audio/CogAudio_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'CogAudio' target in the 'CogAudio' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Sound/SoundFile/CoreAudioFile.h b/Audio/Decoders/CoreAudioFile.h similarity index 100% rename from Sound/SoundFile/CoreAudioFile.h rename to Audio/Decoders/CoreAudioFile.h diff --git a/Sound/SoundFile/CoreAudioFile.m b/Audio/Decoders/CoreAudioFile.m similarity index 100% rename from Sound/SoundFile/CoreAudioFile.m rename to Audio/Decoders/CoreAudioFile.m diff --git a/Sound/SoundFile/FlacFile.h b/Audio/Decoders/FlacFile.h similarity index 100% rename from Sound/SoundFile/FlacFile.h rename to Audio/Decoders/FlacFile.h diff --git a/Sound/SoundFile/FlacFile.m b/Audio/Decoders/FlacFile.m similarity index 100% rename from Sound/SoundFile/FlacFile.m rename to Audio/Decoders/FlacFile.m diff --git a/Sound/SoundFile/GameFile.h b/Audio/Decoders/GameFile.h similarity index 100% rename from Sound/SoundFile/GameFile.h rename to Audio/Decoders/GameFile.h diff --git a/Sound/SoundFile/GameFile.mm b/Audio/Decoders/GameFile.mm similarity index 100% rename from Sound/SoundFile/GameFile.mm rename to Audio/Decoders/GameFile.mm diff --git a/Sound/SoundFile/MADFile.h b/Audio/Decoders/MADFile.h similarity index 100% rename from Sound/SoundFile/MADFile.h rename to Audio/Decoders/MADFile.h diff --git a/Sound/SoundFile/MADFile.m b/Audio/Decoders/MADFile.m similarity index 100% rename from Sound/SoundFile/MADFile.m rename to Audio/Decoders/MADFile.m diff --git a/Sound/SoundFile/MonkeysFile.h b/Audio/Decoders/MonkeysFile.h similarity index 100% rename from Sound/SoundFile/MonkeysFile.h rename to Audio/Decoders/MonkeysFile.h diff --git a/Sound/SoundFile/MonkeysFile.mm b/Audio/Decoders/MonkeysFile.mm similarity index 100% rename from Sound/SoundFile/MonkeysFile.mm rename to Audio/Decoders/MonkeysFile.mm diff --git a/Sound/SoundFile/MusepackFile.h b/Audio/Decoders/MusepackFile.h similarity index 100% rename from Sound/SoundFile/MusepackFile.h rename to Audio/Decoders/MusepackFile.h diff --git a/Sound/SoundFile/MusepackFile.m b/Audio/Decoders/MusepackFile.m similarity index 100% rename from Sound/SoundFile/MusepackFile.m rename to Audio/Decoders/MusepackFile.m diff --git a/Sound/SoundFile/ShnFile.h b/Audio/Decoders/ShnFile.h similarity index 100% rename from Sound/SoundFile/ShnFile.h rename to Audio/Decoders/ShnFile.h diff --git a/Sound/SoundFile/ShnFile.mm b/Audio/Decoders/ShnFile.mm similarity index 100% rename from Sound/SoundFile/ShnFile.mm rename to Audio/Decoders/ShnFile.mm diff --git a/Sound/SoundFile/SoundFile.h b/Audio/Decoders/SoundFile.h similarity index 100% rename from Sound/SoundFile/SoundFile.h rename to Audio/Decoders/SoundFile.h diff --git a/Sound/SoundFile/SoundFile.mm b/Audio/Decoders/SoundFile.mm similarity index 100% rename from Sound/SoundFile/SoundFile.mm rename to Audio/Decoders/SoundFile.mm diff --git a/Sound/SoundFile/VorbisFile.h b/Audio/Decoders/VorbisFile.h similarity index 77% rename from Sound/SoundFile/VorbisFile.h rename to Audio/Decoders/VorbisFile.h index 7e4c82f4c..4f3b0b0bf 100644 --- a/Sound/SoundFile/VorbisFile.h +++ b/Audio/Decoders/VorbisFile.h @@ -8,9 +8,17 @@ #import #import "SoundFile.h" + +//config.h things +#define __MACOSX__ +#define HAVE_CONFIG_H + #import #import +#undef __MACOSX__ +#undef HAVE_CONFIG_H + @interface VorbisFile : SoundFile { FILE *inFd; OggVorbis_File vorbisRef; diff --git a/Sound/SoundFile/VorbisFile.m b/Audio/Decoders/VorbisFile.m similarity index 100% rename from Sound/SoundFile/VorbisFile.m rename to Audio/Decoders/VorbisFile.m diff --git a/Sound/SoundFile/WavPackFile.h b/Audio/Decoders/WavPackFile.h similarity index 100% rename from Sound/SoundFile/WavPackFile.h rename to Audio/Decoders/WavPackFile.h diff --git a/Sound/SoundFile/WavPackFile.m b/Audio/Decoders/WavPackFile.m similarity index 100% rename from Sound/SoundFile/WavPackFile.m rename to Audio/Decoders/WavPackFile.m diff --git a/Libraries/FLAC/Info.plist b/Audio/Info.plist similarity index 100% rename from Libraries/FLAC/Info.plist rename to Audio/Info.plist diff --git a/Sound/OutputCoreAudio.h b/Audio/Output/OutputCoreAudio.h similarity index 81% rename from Sound/OutputCoreAudio.h rename to Audio/Output/OutputCoreAudio.h index 708888430..7821c175a 100644 --- a/Sound/OutputCoreAudio.h +++ b/Audio/Output/OutputCoreAudio.h @@ -12,15 +12,17 @@ #import #import +@class OutputNode; + @interface OutputCoreAudio : NSObject { - id outputController; + OutputNode * outputController; AudioUnit outputUnit; - AURenderCallbackStruct renderCallback; + AURenderCallbackStruct renderCallback; AudioStreamBasicDescription deviceFormat; // info about the default device } -- (id)initWithController:(id)c; +- (id)initWithController:(OutputNode *)c; - (BOOL)setup; - (BOOL)setOutputDevice:(AudioDeviceID)outputDevice; diff --git a/Sound/OutputCoreAudio.m b/Audio/Output/OutputCoreAudio.m similarity index 98% rename from Sound/OutputCoreAudio.m rename to Audio/Output/OutputCoreAudio.m index 60b3ee273..5053c3cc9 100644 --- a/Sound/OutputCoreAudio.m +++ b/Audio/Output/OutputCoreAudio.m @@ -7,11 +7,11 @@ // #import "OutputCoreAudio.h" - +#import "OutputNode.h" @implementation OutputCoreAudio -- (id)initWithController:(id)c +- (id)initWithController:(OutputNode *)c { self = [super init]; if (self) @@ -247,6 +247,8 @@ static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioAc - (void)dealloc { [self stop]; + + [super dealloc]; } - (void)pause diff --git a/Audio/Plugin.h b/Audio/Plugin.h new file mode 100644 index 000000000..2965cac82 --- /dev/null +++ b/Audio/Plugin.h @@ -0,0 +1,34 @@ +typedef enum +{ + kCogPluginCodec = 1, +} PluginType; + +@protocol CogPlugin +- (PluginType)pluginType; +@end + +@protocol CogCodecPlugin +- (Class)decoder; +- (Class)metadataReader; +- (Class)propertiesReader; +@end + +@protocol CogDecoder ++ (NSArray *)fileTypes; + +- (BOOL)open:(NSURL *)url; +- (NSDictionary *)properties; +- (double)seekToTime:(double)time; +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size; +- (void)close; +@end + +@protocol CogMetadataReader ++ (NSArray *)fileTypes; +@end + +@protocol CogPropertiesReader ++ (NSArray *)fileTypes; +@end + + diff --git a/Audio/PluginController.h b/Audio/PluginController.h new file mode 100644 index 000000000..5f6982fd6 --- /dev/null +++ b/Audio/PluginController.h @@ -0,0 +1,28 @@ +/* PluginController */ + +#import + +//Singleton +@interface PluginController : NSObject +{ + NSMutableArray *codecPlugins; + + NSMutableDictionary *decoders; + NSMutableDictionary *metadataReaders; + NSMutableDictionary *propertiesReaders; +} + ++ (PluginController *)sharedPluginController; //Use this to get the instance. + +- (void)setup; + +- (void)loadPlugins; +- (void)setupPlugins; + +- (void)printPluginInfo; + +- (NSDictionary *)decoders; +- (NSDictionary *)metadataReaders; +- (NSDictionary *)propertiesReaders; + +@end diff --git a/Audio/PluginController.m b/Audio/PluginController.m new file mode 100644 index 000000000..23166003c --- /dev/null +++ b/Audio/PluginController.m @@ -0,0 +1,206 @@ +#import "PluginController.h" +#import "Plugin.h" + +@implementation PluginController + +//Start of singleton-related stuff. +static PluginController *sharedPluginController = nil; + ++ (PluginController*)sharedPluginController +{ + @synchronized(self) { + if (sharedPluginController == nil) { + [[self alloc] init]; // assignment not done here + } + } + return sharedPluginController; +} + ++ (id)allocWithZone:(NSZone *)zone +{ + @synchronized(self) { + if (sharedPluginController == nil) { + sharedPluginController = [super allocWithZone:zone]; + return sharedPluginController; // assignment and return on first allocation + } + } + + return nil; //on subsequent allocation attempts return nil +} + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +- (id)retain +{ + return self; +} + +- (unsigned)retainCount +{ + return UINT_MAX; //denotes an object that cannot be released +} + +- (void)release +{ + //do nothing +} + +- (id)autorelease +{ + return self; +} + +//End of singleton-related stuff + +- (id)init { + self = [super init]; + if (self) { + codecPlugins = [[NSMutableArray alloc] init]; + + decoders = [[NSMutableDictionary alloc] init]; + metadataReaders = [[NSMutableDictionary alloc] init]; + propertiesReaders = [[NSMutableDictionary alloc] init]; + } + + return self; +} + +- (void)setup +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + [self loadPlugins]; + [self setupPlugins]; + [self printPluginInfo]; + + [pool release]; +} + +- (void)loadPluginsAtPath:(NSString *)path +{ + + NSArray *dirContents = [[NSFileManager defaultManager] directoryContentsAtPath:path]; + NSEnumerator *dirEnum = [dirContents objectEnumerator]; + + NSString *pname; + + NSLog(@"Loading plugins at %@, candidates: %@", path, dirContents); + while (pname = [dirEnum nextObject]) + { + NSString *ppath; + ppath = [NSString pathWithComponents:[NSArray arrayWithObjects:path,pname,nil]]; + + if ([[pname pathExtension] isEqualToString:@"bundle"]) + { + NSBundle *b = [NSBundle bundleWithPath:ppath]; + if (b) + { + NSLog(@"Loaded bundle: %@", b); + id plugin = [[[b principalClass] alloc] init]; + NSLog(@"Candidate: %@", plugin); + if ([plugin respondsToSelector:@selector(pluginType)]) + { + NSLog(@"Responds to selector"); + switch([plugin pluginType]) + { + case kCogPluginCodec: //Only type currently + NSLog(@"Its a codec"); + [codecPlugins addObject:plugin]; + break; + default: + NSLog(@"Unknown plugin type"); + break; + } + } + } + } + } +} + +- (void)loadPlugins +{ + [self loadPluginsAtPath:[[NSBundle mainBundle] builtInPlugInsPath]]; + [self loadPluginsAtPath:[@"~/Library/Application Support/Cog/Plugins" stringByExpandingTildeInPath]]; +} + +- (void)setupInputPlugins +{ + NSEnumerator *pluginsEnum = [codecPlugins objectEnumerator]; + id plugin; + while (plugin = [pluginsEnum nextObject]) + { + Class decoder = [plugin decoder]; + Class metadataReader = [plugin metadataReader]; + Class propertiesReader = [plugin propertiesReader]; + + if (decoder) { + NSEnumerator *fileTypesEnum = [[decoder fileTypes] objectEnumerator]; + id fileType; + NSString *classString = NSStringFromClass(decoder); + while (fileType = [fileTypesEnum nextObject]) + { + [decoders setObject:classString forKey:fileType]; + } + } + + if (metadataReader) { + NSEnumerator *fileTypesEnum = [[metadataReader fileTypes] objectEnumerator]; + id fileType; + NSString *classString = NSStringFromClass(metadataReader); + while (fileType = [fileTypesEnum nextObject]) + { + [metadataReaders setObject:classString forKey:fileType]; + } + } + + if (propertiesReader) { + NSEnumerator *fileTypesEnum = [[propertiesReader fileTypes] objectEnumerator]; + id fileType; + NSString *classString = NSStringFromClass(propertiesReader); + while (fileType = [fileTypesEnum nextObject]) + { + [propertiesReaders setObject:classString forKey:fileType]; + } + } + } +} + +- (void)setupPlugins { + [self setupInputPlugins]; +} + +- (void)printPluginInfo +{ + NSLog(@"Codecs: %@\n\n", codecPlugins); +} + +- (NSDictionary *)decoders +{ + return decoders; +} + +- (NSDictionary *)metadataReaders +{ + return metadataReaders; +} + +- (NSDictionary *)propertiesReaders +{ + return propertiesReaders; +} + +@end + +//This is called when the framework is loaded. +void __attribute__ ((constructor)) InitializePlugins(void) { + static BOOL wasInitialized = NO; + if (!wasInitialized) { + // safety in case we get called twice. + [[PluginController sharedPluginController] setup]; + + wasInitialized = YES; + } +} diff --git a/Sound/Status.h b/Audio/Status.h similarity index 100% rename from Sound/Status.h rename to Audio/Status.h diff --git a/Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.h b/Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.h new file mode 100644 index 000000000..b2ea3d6ae --- /dev/null +++ b/Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.h @@ -0,0 +1,30 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import +#import + +// Return an array of valid audio file extensions recognized by Core Audio +NSArray * getCoreAudioExtensions(); + +AudioStreamBasicDescription propertiesToASBD(NSDictionary *properties); +NSDictionary *ASBDToProperties(AudioStreamBasicDescription asbd); + +BOOL hostIsBigEndian(); \ No newline at end of file diff --git a/Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.m b/Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.m new file mode 100644 index 000000000..828fc3267 --- /dev/null +++ b/Audio/ThirdParty/CoreAudioUtils/CoreAudioUtils.m @@ -0,0 +1,90 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "CoreAudioUtils.h" + +#include + +// CoreAudio utility function +static NSArray *sAudioExtensions = nil; + +// Return an array of valid audio file extensions recognized by Core Audio +NSArray * +getCoreAudioExtensions() +{ + OSStatus err; + UInt32 size; + + @synchronized(sAudioExtensions) { + if(nil == sAudioExtensions) { + size = sizeof(sAudioExtensions); + err = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AllExtensions, 0, NULL, &size, &sAudioExtensions); + if(noErr != err) { + return nil; + } + + [sAudioExtensions retain]; + } + } + + return sAudioExtensions; +} + + +BOOL hostIsBigEndian() +{ +#ifdef __BIG_ENDIAN__ + return YES; +#else + return NO; +#endif +} + +AudioStreamBasicDescription propertiesToASBD(NSDictionary *properties) +{ + AudioStreamBasicDescription asbd; + asbd.mFormatID = kAudioFormatLinearPCM; + asbd.mFormatFlags = 0; + + asbd.mSampleRate = [[properties objectForKey:@"sampleRate"] doubleValue]; + + asbd.mBitsPerChannel = [[properties objectForKey:@"bitsPerSample"] intValue]; + + asbd.mChannelsPerFrame = [[properties objectForKey:@"channels"] intValue];; + asbd.mBytesPerFrame = (asbd.mBitsPerChannel/8)*asbd.mChannelsPerFrame; + + asbd.mFramesPerPacket = 1; + asbd.mBytesPerPacket = asbd.mBytesPerFrame; + asbd.mReserved = 0; + + if ([[properties objectForKey:@"endian"] isEqualToString:@"big"] || ([[properties objectForKey:@"endian"] isEqualToString:@"host"] && hostIsBigEndian() )) + { + asbd.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian; + asbd.mFormatFlags |= kLinearPCMFormatFlagIsAlignedHigh; + } + + if ([[properties objectForKey:@"unsigned"] boolValue] == NO) { + asbd.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; + } + + return asbd; +} + + diff --git a/Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.h b/Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.h new file mode 100644 index 000000000..3f2c1544a --- /dev/null +++ b/Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.h @@ -0,0 +1,88 @@ +// +// VirtualRingBuffer.h +// PlayBufferedSoundFile +// +/* + Copyright (c) 2002, Kurt Revis. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of Snoize nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// +// VirtualRingBuffer implements a classic ring buffer (or circular buffer), with a couple of twists. +// +// * It allows reads and writes to happen in different threads, with no explicit locking, +// so readers and writers will never block. This is useful if either thread uses the +// time-constraint scheduling policy, since it is bad for such threads to block for +// indefinite amounts of time. +// +// * It uses a virtual memory trick to allow the client to read or write using just one +// operation, even if the data involved wraps around the end of the buffer. We allocate +// our buffer normally, and then place a VM region immediately after it in the address +// space which maps back to the "real" buffer. So reads and writes into both sections +// are transparently translated into the same physical memory. +// This makes the API much simpler to use, and saves us from doing some math to +// calculate the wraparound points. +// The tradeoff is that we use twice as much address space for the buffer than we would +// otherwise. Address space is not typically constrained for most applications, though, +// so this isn't a big problem. +// The idea for this trick came from (via sweetcode.org), +// although none of that code is used here. (We use the Mach VM API directly.) +// + +// Threading note: +// It is expected that this object will be shared between exactly two threads; one will +// always read and the other will always write. In that situation, the implementation is +// thread-safe, and this object will never block or yield. +// It will also work in one thread, of course (although I don't know why you'd bother). +// However, if you have multiple reader or writer threads, all bets are off! + +#import + + +@interface VirtualRingBuffer : NSObject +{ + void *buffer; + void *bufferEnd; + UInt32 bufferLength; + // buffer is the start of the ring buffer's address space. + // bufferEnd is the end of the "real" buffer (always buffer + bufferLength). + // Note that the "virtual" portion of the buffer extends from bufferEnd to bufferEnd+bufferLength. + + void *readPointer; + void *writePointer; +} + +- (id)initWithLength:(UInt32)length; +// Note: The specified length will be rounded up to an integral number of VM pages. + +// Empties the buffer. It is NOT safe to do this while anyone is reading from or writing to the buffer. +- (void)empty; +// Checks if the buffer is empty or not. This is safe in any thread. +- (BOOL)isEmpty; + +- (UInt32)bufferLength; + +// Read operations: + +// The reading thread must call this method first. +- (UInt32)lengthAvailableToReadReturningPointer:(void **)returnedReadPointer; +// Iff a value > 0 is returned, the reading thread may go on to read that much data from the returned pointer. +// Afterwards, the reading thread must call didReadLength:. +- (void)didReadLength:(UInt32)length; + +// Write operations: + +// The writing thread must call this method first. +- (UInt32)lengthAvailableToWriteReturningPointer:(void **)returnedWritePointer; +// Iff a value > 0 is returned, the writing thread may then write that much data into the returned pointer. +// Afterwards, the writing thread must call didWriteLength:. +- (void)didWriteLength:(UInt32)length; + +@end diff --git a/Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.m b/Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.m new file mode 100644 index 000000000..d085614ee --- /dev/null +++ b/Audio/ThirdParty/VirtualRingBuffer/VirtualRingBuffer.m @@ -0,0 +1,309 @@ +// +// VirtualRingBuffer.m +// PlayBufferedSoundFile +// +/* + Copyright (c) 2002, Kurt Revis. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of Snoize nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#import "VirtualRingBuffer.h" + +#include +#include + + +@implementation VirtualRingBuffer + +static void *allocateVirtualBuffer(UInt32 bufferLength); +static void deallocateVirtualBuffer(void *buffer, UInt32 bufferLength); + + +- (id)initWithLength:(UInt32)length +{ + if (![super init]) + return nil; + + // We need to allocate entire VM pages, so round the specified length up to the next page if necessary. + bufferLength = round_page(length); + + buffer = allocateVirtualBuffer(bufferLength); + if (buffer) { + bufferEnd = buffer + bufferLength; + } else { + [self release]; + return nil; + } + + readPointer = NULL; + writePointer = NULL; + + return self; +} + +- (void)dealloc +{ + if (buffer) + deallocateVirtualBuffer(buffer, bufferLength); + + [super dealloc]; +} + +- (void)empty +{ + // Assumption: + // No one is reading or writing from the buffer, in any thread, when this method is called. + + readPointer = NULL; + writePointer = NULL; +} + +- (BOOL)isEmpty +{ + return (readPointer != NULL && writePointer != NULL); +} + + +- (UInt32)bufferLength +{ + return bufferLength; +} + +// +// Theory of operation: +// +// This class keeps a pointer to the next byte to be read (readPointer) and a pointer to the next byte to be written (writePointer). +// readPointer is only advanced in the reading thread (except for one case: when the buffer first has data written to it). +// writePointer is only advanced in the writing thread. +// +// Since loading and storing word length data is atomic, each pointer can safely be modified in one thread while the other thread +// uses it, IF each thread is careful to make a local copy of the "opposite" pointer when necessary. +// + +// +// Read operations +// + +- (UInt32)lengthAvailableToReadReturningPointer:(void **)returnedReadPointer +{ + // Assumptions: + // returnedReadPointer != NULL + + UInt32 length; + // Read this pointer exactly once, so we're safe in case it is changed in another thread + void *localWritePointer = writePointer; + + // Depending on out-of-order execution and memory storage, either one of these may be NULL when the buffer is empty. So we must check both. + if (!readPointer || !localWritePointer) { + // The buffer is empty + length = 0; + } else if (localWritePointer > readPointer) { + // Write is ahead of read in the buffer + length = localWritePointer - readPointer; + } else { + // Write has wrapped around past read, OR write == read (the buffer is full) + length = bufferLength - (readPointer - localWritePointer); + } + + *returnedReadPointer = readPointer; + return length; +} + +- (void)didReadLength:(UInt32)length +{ + // Assumptions: + // [self lengthAvailableToReadReturningPointer:] currently returns a value >= length + // length > 0 + + void *newReadPointer; + + newReadPointer = readPointer + length; + if (newReadPointer >= bufferEnd) + newReadPointer -= bufferLength; + + if (newReadPointer == writePointer) { + // We just read the last data out of the buffer, so it is now empty. + newReadPointer = NULL; + } + + // Store the new read pointer. This is the only place this happens in the read thread. + readPointer = newReadPointer; +} + + +// +// Write operations +// + +- (UInt32)lengthAvailableToWriteReturningPointer:(void **)returnedWritePointer +{ + // Assumptions: + // returnedWritePointer != NULL + + UInt32 length; + // Read this pointer exactly once, so we're safe in case it is changed in another thread + void *localReadPointer = readPointer; + + // Either one of these may be NULL when the buffer is empty. So we must check both. + if (!localReadPointer || !writePointer) { + // The buffer is empty. Set it up to be written into. + // This is one of the two places the write pointer can change; both are in the write thread. + writePointer = buffer; + length = bufferLength; + } else if (writePointer <= localReadPointer) { + // Write is before read in the buffer, OR write == read (meaning that the buffer is full). + length = localReadPointer - writePointer; + } else { + // Write is behind read in the buffer. The available space wraps around. + length = (bufferEnd - writePointer) + (localReadPointer - buffer); + } + + *returnedWritePointer = writePointer; + return length; +} + +- (void)didWriteLength:(UInt32)length +{ + // Assumptions: + // [self lengthAvailableToWriteReturningPointer:] currently returns a value >= length + // length > 0 + + void *oldWritePointer = writePointer; + void *newWritePointer; + + // Advance the write pointer, wrapping around if necessary. + newWritePointer = writePointer + length; + if (newWritePointer >= bufferEnd) + newWritePointer -= bufferLength; + + // This is one of the two places the write pointer can change; both are in the write thread. + writePointer = newWritePointer; + + // Also, if the read pointer is NULL, then we just wrote into a previously empty buffer, so set the read pointer. + // This is the only place the read pointer is changed in the write thread. + // The read thread should never change the read pointer when it is NULL, so this is safe. + if (!readPointer) + readPointer = oldWritePointer; +} + +@end + + +void *allocateVirtualBuffer(UInt32 bufferLength) +{ + kern_return_t error; + vm_address_t originalAddress = (vm_address_t)NULL; + vm_address_t realAddress = (vm_address_t)NULL; + mach_port_t memoryEntry; + vm_size_t memoryEntryLength; + vm_address_t virtualAddress = (vm_address_t)NULL; + + // We want to find where we can get 2 * bufferLength bytes of contiguous address space. + // So let's just allocate that space, remember its address, and deallocate it. + // (This doesn't actually have to touch all of that memory so it's not terribly expensive.) + error = vm_allocate(mach_task_self(), &originalAddress, 2 * bufferLength, TRUE); + if (error) { +#if DEBUG + mach_error("vm_allocate initial chunk", error); +#endif + return NULL; + } + + error = vm_deallocate(mach_task_self(), originalAddress, 2 * bufferLength); + if (error) { +#if DEBUG + mach_error("vm_deallocate initial chunk", error); +#endif + return NULL; + } + + // Then allocate a "real" block of memory at the same address, but with the normal bufferLength. + realAddress = originalAddress; + error = vm_allocate(mach_task_self(), &realAddress, bufferLength, FALSE); + if (error) { +#if DEBUG + mach_error("vm_allocate real chunk", error); +#endif + return NULL; + } + if (realAddress != originalAddress) { +#if DEBUG + DBLog(@"allocateVirtualBuffer: vm_allocate 2nd time didn't return same address (%p vs %p)", originalAddress, realAddress); +#endif + goto errorReturn; + } + + // Then make a memory entry for the area we just allocated. + memoryEntryLength = bufferLength; + error = mach_make_memory_entry(mach_task_self(), &memoryEntryLength, realAddress, VM_PROT_READ | VM_PROT_WRITE, &memoryEntry, (vm_address_t)NULL); + if (error) { +#if DEBUG + mach_error("mach_make_memory_entry", error); +#endif + goto errorReturn; + } + if (!memoryEntry) { +#if DEBUG + DBLog(@"mach_make_memory_entry: returned memoryEntry of NULL"); +#endif + goto errorReturn; + } + if (memoryEntryLength != bufferLength) { +#if DEBUG + DBLog(@"mach_make_memory_entry: size changed (from %0x to %0x)", bufferLength, memoryEntryLength); +#endif + goto errorReturn; + } + + // And map the area immediately after the first block, with length bufferLength, to that memory entry. + virtualAddress = realAddress + bufferLength; + error = vm_map(mach_task_self(), &virtualAddress, bufferLength, 0, FALSE, memoryEntry, 0, FALSE, VM_PROT_READ | VM_PROT_WRITE, VM_PROT_READ | VM_PROT_WRITE, VM_INHERIT_DEFAULT); + if (error) { +#if DEBUG + mach_error("vm_map", error); +#endif + // TODO Retry from the beginning, instead of failing completely. There is a tiny (but > 0) probability that someone + // will allocate this space out from under us. + virtualAddress = (vm_address_t)NULL; + goto errorReturn; + } + if (virtualAddress != realAddress + bufferLength) { +#if DEBUG + DBLog(@"vm_map: didn't return correct address (%p vs %p)", realAddress + bufferLength, virtualAddress); +#endif + goto errorReturn; + } + + // Success! + return (void *)realAddress; + +errorReturn: + if (realAddress) + vm_deallocate(mach_task_self(), realAddress, bufferLength); + if (virtualAddress) + vm_deallocate(mach_task_self(), virtualAddress, bufferLength); + + return NULL; +} + +void deallocateVirtualBuffer(void *buffer, UInt32 bufferLength) +{ + kern_return_t error; + + // We can conveniently deallocate both the vm_allocated memory and + // the vm_mapped region at the same time. + error = vm_deallocate(mach_task_self(), (vm_address_t)buffer, bufferLength * 2); + if (error) { +#if DEBUG + mach_error("vm_deallocate in dealloc", error); +#endif + } +} diff --git a/Audio/Utils/DBLog.h b/Audio/Utils/DBLog.h new file mode 100644 index 000000000..8c3fb0825 --- /dev/null +++ b/Audio/Utils/DBLog.h @@ -0,0 +1,21 @@ +/* + * NSDebug.h + * Cog + * + * Created by Vincent Spader on 5/30/05. + * Copyright 2005 Vincent Spader All rights reserved. + * + */ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + void DBLog(NSString *format, ...); + +#ifdef __cplusplus +}; +#endif diff --git a/Audio/Utils/DBLog.m b/Audio/Utils/DBLog.m new file mode 100644 index 000000000..db96956ab --- /dev/null +++ b/Audio/Utils/DBLog.m @@ -0,0 +1,25 @@ +/* + * NSDebug.c + * Cog + * + * Created by Vincent Spader on 5/30/05. + * Copyright 2005 Vincent Spader All rights reserved. + * + */ + +#include "DBLog.h" + + +void DBLog(NSString *format, ...) +{ +#ifdef DEBUG + + va_list ap; + + va_start(ap, format); + + NSLogv(format, ap); + + va_end(ap); +#endif +} diff --git a/Audio/Utils/Semaphore.h b/Audio/Utils/Semaphore.h new file mode 100644 index 000000000..a5c231666 --- /dev/null +++ b/Audio/Utils/Semaphore.h @@ -0,0 +1,21 @@ +// +// Semaphore.h +// Cog +// +// Created by Vincent Spader on 8/2/05. +// Copyright 2005 Vincent Spader. All rights reserved. +// + +#import +#import + +@interface Semaphore : NSObject { + semaphore_t semaphore; +} + +-(id)init; +-(void)signal; +-(void)timedWait:(int)seconds; +-(void)wait; + +@end diff --git a/Audio/Utils/Semaphore.m b/Audio/Utils/Semaphore.m new file mode 100644 index 000000000..b21e12b3d --- /dev/null +++ b/Audio/Utils/Semaphore.m @@ -0,0 +1,43 @@ +// +// Semaphore.m +// Cog +// +// Created by Vincent Spader on 8/2/05. +// Copyright 2005 Vincent Spader. All rights reserved. +// + +#import "Semaphore.h" + + +@implementation Semaphore + +-(id)init +{ + self = [super init]; + if (self) + { + semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0); + } + + return self; +} + +-(void)signal +{ + semaphore_signal_all(semaphore); +} + +-(void)timedWait:(int)seconds +{ + mach_timespec_t timeout = {seconds, 0}; + + semaphore_timedwait(semaphore, timeout); +} + +-(void)wait +{ + mach_timespec_t t = {2.0, 0.0}; //2 second timeout + semaphore_timedwait(semaphore, t); +} + +@end diff --git a/COMPILE b/COMPILE index 0b4233452..aa3478bc0 100644 --- a/COMPILE +++ b/COMPILE @@ -1,5 +1,5 @@ -To compile Cog, you must first compile all of the projects in the Libraries and Preferences folders with the Release build configuration. +To compile Cog, you must first compile all of the projects in the Frameworks and Preferences folders with the Release build configuration. -To make this easier, I have created a bash script named build_dependencies.sh in the main folder. Just run that in a terminal, and when it is finished, all the dependencies should be built. +To make this easier, I have created a bash script named build_dependencies.sh in the Scripts folder. Just run that in a terminal from the project root, and when it is finished, all the dependencies should be built. If you have any problems, email me at vspader@users.sourceforge.net diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index be24148d7..ace194d8d 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -7,20 +7,76 @@ objects = { /* Begin PBXBuildFile section */ + 1705F1510B8BCB0C00C8B40D /* Help in Resources */ = {isa = PBXBuildFile; fileRef = 1705F1420B8BCB0C00C8B40D /* Help */; }; 171678C00AC8C39E00C28CF3 /* SmartFolderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 171678BE0AC8C39E00C28CF3 /* SmartFolderNode.m */; }; + 1770429C0B8BC53600B86321 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 177042980B8BC53600B86321 /* AppController.m */; }; + 1770429E0B8BC53600B86321 /* PlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1770429A0B8BC53600B86321 /* PlaybackController.m */; }; + 177EBF9E0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF7A0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m */; }; + 177EBFA00B8BC2A70000BC8C /* AMRemovableTableColumn.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF7C0B8BC2A70000BC8C /* AMRemovableTableColumn.m */; }; + 177EBFA20B8BC2A70000BC8C /* AppleRemote.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF7F0B8BC2A70000BC8C /* AppleRemote.m */; }; + 177EBFA70B8BC2A70000BC8C /* ImageTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF870B8BC2A70000BC8C /* ImageTextCell.m */; }; + 177EBFA90B8BC2A70000BC8C /* KFTypeSelectTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF8A0B8BC2A70000BC8C /* KFTypeSelectTableView.m */; }; + 177EBFAB0B8BC2A70000BC8C /* NDHotKeyControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF8D0B8BC2A70000BC8C /* NDHotKeyControl.m */; }; + 177EBFAD0B8BC2A70000BC8C /* NDHotKeyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF8F0B8BC2A70000BC8C /* NDHotKeyEvent.m */; }; + 177EBFAF0B8BC2A70000BC8C /* UKFileWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF920B8BC2A70000BC8C /* UKFileWatcher.m */; }; + 177EBFB10B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF940B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.m */; }; + 177EBFB40B8BC2A70000BC8C /* UKKQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF970B8BC2A70000BC8C /* UKKQueue.m */; }; + 177EBFB60B8BC2A70000BC8C /* UKMainThreadProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EBF990B8BC2A70000BC8C /* UKMainThreadProxy.m */; }; + 177EC01F0B8BC2CF0000BC8C /* ClickField.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EC0130B8BC2CF0000BC8C /* ClickField.m */; }; + 177EC0210B8BC2CF0000BC8C /* DBLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EC0150B8BC2CF0000BC8C /* DBLog.m */; }; + 177EC0230B8BC2CF0000BC8C /* DragScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EC0170B8BC2CF0000BC8C /* DragScrollView.m */; }; + 177EC0270B8BC2CF0000BC8C /* TrackingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EC01B0B8BC2CF0000BC8C /* TrackingCell.m */; }; + 177EC0290B8BC2CF0000BC8C /* TrackingSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 177EC01D0B8BC2CF0000BC8C /* TrackingSlider.m */; }; + 177EC0440B8BC2FF0000BC8C /* add_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC02E0B8BC2FF0000BC8C /* add_blue.png */; }; + 177EC0450B8BC2FF0000BC8C /* add_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC02F0B8BC2FF0000BC8C /* add_gray.png */; }; + 177EC0460B8BC2FF0000BC8C /* file_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0300B8BC2FF0000BC8C /* file_blue.png */; }; + 177EC0470B8BC2FF0000BC8C /* file_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0310B8BC2FF0000BC8C /* file_gray.png */; }; + 177EC0480B8BC2FF0000BC8C /* info_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0320B8BC2FF0000BC8C /* info_blue.png */; }; + 177EC0490B8BC2FF0000BC8C /* info_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0330B8BC2FF0000BC8C /* info_gray.png */; }; + 177EC04A0B8BC2FF0000BC8C /* next_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0340B8BC2FF0000BC8C /* next_blue.png */; }; + 177EC04B0B8BC2FF0000BC8C /* next_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0350B8BC2FF0000BC8C /* next_gray.png */; }; + 177EC04C0B8BC2FF0000BC8C /* pause_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0360B8BC2FF0000BC8C /* pause_blue.png */; }; + 177EC04D0B8BC2FF0000BC8C /* pause_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0370B8BC2FF0000BC8C /* pause_gray.png */; }; + 177EC04E0B8BC2FF0000BC8C /* play_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0380B8BC2FF0000BC8C /* play_blue.png */; }; + 177EC04F0B8BC2FF0000BC8C /* play_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0390B8BC2FF0000BC8C /* play_gray.png */; }; + 177EC0500B8BC2FF0000BC8C /* prev_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC03A0B8BC2FF0000BC8C /* prev_blue.png */; }; + 177EC0510B8BC2FF0000BC8C /* prev_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC03B0B8BC2FF0000BC8C /* prev_gray.png */; }; + 177EC0520B8BC2FF0000BC8C /* remove_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC03C0B8BC2FF0000BC8C /* remove_blue.png */; }; + 177EC0530B8BC2FF0000BC8C /* remove_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC03D0B8BC2FF0000BC8C /* remove_gray.png */; }; + 177EC0540B8BC2FF0000BC8C /* repeat_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC03E0B8BC2FF0000BC8C /* repeat_off.png */; }; + 177EC0550B8BC2FF0000BC8C /* repeat_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC03F0B8BC2FF0000BC8C /* repeat_on.png */; }; + 177EC0560B8BC2FF0000BC8C /* shuffle_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0400B8BC2FF0000BC8C /* shuffle_off.png */; }; + 177EC0570B8BC2FF0000BC8C /* shuffle_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0410B8BC2FF0000BC8C /* shuffle_on.png */; }; + 177EC0580B8BC2FF0000BC8C /* volume_high.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0420B8BC2FF0000BC8C /* volume_high.png */; }; + 177EC0590B8BC2FF0000BC8C /* volume_low.png in Resources */ = {isa = PBXBuildFile; fileRef = 177EC0430B8BC2FF0000BC8C /* volume_low.png */; }; + 177FD0140B90CAB50011C3B5 /* CoreAudio.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD0130B90CAB50011C3B5 /* CoreAudio.bundle */; }; + 177FD0180B90CABF0011C3B5 /* Flac.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD0170B90CABF0011C3B5 /* Flac.bundle */; }; + 177FD01C0B90CAC60011C3B5 /* MAD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD01B0B90CAC60011C3B5 /* MAD.bundle */; }; + 177FD0200B90CACE0011C3B5 /* MonkeysAudio.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD01F0B90CACE0011C3B5 /* MonkeysAudio.bundle */; }; + 177FD0240B90CAD60011C3B5 /* Musepack.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD0230B90CAD60011C3B5 /* Musepack.bundle */; }; + 177FD0280B90CADE0011C3B5 /* Shorten.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD0270B90CADE0011C3B5 /* Shorten.bundle */; }; + 177FD02C0B90CAE50011C3B5 /* TagLib.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD02B0B90CAE50011C3B5 /* TagLib.bundle */; }; + 177FD0300B90CAEC0011C3B5 /* Vorbis.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD02F0B90CAEC0011C3B5 /* Vorbis.bundle */; }; + 177FD0340B90CAF40011C3B5 /* WavPack.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 177FD0330B90CAF40011C3B5 /* WavPack.bundle */; }; + 177FD1030B90CB5F0011C3B5 /* WavPack.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0330B90CAF40011C3B5 /* WavPack.bundle */; }; + 177FD1040B90CB5F0011C3B5 /* Vorbis.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD02F0B90CAEC0011C3B5 /* Vorbis.bundle */; }; + 177FD1050B90CB5F0011C3B5 /* TagLib.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD02B0B90CAE50011C3B5 /* TagLib.bundle */; }; + 177FD1060B90CB5F0011C3B5 /* Shorten.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0270B90CADE0011C3B5 /* Shorten.bundle */; }; + 177FD1070B90CB5F0011C3B5 /* Musepack.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0230B90CAD60011C3B5 /* Musepack.bundle */; }; + 177FD1080B90CB5F0011C3B5 /* MonkeysAudio.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD01F0B90CACE0011C3B5 /* MonkeysAudio.bundle */; }; + 177FD1090B90CB5F0011C3B5 /* MAD.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD01B0B90CAC60011C3B5 /* MAD.bundle */; }; + 177FD10A0B90CB5F0011C3B5 /* Flac.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0170B90CABF0011C3B5 /* Flac.bundle */; }; + 177FD10B0B90CB5F0011C3B5 /* CoreAudio.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0130B90CAB50011C3B5 /* CoreAudio.bundle */; }; + 17B61B5E0B90A27F00BC003F /* CogAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17B61B5D0B90A27F00BC003F /* CogAudio.framework */; }; + 17B61B630B90A28100BC003F /* CogAudio.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17B61B5D0B90A27F00BC003F /* CogAudio.framework */; }; 17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */; }; 17BB5CF90B8A86350009ACB1 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF60B8A86350009ACB1 /* AudioUnit.framework */; }; 17BB5CFA0B8A86350009ACB1 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF70B8A86350009ACB1 /* CoreAudio.framework */; }; 17BB5CFB0B8A86350009ACB1 /* CoreAudioKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF80B8A86350009ACB1 /* CoreAudioKit.framework */; }; 17BB5EA60B8A87850009ACB1 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5EA50B8A87850009ACB1 /* IOKit.framework */; }; - 28309BF90B8D3299008E7B8F /* files_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 28309BF80B8D3299008E7B8F /* files_off.png */; }; - 28309BFB0B8D32BB008E7B8F /* files_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 28309BFA0B8D32BB008E7B8F /* files_on.png */; }; - 28309BFD0B8D32C2008E7B8F /* info_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 28309BFC0B8D32C2008E7B8F /* info_on.png */; }; - 28309BFF0B8D32C6008E7B8F /* info_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 28309BFE0B8D32C6008E7B8F /* info_off.png */; }; - 28DE09C10B8D318C007150D4 /* repeat_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 28DE09BD0B8D318C007150D4 /* repeat_off.png */; }; - 28DE09C20B8D318C007150D4 /* repeat_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 28DE09BE0B8D318C007150D4 /* repeat_on.png */; }; - 28DE09C30B8D318C007150D4 /* shuffle_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 28DE09BF0B8D318C007150D4 /* shuffle_off.png */; }; - 28DE09C40B8D318C007150D4 /* shuffle_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 28DE09C00B8D318C007150D4 /* shuffle_on.png */; }; + 17D21DF60B8BE86900D1EBDE /* CoreAudioUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21DF40B8BE86900D1EBDE /* CoreAudioUtils.m */; }; + 17F94CC20B8D08FB00A34E87 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17F94CC10B8D08FB00A34E87 /* Sparkle.framework */; }; + 17F94CCD0B8D090800A34E87 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17F94CC10B8D08FB00A34E87 /* Sparkle.framework */; }; 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; @@ -28,51 +84,15 @@ 8E07AAF30AAC910500A4B32F /* SS_PrefsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E07AAF00AAC910500A4B32F /* SS_PrefsController.m */; }; 8E07AB790AAC930B00A4B32F /* PreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E07AB770AAC930B00A4B32F /* PreferencesController.m */; }; 8E07AEEA0AACA08100A4B32F /* General.preferencePane in Resources */ = {isa = PBXBuildFile; fileRef = 8E07AEE90AACA08100A4B32F /* General.preferencePane */; }; - 8E0AD92B0A338CFF00215AEF /* Shorten.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EA9172F0A336CC30087CDE2 /* Shorten.framework */; }; 8E1296DB0A2BA9CE00443124 /* PlaylistHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E1296D90A2BA9CE00443124 /* PlaylistHeaderView.m */; }; - 8E15A7EA0B894327006DC802 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E15A7E90B894327006DC802 /* Sparkle.framework */; }; - 8E15A8140B894336006DC802 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E15A7E90B894327006DC802 /* Sparkle.framework */; }; - 8E1849C50A43DB5C0084C69D /* MAD.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E1849C40A43DB5C0084C69D /* MAD.framework */; }; - 8E1849C90A43DB730084C69D /* MADFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E1849C70A43DB730084C69D /* MADFile.m */; }; - 8E4C7F090A0509FC003BE25F /* DragScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4C7F070A0509FC003BE25F /* DragScrollView.m */; }; - 8E4CAB5B0A32251B00214C1D /* ShnFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8E4CAB5A0A32251B00214C1D /* ShnFile.mm */; }; - 8E513F420B890FB90012904D /* AppleRemote.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E513F400B890FB90012904D /* AppleRemote.m */; }; - 8E53E8610A44C11B007E5BCE /* ID3Tag.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */; }; - 8E53E8690A44C121007E5BCE /* ID3Tag.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */; }; - 8E57824C0B88B7AC00C97376 /* KFTypeSelectTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E57824A0B88B7AC00C97376 /* KFTypeSelectTableView.m */; }; 8E6889240AAA403C00AD3950 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E6889230AAA403C00AD3950 /* Carbon.framework */; }; - 8E6A8E2C0A0D8A68002ABE9C /* CoreAudioFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6A8E280A0D8A68002ABE9C /* CoreAudioFile.m */; }; - 8E6A8E380A0D8AD8002ABE9C /* CoreAudioUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */; }; - 8E75756909F31D5A0080F1EE /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75751909F31D5A0080F1EE /* AppController.m */; }; - 8E75756A09F31D5A0080F1EE /* ClickField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75751C09F31D5A0080F1EE /* ClickField.m */; }; - 8E75756B09F31D5A0080F1EE /* InfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75751E09F31D5A0080F1EE /* InfoView.m */; }; - 8E75756C09F31D5A0080F1EE /* TrackingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752009F31D5A0080F1EE /* TrackingCell.m */; }; - 8E75756D09F31D5A0080F1EE /* TrackingSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752209F31D5A0080F1EE /* TrackingSlider.m */; }; 8E75756E09F31D5A0080F1EE /* FeedbackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752509F31D5A0080F1EE /* FeedbackController.m */; }; 8E75756F09F31D5A0080F1EE /* FeedbackSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752709F31D5A0080F1EE /* FeedbackSocket.m */; }; - 8E75757009F31D5A0080F1EE /* PlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752909F31D5A0080F1EE /* PlaybackController.m */; }; 8E75757109F31D5A0080F1EE /* DNDArrayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752C09F31D5A0080F1EE /* DNDArrayController.m */; }; 8E75757209F31D5A0080F1EE /* PlaylistController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75752E09F31D5A0080F1EE /* PlaylistController.m */; }; 8E75757309F31D5A0080F1EE /* PlaylistEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753009F31D5A0080F1EE /* PlaylistEntry.m */; }; 8E75757409F31D5A0080F1EE /* PlaylistView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753209F31D5A0080F1EE /* PlaylistView.m */; }; 8E75757509F31D5A0080F1EE /* Shuffle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753409F31D5A0080F1EE /* Shuffle.m */; }; - 8E75757609F31D5A0080F1EE /* BufferChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753709F31D5A0080F1EE /* BufferChain.m */; }; - 8E75757709F31D5A0080F1EE /* ConverterNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753909F31D5A0080F1EE /* ConverterNode.m */; }; - 8E75757809F31D5A0080F1EE /* InputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753B09F31D5A0080F1EE /* InputNode.m */; }; - 8E75757909F31D5A0080F1EE /* Node.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753D09F31D5A0080F1EE /* Node.m */; }; - 8E75757A09F31D5A0080F1EE /* OutputCoreAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753F09F31D5A0080F1EE /* OutputCoreAudio.m */; }; - 8E75757B09F31D5A0080F1EE /* OutputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75754109F31D5A0080F1EE /* OutputNode.m */; }; - 8E75757C09F31D5A0080F1EE /* SoundController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75754309F31D5A0080F1EE /* SoundController.m */; }; - 8E75757E09F31D5A0080F1EE /* FlacFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75754809F31D5A0080F1EE /* FlacFile.m */; }; - 8E75757F09F31D5A0080F1EE /* MonkeysFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8E75754A09F31D5A0080F1EE /* MonkeysFile.mm */; }; - 8E75758109F31D5A0080F1EE /* MusepackFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75754E09F31D5A0080F1EE /* MusepackFile.m */; }; - 8E75758309F31D5A0080F1EE /* SoundFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8E75755209F31D5A0080F1EE /* SoundFile.mm */; }; - 8E75758409F31D5A0080F1EE /* VorbisFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75755409F31D5A0080F1EE /* VorbisFile.m */; }; - 8E75758609F31D5A0080F1EE /* WavPackFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75755809F31D5A0080F1EE /* WavPackFile.m */; }; - 8E75758709F31D5A0080F1EE /* SOUNDTODO in Resources */ = {isa = PBXBuildFile; fileRef = 8E75755909F31D5A0080F1EE /* SOUNDTODO */; }; - 8E75758B09F31D5A0080F1EE /* DBLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75756409F31D5A0080F1EE /* DBLog.m */; }; - 8E75758C09F31D5A0080F1EE /* Semaphore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75756609F31D5A0080F1EE /* Semaphore.m */; }; - 8E75758D09F31D5A0080F1EE /* VirtualRingBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75756809F31D5A0080F1EE /* VirtualRingBuffer.m */; }; 8E7575BE09F31D800080F1EE /* wheel.icns in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575A609F31D800080F1EE /* wheel.icns */; }; 8E7575CB09F31DCA0080F1EE /* Changelog in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C309F31DCA0080F1EE /* Changelog */; }; 8E7575CC09F31DCA0080F1EE /* Cog.scriptSuite in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C409F31DCA0080F1EE /* Cog.scriptSuite */; }; @@ -81,79 +101,44 @@ 8E7575CF09F31DCA0080F1EE /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C709F31DCA0080F1EE /* COPYING */; }; 8E7575D009F31DCA0080F1EE /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C809F31DCA0080F1EE /* Credits.html */; }; 8E7575D109F31DCA0080F1EE /* README in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C909F31DCA0080F1EE /* README */; }; - 8E7575D209F31DCA0080F1EE /* TODO in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575CA09F31DCA0080F1EE /* TODO */; }; 8E7575DB09F31E930080F1EE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575D909F31E930080F1EE /* Localizable.strings */; }; - 8E75773909F31F1F0080F1EE /* FLAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75773709F31F1F0080F1EE /* FLAC.framework */; }; - 8E75773A09F31F1F0080F1EE /* OggFLAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75773809F31F1F0080F1EE /* OggFLAC.framework */; }; - 8E75774009F31F2A0080F1EE /* MAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75773F09F31F2A0080F1EE /* MAC.framework */; }; - 8E75774409F31F370080F1EE /* MPCDec.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75774309F31F370080F1EE /* MPCDec.framework */; }; - 8E75774709F31F450080F1EE /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75774609F31F450080F1EE /* Ogg.framework */; }; - 8E75774E09F31F600080F1EE /* TagLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75774D09F31F600080F1EE /* TagLib.framework */; }; - 8E75775109F31F6B0080F1EE /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75775009F31F6B0080F1EE /* Vorbis.framework */; }; - 8E75775409F31F750080F1EE /* WavPack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75775309F31F750080F1EE /* WavPack.framework */; }; - 8E757B4F09F326710080F1EE /* WavPack.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75775309F31F750080F1EE /* WavPack.framework */; }; - 8E757B5009F326710080F1EE /* Vorbis.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75775009F31F6B0080F1EE /* Vorbis.framework */; }; - 8E757B5109F326710080F1EE /* TagLib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75774D09F31F600080F1EE /* TagLib.framework */; }; - 8E757B5309F326710080F1EE /* Ogg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75774609F31F450080F1EE /* Ogg.framework */; }; - 8E757B5409F326710080F1EE /* MPCDec.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75774309F31F370080F1EE /* MPCDec.framework */; }; - 8E757B5509F326710080F1EE /* MAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75773F09F31F2A0080F1EE /* MAC.framework */; }; - 8E757B5609F326710080F1EE /* FLAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75773709F31F1F0080F1EE /* FLAC.framework */; }; - 8E757B5709F326710080F1EE /* OggFLAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75773809F31F1F0080F1EE /* OggFLAC.framework */; }; - 8E76ED770B877C0700494D51 /* AMRemovableColumnsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E76ED730B877C0700494D51 /* AMRemovableColumnsTableView.m */; }; - 8E76ED790B877C0700494D51 /* AMRemovableTableColumn.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E76ED750B877C0700494D51 /* AMRemovableTableColumn.m */; }; - 8E7A0F1A0A8FEB4A00F27EE8 /* add_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F060A8FEB4A00F27EE8 /* add_blue.png */; }; - 8E7A0F1B0A8FEB4A00F27EE8 /* add_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F070A8FEB4A00F27EE8 /* add_gray.png */; }; - 8E7A0F1E0A8FEB4A00F27EE8 /* next_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F0A0A8FEB4A00F27EE8 /* next_blue.png */; }; - 8E7A0F1F0A8FEB4A00F27EE8 /* next_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F0B0A8FEB4A00F27EE8 /* next_gray.png */; }; - 8E7A0F200A8FEB4A00F27EE8 /* pause_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F0C0A8FEB4A00F27EE8 /* pause_blue.png */; }; - 8E7A0F210A8FEB4A00F27EE8 /* pause_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F0D0A8FEB4A00F27EE8 /* pause_gray.png */; }; - 8E7A0F220A8FEB4A00F27EE8 /* play_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F0E0A8FEB4A00F27EE8 /* play_blue.png */; }; - 8E7A0F230A8FEB4A00F27EE8 /* play_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F0F0A8FEB4A00F27EE8 /* play_gray.png */; }; - 8E7A0F240A8FEB4A00F27EE8 /* prev_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F100A8FEB4A00F27EE8 /* prev_blue.png */; }; - 8E7A0F250A8FEB4A00F27EE8 /* prev_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F110A8FEB4A00F27EE8 /* prev_gray.png */; }; - 8E7A0F260A8FEB4A00F27EE8 /* remove_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F120A8FEB4A00F27EE8 /* remove_blue.png */; }; - 8E7A0F270A8FEB4A00F27EE8 /* remove_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F130A8FEB4A00F27EE8 /* remove_gray.png */; }; - 8E7A0F2C0A8FEB4A00F27EE8 /* volume_high.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */; }; - 8E7A0F2D0A8FEB4A00F27EE8 /* volume_low.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */; }; - 8E7C2B170AACE0F2009B4EAD /* NDHotKeyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E7C2B150AACE0F2009B4EAD /* NDHotKeyEvent.m */; }; - 8EA917300A336CC30087CDE2 /* Shorten.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EA9172F0A336CC30087CDE2 /* Shorten.framework */; }; - 8EB450080A2BB8B300AA711F /* Cog Help in Resources */ = {isa = PBXBuildFile; fileRef = 8EB44FF90A2BB8B300AA711F /* Cog Help */; }; - 8EB971790A44B74A009803E3 /* MAD.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E1849C40A43DB5C0084C69D /* MAD.framework */; }; 8EFFCD5F0AA093AF00C458A5 /* DirectoryNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD430AA093AF00C458A5 /* DirectoryNode.m */; }; 8EFFCD610AA093AF00C458A5 /* FileIconCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD450AA093AF00C458A5 /* FileIconCell.m */; }; 8EFFCD630AA093AF00C458A5 /* FileNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD470AA093AF00C458A5 /* FileNode.m */; }; 8EFFCD650AA093AF00C458A5 /* FileOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD490AA093AF00C458A5 /* FileOutlineView.m */; }; 8EFFCD670AA093AF00C458A5 /* FileTreeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD4B0AA093AF00C458A5 /* FileTreeController.m */; }; 8EFFCD690AA093AF00C458A5 /* FileTreeWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD4D0AA093AF00C458A5 /* FileTreeWatcher.m */; }; - 8EFFCD6B0AA093AF00C458A5 /* ImageTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD4F0AA093AF00C458A5 /* ImageTextCell.m */; }; 8EFFCD6D0AA093AF00C458A5 /* PathIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD510AA093AF00C458A5 /* PathIcon.m */; }; 8EFFCD6F0AA093AF00C458A5 /* PathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD530AA093AF00C458A5 /* PathNode.m */; }; - 8EFFCD710AA093AF00C458A5 /* UKFileWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD560AA093AF00C458A5 /* UKFileWatcher.m */; }; - 8EFFCD730AA093AF00C458A5 /* UKFNSubscribeFileWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD580AA093AF00C458A5 /* UKFNSubscribeFileWatcher.m */; }; - 8EFFCD740AA093AF00C458A5 /* UKKQueue Readme.txt in Resources */ = {isa = PBXBuildFile; fileRef = 8EFFCD590AA093AF00C458A5 /* UKKQueue Readme.txt */; }; - 8EFFCD760AA093AF00C458A5 /* UKKQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD5B0AA093AF00C458A5 /* UKKQueue.m */; }; - 8EFFCD780AA093AF00C458A5 /* UKMainThreadProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFFCD5D0AA093AF00C458A5 /* UKMainThreadProxy.m */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ + 177FD1000B90CB570011C3B5 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 177FD1030B90CB5F0011C3B5 /* WavPack.bundle in CopyFiles */, + 177FD1040B90CB5F0011C3B5 /* Vorbis.bundle in CopyFiles */, + 177FD1050B90CB5F0011C3B5 /* TagLib.bundle in CopyFiles */, + 177FD1060B90CB5F0011C3B5 /* Shorten.bundle in CopyFiles */, + 177FD1070B90CB5F0011C3B5 /* Musepack.bundle in CopyFiles */, + 177FD1080B90CB5F0011C3B5 /* MonkeysAudio.bundle in CopyFiles */, + 177FD1090B90CB5F0011C3B5 /* MAD.bundle in CopyFiles */, + 177FD10A0B90CB5F0011C3B5 /* Flac.bundle in CopyFiles */, + 177FD10B0B90CB5F0011C3B5 /* CoreAudio.bundle in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8E757AEC09F3265E0080F1EE /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 8E15A8140B894336006DC802 /* Sparkle.framework in CopyFiles */, - 8E53E8690A44C121007E5BCE /* ID3Tag.framework in CopyFiles */, - 8EB971790A44B74A009803E3 /* MAD.framework in CopyFiles */, - 8E0AD92B0A338CFF00215AEF /* Shorten.framework in CopyFiles */, - 8E757B4F09F326710080F1EE /* WavPack.framework in CopyFiles */, - 8E757B5009F326710080F1EE /* Vorbis.framework in CopyFiles */, - 8E757B5109F326710080F1EE /* TagLib.framework in CopyFiles */, - 8E757B5309F326710080F1EE /* Ogg.framework in CopyFiles */, - 8E757B5409F326710080F1EE /* MPCDec.framework in CopyFiles */, - 8E757B5509F326710080F1EE /* MAC.framework in CopyFiles */, - 8E757B5609F326710080F1EE /* FLAC.framework in CopyFiles */, - 8E757B5709F326710080F1EE /* OggFLAC.framework in CopyFiles */, + 17B61B630B90A28100BC003F /* CogAudio.framework in CopyFiles */, + 17F94CCD0B8D090800A34E87 /* Sparkle.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -162,32 +147,93 @@ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1705F1420B8BCB0C00C8B40D /* Help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Help; sourceTree = ""; }; 171678BD0AC8C39E00C28CF3 /* SmartFolderNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartFolderNode.h; sourceTree = ""; }; 171678BE0AC8C39E00C28CF3 /* SmartFolderNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmartFolderNode.m; sourceTree = ""; }; + 1770424E0B8BC41800B86321 /* Cog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cog.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 177042970B8BC53600B86321 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; + 177042980B8BC53600B86321 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; + 177042990B8BC53600B86321 /* PlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaybackController.h; sourceTree = ""; }; + 1770429A0B8BC53600B86321 /* PlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaybackController.m; sourceTree = ""; }; + 177EBF790B8BC2A70000BC8C /* AMRemovableColumnsTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AMRemovableColumnsTableView.h; sourceTree = ""; }; + 177EBF7A0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AMRemovableColumnsTableView.m; sourceTree = ""; }; + 177EBF7B0B8BC2A70000BC8C /* AMRemovableTableColumn.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AMRemovableTableColumn.h; sourceTree = ""; }; + 177EBF7C0B8BC2A70000BC8C /* AMRemovableTableColumn.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AMRemovableTableColumn.m; sourceTree = ""; }; + 177EBF7E0B8BC2A70000BC8C /* AppleRemote.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppleRemote.h; sourceTree = ""; }; + 177EBF7F0B8BC2A70000BC8C /* AppleRemote.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppleRemote.m; sourceTree = ""; }; + 177EBF860B8BC2A70000BC8C /* ImageTextCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageTextCell.h; sourceTree = ""; }; + 177EBF870B8BC2A70000BC8C /* ImageTextCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ImageTextCell.m; sourceTree = ""; }; + 177EBF890B8BC2A70000BC8C /* KFTypeSelectTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = KFTypeSelectTableView.h; sourceTree = ""; }; + 177EBF8A0B8BC2A70000BC8C /* KFTypeSelectTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = KFTypeSelectTableView.m; sourceTree = ""; }; + 177EBF8C0B8BC2A70000BC8C /* NDHotKeyControl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NDHotKeyControl.h; sourceTree = ""; }; + 177EBF8D0B8BC2A70000BC8C /* NDHotKeyControl.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NDHotKeyControl.m; sourceTree = ""; }; + 177EBF8E0B8BC2A70000BC8C /* NDHotKeyEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NDHotKeyEvent.h; sourceTree = ""; }; + 177EBF8F0B8BC2A70000BC8C /* NDHotKeyEvent.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NDHotKeyEvent.m; sourceTree = ""; }; + 177EBF910B8BC2A70000BC8C /* UKFileWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKFileWatcher.h; sourceTree = ""; }; + 177EBF920B8BC2A70000BC8C /* UKFileWatcher.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKFileWatcher.m; sourceTree = ""; }; + 177EBF930B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKFNSubscribeFileWatcher.h; sourceTree = ""; }; + 177EBF940B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKFNSubscribeFileWatcher.m; sourceTree = ""; }; + 177EBF950B8BC2A70000BC8C /* UKKQueue Readme.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "UKKQueue Readme.txt"; sourceTree = ""; }; + 177EBF960B8BC2A70000BC8C /* UKKQueue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKKQueue.h; sourceTree = ""; }; + 177EBF970B8BC2A70000BC8C /* UKKQueue.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKKQueue.m; sourceTree = ""; }; + 177EBF980B8BC2A70000BC8C /* UKMainThreadProxy.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKMainThreadProxy.h; sourceTree = ""; }; + 177EBF990B8BC2A70000BC8C /* UKMainThreadProxy.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKMainThreadProxy.m; sourceTree = ""; }; + 177EC0120B8BC2CF0000BC8C /* ClickField.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ClickField.h; sourceTree = ""; }; + 177EC0130B8BC2CF0000BC8C /* ClickField.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ClickField.m; sourceTree = ""; }; + 177EC0140B8BC2CF0000BC8C /* DBLog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DBLog.h; sourceTree = ""; }; + 177EC0150B8BC2CF0000BC8C /* DBLog.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DBLog.m; sourceTree = ""; }; + 177EC0160B8BC2CF0000BC8C /* DragScrollView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DragScrollView.h; sourceTree = ""; }; + 177EC0170B8BC2CF0000BC8C /* DragScrollView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DragScrollView.m; sourceTree = ""; }; + 177EC01A0B8BC2CF0000BC8C /* TrackingCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TrackingCell.h; sourceTree = ""; }; + 177EC01B0B8BC2CF0000BC8C /* TrackingCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TrackingCell.m; sourceTree = ""; }; + 177EC01C0B8BC2CF0000BC8C /* TrackingSlider.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TrackingSlider.h; sourceTree = ""; }; + 177EC01D0B8BC2CF0000BC8C /* TrackingSlider.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TrackingSlider.m; sourceTree = ""; }; + 177EC02E0B8BC2FF0000BC8C /* add_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_blue.png; path = Images/add_blue.png; sourceTree = ""; }; + 177EC02F0B8BC2FF0000BC8C /* add_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_gray.png; path = Images/add_gray.png; sourceTree = ""; }; + 177EC0300B8BC2FF0000BC8C /* file_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = file_blue.png; path = Images/file_blue.png; sourceTree = ""; }; + 177EC0310B8BC2FF0000BC8C /* file_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = file_gray.png; path = Images/file_gray.png; sourceTree = ""; }; + 177EC0320B8BC2FF0000BC8C /* info_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = info_blue.png; path = Images/info_blue.png; sourceTree = ""; }; + 177EC0330B8BC2FF0000BC8C /* info_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = info_gray.png; path = Images/info_gray.png; sourceTree = ""; }; + 177EC0340B8BC2FF0000BC8C /* next_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = next_blue.png; path = Images/next_blue.png; sourceTree = ""; }; + 177EC0350B8BC2FF0000BC8C /* next_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = next_gray.png; path = Images/next_gray.png; sourceTree = ""; }; + 177EC0360B8BC2FF0000BC8C /* pause_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pause_blue.png; path = Images/pause_blue.png; sourceTree = ""; }; + 177EC0370B8BC2FF0000BC8C /* pause_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pause_gray.png; path = Images/pause_gray.png; sourceTree = ""; }; + 177EC0380B8BC2FF0000BC8C /* play_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = play_blue.png; path = Images/play_blue.png; sourceTree = ""; }; + 177EC0390B8BC2FF0000BC8C /* play_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = play_gray.png; path = Images/play_gray.png; sourceTree = ""; }; + 177EC03A0B8BC2FF0000BC8C /* prev_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = prev_blue.png; path = Images/prev_blue.png; sourceTree = ""; }; + 177EC03B0B8BC2FF0000BC8C /* prev_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = prev_gray.png; path = Images/prev_gray.png; sourceTree = ""; }; + 177EC03C0B8BC2FF0000BC8C /* remove_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = remove_blue.png; path = Images/remove_blue.png; sourceTree = ""; }; + 177EC03D0B8BC2FF0000BC8C /* remove_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = remove_gray.png; path = Images/remove_gray.png; sourceTree = ""; }; + 177EC03E0B8BC2FF0000BC8C /* repeat_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = repeat_off.png; path = Images/repeat_off.png; sourceTree = ""; }; + 177EC03F0B8BC2FF0000BC8C /* repeat_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = repeat_on.png; path = Images/repeat_on.png; sourceTree = ""; }; + 177EC0400B8BC2FF0000BC8C /* shuffle_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = shuffle_off.png; path = Images/shuffle_off.png; sourceTree = ""; }; + 177EC0410B8BC2FF0000BC8C /* shuffle_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = shuffle_on.png; path = Images/shuffle_on.png; sourceTree = ""; }; + 177EC0420B8BC2FF0000BC8C /* volume_high.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = volume_high.png; path = Images/volume_high.png; sourceTree = ""; }; + 177EC0430B8BC2FF0000BC8C /* volume_low.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = volume_low.png; path = Images/volume_low.png; sourceTree = ""; }; + 177FD0130B90CAB50011C3B5 /* CoreAudio.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = CoreAudio.bundle; path = Plugins/CoreAudio/build/Release/CoreAudio.bundle; sourceTree = ""; }; + 177FD0170B90CABF0011C3B5 /* Flac.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Flac.bundle; path = Plugins/Flac/build/Release/Flac.bundle; sourceTree = ""; }; + 177FD01B0B90CAC60011C3B5 /* MAD.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = MAD.bundle; path = Plugins/MAD/build/Release/MAD.bundle; sourceTree = ""; }; + 177FD01F0B90CACE0011C3B5 /* MonkeysAudio.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = MonkeysAudio.bundle; path = Plugins/MonkeysAudio/build/Release/MonkeysAudio.bundle; sourceTree = ""; }; + 177FD0230B90CAD60011C3B5 /* Musepack.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Musepack.bundle; path = Plugins/Musepack/build/Release/Musepack.bundle; sourceTree = ""; }; + 177FD0270B90CADE0011C3B5 /* Shorten.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Shorten.bundle; path = Plugins/Shorten/build/Release/Shorten.bundle; sourceTree = ""; }; + 177FD02B0B90CAE50011C3B5 /* TagLib.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = TagLib.bundle; path = Plugins/TagLib/build/Release/TagLib.bundle; sourceTree = ""; }; + 177FD02F0B90CAEC0011C3B5 /* Vorbis.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Vorbis.bundle; path = Plugins/Vorbis/build/Release/Vorbis.bundle; sourceTree = ""; }; + 177FD0330B90CAF40011C3B5 /* WavPack.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = WavPack.bundle; path = Plugins/WavPack/build/Release/WavPack.bundle; sourceTree = ""; }; + 17B61B5D0B90A27F00BC003F /* CogAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CogAudio.framework; path = Audio/build/Release/CogAudio.framework; sourceTree = ""; }; 17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 17BB5CF60B8A86350009ACB1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 17BB5CF70B8A86350009ACB1 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; 17BB5CF80B8A86350009ACB1 /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = /System/Library/Frameworks/CoreAudioKit.framework; sourceTree = ""; }; 17BB5EA50B8A87850009ACB1 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - 28309BF80B8D3299008E7B8F /* files_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = files_off.png; sourceTree = ""; }; - 28309BFA0B8D32BB008E7B8F /* files_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = files_on.png; sourceTree = ""; }; - 28309BFC0B8D32C2008E7B8F /* info_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = info_on.png; sourceTree = ""; }; - 28309BFE0B8D32C6008E7B8F /* info_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = info_off.png; sourceTree = ""; }; - 28DE09B90B8D314B007150D4 /* files_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = files_off.png; sourceTree = ""; }; - 28DE09BA0B8D314B007150D4 /* files_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = files_on.png; sourceTree = ""; }; - 28DE09BB0B8D314B007150D4 /* info_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = info_off.png; sourceTree = ""; }; - 28DE09BC0B8D314B007150D4 /* info_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = info_on.png; sourceTree = ""; }; - 28DE09BD0B8D318C007150D4 /* repeat_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = repeat_off.png; sourceTree = ""; }; - 28DE09BE0B8D318C007150D4 /* repeat_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = repeat_on.png; sourceTree = ""; }; - 28DE09BF0B8D318C007150D4 /* shuffle_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shuffle_off.png; sourceTree = ""; }; - 28DE09C00B8D318C007150D4 /* shuffle_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shuffle_on.png; sourceTree = ""; }; + 17D21DF30B8BE86900D1EBDE /* CoreAudioUtils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioUtils.h; sourceTree = ""; }; + 17D21DF40B8BE86900D1EBDE /* CoreAudioUtils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioUtils.m; sourceTree = ""; }; + 17F94CC10B8D08FB00A34E87 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = ThirdParty/Frameworks/Sparkle.framework; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* Cog_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cog_Prefix.pch; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 8D1107320486CEB800E47090 /* Cog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cog.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8E07AAEE0AAC910500A4B32F /* SS_PreferencePaneProtocol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SS_PreferencePaneProtocol.h; path = Preferences/SS_PreferencePaneProtocol.h; sourceTree = ""; }; 8E07AAEF0AAC910500A4B32F /* SS_PrefsController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SS_PrefsController.h; path = Preferences/SS_PrefsController.h; sourceTree = ""; }; 8E07AAF00AAC910500A4B32F /* SS_PrefsController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = SS_PrefsController.m; path = Preferences/SS_PrefsController.m; sourceTree = ""; }; @@ -196,42 +242,12 @@ 8E07AEE90AACA08100A4B32F /* General.preferencePane */ = {isa = PBXFileReference; lastKnownFileType = folder; name = General.preferencePane; path = Preferences/General/build/Release/General.preferencePane; sourceTree = ""; }; 8E1296D80A2BA9CE00443124 /* PlaylistHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaylistHeaderView.h; sourceTree = ""; }; 8E1296D90A2BA9CE00443124 /* PlaylistHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaylistHeaderView.m; sourceTree = ""; }; - 8E15A7E90B894327006DC802 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Frameworks/Sparkle.framework; sourceTree = ""; }; - 8E1849C40A43DB5C0084C69D /* MAD.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAD.framework; path = Libraries/MAD/build/Release/MAD.framework; sourceTree = ""; }; - 8E1849C60A43DB730084C69D /* MADFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MADFile.h; sourceTree = ""; }; - 8E1849C70A43DB730084C69D /* MADFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MADFile.m; sourceTree = ""; }; - 8E4C7F060A0509FC003BE25F /* DragScrollView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DragScrollView.h; sourceTree = ""; }; - 8E4C7F070A0509FC003BE25F /* DragScrollView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DragScrollView.m; sourceTree = ""; }; - 8E4CAB5A0A32251B00214C1D /* ShnFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ShnFile.mm; sourceTree = ""; }; - 8E513F3F0B890FB90012904D /* AppleRemote.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppleRemote.h; sourceTree = ""; }; - 8E513F400B890FB90012904D /* AppleRemote.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppleRemote.m; sourceTree = ""; }; - 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ID3Tag.framework; path = Libraries/ID3Tag/build/Release/ID3Tag.framework; sourceTree = ""; }; - 8E5782490B88B7AC00C97376 /* KFTypeSelectTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = KFTypeSelectTableView.h; sourceTree = ""; }; - 8E57824A0B88B7AC00C97376 /* KFTypeSelectTableView.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 30; path = KFTypeSelectTableView.m; sourceTree = ""; }; - 8E643DF20A2B585600844A28 /* GameFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameFile.h; sourceTree = ""; }; - 8E643DF30A2B585600844A28 /* GameFile.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GameFile.mm; sourceTree = ""; }; 8E6889230AAA403C00AD3950 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - 8E6A8E270A0D8A68002ABE9C /* CoreAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioFile.h; sourceTree = ""; }; - 8E6A8E280A0D8A68002ABE9C /* CoreAudioFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioFile.m; sourceTree = ""; }; - 8E6A8E350A0D8AD8002ABE9C /* CoreAudioUtils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioUtils.h; sourceTree = ""; }; - 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioUtils.m; sourceTree = ""; }; 8E75751309F31D130080F1EE /* French */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = French.lproj/MainMenu.nib; sourceTree = ""; }; - 8E75751809F31D5A0080F1EE /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; - 8E75751909F31D5A0080F1EE /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; - 8E75751B09F31D5A0080F1EE /* ClickField.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ClickField.h; sourceTree = ""; }; - 8E75751C09F31D5A0080F1EE /* ClickField.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ClickField.m; sourceTree = ""; }; - 8E75751D09F31D5A0080F1EE /* InfoView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = InfoView.h; sourceTree = ""; }; - 8E75751E09F31D5A0080F1EE /* InfoView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = InfoView.m; sourceTree = ""; }; - 8E75751F09F31D5A0080F1EE /* TrackingCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TrackingCell.h; sourceTree = ""; }; - 8E75752009F31D5A0080F1EE /* TrackingCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TrackingCell.m; sourceTree = ""; }; - 8E75752109F31D5A0080F1EE /* TrackingSlider.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TrackingSlider.h; sourceTree = ""; }; - 8E75752209F31D5A0080F1EE /* TrackingSlider.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TrackingSlider.m; sourceTree = ""; }; 8E75752409F31D5A0080F1EE /* FeedbackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FeedbackController.h; sourceTree = ""; }; 8E75752509F31D5A0080F1EE /* FeedbackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FeedbackController.m; sourceTree = ""; }; 8E75752609F31D5A0080F1EE /* FeedbackSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FeedbackSocket.h; sourceTree = ""; }; 8E75752709F31D5A0080F1EE /* FeedbackSocket.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FeedbackSocket.m; sourceTree = ""; }; - 8E75752809F31D5A0080F1EE /* PlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaybackController.h; sourceTree = ""; }; - 8E75752909F31D5A0080F1EE /* PlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaybackController.m; sourceTree = ""; }; 8E75752B09F31D5A0080F1EE /* DNDArrayController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DNDArrayController.h; sourceTree = ""; }; 8E75752C09F31D5A0080F1EE /* DNDArrayController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DNDArrayController.m; sourceTree = ""; }; 8E75752D09F31D5A0080F1EE /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaylistController.h; sourceTree = ""; }; @@ -242,45 +258,6 @@ 8E75753209F31D5A0080F1EE /* PlaylistView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaylistView.m; sourceTree = ""; }; 8E75753309F31D5A0080F1EE /* Shuffle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Shuffle.h; sourceTree = ""; }; 8E75753409F31D5A0080F1EE /* Shuffle.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Shuffle.m; sourceTree = ""; }; - 8E75753609F31D5A0080F1EE /* BufferChain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BufferChain.h; sourceTree = ""; }; - 8E75753709F31D5A0080F1EE /* BufferChain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = BufferChain.m; sourceTree = ""; }; - 8E75753809F31D5A0080F1EE /* ConverterNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ConverterNode.h; sourceTree = ""; }; - 8E75753909F31D5A0080F1EE /* ConverterNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ConverterNode.m; sourceTree = ""; }; - 8E75753A09F31D5A0080F1EE /* InputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = InputNode.h; sourceTree = ""; }; - 8E75753B09F31D5A0080F1EE /* InputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = InputNode.m; sourceTree = ""; }; - 8E75753C09F31D5A0080F1EE /* Node.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Node.h; sourceTree = ""; }; - 8E75753D09F31D5A0080F1EE /* Node.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Node.m; sourceTree = ""; }; - 8E75753E09F31D5A0080F1EE /* OutputCoreAudio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputCoreAudio.h; sourceTree = ""; }; - 8E75753F09F31D5A0080F1EE /* OutputCoreAudio.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputCoreAudio.m; sourceTree = ""; }; - 8E75754009F31D5A0080F1EE /* OutputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputNode.h; sourceTree = ""; }; - 8E75754109F31D5A0080F1EE /* OutputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputNode.m; sourceTree = ""; }; - 8E75754209F31D5A0080F1EE /* SoundController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoundController.h; sourceTree = ""; }; - 8E75754309F31D5A0080F1EE /* SoundController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SoundController.m; sourceTree = ""; }; - 8E75754509F31D5A0080F1EE /* AACFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AACFile.h; sourceTree = ""; }; - 8E75754609F31D5A0080F1EE /* AACFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AACFile.m; sourceTree = ""; }; - 8E75754709F31D5A0080F1EE /* FlacFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlacFile.h; sourceTree = ""; }; - 8E75754809F31D5A0080F1EE /* FlacFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FlacFile.m; sourceTree = ""; }; - 8E75754909F31D5A0080F1EE /* MonkeysFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MonkeysFile.h; sourceTree = ""; }; - 8E75754A09F31D5A0080F1EE /* MonkeysFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = MonkeysFile.mm; sourceTree = ""; }; - 8E75754D09F31D5A0080F1EE /* MusepackFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackFile.h; sourceTree = ""; }; - 8E75754E09F31D5A0080F1EE /* MusepackFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackFile.m; sourceTree = ""; }; - 8E75754F09F31D5A0080F1EE /* ShnFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ShnFile.h; sourceTree = ""; }; - 8E75755109F31D5A0080F1EE /* SoundFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoundFile.h; sourceTree = ""; }; - 8E75755209F31D5A0080F1EE /* SoundFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = SoundFile.mm; sourceTree = ""; }; - 8E75755309F31D5A0080F1EE /* VorbisFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VorbisFile.h; sourceTree = ""; }; - 8E75755409F31D5A0080F1EE /* VorbisFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VorbisFile.m; sourceTree = ""; }; - 8E75755509F31D5A0080F1EE /* WaveFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WaveFile.h; sourceTree = ""; }; - 8E75755609F31D5A0080F1EE /* WaveFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WaveFile.m; sourceTree = ""; }; - 8E75755709F31D5A0080F1EE /* WavPackFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WavPackFile.h; sourceTree = ""; }; - 8E75755809F31D5A0080F1EE /* WavPackFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WavPackFile.m; sourceTree = ""; }; - 8E75755909F31D5A0080F1EE /* SOUNDTODO */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SOUNDTODO; sourceTree = ""; }; - 8E75755A09F31D5A0080F1EE /* Status.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Status.h; sourceTree = ""; }; - 8E75756309F31D5A0080F1EE /* DBLog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DBLog.h; sourceTree = ""; }; - 8E75756409F31D5A0080F1EE /* DBLog.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DBLog.m; sourceTree = ""; }; - 8E75756509F31D5A0080F1EE /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Semaphore.h; sourceTree = ""; }; - 8E75756609F31D5A0080F1EE /* Semaphore.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Semaphore.m; sourceTree = ""; }; - 8E75756709F31D5A0080F1EE /* VirtualRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VirtualRingBuffer.h; sourceTree = ""; }; - 8E75756809F31D5A0080F1EE /* VirtualRingBuffer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VirtualRingBuffer.m; sourceTree = ""; }; 8E7575A609F31D800080F1EE /* wheel.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = wheel.icns; sourceTree = ""; }; 8E7575C309F31DCA0080F1EE /* Changelog */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Changelog; sourceTree = ""; }; 8E7575C409F31DCA0080F1EE /* Cog.scriptSuite */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Cog.scriptSuite; sourceTree = ""; }; @@ -289,39 +266,8 @@ 8E7575C709F31DCA0080F1EE /* COPYING */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; 8E7575C809F31DCA0080F1EE /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.html; path = Credits.html; sourceTree = ""; }; 8E7575C909F31DCA0080F1EE /* README */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = README; sourceTree = ""; }; - 8E7575CA09F31DCA0080F1EE /* TODO */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = TODO; sourceTree = ""; }; 8E7575DA09F31E930080F1EE /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; 8E7575DC09F31EAF0080F1EE /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/Localizable.strings; sourceTree = ""; }; - 8E75773709F31F1F0080F1EE /* FLAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FLAC.framework; path = Libraries/FLAC/build/Release/FLAC.framework; sourceTree = ""; }; - 8E75773809F31F1F0080F1EE /* OggFLAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OggFLAC.framework; path = Libraries/FLAC/build/Release/OggFLAC.framework; sourceTree = ""; }; - 8E75773F09F31F2A0080F1EE /* MAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAC.framework; path = Libraries/MAC/build/Release/MAC.framework; sourceTree = ""; }; - 8E75774309F31F370080F1EE /* MPCDec.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPCDec.framework; path = Libraries/MPCDec/build/Release/MPCDec.framework; sourceTree = ""; }; - 8E75774609F31F450080F1EE /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = Libraries/Ogg/build/Release/Ogg.framework; sourceTree = ""; }; - 8E75774D09F31F600080F1EE /* TagLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TagLib.framework; path = Libraries/TagLib/build/Release/TagLib.framework; sourceTree = ""; }; - 8E75775009F31F6B0080F1EE /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = Libraries/Vorbis/build/Release/Vorbis.framework; sourceTree = ""; }; - 8E75775309F31F750080F1EE /* WavPack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WavPack.framework; path = Libraries/WavPack/build/Release/WavPack.framework; sourceTree = ""; }; - 8E76ED720B877C0700494D51 /* AMRemovableColumnsTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AMRemovableColumnsTableView.h; sourceTree = ""; }; - 8E76ED730B877C0700494D51 /* AMRemovableColumnsTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AMRemovableColumnsTableView.m; sourceTree = ""; }; - 8E76ED740B877C0700494D51 /* AMRemovableTableColumn.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AMRemovableTableColumn.h; sourceTree = ""; }; - 8E76ED750B877C0700494D51 /* AMRemovableTableColumn.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AMRemovableTableColumn.m; sourceTree = ""; }; - 8E7A0F060A8FEB4A00F27EE8 /* add_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = add_blue.png; sourceTree = ""; }; - 8E7A0F070A8FEB4A00F27EE8 /* add_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = add_gray.png; sourceTree = ""; }; - 8E7A0F0A0A8FEB4A00F27EE8 /* next_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = next_blue.png; sourceTree = ""; }; - 8E7A0F0B0A8FEB4A00F27EE8 /* next_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = next_gray.png; sourceTree = ""; }; - 8E7A0F0C0A8FEB4A00F27EE8 /* pause_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pause_blue.png; sourceTree = ""; }; - 8E7A0F0D0A8FEB4A00F27EE8 /* pause_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pause_gray.png; sourceTree = ""; }; - 8E7A0F0E0A8FEB4A00F27EE8 /* play_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play_blue.png; sourceTree = ""; }; - 8E7A0F0F0A8FEB4A00F27EE8 /* play_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play_gray.png; sourceTree = ""; }; - 8E7A0F100A8FEB4A00F27EE8 /* prev_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = prev_blue.png; sourceTree = ""; }; - 8E7A0F110A8FEB4A00F27EE8 /* prev_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = prev_gray.png; sourceTree = ""; }; - 8E7A0F120A8FEB4A00F27EE8 /* remove_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = remove_blue.png; sourceTree = ""; }; - 8E7A0F130A8FEB4A00F27EE8 /* remove_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = remove_gray.png; sourceTree = ""; }; - 8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_high.png; sourceTree = ""; }; - 8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_low.png; sourceTree = ""; }; - 8E7C2B140AACE0F2009B4EAD /* NDHotKeyEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NDHotKeyEvent.h; sourceTree = ""; }; - 8E7C2B150AACE0F2009B4EAD /* NDHotKeyEvent.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NDHotKeyEvent.m; sourceTree = ""; }; - 8EA9172F0A336CC30087CDE2 /* Shorten.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Shorten.framework; path = Libraries/Shorten/build/Release/Shorten.framework; sourceTree = ""; }; - 8EB44FF90A2BB8B300AA711F /* Cog Help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "Cog Help"; sourceTree = ""; }; 8EFFCD420AA093AF00C458A5 /* DirectoryNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DirectoryNode.h; sourceTree = ""; }; 8EFFCD430AA093AF00C458A5 /* DirectoryNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = DirectoryNode.m; sourceTree = ""; }; 8EFFCD440AA093AF00C458A5 /* FileIconCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FileIconCell.h; sourceTree = ""; }; @@ -334,21 +280,10 @@ 8EFFCD4B0AA093AF00C458A5 /* FileTreeController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FileTreeController.m; sourceTree = ""; }; 8EFFCD4C0AA093AF00C458A5 /* FileTreeWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FileTreeWatcher.h; sourceTree = ""; }; 8EFFCD4D0AA093AF00C458A5 /* FileTreeWatcher.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FileTreeWatcher.m; sourceTree = ""; }; - 8EFFCD4E0AA093AF00C458A5 /* ImageTextCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageTextCell.h; sourceTree = ""; }; - 8EFFCD4F0AA093AF00C458A5 /* ImageTextCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ImageTextCell.m; sourceTree = ""; }; 8EFFCD500AA093AF00C458A5 /* PathIcon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PathIcon.h; sourceTree = ""; }; 8EFFCD510AA093AF00C458A5 /* PathIcon.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PathIcon.m; sourceTree = ""; }; 8EFFCD520AA093AF00C458A5 /* PathNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PathNode.h; sourceTree = ""; }; 8EFFCD530AA093AF00C458A5 /* PathNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PathNode.m; sourceTree = ""; }; - 8EFFCD550AA093AF00C458A5 /* UKFileWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKFileWatcher.h; sourceTree = ""; }; - 8EFFCD560AA093AF00C458A5 /* UKFileWatcher.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKFileWatcher.m; sourceTree = ""; }; - 8EFFCD570AA093AF00C458A5 /* UKFNSubscribeFileWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKFNSubscribeFileWatcher.h; sourceTree = ""; }; - 8EFFCD580AA093AF00C458A5 /* UKFNSubscribeFileWatcher.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKFNSubscribeFileWatcher.m; sourceTree = ""; }; - 8EFFCD590AA093AF00C458A5 /* UKKQueue Readme.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "UKKQueue Readme.txt"; sourceTree = ""; }; - 8EFFCD5A0AA093AF00C458A5 /* UKKQueue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKKQueue.h; sourceTree = ""; }; - 8EFFCD5B0AA093AF00C458A5 /* UKKQueue.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKKQueue.m; sourceTree = ""; }; - 8EFFCD5C0AA093AF00C458A5 /* UKMainThreadProxy.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UKMainThreadProxy.h; sourceTree = ""; }; - 8EFFCD5D0AA093AF00C458A5 /* UKMainThreadProxy.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UKMainThreadProxy.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -357,24 +292,14 @@ buildActionMask = 2147483647; files = ( 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, - 8E75773909F31F1F0080F1EE /* FLAC.framework in Frameworks */, - 8E75773A09F31F1F0080F1EE /* OggFLAC.framework in Frameworks */, - 8E75774009F31F2A0080F1EE /* MAC.framework in Frameworks */, - 8E75774409F31F370080F1EE /* MPCDec.framework in Frameworks */, - 8E75774709F31F450080F1EE /* Ogg.framework in Frameworks */, - 8E75774E09F31F600080F1EE /* TagLib.framework in Frameworks */, - 8E75775109F31F6B0080F1EE /* Vorbis.framework in Frameworks */, - 8E75775409F31F750080F1EE /* WavPack.framework in Frameworks */, - 8EA917300A336CC30087CDE2 /* Shorten.framework in Frameworks */, - 8E1849C50A43DB5C0084C69D /* MAD.framework in Frameworks */, - 8E53E8610A44C11B007E5BCE /* ID3Tag.framework in Frameworks */, 8E6889240AAA403C00AD3950 /* Carbon.framework in Frameworks */, - 8E15A7EA0B894327006DC802 /* Sparkle.framework in Frameworks */, 17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */, 17BB5CF90B8A86350009ACB1 /* AudioUnit.framework in Frameworks */, 17BB5CFA0B8A86350009ACB1 /* CoreAudio.framework in Frameworks */, 17BB5CFB0B8A86350009ACB1 /* CoreAudioKit.framework in Frameworks */, 17BB5EA60B8A87850009ACB1 /* IOKit.framework in Frameworks */, + 17F94CC20B8D08FB00A34E87 /* Sparkle.framework in Frameworks */, + 17B61B5E0B90A27F00BC003F /* CogAudio.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -384,17 +309,13 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( + 177042960B8BC53600B86321 /* Application */, 8E07AAEA0AAC90DC00A4B32F /* Preferences */, 8EFFCD410AA093AF00C458A5 /* FileDrawer */, 8E75752309F31D5A0080F1EE /* Feedback */, - 8E75756209F31D5A0080F1EE /* Utils */, - 8E75751A09F31D5A0080F1EE /* Custom */, 8E75752A09F31D5A0080F1EE /* Playlist */, - 8E75753509F31D5A0080F1EE /* Sound */, - 8E75751809F31D5A0080F1EE /* AppController.h */, - 8E75751909F31D5A0080F1EE /* AppController.m */, - 8E75752809F31D5A0080F1EE /* PlaybackController.h */, - 8E75752909F31D5A0080F1EE /* PlaybackController.m */, + 177EBF770B8BC2A70000BC8C /* ThirdParty */, + 177EC0110B8BC2CF0000BC8C /* Utils */, ); name = Classes; sourceTree = ""; @@ -402,7 +323,8 @@ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( - 8E15A7E90B894327006DC802 /* Sparkle.framework */, + 17B61B5D0B90A27F00BC003F /* CogAudio.framework */, + 17F94CC10B8D08FB00A34E87 /* Sparkle.framework */, 8E6889230AAA403C00AD3950 /* Carbon.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, ); @@ -423,10 +345,179 @@ name = "Other Frameworks"; sourceTree = ""; }; + 177042960B8BC53600B86321 /* Application */ = { + isa = PBXGroup; + children = ( + 177042970B8BC53600B86321 /* AppController.h */, + 177042980B8BC53600B86321 /* AppController.m */, + 177042990B8BC53600B86321 /* PlaybackController.h */, + 1770429A0B8BC53600B86321 /* PlaybackController.m */, + ); + path = Application; + sourceTree = ""; + }; + 177EBF770B8BC2A70000BC8C /* ThirdParty */ = { + isa = PBXGroup; + children = ( + 17D21DF20B8BE86900D1EBDE /* CoreAudioUtils */, + 177EBF780B8BC2A70000BC8C /* AMRemovableColumnsTableView */, + 177EBF7D0B8BC2A70000BC8C /* AppleRemote */, + 177EBF800B8BC2A70000BC8C /* CoreAudioUtils */, + 177EBF850B8BC2A70000BC8C /* ImageTextCell */, + 177EBF880B8BC2A70000BC8C /* KFTypeSelectTableView */, + 177EBF8B0B8BC2A70000BC8C /* NDHotKeys */, + 177EBF900B8BC2A70000BC8C /* UKKQueue */, + ); + path = ThirdParty; + sourceTree = ""; + }; + 177EBF780B8BC2A70000BC8C /* AMRemovableColumnsTableView */ = { + isa = PBXGroup; + children = ( + 177EBF790B8BC2A70000BC8C /* AMRemovableColumnsTableView.h */, + 177EBF7A0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m */, + 177EBF7B0B8BC2A70000BC8C /* AMRemovableTableColumn.h */, + 177EBF7C0B8BC2A70000BC8C /* AMRemovableTableColumn.m */, + ); + path = AMRemovableColumnsTableView; + sourceTree = ""; + }; + 177EBF7D0B8BC2A70000BC8C /* AppleRemote */ = { + isa = PBXGroup; + children = ( + 177EBF7E0B8BC2A70000BC8C /* AppleRemote.h */, + 177EBF7F0B8BC2A70000BC8C /* AppleRemote.m */, + ); + path = AppleRemote; + sourceTree = ""; + }; + 177EBF800B8BC2A70000BC8C /* CoreAudioUtils */ = { + isa = PBXGroup; + children = ( + ); + path = CoreAudioUtils; + sourceTree = ""; + }; + 177EBF850B8BC2A70000BC8C /* ImageTextCell */ = { + isa = PBXGroup; + children = ( + 177EBF860B8BC2A70000BC8C /* ImageTextCell.h */, + 177EBF870B8BC2A70000BC8C /* ImageTextCell.m */, + ); + path = ImageTextCell; + sourceTree = ""; + }; + 177EBF880B8BC2A70000BC8C /* KFTypeSelectTableView */ = { + isa = PBXGroup; + children = ( + 177EBF890B8BC2A70000BC8C /* KFTypeSelectTableView.h */, + 177EBF8A0B8BC2A70000BC8C /* KFTypeSelectTableView.m */, + ); + path = KFTypeSelectTableView; + sourceTree = ""; + }; + 177EBF8B0B8BC2A70000BC8C /* NDHotKeys */ = { + isa = PBXGroup; + children = ( + 177EBF8C0B8BC2A70000BC8C /* NDHotKeyControl.h */, + 177EBF8D0B8BC2A70000BC8C /* NDHotKeyControl.m */, + 177EBF8E0B8BC2A70000BC8C /* NDHotKeyEvent.h */, + 177EBF8F0B8BC2A70000BC8C /* NDHotKeyEvent.m */, + ); + path = NDHotKeys; + sourceTree = ""; + }; + 177EBF900B8BC2A70000BC8C /* UKKQueue */ = { + isa = PBXGroup; + children = ( + 177EBF910B8BC2A70000BC8C /* UKFileWatcher.h */, + 177EBF920B8BC2A70000BC8C /* UKFileWatcher.m */, + 177EBF930B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.h */, + 177EBF940B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.m */, + 177EBF950B8BC2A70000BC8C /* UKKQueue Readme.txt */, + 177EBF960B8BC2A70000BC8C /* UKKQueue.h */, + 177EBF970B8BC2A70000BC8C /* UKKQueue.m */, + 177EBF980B8BC2A70000BC8C /* UKMainThreadProxy.h */, + 177EBF990B8BC2A70000BC8C /* UKMainThreadProxy.m */, + ); + path = UKKQueue; + sourceTree = ""; + }; + 177EC0110B8BC2CF0000BC8C /* Utils */ = { + isa = PBXGroup; + children = ( + 177EC0120B8BC2CF0000BC8C /* ClickField.h */, + 177EC0130B8BC2CF0000BC8C /* ClickField.m */, + 177EC0140B8BC2CF0000BC8C /* DBLog.h */, + 177EC0150B8BC2CF0000BC8C /* DBLog.m */, + 177EC0160B8BC2CF0000BC8C /* DragScrollView.h */, + 177EC0170B8BC2CF0000BC8C /* DragScrollView.m */, + 177EC01A0B8BC2CF0000BC8C /* TrackingCell.h */, + 177EC01B0B8BC2CF0000BC8C /* TrackingCell.m */, + 177EC01C0B8BC2CF0000BC8C /* TrackingSlider.h */, + 177EC01D0B8BC2CF0000BC8C /* TrackingSlider.m */, + ); + path = Utils; + sourceTree = ""; + }; + 177EC02D0B8BC2E60000BC8C /* Images */ = { + isa = PBXGroup; + children = ( + 177EC02E0B8BC2FF0000BC8C /* add_blue.png */, + 177EC02F0B8BC2FF0000BC8C /* add_gray.png */, + 177EC0300B8BC2FF0000BC8C /* file_blue.png */, + 177EC0310B8BC2FF0000BC8C /* file_gray.png */, + 177EC0320B8BC2FF0000BC8C /* info_blue.png */, + 177EC0330B8BC2FF0000BC8C /* info_gray.png */, + 177EC0340B8BC2FF0000BC8C /* next_blue.png */, + 177EC0350B8BC2FF0000BC8C /* next_gray.png */, + 177EC0360B8BC2FF0000BC8C /* pause_blue.png */, + 177EC0370B8BC2FF0000BC8C /* pause_gray.png */, + 177EC0380B8BC2FF0000BC8C /* play_blue.png */, + 177EC0390B8BC2FF0000BC8C /* play_gray.png */, + 177EC03A0B8BC2FF0000BC8C /* prev_blue.png */, + 177EC03B0B8BC2FF0000BC8C /* prev_gray.png */, + 177EC03C0B8BC2FF0000BC8C /* remove_blue.png */, + 177EC03D0B8BC2FF0000BC8C /* remove_gray.png */, + 177EC03E0B8BC2FF0000BC8C /* repeat_off.png */, + 177EC03F0B8BC2FF0000BC8C /* repeat_on.png */, + 177EC0400B8BC2FF0000BC8C /* shuffle_off.png */, + 177EC0410B8BC2FF0000BC8C /* shuffle_on.png */, + 177EC0420B8BC2FF0000BC8C /* volume_high.png */, + 177EC0430B8BC2FF0000BC8C /* volume_low.png */, + ); + name = Images; + sourceTree = ""; + }; + 17B619FF0B909ED400BC003F /* PlugIns */ = { + isa = PBXGroup; + children = ( + 177FD0330B90CAF40011C3B5 /* WavPack.bundle */, + 177FD02F0B90CAEC0011C3B5 /* Vorbis.bundle */, + 177FD02B0B90CAE50011C3B5 /* TagLib.bundle */, + 177FD0270B90CADE0011C3B5 /* Shorten.bundle */, + 177FD0230B90CAD60011C3B5 /* Musepack.bundle */, + 177FD01F0B90CACE0011C3B5 /* MonkeysAudio.bundle */, + 177FD01B0B90CAC60011C3B5 /* MAD.bundle */, + 177FD0170B90CABF0011C3B5 /* Flac.bundle */, + 177FD0130B90CAB50011C3B5 /* CoreAudio.bundle */, + ); + name = PlugIns; + sourceTree = ""; + }; + 17D21DF20B8BE86900D1EBDE /* CoreAudioUtils */ = { + isa = PBXGroup; + children = ( + 17D21DF30B8BE86900D1EBDE /* CoreAudioUtils.h */, + 17D21DF40B8BE86900D1EBDE /* CoreAudioUtils.m */, + ); + path = CoreAudioUtils; + sourceTree = ""; + }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - 8D1107320486CEB800E47090 /* Cog.app */, + 1770424E0B8BC41800B86321 /* Cog.app */, ); name = Products; sourceTree = ""; @@ -438,6 +529,7 @@ 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, + 17B619FF0B909ED400BC003F /* PlugIns */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = Cog; @@ -457,7 +549,8 @@ children = ( 8E07AD280AAC9BE600A4B32F /* Preference Panes */, 8E75758E09F31D800080F1EE /* Icons */, - 8EB44FF90A2BB8B300AA711F /* Cog Help */, + 177EC02D0B8BC2E60000BC8C /* Images */, + 1705F1420B8BCB0C00C8B40D /* Help */, 8D1107310486CEB800E47090 /* Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 8E7575D909F31E930080F1EE /* Localizable.strings */, @@ -469,7 +562,6 @@ 8E7575C709F31DCA0080F1EE /* COPYING */, 8E7575C809F31DCA0080F1EE /* Credits.html */, 8E7575C909F31DCA0080F1EE /* README */, - 8E7575CA09F31DCA0080F1EE /* TODO */, ); name = Resources; sourceTree = ""; @@ -477,7 +569,6 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( - 8E757C0A09F32EDC0080F1EE /* Codec Frameworks */, 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); @@ -504,31 +595,6 @@ name = "Preference Panes"; sourceTree = ""; }; - 8E75751A09F31D5A0080F1EE /* Custom */ = { - isa = PBXGroup; - children = ( - 8E5782490B88B7AC00C97376 /* KFTypeSelectTableView.h */, - 8E57824A0B88B7AC00C97376 /* KFTypeSelectTableView.m */, - 8E76ED720B877C0700494D51 /* AMRemovableColumnsTableView.h */, - 8E76ED730B877C0700494D51 /* AMRemovableColumnsTableView.m */, - 8E76ED740B877C0700494D51 /* AMRemovableTableColumn.h */, - 8E76ED750B877C0700494D51 /* AMRemovableTableColumn.m */, - 8E75751B09F31D5A0080F1EE /* ClickField.h */, - 8E75751C09F31D5A0080F1EE /* ClickField.m */, - 8E75751D09F31D5A0080F1EE /* InfoView.h */, - 8E75751E09F31D5A0080F1EE /* InfoView.m */, - 8E75751F09F31D5A0080F1EE /* TrackingCell.h */, - 8E75752009F31D5A0080F1EE /* TrackingCell.m */, - 8E75752109F31D5A0080F1EE /* TrackingSlider.h */, - 8E75752209F31D5A0080F1EE /* TrackingSlider.m */, - 8E4C7F060A0509FC003BE25F /* DragScrollView.h */, - 8E4C7F070A0509FC003BE25F /* DragScrollView.m */, - 8E7C2B140AACE0F2009B4EAD /* NDHotKeyEvent.h */, - 8E7C2B150AACE0F2009B4EAD /* NDHotKeyEvent.m */, - ); - path = Custom; - sourceTree = ""; - }; 8E75752309F31D5A0080F1EE /* Feedback */ = { isa = PBXGroup; children = ( @@ -559,138 +625,20 @@ path = Playlist; sourceTree = ""; }; - 8E75753509F31D5A0080F1EE /* Sound */ = { - isa = PBXGroup; - children = ( - 8E75753609F31D5A0080F1EE /* BufferChain.h */, - 8E75753709F31D5A0080F1EE /* BufferChain.m */, - 8E75753809F31D5A0080F1EE /* ConverterNode.h */, - 8E75753909F31D5A0080F1EE /* ConverterNode.m */, - 8E75753A09F31D5A0080F1EE /* InputNode.h */, - 8E75753B09F31D5A0080F1EE /* InputNode.m */, - 8E75753C09F31D5A0080F1EE /* Node.h */, - 8E75753D09F31D5A0080F1EE /* Node.m */, - 8E75753E09F31D5A0080F1EE /* OutputCoreAudio.h */, - 8E75753F09F31D5A0080F1EE /* OutputCoreAudio.m */, - 8E75754009F31D5A0080F1EE /* OutputNode.h */, - 8E75754109F31D5A0080F1EE /* OutputNode.m */, - 8E75754209F31D5A0080F1EE /* SoundController.h */, - 8E75754309F31D5A0080F1EE /* SoundController.m */, - 8E75754409F31D5A0080F1EE /* SoundFile */, - 8E75755909F31D5A0080F1EE /* SOUNDTODO */, - 8E75755A09F31D5A0080F1EE /* Status.h */, - ); - path = Sound; - sourceTree = ""; - }; - 8E75754409F31D5A0080F1EE /* SoundFile */ = { - isa = PBXGroup; - children = ( - 8E75754509F31D5A0080F1EE /* AACFile.h */, - 8E75754609F31D5A0080F1EE /* AACFile.m */, - 8E6A8E270A0D8A68002ABE9C /* CoreAudioFile.h */, - 8E6A8E280A0D8A68002ABE9C /* CoreAudioFile.m */, - 8E75754709F31D5A0080F1EE /* FlacFile.h */, - 8E75754809F31D5A0080F1EE /* FlacFile.m */, - 8E75754909F31D5A0080F1EE /* MonkeysFile.h */, - 8E75754A09F31D5A0080F1EE /* MonkeysFile.mm */, - 8E75754D09F31D5A0080F1EE /* MusepackFile.h */, - 8E75754E09F31D5A0080F1EE /* MusepackFile.m */, - 8E75754F09F31D5A0080F1EE /* ShnFile.h */, - 8E4CAB5A0A32251B00214C1D /* ShnFile.mm */, - 8E75755109F31D5A0080F1EE /* SoundFile.h */, - 8E75755209F31D5A0080F1EE /* SoundFile.mm */, - 8E75755309F31D5A0080F1EE /* VorbisFile.h */, - 8E75755409F31D5A0080F1EE /* VorbisFile.m */, - 8E75755509F31D5A0080F1EE /* WaveFile.h */, - 8E75755609F31D5A0080F1EE /* WaveFile.m */, - 8E75755709F31D5A0080F1EE /* WavPackFile.h */, - 8E75755809F31D5A0080F1EE /* WavPackFile.m */, - 8E643DF20A2B585600844A28 /* GameFile.h */, - 8E643DF30A2B585600844A28 /* GameFile.mm */, - 8E1849C60A43DB730084C69D /* MADFile.h */, - 8E1849C70A43DB730084C69D /* MADFile.m */, - ); - path = SoundFile; - sourceTree = ""; - }; - 8E75756209F31D5A0080F1EE /* Utils */ = { - isa = PBXGroup; - children = ( - 8E513F3F0B890FB90012904D /* AppleRemote.h */, - 8E513F400B890FB90012904D /* AppleRemote.m */, - 8E6A8E350A0D8AD8002ABE9C /* CoreAudioUtils.h */, - 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */, - 8E75756309F31D5A0080F1EE /* DBLog.h */, - 8E75756409F31D5A0080F1EE /* DBLog.m */, - 8E75756509F31D5A0080F1EE /* Semaphore.h */, - 8E75756609F31D5A0080F1EE /* Semaphore.m */, - 8E75756709F31D5A0080F1EE /* VirtualRingBuffer.h */, - 8E75756809F31D5A0080F1EE /* VirtualRingBuffer.m */, - ); - path = Utils; - sourceTree = ""; - }; 8E75758E09F31D800080F1EE /* Icons */ = { isa = PBXGroup; children = ( - 28DE09BD0B8D318C007150D4 /* repeat_off.png */, - 28DE09BE0B8D318C007150D4 /* repeat_on.png */, - 28DE09BF0B8D318C007150D4 /* shuffle_off.png */, - 28DE09C00B8D318C007150D4 /* shuffle_on.png */, - 28DE09B90B8D314B007150D4 /* files_off.png */, - 28DE09BA0B8D314B007150D4 /* files_on.png */, - 28DE09BB0B8D314B007150D4 /* info_off.png */, - 28DE09BC0B8D314B007150D4 /* info_on.png */, - 8E7A0F060A8FEB4A00F27EE8 /* add_blue.png */, - 8E7A0F070A8FEB4A00F27EE8 /* add_gray.png */, - 8E7A0F0A0A8FEB4A00F27EE8 /* next_blue.png */, - 8E7A0F0B0A8FEB4A00F27EE8 /* next_gray.png */, - 8E7A0F0C0A8FEB4A00F27EE8 /* pause_blue.png */, - 8E7A0F0D0A8FEB4A00F27EE8 /* pause_gray.png */, - 8E7A0F0E0A8FEB4A00F27EE8 /* play_blue.png */, - 8E7A0F0F0A8FEB4A00F27EE8 /* play_gray.png */, - 8E7A0F100A8FEB4A00F27EE8 /* prev_blue.png */, - 8E7A0F110A8FEB4A00F27EE8 /* prev_gray.png */, - 8E7A0F120A8FEB4A00F27EE8 /* remove_blue.png */, - 8E7A0F130A8FEB4A00F27EE8 /* remove_gray.png */, - 8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */, - 8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */, 8E7575A609F31D800080F1EE /* wheel.icns */, - 28309BF80B8D3299008E7B8F /* files_off.png */, - 28309BFA0B8D32BB008E7B8F /* files_on.png */, - 28309BFC0B8D32C2008E7B8F /* info_on.png */, - 28309BFE0B8D32C6008E7B8F /* info_off.png */, ); path = Icons; sourceTree = ""; }; - 8E757C0A09F32EDC0080F1EE /* Codec Frameworks */ = { - isa = PBXGroup; - children = ( - 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */, - 8E1849C40A43DB5C0084C69D /* MAD.framework */, - 8EA9172F0A336CC30087CDE2 /* Shorten.framework */, - 8E75775309F31F750080F1EE /* WavPack.framework */, - 8E75775009F31F6B0080F1EE /* Vorbis.framework */, - 8E75774D09F31F600080F1EE /* TagLib.framework */, - 8E75774609F31F450080F1EE /* Ogg.framework */, - 8E75774309F31F370080F1EE /* MPCDec.framework */, - 8E75773F09F31F2A0080F1EE /* MAC.framework */, - 8E75773709F31F1F0080F1EE /* FLAC.framework */, - 8E75773809F31F1F0080F1EE /* OggFLAC.framework */, - ); - name = "Codec Frameworks"; - sourceTree = ""; - }; 8EFFCD410AA093AF00C458A5 /* FileDrawer */ = { isa = PBXGroup; children = ( 8EFFCD540AA093AF00C458A5 /* UKKQueue */, 8EFFCD440AA093AF00C458A5 /* FileIconCell.h */, 8EFFCD450AA093AF00C458A5 /* FileIconCell.m */, - 8EFFCD4E0AA093AF00C458A5 /* ImageTextCell.h */, - 8EFFCD4F0AA093AF00C458A5 /* ImageTextCell.m */, 8EFFCD500AA093AF00C458A5 /* PathIcon.h */, 8EFFCD510AA093AF00C458A5 /* PathIcon.m */, 8EFFCD480AA093AF00C458A5 /* FileOutlineView.h */, @@ -714,15 +662,6 @@ 8EFFCD540AA093AF00C458A5 /* UKKQueue */ = { isa = PBXGroup; children = ( - 8EFFCD550AA093AF00C458A5 /* UKFileWatcher.h */, - 8EFFCD560AA093AF00C458A5 /* UKFileWatcher.m */, - 8EFFCD570AA093AF00C458A5 /* UKFNSubscribeFileWatcher.h */, - 8EFFCD580AA093AF00C458A5 /* UKFNSubscribeFileWatcher.m */, - 8EFFCD590AA093AF00C458A5 /* UKKQueue Readme.txt */, - 8EFFCD5A0AA093AF00C458A5 /* UKKQueue.h */, - 8EFFCD5B0AA093AF00C458A5 /* UKKQueue.m */, - 8EFFCD5C0AA093AF00C458A5 /* UKMainThreadProxy.h */, - 8EFFCD5D0AA093AF00C458A5 /* UKMainThreadProxy.m */, ); path = UKKQueue; sourceTree = ""; @@ -734,10 +673,11 @@ isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Cog" */; buildPhases = ( - 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, + 8D1107290486CEB800E47090 /* Resources */, 8E757AEC09F3265E0080F1EE /* CopyFiles */, + 177FD1000B90CB570011C3B5 /* CopyFiles */, ); buildRules = ( ); @@ -746,7 +686,7 @@ name = Cog; productInstallPath = "$(HOME)/Applications"; productName = Cog; - productReference = 8D1107320486CEB800E47090 /* Cog.app */; + productReference = 1770424E0B8BC41800B86321 /* Cog.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -772,7 +712,6 @@ 8E07AEEA0AACA08100A4B32F /* General.preferencePane in Resources */, 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */, 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, - 8E75758709F31D5A0080F1EE /* SOUNDTODO in Resources */, 8E7575BE09F31D800080F1EE /* wheel.icns in Resources */, 8E7575CB09F31DCA0080F1EE /* Changelog in Resources */, 8E7575CC09F31DCA0080F1EE /* Cog.scriptSuite in Resources */, @@ -781,32 +720,39 @@ 8E7575CF09F31DCA0080F1EE /* COPYING in Resources */, 8E7575D009F31DCA0080F1EE /* Credits.html in Resources */, 8E7575D109F31DCA0080F1EE /* README in Resources */, - 8E7575D209F31DCA0080F1EE /* TODO in Resources */, 8E7575DB09F31E930080F1EE /* Localizable.strings in Resources */, - 8EB450080A2BB8B300AA711F /* Cog Help in Resources */, - 8E7A0F1A0A8FEB4A00F27EE8 /* add_blue.png in Resources */, - 8E7A0F1B0A8FEB4A00F27EE8 /* add_gray.png in Resources */, - 8E7A0F1E0A8FEB4A00F27EE8 /* next_blue.png in Resources */, - 8E7A0F1F0A8FEB4A00F27EE8 /* next_gray.png in Resources */, - 8E7A0F200A8FEB4A00F27EE8 /* pause_blue.png in Resources */, - 8E7A0F210A8FEB4A00F27EE8 /* pause_gray.png in Resources */, - 8E7A0F220A8FEB4A00F27EE8 /* play_blue.png in Resources */, - 8E7A0F230A8FEB4A00F27EE8 /* play_gray.png in Resources */, - 8E7A0F240A8FEB4A00F27EE8 /* prev_blue.png in Resources */, - 8E7A0F250A8FEB4A00F27EE8 /* prev_gray.png in Resources */, - 8E7A0F260A8FEB4A00F27EE8 /* remove_blue.png in Resources */, - 8E7A0F270A8FEB4A00F27EE8 /* remove_gray.png in Resources */, - 8E7A0F2C0A8FEB4A00F27EE8 /* volume_high.png in Resources */, - 8E7A0F2D0A8FEB4A00F27EE8 /* volume_low.png in Resources */, - 8EFFCD740AA093AF00C458A5 /* UKKQueue Readme.txt in Resources */, - 28DE09C10B8D318C007150D4 /* repeat_off.png in Resources */, - 28DE09C20B8D318C007150D4 /* repeat_on.png in Resources */, - 28DE09C30B8D318C007150D4 /* shuffle_off.png in Resources */, - 28DE09C40B8D318C007150D4 /* shuffle_on.png in Resources */, - 28309BF90B8D3299008E7B8F /* files_off.png in Resources */, - 28309BFB0B8D32BB008E7B8F /* files_on.png in Resources */, - 28309BFD0B8D32C2008E7B8F /* info_on.png in Resources */, - 28309BFF0B8D32C6008E7B8F /* info_off.png in Resources */, + 177EC0440B8BC2FF0000BC8C /* add_blue.png in Resources */, + 177EC0450B8BC2FF0000BC8C /* add_gray.png in Resources */, + 177EC0460B8BC2FF0000BC8C /* file_blue.png in Resources */, + 177EC0470B8BC2FF0000BC8C /* file_gray.png in Resources */, + 177EC0480B8BC2FF0000BC8C /* info_blue.png in Resources */, + 177EC0490B8BC2FF0000BC8C /* info_gray.png in Resources */, + 177EC04A0B8BC2FF0000BC8C /* next_blue.png in Resources */, + 177EC04B0B8BC2FF0000BC8C /* next_gray.png in Resources */, + 177EC04C0B8BC2FF0000BC8C /* pause_blue.png in Resources */, + 177EC04D0B8BC2FF0000BC8C /* pause_gray.png in Resources */, + 177EC04E0B8BC2FF0000BC8C /* play_blue.png in Resources */, + 177EC04F0B8BC2FF0000BC8C /* play_gray.png in Resources */, + 177EC0500B8BC2FF0000BC8C /* prev_blue.png in Resources */, + 177EC0510B8BC2FF0000BC8C /* prev_gray.png in Resources */, + 177EC0520B8BC2FF0000BC8C /* remove_blue.png in Resources */, + 177EC0530B8BC2FF0000BC8C /* remove_gray.png in Resources */, + 177EC0540B8BC2FF0000BC8C /* repeat_off.png in Resources */, + 177EC0550B8BC2FF0000BC8C /* repeat_on.png in Resources */, + 177EC0560B8BC2FF0000BC8C /* shuffle_off.png in Resources */, + 177EC0570B8BC2FF0000BC8C /* shuffle_on.png in Resources */, + 177EC0580B8BC2FF0000BC8C /* volume_high.png in Resources */, + 177EC0590B8BC2FF0000BC8C /* volume_low.png in Resources */, + 1705F1510B8BCB0C00C8B40D /* Help in Resources */, + 177FD0140B90CAB50011C3B5 /* CoreAudio.bundle in Resources */, + 177FD0180B90CABF0011C3B5 /* Flac.bundle in Resources */, + 177FD01C0B90CAC60011C3B5 /* MAD.bundle in Resources */, + 177FD0200B90CACE0011C3B5 /* MonkeysAudio.bundle in Resources */, + 177FD0240B90CAD60011C3B5 /* Musepack.bundle in Resources */, + 177FD0280B90CADE0011C3B5 /* Shorten.bundle in Resources */, + 177FD02C0B90CAE50011C3B5 /* TagLib.bundle in Resources */, + 177FD0300B90CAEC0011C3B5 /* Vorbis.bundle in Resources */, + 177FD0340B90CAF40011C3B5 /* WavPack.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -818,62 +764,44 @@ buildActionMask = 2147483647; files = ( 8D11072D0486CEB800E47090 /* main.m in Sources */, - 8E75756909F31D5A0080F1EE /* AppController.m in Sources */, - 8E75756A09F31D5A0080F1EE /* ClickField.m in Sources */, - 8E75756B09F31D5A0080F1EE /* InfoView.m in Sources */, - 8E75756C09F31D5A0080F1EE /* TrackingCell.m in Sources */, - 8E75756D09F31D5A0080F1EE /* TrackingSlider.m in Sources */, 8E75756E09F31D5A0080F1EE /* FeedbackController.m in Sources */, 8E75756F09F31D5A0080F1EE /* FeedbackSocket.m in Sources */, - 8E75757009F31D5A0080F1EE /* PlaybackController.m in Sources */, 8E75757109F31D5A0080F1EE /* DNDArrayController.m in Sources */, 8E75757209F31D5A0080F1EE /* PlaylistController.m in Sources */, 8E75757309F31D5A0080F1EE /* PlaylistEntry.m in Sources */, 8E75757409F31D5A0080F1EE /* PlaylistView.m in Sources */, 8E75757509F31D5A0080F1EE /* Shuffle.m in Sources */, - 8E75757609F31D5A0080F1EE /* BufferChain.m in Sources */, - 8E75757709F31D5A0080F1EE /* ConverterNode.m in Sources */, - 8E75757809F31D5A0080F1EE /* InputNode.m in Sources */, - 8E75757909F31D5A0080F1EE /* Node.m in Sources */, - 8E75757A09F31D5A0080F1EE /* OutputCoreAudio.m in Sources */, - 8E75757B09F31D5A0080F1EE /* OutputNode.m in Sources */, - 8E75757C09F31D5A0080F1EE /* SoundController.m in Sources */, - 8E75757E09F31D5A0080F1EE /* FlacFile.m in Sources */, - 8E75757F09F31D5A0080F1EE /* MonkeysFile.mm in Sources */, - 8E75758109F31D5A0080F1EE /* MusepackFile.m in Sources */, - 8E75758309F31D5A0080F1EE /* SoundFile.mm in Sources */, - 8E75758409F31D5A0080F1EE /* VorbisFile.m in Sources */, - 8E75758609F31D5A0080F1EE /* WavPackFile.m in Sources */, - 8E75758B09F31D5A0080F1EE /* DBLog.m in Sources */, - 8E75758C09F31D5A0080F1EE /* Semaphore.m in Sources */, - 8E75758D09F31D5A0080F1EE /* VirtualRingBuffer.m in Sources */, - 8E4C7F090A0509FC003BE25F /* DragScrollView.m in Sources */, - 8E6A8E2C0A0D8A68002ABE9C /* CoreAudioFile.m in Sources */, - 8E6A8E380A0D8AD8002ABE9C /* CoreAudioUtils.m in Sources */, 8E1296DB0A2BA9CE00443124 /* PlaylistHeaderView.m in Sources */, - 8E4CAB5B0A32251B00214C1D /* ShnFile.mm in Sources */, - 8E1849C90A43DB730084C69D /* MADFile.m in Sources */, 8EFFCD5F0AA093AF00C458A5 /* DirectoryNode.m in Sources */, 8EFFCD610AA093AF00C458A5 /* FileIconCell.m in Sources */, 8EFFCD630AA093AF00C458A5 /* FileNode.m in Sources */, 8EFFCD650AA093AF00C458A5 /* FileOutlineView.m in Sources */, 8EFFCD670AA093AF00C458A5 /* FileTreeController.m in Sources */, 8EFFCD690AA093AF00C458A5 /* FileTreeWatcher.m in Sources */, - 8EFFCD6B0AA093AF00C458A5 /* ImageTextCell.m in Sources */, 8EFFCD6D0AA093AF00C458A5 /* PathIcon.m in Sources */, 8EFFCD6F0AA093AF00C458A5 /* PathNode.m in Sources */, - 8EFFCD710AA093AF00C458A5 /* UKFileWatcher.m in Sources */, - 8EFFCD730AA093AF00C458A5 /* UKFNSubscribeFileWatcher.m in Sources */, - 8EFFCD760AA093AF00C458A5 /* UKKQueue.m in Sources */, - 8EFFCD780AA093AF00C458A5 /* UKMainThreadProxy.m in Sources */, 8E07AAF30AAC910500A4B32F /* SS_PrefsController.m in Sources */, 8E07AB790AAC930B00A4B32F /* PreferencesController.m in Sources */, - 8E7C2B170AACE0F2009B4EAD /* NDHotKeyEvent.m in Sources */, 171678C00AC8C39E00C28CF3 /* SmartFolderNode.m in Sources */, - 8E76ED770B877C0700494D51 /* AMRemovableColumnsTableView.m in Sources */, - 8E76ED790B877C0700494D51 /* AMRemovableTableColumn.m in Sources */, - 8E57824C0B88B7AC00C97376 /* KFTypeSelectTableView.m in Sources */, - 8E513F420B890FB90012904D /* AppleRemote.m in Sources */, + 177EBF9E0B8BC2A70000BC8C /* AMRemovableColumnsTableView.m in Sources */, + 177EBFA00B8BC2A70000BC8C /* AMRemovableTableColumn.m in Sources */, + 177EBFA20B8BC2A70000BC8C /* AppleRemote.m in Sources */, + 177EBFA70B8BC2A70000BC8C /* ImageTextCell.m in Sources */, + 177EBFA90B8BC2A70000BC8C /* KFTypeSelectTableView.m in Sources */, + 177EBFAB0B8BC2A70000BC8C /* NDHotKeyControl.m in Sources */, + 177EBFAD0B8BC2A70000BC8C /* NDHotKeyEvent.m in Sources */, + 177EBFAF0B8BC2A70000BC8C /* UKFileWatcher.m in Sources */, + 177EBFB10B8BC2A70000BC8C /* UKFNSubscribeFileWatcher.m in Sources */, + 177EBFB40B8BC2A70000BC8C /* UKKQueue.m in Sources */, + 177EBFB60B8BC2A70000BC8C /* UKMainThreadProxy.m in Sources */, + 177EC01F0B8BC2CF0000BC8C /* ClickField.m in Sources */, + 177EC0210B8BC2CF0000BC8C /* DBLog.m in Sources */, + 177EC0230B8BC2CF0000BC8C /* DragScrollView.m in Sources */, + 177EC0270B8BC2CF0000BC8C /* TrackingCell.m in Sources */, + 177EC0290B8BC2CF0000BC8C /* TrackingSlider.m in Sources */, + 1770429C0B8BC53600B86321 /* AppController.m in Sources */, + 1770429E0B8BC53600B86321 /* PlaybackController.m in Sources */, + 17D21DF60B8BE86900D1EBDE /* CoreAudioUtils.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -914,36 +842,32 @@ buildSettings = { COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( - "$(FRAMEWORK_SEARCH_PATHS)", - "$(SRCROOT)/Libraries/DecMPA/build/Release", - "$(SRCROOT)/Libraries/FAAD2/build/Release", - "$(SRCROOT)/Libraries/FLAC/build/Release", - "$(SRCROOT)/Libraries/MAC/build/Release", - "$(SRCROOT)/Libraries/MPCDec/build/Release", - "$(SRCROOT)/Libraries/Ogg/build/Release", - "$(SRCROOT)/Libraries/Shorten/build/Release", - "$(SRCROOT)/Libraries/TagLib/build/Release", - "$(SRCROOT)/Libraries/Vorbis/build/Release", - "$(SRCROOT)/Libraries/WavPack/build/Release", - "$(SRCROOT)/Libraries/SndFile/build/Release", - "$(SRCROOT)/Libraries/GME/build/Release", + "$(SRCROOT)/Frameworks/CogAudio/build/Release", + "$(SRCROOT)/ThirdParty/Frameworks/", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_4)", ); - FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Libraries/MAD/build/Release\""; - FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Libraries/ID3Tag/build/Release\""; - FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Frameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks/CogAudio/build/Debug\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Audio/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Audio/build/Debug\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_4 = "\"$(SRCROOT)/Audio/build/Release\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ( "-D__MACOSX__", "-DHAVE_CONFIG_H", ); + OTHER_LDFLAGS = ( + "-weak_framework", + CogAudio, + ); PRODUCT_NAME = Cog; WRAPPER_EXTENSION = app; ZERO_LINK = YES; @@ -958,34 +882,30 @@ i386, ); FRAMEWORK_SEARCH_PATHS = ( - "$(FRAMEWORK_SEARCH_PATHS)", - "$(SRCROOT)/Libraries/DecMPA/build/Release", - "$(SRCROOT)/Libraries/FAAD2/build/Release", - "$(SRCROOT)/Libraries/FLAC/build/Release", - "$(SRCROOT)/Libraries/MAC/build/Release", - "$(SRCROOT)/Libraries/MPCDec/build/Release", - "$(SRCROOT)/Libraries/Ogg/build/Release", - "$(SRCROOT)/Libraries/Shorten/build/Release", - "$(SRCROOT)/Libraries/TagLib/build/Release", - "$(SRCROOT)/Libraries/Vorbis/build/Release", - "$(SRCROOT)/Libraries/WavPack/build/Release", - "$(SRCROOT)/Libraries/SndFile/build/Release", - "$(SRCROOT)/Libraries/GME/build/Release", + "$(SRCROOT)/Frameworks/CogAudio/build/Release", + "$(SRCROOT)/ThirdParty/Frameworks/", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_4)", ); - FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Libraries/MAD/build/Release\""; - FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Libraries/ID3Tag/build/Release\""; - FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Frameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks/CogAudio/build/Debug\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Audio/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Audio/build/Debug\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_4 = "\"$(SRCROOT)/Audio/build/Release\""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ( "-D__MACOSX__", "-DHAVE_CONFIG_H", ); + OTHER_LDFLAGS = ( + "-weak_framework", + CogAudio, + ); PRODUCT_NAME = Cog; WRAPPER_EXTENSION = app; }; diff --git a/Custom/InfoView.h b/Custom/InfoView.h deleted file mode 100644 index 946850e29..000000000 --- a/Custom/InfoView.h +++ /dev/null @@ -1,8 +0,0 @@ -/* InfoView */ - -#import - -@interface InfoView : NSView -{ -} -@end diff --git a/Custom/InfoView.m b/Custom/InfoView.m deleted file mode 100644 index 77e3a16fa..000000000 --- a/Custom/InfoView.m +++ /dev/null @@ -1,21 +0,0 @@ -#import "InfoView.h" - -@implementation InfoView -/* -- (id)initWithFrame:(NSRect)frameRect -{ - if ((self = [super initWithFrame:frameRect]) != nil) { - // Add initialization code here - } - return self; -} - -- (void)drawRect:(NSRect)rect -{ -} -*/ -- (BOOL)isFlipped -{ - return NO; -} -@end diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 8f87c280c..1d4619eae 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -3,19 +3,19 @@ IBDocumentLocation - 41 92 639 388 0 0 1440 878 + 295 362 639 388 0 0 1680 1028 IBEditorPositions 1063 0 228 136 49 0 0 1024 746 1156 - 599 414 241 366 0 0 1440 878 + 719 527 241 366 0 0 1680 1028 29 - -3 826 383 44 0 0 1440 878 + -3 974 383 44 0 0 1680 1028 463 - 549 524 341 145 0 0 1440 878 + 669 637 341 145 0 0 1680 1028 513 - 935 231 125 137 0 0 1440 878 + 1026 274 125 137 0 0 1680 1028 IBFramework Version 446.1 @@ -32,10 +32,11 @@ 4 IBOpenObjects + 29 + 463 + 21 1156 513 - 21 - 29 IBSystem Version 8L2127 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 23dfc23bdd1659658d0fb715bcc19828215dc3d0..e4383d50354e5ff8860da8c7b46a7ea91ce0a04f 100644 GIT binary patch literal 60181 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 MY4zX!zk_@K1E})9jQ{`u diff --git a/FileDrawer/FileTreeWatcher.h b/FileDrawer/FileTreeWatcher.h index b4efd3076..3aa4cda9c 100644 --- a/FileDrawer/FileTreeWatcher.h +++ b/FileDrawer/FileTreeWatcher.h @@ -7,7 +7,7 @@ // #import -#import "UKKQueue/UKKQueue.h" +#import "UKKQueue.h" @interface FileTreeWatcher : NSObject { UKKQueue *kqueue; diff --git a/Libraries/FLAC/English.lproj/InfoPlist.strings b/Frameworks/FLAC/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/FLAC/English.lproj/InfoPlist.strings rename to Frameworks/FLAC/English.lproj/InfoPlist.strings diff --git a/Libraries/MAC/Info.plist b/Frameworks/FLAC/Info.plist similarity index 100% rename from Libraries/MAC/Info.plist rename to Frameworks/FLAC/Info.plist diff --git a/Libraries/FLAC/OggFLAC Framework-Info.plist b/Frameworks/FLAC/OggFLAC Framework-Info.plist similarity index 100% rename from Libraries/FLAC/OggFLAC Framework-Info.plist rename to Frameworks/FLAC/OggFLAC Framework-Info.plist diff --git a/Libraries/FLAC/config_osx.h b/Frameworks/FLAC/config_osx.h similarity index 100% rename from Libraries/FLAC/config_osx.h rename to Frameworks/FLAC/config_osx.h diff --git a/Libraries/FLAC/flac-1.1.2/AUTHORS b/Frameworks/FLAC/flac-1.1.2/AUTHORS similarity index 100% rename from Libraries/FLAC/flac-1.1.2/AUTHORS rename to Frameworks/FLAC/flac-1.1.2/AUTHORS diff --git a/Libraries/FLAC/flac-1.1.2/COPYING.FDL b/Frameworks/FLAC/flac-1.1.2/COPYING.FDL similarity index 100% rename from Libraries/FLAC/flac-1.1.2/COPYING.FDL rename to Frameworks/FLAC/flac-1.1.2/COPYING.FDL diff --git a/Libraries/FLAC/flac-1.1.2/COPYING.GPL b/Frameworks/FLAC/flac-1.1.2/COPYING.GPL similarity index 100% rename from Libraries/FLAC/flac-1.1.2/COPYING.GPL rename to Frameworks/FLAC/flac-1.1.2/COPYING.GPL diff --git a/Libraries/FLAC/flac-1.1.2/COPYING.LGPL b/Frameworks/FLAC/flac-1.1.2/COPYING.LGPL similarity index 100% rename from Libraries/FLAC/flac-1.1.2/COPYING.LGPL rename to Frameworks/FLAC/flac-1.1.2/COPYING.LGPL diff --git a/Libraries/FLAC/flac-1.1.2/COPYING.Xiph b/Frameworks/FLAC/flac-1.1.2/COPYING.Xiph similarity index 100% rename from Libraries/FLAC/flac-1.1.2/COPYING.Xiph rename to Frameworks/FLAC/flac-1.1.2/COPYING.Xiph diff --git a/Libraries/FLAC/flac-1.1.2/Makefile b/Frameworks/FLAC/flac-1.1.2/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/Makefile rename to Frameworks/FLAC/flac-1.1.2/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/Makefile.am b/Frameworks/FLAC/flac-1.1.2/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/Makefile.in b/Frameworks/FLAC/flac-1.1.2/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/README b/Frameworks/FLAC/flac-1.1.2/README similarity index 100% rename from Libraries/FLAC/flac-1.1.2/README rename to Frameworks/FLAC/flac-1.1.2/README diff --git a/Libraries/FLAC/flac-1.1.2/autogen.sh b/Frameworks/FLAC/flac-1.1.2/autogen.sh similarity index 100% rename from Libraries/FLAC/flac-1.1.2/autogen.sh rename to Frameworks/FLAC/flac-1.1.2/autogen.sh diff --git a/Libraries/FLAC/flac-1.1.2/config.guess b/Frameworks/FLAC/flac-1.1.2/config.guess similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.guess rename to Frameworks/FLAC/flac-1.1.2/config.guess diff --git a/Libraries/FLAC/flac-1.1.2/config.h b/Frameworks/FLAC/flac-1.1.2/config.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.h rename to Frameworks/FLAC/flac-1.1.2/config.h diff --git a/Libraries/FLAC/flac-1.1.2/config.h.in b/Frameworks/FLAC/flac-1.1.2/config.h.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.h.in rename to Frameworks/FLAC/flac-1.1.2/config.h.in diff --git a/Libraries/FLAC/flac-1.1.2/config.log b/Frameworks/FLAC/flac-1.1.2/config.log similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.log rename to Frameworks/FLAC/flac-1.1.2/config.log diff --git a/Libraries/FLAC/flac-1.1.2/config.rpath b/Frameworks/FLAC/flac-1.1.2/config.rpath similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.rpath rename to Frameworks/FLAC/flac-1.1.2/config.rpath diff --git a/Libraries/FLAC/flac-1.1.2/config.status b/Frameworks/FLAC/flac-1.1.2/config.status similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.status rename to Frameworks/FLAC/flac-1.1.2/config.status diff --git a/Libraries/FLAC/flac-1.1.2/config.sub b/Frameworks/FLAC/flac-1.1.2/config.sub similarity index 100% rename from Libraries/FLAC/flac-1.1.2/config.sub rename to Frameworks/FLAC/flac-1.1.2/config.sub diff --git a/Libraries/FLAC/flac-1.1.2/configure b/Frameworks/FLAC/flac-1.1.2/configure similarity index 100% rename from Libraries/FLAC/flac-1.1.2/configure rename to Frameworks/FLAC/flac-1.1.2/configure diff --git a/Libraries/FLAC/flac-1.1.2/configure.in b/Frameworks/FLAC/flac-1.1.2/configure.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/configure.in rename to Frameworks/FLAC/flac-1.1.2/configure.in diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/Makefile b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/all.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/all.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/all.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/decoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/encoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/export.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/export.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/export.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/export.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC++/metadata.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC++/metadata.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC++/metadata.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC++/metadata.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/Makefile b/Frameworks/FLAC/flac-1.1.2/include/FLAC/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/FLAC/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/FLAC/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/all.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/all.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/all.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/assert.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/assert.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/assert.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/assert.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/callback.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/callback.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/callback.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/callback.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/export.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/export.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/export.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/export.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/file_decoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/file_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/file_decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/file_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/file_encoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/file_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/file_encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/file_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/format.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/format.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/format.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/format.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/metadata.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/metadata.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/metadata.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/metadata.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/ordinals.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/ordinals.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/ordinals.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/ordinals.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/seekable_stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/seekable_stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/seekable_stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/seekable_stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/seekable_stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/seekable_stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/seekable_stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/seekable_stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/FLAC/stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/include/FLAC/stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/FLAC/stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/FLAC/stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/Makefile b/Frameworks/FLAC/flac-1.1.2/include/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/Makefile b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/all.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/all.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/all.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/decoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/encoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC++/export.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/export.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC++/export.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC++/export.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/Makefile b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/all.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/all.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/all.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/export.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/export.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/export.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/export.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/file_decoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/file_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/file_decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/file_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/file_encoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/file_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/file_encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/file_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/seekable_stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/OggFLAC/stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/include/OggFLAC/stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/OggFLAC/stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/include/OggFLAC/stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/Makefile b/Frameworks/FLAC/flac-1.1.2/include/share/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/share/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/share/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/share/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/share/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/share/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/share/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/share/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/share/getopt.h b/Frameworks/FLAC/flac-1.1.2/include/share/getopt.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/getopt.h rename to Frameworks/FLAC/flac-1.1.2/include/share/getopt.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag.h b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag.h rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/Makefile b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/Makefile rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/Makefile.am b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/Makefile.in b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/cuesheet.h b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/cuesheet.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/cuesheet.h rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/cuesheet.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/file.h b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/file.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/file.h rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/file.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/replaygain.h b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/replaygain.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/replaygain.h rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/replaygain.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/grabbag/seektable.h b/Frameworks/FLAC/flac-1.1.2/include/share/grabbag/seektable.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/grabbag/seektable.h rename to Frameworks/FLAC/flac-1.1.2/include/share/grabbag/seektable.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/replaygain_analysis.h b/Frameworks/FLAC/flac-1.1.2/include/share/replaygain_analysis.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/replaygain_analysis.h rename to Frameworks/FLAC/flac-1.1.2/include/share/replaygain_analysis.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/replaygain_synthesis.h b/Frameworks/FLAC/flac-1.1.2/include/share/replaygain_synthesis.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/replaygain_synthesis.h rename to Frameworks/FLAC/flac-1.1.2/include/share/replaygain_synthesis.h diff --git a/Libraries/FLAC/flac-1.1.2/include/share/utf8.h b/Frameworks/FLAC/flac-1.1.2/include/share/utf8.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/include/share/utf8.h rename to Frameworks/FLAC/flac-1.1.2/include/share/utf8.h diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/analyze.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/analyze.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/analyze.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/analyze.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/decode.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/decode.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/decode.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/decode.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/encode.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/encode.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/encode.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/encode.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/local_string_utils.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/local_string_utils.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/local_string_utils.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/local_string_utils.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/main.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/main.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/main.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/main.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/utils.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/utils.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/utils.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/utils.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/.deps/vorbiscomment.Po b/Frameworks/FLAC/flac-1.1.2/src/flac/.deps/vorbiscomment.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/.deps/vorbiscomment.Po rename to Frameworks/FLAC/flac-1.1.2/src/flac/.deps/vorbiscomment.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/Makefile b/Frameworks/FLAC/flac-1.1.2/src/flac/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/flac/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/flac/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/flac/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/flac/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/flac/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/flac/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/flac/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/analyze.c b/Frameworks/FLAC/flac-1.1.2/src/flac/analyze.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/analyze.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/analyze.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/analyze.h b/Frameworks/FLAC/flac-1.1.2/src/flac/analyze.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/analyze.h rename to Frameworks/FLAC/flac-1.1.2/src/flac/analyze.h diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/decode.c b/Frameworks/FLAC/flac-1.1.2/src/flac/decode.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/decode.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/decode.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/decode.h b/Frameworks/FLAC/flac-1.1.2/src/flac/decode.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/decode.h rename to Frameworks/FLAC/flac-1.1.2/src/flac/decode.h diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/encode.c b/Frameworks/FLAC/flac-1.1.2/src/flac/encode.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/encode.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/encode.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/encode.h b/Frameworks/FLAC/flac-1.1.2/src/flac/encode.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/encode.h rename to Frameworks/FLAC/flac-1.1.2/src/flac/encode.h diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/flac.dsp b/Frameworks/FLAC/flac-1.1.2/src/flac/flac.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/flac.dsp rename to Frameworks/FLAC/flac-1.1.2/src/flac/flac.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/local_string_utils.c b/Frameworks/FLAC/flac-1.1.2/src/flac/local_string_utils.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/local_string_utils.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/local_string_utils.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/local_string_utils.h b/Frameworks/FLAC/flac-1.1.2/src/flac/local_string_utils.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/local_string_utils.h rename to Frameworks/FLAC/flac-1.1.2/src/flac/local_string_utils.h diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/main.c b/Frameworks/FLAC/flac-1.1.2/src/flac/main.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/main.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/main.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/utils.c b/Frameworks/FLAC/flac-1.1.2/src/flac/utils.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/utils.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/utils.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/utils.h b/Frameworks/FLAC/flac-1.1.2/src/flac/utils.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/utils.h rename to Frameworks/FLAC/flac-1.1.2/src/flac/utils.h diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/vorbiscomment.c b/Frameworks/FLAC/flac-1.1.2/src/flac/vorbiscomment.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/vorbiscomment.c rename to Frameworks/FLAC/flac-1.1.2/src/flac/vorbiscomment.c diff --git a/Libraries/FLAC/flac-1.1.2/src/flac/vorbiscomment.h b/Frameworks/FLAC/flac-1.1.2/src/flac/vorbiscomment.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/flac/vorbiscomment.h rename to Frameworks/FLAC/flac-1.1.2/src/flac/vorbiscomment.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/file_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/metadata.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/metadata.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/metadata.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/metadata.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/seekable_stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/.deps/stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/file_decoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/file_decoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/file_decoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/file_decoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/file_encoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/file_encoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/file_encoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/file_encoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++.m4 b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++.m4 similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++.m4 rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++.m4 diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_dynamic.dsp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_dynamic.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_dynamic.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_dynamic.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/libFLAC++_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/metadata.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/metadata.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/metadata.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/metadata.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_decoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_decoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_decoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_decoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_encoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_encoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_encoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/seekable_stream_encoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/stream_decoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/stream_decoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/stream_decoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/stream_decoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC++/stream_encoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC++/stream_encoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC++/stream_encoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC++/stream_encoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/bitbuffer.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/bitbuffer.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/bitbuffer.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/bitbuffer.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/bitmath.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/bitmath.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/bitmath.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/bitmath.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/cpu.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/cpu.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/cpu.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/cpu.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/crc.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/crc.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/crc.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/crc.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/file_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/file_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/file_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/file_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/file_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/file_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/file_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/file_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/fixed.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/fixed.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/fixed.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/fixed.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/float.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/float.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/float.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/float.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/format.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/format.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/format.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/format.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/lpc.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/lpc.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/lpc.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/lpc.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/md5.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/md5.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/md5.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/md5.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/memory.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/memory.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/memory.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/memory.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_iterators.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_iterators.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_iterators.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_iterators.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_object.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_object.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_object.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/metadata_object.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/seekable_stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder_framing.Plo b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder_framing.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder_framing.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/.deps/stream_encoder_framing.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/bitbuffer.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/bitbuffer.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/bitbuffer.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/bitbuffer.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/bitmath.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/bitmath.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/bitmath.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/bitmath.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/cpu.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/cpu.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/cpu.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/cpu.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/crc.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/crc.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/crc.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/crc.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/file_decoder.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/file_decoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/file_decoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/file_decoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/file_encoder.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/file_encoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/file_encoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/file_encoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/fixed.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/fixed.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/fixed.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/fixed.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/float.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/float.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/float.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/float.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/format.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/format.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/format.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/format.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/cpu_asm.nasm b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/cpu_asm.nasm similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/cpu_asm.nasm rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/cpu_asm.nasm diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/fixed_asm.nasm b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/fixed_asm.nasm similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/fixed_asm.nasm rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/fixed_asm.nasm diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/lpc_asm.nasm b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/lpc_asm.nasm similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/lpc_asm.nasm rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/lpc_asm.nasm diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/nasm.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/nasm.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ia32/nasm.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ia32/nasm.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/all.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/all.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/all.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/bitbuffer.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/bitbuffer.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/bitbuffer.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/bitbuffer.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/bitmath.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/bitmath.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/bitmath.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/bitmath.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/cpu.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/cpu.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/cpu.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/cpu.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/crc.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/crc.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/crc.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/crc.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/fixed.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/fixed.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/fixed.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/fixed.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/float.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/float.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/float.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/float.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/format.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/format.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/format.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/format.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/lpc.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/lpc.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/lpc.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/lpc.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/md5.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/md5.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/md5.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/md5.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/memory.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/memory.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/memory.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/memory.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/metadata.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/metadata.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/metadata.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/metadata.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/stream_encoder_framing.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/stream_encoder_framing.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/private/stream_encoder_framing.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/private/stream_encoder_framing.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/all.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/all.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/all.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_decoder.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_decoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_encoder.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_encoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/file_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/seekable_stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/include/protected/stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/libFLAC.m4 b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/libFLAC.m4 similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/libFLAC.m4 rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/libFLAC.m4 diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/libFLAC_dynamic.dsp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/libFLAC_dynamic.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/libFLAC_dynamic.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/libFLAC_dynamic.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/libFLAC_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/libFLAC_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/libFLAC_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/libFLAC_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/lpc.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/lpc.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/lpc.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/lpc.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/md5.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/md5.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/md5.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/md5.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/memory.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/memory.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/memory.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/memory.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/metadata_iterators.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/metadata_iterators.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/metadata_iterators.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/metadata_iterators.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/metadata_object.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/metadata_object.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/metadata_object.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/metadata_object.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/lpc_asm.s b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/lpc_asm.s similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/as/lpc_asm.s rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/as/lpc_asm.s diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/lpc_asm.s b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/lpc_asm.s similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/lpc_asm.s rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/ppc/gas/lpc_asm.s diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_decoder.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_decoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_decoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_decoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_encoder.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_encoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_encoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/seekable_stream_encoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/stream_decoder.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/stream_decoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/stream_decoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/stream_decoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/stream_encoder.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/stream_encoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/stream_encoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/stream_encoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libFLAC/stream_encoder_framing.c b/Frameworks/FLAC/flac-1.1.2/src/libFLAC/stream_encoder_framing.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libFLAC/stream_encoder_framing.c rename to Frameworks/FLAC/flac-1.1.2/src/libFLAC/stream_encoder_framing.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/file_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/seekable_stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/.deps/stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/file_decoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/file_decoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/file_decoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/file_decoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/file_encoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/file_encoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/file_encoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/file_encoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++.m4 b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++.m4 similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++.m4 rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++.m4 diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_dynamic.dsp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_dynamic.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_dynamic.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_dynamic.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/libOggFLAC++_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_decoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_decoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_decoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_decoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_encoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_encoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_encoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/seekable_stream_encoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/stream_decoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/stream_decoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/stream_decoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/stream_decoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/stream_encoder.cpp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/stream_encoder.cpp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC++/stream_encoder.cpp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC++/stream_encoder.cpp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/file_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_decoder_aspect.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_decoder_aspect.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_decoder_aspect.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_decoder_aspect.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_encoder_aspect.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_encoder_aspect.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_encoder_aspect.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_encoder_aspect.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_helper.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_helper.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_helper.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_helper.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_mapping.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_mapping.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_mapping.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/ogg_mapping.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/seekable_stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_decoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_decoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_decoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_decoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_encoder.Plo b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_encoder.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_encoder.Plo rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/.deps/stream_encoder.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/file_decoder.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/file_decoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/file_decoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/file_decoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/file_encoder.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/file_encoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/file_encoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/file_encoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/all.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/all.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/all.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_decoder_aspect.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_decoder_aspect.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_decoder_aspect.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_decoder_aspect.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_encoder_aspect.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_encoder_aspect.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_encoder_aspect.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_encoder_aspect.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_helper.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_helper.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_helper.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_helper.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_mapping.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_mapping.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_mapping.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/private/ogg_mapping.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/all.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/all.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/all.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/all.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_decoder.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_decoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_encoder.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_encoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/file_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/seekable_stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_decoder.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_decoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_decoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_decoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_encoder.h b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_encoder.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_encoder.h rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/include/protected/stream_encoder.h diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC.m4 b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC.m4 similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC.m4 rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC.m4 diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_dynamic.dsp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_dynamic.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_dynamic.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_dynamic.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/libOggFLAC_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_decoder_aspect.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_decoder_aspect.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_decoder_aspect.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_decoder_aspect.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_encoder_aspect.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_encoder_aspect.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_encoder_aspect.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_encoder_aspect.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_helper.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_helper.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_helper.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_helper.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_mapping.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_mapping.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/ogg_mapping.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/ogg_mapping.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_decoder.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_decoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_decoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_decoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_encoder.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_encoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_encoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/seekable_stream_encoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/stream_decoder.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/stream_decoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/stream_decoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/stream_decoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/libOggFLAC/stream_encoder.c b/Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/stream_encoder.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/libOggFLAC/stream_encoder.c rename to Frameworks/FLAC/flac-1.1.2/src/libOggFLAC/stream_encoder.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/main.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/main.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/main.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/main.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_cuesheet.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_cuesheet.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_cuesheet.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_cuesheet.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_seektable.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_seektable.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_seektable.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_seektable.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_streaminfo.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_streaminfo.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_streaminfo.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_streaminfo.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_vorbiscomment.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_vorbiscomment.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_vorbiscomment.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/operations_shorthand_vorbiscomment.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/options.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/options.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/options.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/options.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/usage.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/usage.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/usage.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/usage.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/utils.Po b/Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/utils.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/.deps/utils.Po rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/.deps/utils.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile b/Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/main.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/main.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/main.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/main.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/metaflac.dsp b/Frameworks/FLAC/flac-1.1.2/src/metaflac/metaflac.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/metaflac.dsp rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/metaflac.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/operations.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/operations.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/operations.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/operations.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/operations.h b/Frameworks/FLAC/flac-1.1.2/src/metaflac/operations.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/operations.h rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/operations.h diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_cuesheet.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_cuesheet.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_cuesheet.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_cuesheet.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_seektable.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_seektable.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_seektable.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_seektable.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_streaminfo.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_streaminfo.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_streaminfo.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_streaminfo.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_vorbiscomment.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_vorbiscomment.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_vorbiscomment.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/operations_shorthand_vorbiscomment.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/options.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/options.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/options.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/options.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/options.h b/Frameworks/FLAC/flac-1.1.2/src/metaflac/options.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/options.h rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/options.h diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/usage.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/usage.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/usage.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/usage.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/usage.h b/Frameworks/FLAC/flac-1.1.2/src/metaflac/usage.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/usage.h rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/usage.h diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/utils.c b/Frameworks/FLAC/flac-1.1.2/src/metaflac/utils.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/utils.c rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/utils.c diff --git a/Libraries/FLAC/flac-1.1.2/src/metaflac/utils.h b/Frameworks/FLAC/flac-1.1.2/src/metaflac/utils.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/metaflac/utils.h rename to Frameworks/FLAC/flac-1.1.2/src/metaflac/utils.h diff --git a/Libraries/FLAC/flac-1.1.2/src/share/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/share/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/share/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/share/README b/Frameworks/FLAC/flac-1.1.2/src/share/README similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/README rename to Frameworks/FLAC/flac-1.1.2/src/share/README diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt.Po b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt.Po rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt1.Po b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt1.Po similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt1.Po rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/.deps/getopt1.Po diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/getopt.c b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/getopt.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/getopt.c rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/getopt.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/getopt1.c b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/getopt1.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/getopt1.c rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/getopt1.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/getopt/getopt_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/share/getopt/getopt_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/getopt/getopt_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/share/getopt/getopt_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/cuesheet.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/cuesheet.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/cuesheet.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/cuesheet.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/file.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/file.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/file.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/file.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/replaygain.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/replaygain.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/replaygain.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/replaygain.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/seektable.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/seektable.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/.deps/seektable.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/.deps/seektable.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/cuesheet.c b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/cuesheet.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/cuesheet.c rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/cuesheet.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/file.c b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/file.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/file.c rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/file.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/grabbag_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/grabbag_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/grabbag_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/grabbag_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/replaygain.c b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/replaygain.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/replaygain.c rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/replaygain.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/grabbag/seektable.c b/Frameworks/FLAC/flac-1.1.2/src/share/grabbag/seektable.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/grabbag/seektable.c rename to Frameworks/FLAC/flac-1.1.2/src/share/grabbag/seektable.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/.deps/replaygain_analysis.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/.deps/replaygain_analysis.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/.deps/replaygain_analysis.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/.deps/replaygain_analysis.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis.c b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis.c rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_analysis/replaygain_analysis_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/.deps/replaygain_synthesis.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/.deps/replaygain_synthesis.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/.deps/replaygain_synthesis.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/.deps/replaygain_synthesis.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/fast_float_math_hack.h b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/fast_float_math_hack.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/fast_float_math_hack.h rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/include/private/fast_float_math_hack.h diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis.c b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis.c rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/share/replaygain_synthesis/replaygain_synthesis_static.dsp diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/.deps/charset.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/.deps/charset.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/.deps/charset.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/.deps/charset.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/.deps/iconvert.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/.deps/iconvert.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/.deps/iconvert.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/.deps/iconvert.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/.deps/utf8.Plo b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/.deps/utf8.Plo similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/.deps/utf8.Plo rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/.deps/utf8.Plo diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile.am b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile.am similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile.am rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile.am diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile.in b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile.in similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile.in rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile.in diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile.lite b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile.lite similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/Makefile.lite rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/Makefile.lite diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/charmaps.h b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/charmaps.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/charmaps.h rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/charmaps.h diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/charset.c b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/charset.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/charset.c rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/charset.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/charset.h b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/charset.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/charset.h rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/charset.h diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/charset_test.c b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/charset_test.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/charset_test.c rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/charset_test.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/charsetmap.h b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/charsetmap.h similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/charsetmap.h rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/charsetmap.h diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/iconvert.c b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/iconvert.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/iconvert.c rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/iconvert.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/makemap.c b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/makemap.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/makemap.c rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/makemap.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/utf8.c b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/utf8.c similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/utf8.c rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/utf8.c diff --git a/Libraries/FLAC/flac-1.1.2/src/share/utf8/utf8_static.dsp b/Frameworks/FLAC/flac-1.1.2/src/share/utf8/utf8_static.dsp similarity index 100% rename from Libraries/FLAC/flac-1.1.2/src/share/utf8/utf8_static.dsp rename to Frameworks/FLAC/flac-1.1.2/src/share/utf8/utf8_static.dsp diff --git a/Libraries/FLAC/flac.xcodeproj/me.mode1 b/Frameworks/FLAC/flac.xcodeproj/me.mode1 similarity index 100% rename from Libraries/FLAC/flac.xcodeproj/me.mode1 rename to Frameworks/FLAC/flac.xcodeproj/me.mode1 diff --git a/Libraries/FLAC/flac.xcodeproj/me.pbxuser b/Frameworks/FLAC/flac.xcodeproj/me.pbxuser similarity index 100% rename from Libraries/FLAC/flac.xcodeproj/me.pbxuser rename to Frameworks/FLAC/flac.xcodeproj/me.pbxuser diff --git a/Libraries/FLAC/flac.xcodeproj/project.pbxproj b/Frameworks/FLAC/flac.xcodeproj/project.pbxproj similarity index 95% rename from Libraries/FLAC/flac.xcodeproj/project.pbxproj rename to Frameworks/FLAC/flac.xcodeproj/project.pbxproj index 8c7297a38..c9e2fb3cb 100644 --- a/Libraries/FLAC/flac.xcodeproj/project.pbxproj +++ b/Frameworks/FLAC/flac.xcodeproj/project.pbxproj @@ -63,21 +63,6 @@ 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXContainerItemProxy section */ 8CE506FF099346ED0047CE1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -348,56 +333,16 @@ 8CDB6CA60992FDDF00C2547C /* Resources */, 8CDB6CA70992FDDF00C2547C /* Sources */, 8CDB6CA80992FDDF00C2547C /* Frameworks */, + 8EA8CBB70B8D3C2A0066A92A /* ShellScript */, ); buildRules = ( ); - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; - INFOPLIST_FILE = "OggFLAC Framework-Info.plist"; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; - OTHER_LDFLAGS = ( - "-framework", - Foundation, - "-framework", - AppKit, - ); - PREBINDING = NO; - PRODUCT_NAME = "OggFLAC Framework"; - ZERO_LINK = YES; - }; dependencies = ( 8CE50700099346ED0047CE1D /* PBXTargetDependency */, ); name = "OggFLAC Framework"; productName = "OggFLAC Framework"; productReference = 8CDB6CAA0992FDDF00C2547C /* OggFLAC.framework */; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.yourcompany.OggFLAC Framework - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleVersion - 1.0 - - -"; productType = "com.apple.product-type.framework"; }; 8DC2EF4F0486A6940098B216 /* FLAC Framework */ = { @@ -411,8 +356,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = "FLAC Framework"; @@ -427,12 +370,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "flac" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* flac */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -462,6 +399,22 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 8EA8CBB70B8D3C2A0066A92A /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "LINK=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/Versions/A/Frameworks\n\nif ! [ -e $LINK ]; then\n\tln -s ../../../ $LINK\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 8CDB6CA70992FDDF00C2547C /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -542,7 +495,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = flac_Prefix.pch; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = FLAC; USER_HEADER_SEARCH_PATHS = "flac-1.1.2 flac-1.1.2/include flac-1.1.2/src/libFLAC/include"; WRAPPER_EXTENSION = framework; @@ -565,7 +518,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = flac_Prefix.pch; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = FLAC; USER_HEADER_SEARCH_PATHS = "flac-1.1.2 flac-1.1.2/include flac-1.1.2/src/libFLAC/include"; WRAPPER_EXTENSION = framework; @@ -611,7 +564,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__; INFOPLIST_FILE = "OggFLAC Framework-Info.plist"; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PREBINDING = NO; PRODUCT_NAME = OggFLAC; USER_HEADER_SEARCH_PATHS = "flac-1.1.2/src/libOggFLAC/include"; @@ -640,7 +593,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__; INFOPLIST_FILE = "OggFLAC Framework-Info.plist"; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PREBINDING = NO; PRODUCT_NAME = OggFLAC; USER_HEADER_SEARCH_PATHS = "flac-1.1.2/src/libOggFLAC/include"; diff --git a/Libraries/FLAC/flac_Prefix.pch b/Frameworks/FLAC/flac_Prefix.pch similarity index 100% rename from Libraries/FLAC/flac_Prefix.pch rename to Frameworks/FLAC/flac_Prefix.pch diff --git a/Libraries/ID3Tag/English.lproj/InfoPlist.strings b/Frameworks/ID3Tag/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/ID3Tag/English.lproj/InfoPlist.strings rename to Frameworks/ID3Tag/English.lproj/InfoPlist.strings diff --git a/Libraries/ID3Tag/Files/CHANGES b/Frameworks/ID3Tag/Files/CHANGES similarity index 100% rename from Libraries/ID3Tag/Files/CHANGES rename to Frameworks/ID3Tag/Files/CHANGES diff --git a/Libraries/ID3Tag/Files/COPYING b/Frameworks/ID3Tag/Files/COPYING similarity index 100% rename from Libraries/ID3Tag/Files/COPYING rename to Frameworks/ID3Tag/Files/COPYING diff --git a/Libraries/ID3Tag/Files/COPYRIGHT b/Frameworks/ID3Tag/Files/COPYRIGHT similarity index 100% rename from Libraries/ID3Tag/Files/COPYRIGHT rename to Frameworks/ID3Tag/Files/COPYRIGHT diff --git a/Libraries/ID3Tag/Files/CREDITS b/Frameworks/ID3Tag/Files/CREDITS similarity index 100% rename from Libraries/ID3Tag/Files/CREDITS rename to Frameworks/ID3Tag/Files/CREDITS diff --git a/Libraries/ID3Tag/Files/INSTALL b/Frameworks/ID3Tag/Files/INSTALL similarity index 100% rename from Libraries/ID3Tag/Files/INSTALL rename to Frameworks/ID3Tag/Files/INSTALL diff --git a/Libraries/ID3Tag/Files/Makefile.am b/Frameworks/ID3Tag/Files/Makefile.am similarity index 100% rename from Libraries/ID3Tag/Files/Makefile.am rename to Frameworks/ID3Tag/Files/Makefile.am diff --git a/Libraries/ID3Tag/Files/Makefile.in b/Frameworks/ID3Tag/Files/Makefile.in similarity index 100% rename from Libraries/ID3Tag/Files/Makefile.in rename to Frameworks/ID3Tag/Files/Makefile.in diff --git a/Libraries/ID3Tag/Files/README b/Frameworks/ID3Tag/Files/README similarity index 100% rename from Libraries/ID3Tag/Files/README rename to Frameworks/ID3Tag/Files/README diff --git a/Libraries/ID3Tag/Files/TODO b/Frameworks/ID3Tag/Files/TODO similarity index 100% rename from Libraries/ID3Tag/Files/TODO rename to Frameworks/ID3Tag/Files/TODO diff --git a/Libraries/ID3Tag/Files/VERSION b/Frameworks/ID3Tag/Files/VERSION similarity index 100% rename from Libraries/ID3Tag/Files/VERSION rename to Frameworks/ID3Tag/Files/VERSION diff --git a/Libraries/ID3Tag/Files/aclocal.m4 b/Frameworks/ID3Tag/Files/aclocal.m4 similarity index 100% rename from Libraries/ID3Tag/Files/aclocal.m4 rename to Frameworks/ID3Tag/Files/aclocal.m4 diff --git a/Libraries/ID3Tag/Files/compat.c b/Frameworks/ID3Tag/Files/compat.c similarity index 100% rename from Libraries/ID3Tag/Files/compat.c rename to Frameworks/ID3Tag/Files/compat.c diff --git a/Libraries/ID3Tag/Files/compat.gperf b/Frameworks/ID3Tag/Files/compat.gperf similarity index 100% rename from Libraries/ID3Tag/Files/compat.gperf rename to Frameworks/ID3Tag/Files/compat.gperf diff --git a/Libraries/ID3Tag/Files/compat.h b/Frameworks/ID3Tag/Files/compat.h similarity index 100% rename from Libraries/ID3Tag/Files/compat.h rename to Frameworks/ID3Tag/Files/compat.h diff --git a/Libraries/ID3Tag/Files/config.guess b/Frameworks/ID3Tag/Files/config.guess similarity index 100% rename from Libraries/ID3Tag/Files/config.guess rename to Frameworks/ID3Tag/Files/config.guess diff --git a/Libraries/ID3Tag/Files/config.h.in b/Frameworks/ID3Tag/Files/config.h.in similarity index 100% rename from Libraries/ID3Tag/Files/config.h.in rename to Frameworks/ID3Tag/Files/config.h.in diff --git a/Libraries/ID3Tag/Files/config.sub b/Frameworks/ID3Tag/Files/config.sub similarity index 100% rename from Libraries/ID3Tag/Files/config.sub rename to Frameworks/ID3Tag/Files/config.sub diff --git a/Libraries/ID3Tag/Files/configure b/Frameworks/ID3Tag/Files/configure similarity index 100% rename from Libraries/ID3Tag/Files/configure rename to Frameworks/ID3Tag/Files/configure diff --git a/Libraries/ID3Tag/Files/configure.ac b/Frameworks/ID3Tag/Files/configure.ac similarity index 100% rename from Libraries/ID3Tag/Files/configure.ac rename to Frameworks/ID3Tag/Files/configure.ac diff --git a/Libraries/ID3Tag/Files/crc.c b/Frameworks/ID3Tag/Files/crc.c similarity index 100% rename from Libraries/ID3Tag/Files/crc.c rename to Frameworks/ID3Tag/Files/crc.c diff --git a/Libraries/ID3Tag/Files/crc.h b/Frameworks/ID3Tag/Files/crc.h similarity index 100% rename from Libraries/ID3Tag/Files/crc.h rename to Frameworks/ID3Tag/Files/crc.h diff --git a/Libraries/ID3Tag/Files/debug.c b/Frameworks/ID3Tag/Files/debug.c similarity index 100% rename from Libraries/ID3Tag/Files/debug.c rename to Frameworks/ID3Tag/Files/debug.c diff --git a/Libraries/ID3Tag/Files/debug.h b/Frameworks/ID3Tag/Files/debug.h similarity index 100% rename from Libraries/ID3Tag/Files/debug.h rename to Frameworks/ID3Tag/Files/debug.h diff --git a/Libraries/ID3Tag/Files/depcomp b/Frameworks/ID3Tag/Files/depcomp similarity index 100% rename from Libraries/ID3Tag/Files/depcomp rename to Frameworks/ID3Tag/Files/depcomp diff --git a/Libraries/ID3Tag/Files/field.c b/Frameworks/ID3Tag/Files/field.c similarity index 100% rename from Libraries/ID3Tag/Files/field.c rename to Frameworks/ID3Tag/Files/field.c diff --git a/Libraries/ID3Tag/Files/field.h b/Frameworks/ID3Tag/Files/field.h similarity index 100% rename from Libraries/ID3Tag/Files/field.h rename to Frameworks/ID3Tag/Files/field.h diff --git a/Libraries/ID3Tag/Files/file.c b/Frameworks/ID3Tag/Files/file.c similarity index 100% rename from Libraries/ID3Tag/Files/file.c rename to Frameworks/ID3Tag/Files/file.c diff --git a/Libraries/ID3Tag/Files/file.h b/Frameworks/ID3Tag/Files/file.h similarity index 100% rename from Libraries/ID3Tag/Files/file.h rename to Frameworks/ID3Tag/Files/file.h diff --git a/Libraries/ID3Tag/Files/frame.c b/Frameworks/ID3Tag/Files/frame.c similarity index 100% rename from Libraries/ID3Tag/Files/frame.c rename to Frameworks/ID3Tag/Files/frame.c diff --git a/Libraries/ID3Tag/Files/frame.h b/Frameworks/ID3Tag/Files/frame.h similarity index 100% rename from Libraries/ID3Tag/Files/frame.h rename to Frameworks/ID3Tag/Files/frame.h diff --git a/Libraries/ID3Tag/Files/frametype.c b/Frameworks/ID3Tag/Files/frametype.c similarity index 100% rename from Libraries/ID3Tag/Files/frametype.c rename to Frameworks/ID3Tag/Files/frametype.c diff --git a/Libraries/ID3Tag/Files/frametype.gperf b/Frameworks/ID3Tag/Files/frametype.gperf similarity index 100% rename from Libraries/ID3Tag/Files/frametype.gperf rename to Frameworks/ID3Tag/Files/frametype.gperf diff --git a/Libraries/ID3Tag/Files/frametype.h b/Frameworks/ID3Tag/Files/frametype.h similarity index 100% rename from Libraries/ID3Tag/Files/frametype.h rename to Frameworks/ID3Tag/Files/frametype.h diff --git a/Libraries/ID3Tag/Files/genre.c b/Frameworks/ID3Tag/Files/genre.c similarity index 100% rename from Libraries/ID3Tag/Files/genre.c rename to Frameworks/ID3Tag/Files/genre.c diff --git a/Libraries/ID3Tag/Files/genre.dat b/Frameworks/ID3Tag/Files/genre.dat similarity index 100% rename from Libraries/ID3Tag/Files/genre.dat rename to Frameworks/ID3Tag/Files/genre.dat diff --git a/Libraries/ID3Tag/Files/genre.dat.in b/Frameworks/ID3Tag/Files/genre.dat.in similarity index 100% rename from Libraries/ID3Tag/Files/genre.dat.in rename to Frameworks/ID3Tag/Files/genre.dat.in diff --git a/Libraries/ID3Tag/Files/genre.dat.sed b/Frameworks/ID3Tag/Files/genre.dat.sed similarity index 100% rename from Libraries/ID3Tag/Files/genre.dat.sed rename to Frameworks/ID3Tag/Files/genre.dat.sed diff --git a/Libraries/ID3Tag/Files/genre.h b/Frameworks/ID3Tag/Files/genre.h similarity index 100% rename from Libraries/ID3Tag/Files/genre.h rename to Frameworks/ID3Tag/Files/genre.h diff --git a/Libraries/ID3Tag/Files/global.h b/Frameworks/ID3Tag/Files/global.h similarity index 100% rename from Libraries/ID3Tag/Files/global.h rename to Frameworks/ID3Tag/Files/global.h diff --git a/Libraries/ID3Tag/Files/id3tag.h b/Frameworks/ID3Tag/Files/id3tag.h similarity index 100% rename from Libraries/ID3Tag/Files/id3tag.h rename to Frameworks/ID3Tag/Files/id3tag.h diff --git a/Libraries/ID3Tag/Files/install-sh b/Frameworks/ID3Tag/Files/install-sh similarity index 100% rename from Libraries/ID3Tag/Files/install-sh rename to Frameworks/ID3Tag/Files/install-sh diff --git a/Libraries/ID3Tag/Files/latin1.c b/Frameworks/ID3Tag/Files/latin1.c similarity index 100% rename from Libraries/ID3Tag/Files/latin1.c rename to Frameworks/ID3Tag/Files/latin1.c diff --git a/Libraries/ID3Tag/Files/latin1.h b/Frameworks/ID3Tag/Files/latin1.h similarity index 100% rename from Libraries/ID3Tag/Files/latin1.h rename to Frameworks/ID3Tag/Files/latin1.h diff --git a/Libraries/ID3Tag/Files/libid3tag.list.in b/Frameworks/ID3Tag/Files/libid3tag.list.in similarity index 100% rename from Libraries/ID3Tag/Files/libid3tag.list.in rename to Frameworks/ID3Tag/Files/libid3tag.list.in diff --git a/Libraries/ID3Tag/Files/ltmain.sh b/Frameworks/ID3Tag/Files/ltmain.sh similarity index 100% rename from Libraries/ID3Tag/Files/ltmain.sh rename to Frameworks/ID3Tag/Files/ltmain.sh diff --git a/Libraries/ID3Tag/Files/missing b/Frameworks/ID3Tag/Files/missing similarity index 100% rename from Libraries/ID3Tag/Files/missing rename to Frameworks/ID3Tag/Files/missing diff --git a/Libraries/ID3Tag/Files/mkinstalldirs b/Frameworks/ID3Tag/Files/mkinstalldirs similarity index 100% rename from Libraries/ID3Tag/Files/mkinstalldirs rename to Frameworks/ID3Tag/Files/mkinstalldirs diff --git a/Libraries/ID3Tag/Files/msvc++/Makefile.am b/Frameworks/ID3Tag/Files/msvc++/Makefile.am similarity index 100% rename from Libraries/ID3Tag/Files/msvc++/Makefile.am rename to Frameworks/ID3Tag/Files/msvc++/Makefile.am diff --git a/Libraries/ID3Tag/Files/msvc++/Makefile.in b/Frameworks/ID3Tag/Files/msvc++/Makefile.in similarity index 100% rename from Libraries/ID3Tag/Files/msvc++/Makefile.in rename to Frameworks/ID3Tag/Files/msvc++/Makefile.in diff --git a/Libraries/ID3Tag/Files/msvc++/config.h b/Frameworks/ID3Tag/Files/msvc++/config.h similarity index 100% rename from Libraries/ID3Tag/Files/msvc++/config.h rename to Frameworks/ID3Tag/Files/msvc++/config.h diff --git a/Libraries/ID3Tag/Files/msvc++/libid3tag.dsp b/Frameworks/ID3Tag/Files/msvc++/libid3tag.dsp similarity index 100% rename from Libraries/ID3Tag/Files/msvc++/libid3tag.dsp rename to Frameworks/ID3Tag/Files/msvc++/libid3tag.dsp diff --git a/Libraries/ID3Tag/Files/parse.c b/Frameworks/ID3Tag/Files/parse.c similarity index 100% rename from Libraries/ID3Tag/Files/parse.c rename to Frameworks/ID3Tag/Files/parse.c diff --git a/Libraries/ID3Tag/Files/parse.h b/Frameworks/ID3Tag/Files/parse.h similarity index 100% rename from Libraries/ID3Tag/Files/parse.h rename to Frameworks/ID3Tag/Files/parse.h diff --git a/Libraries/ID3Tag/Files/render.c b/Frameworks/ID3Tag/Files/render.c similarity index 100% rename from Libraries/ID3Tag/Files/render.c rename to Frameworks/ID3Tag/Files/render.c diff --git a/Libraries/ID3Tag/Files/render.h b/Frameworks/ID3Tag/Files/render.h similarity index 100% rename from Libraries/ID3Tag/Files/render.h rename to Frameworks/ID3Tag/Files/render.h diff --git a/Libraries/ID3Tag/Files/tag.c b/Frameworks/ID3Tag/Files/tag.c similarity index 100% rename from Libraries/ID3Tag/Files/tag.c rename to Frameworks/ID3Tag/Files/tag.c diff --git a/Libraries/ID3Tag/Files/tag.h b/Frameworks/ID3Tag/Files/tag.h similarity index 100% rename from Libraries/ID3Tag/Files/tag.h rename to Frameworks/ID3Tag/Files/tag.h diff --git a/Libraries/ID3Tag/Files/ucs4.c b/Frameworks/ID3Tag/Files/ucs4.c similarity index 100% rename from Libraries/ID3Tag/Files/ucs4.c rename to Frameworks/ID3Tag/Files/ucs4.c diff --git a/Libraries/ID3Tag/Files/ucs4.h b/Frameworks/ID3Tag/Files/ucs4.h similarity index 100% rename from Libraries/ID3Tag/Files/ucs4.h rename to Frameworks/ID3Tag/Files/ucs4.h diff --git a/Libraries/ID3Tag/Files/utf16.c b/Frameworks/ID3Tag/Files/utf16.c similarity index 100% rename from Libraries/ID3Tag/Files/utf16.c rename to Frameworks/ID3Tag/Files/utf16.c diff --git a/Libraries/ID3Tag/Files/utf16.h b/Frameworks/ID3Tag/Files/utf16.h similarity index 100% rename from Libraries/ID3Tag/Files/utf16.h rename to Frameworks/ID3Tag/Files/utf16.h diff --git a/Libraries/ID3Tag/Files/utf8.c b/Frameworks/ID3Tag/Files/utf8.c similarity index 100% rename from Libraries/ID3Tag/Files/utf8.c rename to Frameworks/ID3Tag/Files/utf8.c diff --git a/Libraries/ID3Tag/Files/utf8.h b/Frameworks/ID3Tag/Files/utf8.h similarity index 100% rename from Libraries/ID3Tag/Files/utf8.h rename to Frameworks/ID3Tag/Files/utf8.h diff --git a/Libraries/ID3Tag/Files/util.c b/Frameworks/ID3Tag/Files/util.c similarity index 100% rename from Libraries/ID3Tag/Files/util.c rename to Frameworks/ID3Tag/Files/util.c diff --git a/Libraries/ID3Tag/Files/util.h b/Frameworks/ID3Tag/Files/util.h similarity index 100% rename from Libraries/ID3Tag/Files/util.h rename to Frameworks/ID3Tag/Files/util.h diff --git a/Libraries/ID3Tag/Files/version.c b/Frameworks/ID3Tag/Files/version.c similarity index 100% rename from Libraries/ID3Tag/Files/version.c rename to Frameworks/ID3Tag/Files/version.c diff --git a/Libraries/ID3Tag/Files/version.h b/Frameworks/ID3Tag/Files/version.h similarity index 100% rename from Libraries/ID3Tag/Files/version.h rename to Frameworks/ID3Tag/Files/version.h diff --git a/Libraries/ID3Tag/ID3Tag.xcodeproj/project.pbxproj b/Frameworks/ID3Tag/ID3Tag.xcodeproj/project.pbxproj similarity index 99% rename from Libraries/ID3Tag/ID3Tag.xcodeproj/project.pbxproj rename to Frameworks/ID3Tag/ID3Tag.xcodeproj/project.pbxproj index 3f419105d..3bed001e1 100644 --- a/Libraries/ID3Tag/ID3Tag.xcodeproj/project.pbxproj +++ b/Frameworks/ID3Tag/ID3Tag.xcodeproj/project.pbxproj @@ -323,7 +323,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ID3Tag_Prefix.pch; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; PRODUCT_NAME = ID3Tag; @@ -347,7 +347,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; PRODUCT_NAME = ID3Tag; diff --git a/Libraries/ID3Tag/Info.plist b/Frameworks/ID3Tag/Info.plist similarity index 100% rename from Libraries/ID3Tag/Info.plist rename to Frameworks/ID3Tag/Info.plist diff --git a/Libraries/MAC/English.lproj/InfoPlist.strings b/Frameworks/MAC/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/MAC/English.lproj/InfoPlist.strings rename to Frameworks/MAC/English.lproj/InfoPlist.strings diff --git a/Libraries/MPCDec/Info.plist b/Frameworks/MAC/Info.plist similarity index 100% rename from Libraries/MPCDec/Info.plist rename to Frameworks/MAC/Info.plist diff --git a/Libraries/MAC/MAC.xcodeproj/me.mode1 b/Frameworks/MAC/MAC.xcodeproj/me.mode1 similarity index 100% rename from Libraries/MAC/MAC.xcodeproj/me.mode1 rename to Frameworks/MAC/MAC.xcodeproj/me.mode1 diff --git a/Libraries/MAC/MAC.xcodeproj/me.pbxuser b/Frameworks/MAC/MAC.xcodeproj/me.pbxuser similarity index 100% rename from Libraries/MAC/MAC.xcodeproj/me.pbxuser rename to Frameworks/MAC/MAC.xcodeproj/me.pbxuser diff --git a/Libraries/MAC/MAC.xcodeproj/project.pbxproj b/Frameworks/MAC/MAC.xcodeproj/project.pbxproj similarity index 98% rename from Libraries/MAC/MAC.xcodeproj/project.pbxproj rename to Frameworks/MAC/MAC.xcodeproj/project.pbxproj index 0f780bb26..93fe99cd0 100644 --- a/Libraries/MAC/MAC.xcodeproj/project.pbxproj +++ b/Frameworks/MAC/MAC.xcodeproj/project.pbxproj @@ -83,21 +83,6 @@ 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; @@ -416,8 +401,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = MAC; @@ -432,12 +415,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "MAC" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* MAC */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -529,7 +506,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = MAC_Prefix.pch; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = MAC; USER_HEADER_SEARCH_PATHS = "mac-src"; WRAPPER_EXTENSION = framework; @@ -553,7 +530,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = MAC_Prefix.pch; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; OTHER_LDFLAGS = "-Wl,-read_only_relocs,warning"; PER_ARCH_CFLAGS_ppc = "-maltivec"; PRODUCT_NAME = MAC; diff --git a/Libraries/MAC/MAC_Prefix.pch b/Frameworks/MAC/MAC_Prefix.pch similarity index 100% rename from Libraries/MAC/MAC_Prefix.pch rename to Frameworks/MAC/MAC_Prefix.pch diff --git a/Libraries/MAC/mac-src/AUTHORS b/Frameworks/MAC/mac-src/AUTHORS similarity index 100% rename from Libraries/MAC/mac-src/AUTHORS rename to Frameworks/MAC/mac-src/AUTHORS diff --git a/Libraries/MAC/mac-src/COPYING b/Frameworks/MAC/mac-src/COPYING similarity index 100% rename from Libraries/MAC/mac-src/COPYING rename to Frameworks/MAC/mac-src/COPYING diff --git a/Libraries/MAC/mac-src/ChangeLog b/Frameworks/MAC/mac-src/ChangeLog similarity index 100% rename from Libraries/MAC/mac-src/ChangeLog rename to Frameworks/MAC/mac-src/ChangeLog diff --git a/Libraries/MAC/mac-src/INSTALL b/Frameworks/MAC/mac-src/INSTALL similarity index 100% rename from Libraries/MAC/mac-src/INSTALL rename to Frameworks/MAC/mac-src/INSTALL diff --git a/Libraries/MAC/mac-src/Makefile.am b/Frameworks/MAC/mac-src/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/Makefile.am rename to Frameworks/MAC/mac-src/Makefile.am diff --git a/Libraries/MAC/mac-src/Makefile.in b/Frameworks/MAC/mac-src/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/Makefile.in rename to Frameworks/MAC/mac-src/Makefile.in diff --git a/Libraries/MAC/mac-src/NEWS b/Frameworks/MAC/mac-src/NEWS similarity index 100% rename from Libraries/MAC/mac-src/NEWS rename to Frameworks/MAC/mac-src/NEWS diff --git a/Libraries/MAC/mac-src/README b/Frameworks/MAC/mac-src/README similarity index 100% rename from Libraries/MAC/mac-src/README rename to Frameworks/MAC/mac-src/README diff --git a/Libraries/MAC/mac-src/TODO b/Frameworks/MAC/mac-src/TODO similarity index 100% rename from Libraries/MAC/mac-src/TODO rename to Frameworks/MAC/mac-src/TODO diff --git a/Libraries/MAC/mac-src/aclocal.m4 b/Frameworks/MAC/mac-src/aclocal.m4 similarity index 100% rename from Libraries/MAC/mac-src/aclocal.m4 rename to Frameworks/MAC/mac-src/aclocal.m4 diff --git a/Libraries/MAC/mac-src/config.guess b/Frameworks/MAC/mac-src/config.guess similarity index 100% rename from Libraries/MAC/mac-src/config.guess rename to Frameworks/MAC/mac-src/config.guess diff --git a/Libraries/MAC/mac-src/config.sub b/Frameworks/MAC/mac-src/config.sub similarity index 100% rename from Libraries/MAC/mac-src/config.sub rename to Frameworks/MAC/mac-src/config.sub diff --git a/Libraries/MAC/mac-src/configure b/Frameworks/MAC/mac-src/configure similarity index 100% rename from Libraries/MAC/mac-src/configure rename to Frameworks/MAC/mac-src/configure diff --git a/Libraries/MAC/mac-src/configure.in b/Frameworks/MAC/mac-src/configure.in similarity index 100% rename from Libraries/MAC/mac-src/configure.in rename to Frameworks/MAC/mac-src/configure.in diff --git a/Libraries/MAC/mac-src/depcomp b/Frameworks/MAC/mac-src/depcomp similarity index 100% rename from Libraries/MAC/mac-src/depcomp rename to Frameworks/MAC/mac-src/depcomp diff --git a/Libraries/MAC/mac-src/install-sh b/Frameworks/MAC/mac-src/install-sh similarity index 100% rename from Libraries/MAC/mac-src/install-sh rename to Frameworks/MAC/mac-src/install-sh diff --git a/Libraries/MAC/mac-src/ltmain.sh b/Frameworks/MAC/mac-src/ltmain.sh similarity index 100% rename from Libraries/MAC/mac-src/ltmain.sh rename to Frameworks/MAC/mac-src/ltmain.sh diff --git a/Libraries/MAC/mac-src/missing b/Frameworks/MAC/mac-src/missing similarity index 100% rename from Libraries/MAC/mac-src/missing rename to Frameworks/MAC/mac-src/missing diff --git a/Libraries/MAC/mac-src/src/Console/Console.cpp b/Frameworks/MAC/mac-src/src/Console/Console.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Console/Console.cpp rename to Frameworks/MAC/mac-src/src/Console/Console.cpp diff --git a/Libraries/MAC/mac-src/src/Console/Makefile.am b/Frameworks/MAC/mac-src/src/Console/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/Console/Makefile.am rename to Frameworks/MAC/mac-src/src/Console/Makefile.am diff --git a/Libraries/MAC/mac-src/src/Console/Makefile.in b/Frameworks/MAC/mac-src/src/Console/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/Console/Makefile.in rename to Frameworks/MAC/mac-src/src/Console/Makefile.in diff --git a/Libraries/MAC/mac-src/src/Credits.txt b/Frameworks/MAC/mac-src/src/Credits.txt similarity index 100% rename from Libraries/MAC/mac-src/src/Credits.txt rename to Frameworks/MAC/mac-src/src/Credits.txt diff --git a/Libraries/MAC/mac-src/src/Examples/Analyze/Makefile.am b/Frameworks/MAC/mac-src/src/Examples/Analyze/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Analyze/Makefile.am rename to Frameworks/MAC/mac-src/src/Examples/Analyze/Makefile.am diff --git a/Libraries/MAC/mac-src/src/Examples/Analyze/Makefile.in b/Frameworks/MAC/mac-src/src/Examples/Analyze/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Analyze/Makefile.in rename to Frameworks/MAC/mac-src/src/Examples/Analyze/Makefile.in diff --git a/Libraries/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.am b/Frameworks/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.am rename to Frameworks/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.am diff --git a/Libraries/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.in b/Frameworks/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.in rename to Frameworks/MAC/mac-src/src/Examples/Analyze/Sample1/Makefile.in diff --git a/Libraries/MAC/mac-src/src/Examples/Analyze/Sample1/Sample1.cpp b/Frameworks/MAC/mac-src/src/Examples/Analyze/Sample1/Sample1.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Analyze/Sample1/Sample1.cpp rename to Frameworks/MAC/mac-src/src/Examples/Analyze/Sample1/Sample1.cpp diff --git a/Libraries/MAC/mac-src/src/Examples/Makefile.am b/Frameworks/MAC/mac-src/src/Examples/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Makefile.am rename to Frameworks/MAC/mac-src/src/Examples/Makefile.am diff --git a/Libraries/MAC/mac-src/src/Examples/Makefile.in b/Frameworks/MAC/mac-src/src/Examples/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/Examples/Makefile.in rename to Frameworks/MAC/mac-src/src/Examples/Makefile.in diff --git a/Libraries/MAC/mac-src/src/History.txt b/Frameworks/MAC/mac-src/src/History.txt similarity index 100% rename from Libraries/MAC/mac-src/src/History.txt rename to Frameworks/MAC/mac-src/src/History.txt diff --git a/Libraries/MAC/mac-src/src/License.htm b/Frameworks/MAC/mac-src/src/License.htm similarity index 100% rename from Libraries/MAC/mac-src/src/License.htm rename to Frameworks/MAC/mac-src/src/License.htm diff --git a/Libraries/MAC/mac-src/src/MACLib/APECompress.cpp b/Frameworks/MAC/mac-src/src/MACLib/APECompress.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APECompress.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APECompress.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APECompress.h b/Frameworks/MAC/mac-src/src/MACLib/APECompress.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APECompress.h rename to Frameworks/MAC/mac-src/src/MACLib/APECompress.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APECompressCore.cpp b/Frameworks/MAC/mac-src/src/MACLib/APECompressCore.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APECompressCore.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APECompressCore.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APECompressCore.h b/Frameworks/MAC/mac-src/src/MACLib/APECompressCore.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APECompressCore.h rename to Frameworks/MAC/mac-src/src/MACLib/APECompressCore.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APECompressCreate.cpp b/Frameworks/MAC/mac-src/src/MACLib/APECompressCreate.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APECompressCreate.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APECompressCreate.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APECompressCreate.h b/Frameworks/MAC/mac-src/src/MACLib/APECompressCreate.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APECompressCreate.h rename to Frameworks/MAC/mac-src/src/MACLib/APECompressCreate.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APEDecompress.cpp b/Frameworks/MAC/mac-src/src/MACLib/APEDecompress.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APEDecompress.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APEDecompress.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APEDecompress.h b/Frameworks/MAC/mac-src/src/MACLib/APEDecompress.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APEDecompress.h rename to Frameworks/MAC/mac-src/src/MACLib/APEDecompress.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APEHeader.cpp b/Frameworks/MAC/mac-src/src/MACLib/APEHeader.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APEHeader.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APEHeader.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APEHeader.h b/Frameworks/MAC/mac-src/src/MACLib/APEHeader.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APEHeader.h rename to Frameworks/MAC/mac-src/src/MACLib/APEHeader.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APEInfo.cpp b/Frameworks/MAC/mac-src/src/MACLib/APEInfo.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APEInfo.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APEInfo.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APEInfo.h b/Frameworks/MAC/mac-src/src/MACLib/APEInfo.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APEInfo.h rename to Frameworks/MAC/mac-src/src/MACLib/APEInfo.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APELink.cpp b/Frameworks/MAC/mac-src/src/MACLib/APELink.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APELink.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APELink.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APELink.h b/Frameworks/MAC/mac-src/src/MACLib/APELink.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APELink.h rename to Frameworks/MAC/mac-src/src/MACLib/APELink.h diff --git a/Libraries/MAC/mac-src/src/MACLib/APESimple.cpp b/Frameworks/MAC/mac-src/src/MACLib/APESimple.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APESimple.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APESimple.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APETag.cpp b/Frameworks/MAC/mac-src/src/MACLib/APETag.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APETag.cpp rename to Frameworks/MAC/mac-src/src/MACLib/APETag.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/APETag.h b/Frameworks/MAC/mac-src/src/MACLib/APETag.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/APETag.h rename to Frameworks/MAC/mac-src/src/MACLib/APETag.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Assembly/Assembly.h b/Frameworks/MAC/mac-src/src/MACLib/Assembly/Assembly.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Assembly/Assembly.h rename to Frameworks/MAC/mac-src/src/MACLib/Assembly/Assembly.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Assembly/Assembly.nas b/Frameworks/MAC/mac-src/src/MACLib/Assembly/Assembly.nas similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Assembly/Assembly.nas rename to Frameworks/MAC/mac-src/src/MACLib/Assembly/Assembly.nas diff --git a/Libraries/MAC/mac-src/src/MACLib/Assembly/Makefile.am b/Frameworks/MAC/mac-src/src/MACLib/Assembly/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Assembly/Makefile.am rename to Frameworks/MAC/mac-src/src/MACLib/Assembly/Makefile.am diff --git a/Libraries/MAC/mac-src/src/MACLib/Assembly/Makefile.in b/Frameworks/MAC/mac-src/src/MACLib/Assembly/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Assembly/Makefile.in rename to Frameworks/MAC/mac-src/src/MACLib/Assembly/Makefile.in diff --git a/Libraries/MAC/mac-src/src/MACLib/Assembly/Tools.inc b/Frameworks/MAC/mac-src/src/MACLib/Assembly/Tools.inc similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Assembly/Tools.inc rename to Frameworks/MAC/mac-src/src/MACLib/Assembly/Tools.inc diff --git a/Libraries/MAC/mac-src/src/MACLib/Assembly/common.cpp b/Frameworks/MAC/mac-src/src/MACLib/Assembly/common.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Assembly/common.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Assembly/common.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/BitArray.cpp b/Frameworks/MAC/mac-src/src/MACLib/BitArray.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/BitArray.cpp rename to Frameworks/MAC/mac-src/src/MACLib/BitArray.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/BitArray.h b/Frameworks/MAC/mac-src/src/MACLib/BitArray.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/BitArray.h rename to Frameworks/MAC/mac-src/src/MACLib/BitArray.h diff --git a/Libraries/MAC/mac-src/src/MACLib/MACLib.cpp b/Frameworks/MAC/mac-src/src/MACLib/MACLib.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MACLib.cpp rename to Frameworks/MAC/mac-src/src/MACLib/MACLib.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/MACLib.h b/Frameworks/MAC/mac-src/src/MACLib/MACLib.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MACLib.h rename to Frameworks/MAC/mac-src/src/MACLib/MACLib.h diff --git a/Libraries/MAC/mac-src/src/MACLib/MACProgressHelper.cpp b/Frameworks/MAC/mac-src/src/MACLib/MACProgressHelper.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MACProgressHelper.cpp rename to Frameworks/MAC/mac-src/src/MACLib/MACProgressHelper.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/MACProgressHelper.h b/Frameworks/MAC/mac-src/src/MACLib/MACProgressHelper.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MACProgressHelper.h rename to Frameworks/MAC/mac-src/src/MACLib/MACProgressHelper.h diff --git a/Libraries/MAC/mac-src/src/MACLib/MD5.cpp b/Frameworks/MAC/mac-src/src/MACLib/MD5.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MD5.cpp rename to Frameworks/MAC/mac-src/src/MACLib/MD5.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/MD5.h b/Frameworks/MAC/mac-src/src/MACLib/MD5.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MD5.h rename to Frameworks/MAC/mac-src/src/MACLib/MD5.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Makefile.am b/Frameworks/MAC/mac-src/src/MACLib/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Makefile.am rename to Frameworks/MAC/mac-src/src/MACLib/Makefile.am diff --git a/Libraries/MAC/mac-src/src/MACLib/Makefile.in b/Frameworks/MAC/mac-src/src/MACLib/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Makefile.in rename to Frameworks/MAC/mac-src/src/MACLib/Makefile.in diff --git a/Libraries/MAC/mac-src/src/MACLib/MultichannelNNFilter.h b/Frameworks/MAC/mac-src/src/MACLib/MultichannelNNFilter.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/MultichannelNNFilter.h rename to Frameworks/MAC/mac-src/src/MACLib/MultichannelNNFilter.h diff --git a/Libraries/MAC/mac-src/src/MACLib/NNFilter.cpp b/Frameworks/MAC/mac-src/src/MACLib/NNFilter.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/NNFilter.cpp rename to Frameworks/MAC/mac-src/src/MACLib/NNFilter.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/NNFilter.h b/Frameworks/MAC/mac-src/src/MACLib/NNFilter.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/NNFilter.h rename to Frameworks/MAC/mac-src/src/MACLib/NNFilter.h diff --git a/Libraries/MAC/mac-src/src/MACLib/NewPredictor.cpp b/Frameworks/MAC/mac-src/src/MACLib/NewPredictor.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/NewPredictor.cpp rename to Frameworks/MAC/mac-src/src/MACLib/NewPredictor.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/NewPredictor.h b/Frameworks/MAC/mac-src/src/MACLib/NewPredictor.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/NewPredictor.h rename to Frameworks/MAC/mac-src/src/MACLib/NewPredictor.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressCore.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressCore.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressCore.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressCore.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressCore.h b/Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressCore.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressCore.h rename to Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressCore.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressOld.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressOld.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressOld.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressOld.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressOld.h b/Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressOld.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/APEDecompressOld.h rename to Frameworks/MAC/mac-src/src/MACLib/Old/APEDecompressOld.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/Anti-Predictor.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/Anti-Predictor.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/Anti-Predictor.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/Anti-Predictor.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/Anti-Predictor.h b/Frameworks/MAC/mac-src/src/MACLib/Old/Anti-Predictor.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/Anti-Predictor.h rename to Frameworks/MAC/mac-src/src/MACLib/Old/Anti-Predictor.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorExtraHigh.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorExtraHigh.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorExtraHigh.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorExtraHigh.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorFast.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorFast.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorFast.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorFast.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorHigh.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorHigh.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorHigh.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorHigh.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorNormal.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorNormal.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/AntiPredictorNormal.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/AntiPredictorNormal.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/Makefile.am b/Frameworks/MAC/mac-src/src/MACLib/Old/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/Makefile.am rename to Frameworks/MAC/mac-src/src/MACLib/Old/Makefile.am diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/Makefile.in b/Frameworks/MAC/mac-src/src/MACLib/Old/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/Makefile.in rename to Frameworks/MAC/mac-src/src/MACLib/Old/Makefile.in diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.h b/Frameworks/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.h rename to Frameworks/MAC/mac-src/src/MACLib/Old/UnBitArrayOld.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/UnMAC.cpp b/Frameworks/MAC/mac-src/src/MACLib/Old/UnMAC.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/UnMAC.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Old/UnMAC.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Old/UnMAC.h b/Frameworks/MAC/mac-src/src/MACLib/Old/UnMAC.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Old/UnMAC.h rename to Frameworks/MAC/mac-src/src/MACLib/Old/UnMAC.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Predictor.h b/Frameworks/MAC/mac-src/src/MACLib/Predictor.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Predictor.h rename to Frameworks/MAC/mac-src/src/MACLib/Predictor.h diff --git a/Libraries/MAC/mac-src/src/MACLib/Prepare.cpp b/Frameworks/MAC/mac-src/src/MACLib/Prepare.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Prepare.cpp rename to Frameworks/MAC/mac-src/src/MACLib/Prepare.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/Prepare.h b/Frameworks/MAC/mac-src/src/MACLib/Prepare.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/Prepare.h rename to Frameworks/MAC/mac-src/src/MACLib/Prepare.h diff --git a/Libraries/MAC/mac-src/src/MACLib/ScaledFirstOrderFilter.h b/Frameworks/MAC/mac-src/src/MACLib/ScaledFirstOrderFilter.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/ScaledFirstOrderFilter.h rename to Frameworks/MAC/mac-src/src/MACLib/ScaledFirstOrderFilter.h diff --git a/Libraries/MAC/mac-src/src/MACLib/StartFilter.h b/Frameworks/MAC/mac-src/src/MACLib/StartFilter.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/StartFilter.h rename to Frameworks/MAC/mac-src/src/MACLib/StartFilter.h diff --git a/Libraries/MAC/mac-src/src/MACLib/UnBitArray.cpp b/Frameworks/MAC/mac-src/src/MACLib/UnBitArray.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/UnBitArray.cpp rename to Frameworks/MAC/mac-src/src/MACLib/UnBitArray.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/UnBitArray.h b/Frameworks/MAC/mac-src/src/MACLib/UnBitArray.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/UnBitArray.h rename to Frameworks/MAC/mac-src/src/MACLib/UnBitArray.h diff --git a/Libraries/MAC/mac-src/src/MACLib/UnBitArrayBase.cpp b/Frameworks/MAC/mac-src/src/MACLib/UnBitArrayBase.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/UnBitArrayBase.cpp rename to Frameworks/MAC/mac-src/src/MACLib/UnBitArrayBase.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/UnBitArrayBase.h b/Frameworks/MAC/mac-src/src/MACLib/UnBitArrayBase.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/UnBitArrayBase.h rename to Frameworks/MAC/mac-src/src/MACLib/UnBitArrayBase.h diff --git a/Libraries/MAC/mac-src/src/MACLib/WAVInputSource.cpp b/Frameworks/MAC/mac-src/src/MACLib/WAVInputSource.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/WAVInputSource.cpp rename to Frameworks/MAC/mac-src/src/MACLib/WAVInputSource.cpp diff --git a/Libraries/MAC/mac-src/src/MACLib/WAVInputSource.h b/Frameworks/MAC/mac-src/src/MACLib/WAVInputSource.h similarity index 100% rename from Libraries/MAC/mac-src/src/MACLib/WAVInputSource.h rename to Frameworks/MAC/mac-src/src/MACLib/WAVInputSource.h diff --git a/Libraries/MAC/mac-src/src/Makefile.am b/Frameworks/MAC/mac-src/src/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/Makefile.am rename to Frameworks/MAC/mac-src/src/Makefile.am diff --git a/Libraries/MAC/mac-src/src/Makefile.in b/Frameworks/MAC/mac-src/src/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/Makefile.in rename to Frameworks/MAC/mac-src/src/Makefile.in diff --git a/Libraries/MAC/mac-src/src/Readme.htm b/Frameworks/MAC/mac-src/src/Readme.htm similarity index 100% rename from Libraries/MAC/mac-src/src/Readme.htm rename to Frameworks/MAC/mac-src/src/Readme.htm diff --git a/Libraries/MAC/mac-src/src/Shared/APEInfoDialog.cpp b/Frameworks/MAC/mac-src/src/Shared/APEInfoDialog.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/APEInfoDialog.cpp rename to Frameworks/MAC/mac-src/src/Shared/APEInfoDialog.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/APEInfoDialog.h b/Frameworks/MAC/mac-src/src/Shared/APEInfoDialog.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/APEInfoDialog.h rename to Frameworks/MAC/mac-src/src/Shared/APEInfoDialog.h diff --git a/Libraries/MAC/mac-src/src/Shared/All.h b/Frameworks/MAC/mac-src/src/Shared/All.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/All.h rename to Frameworks/MAC/mac-src/src/Shared/All.h diff --git a/Libraries/MAC/mac-src/src/Shared/CharacterHelper.cpp b/Frameworks/MAC/mac-src/src/Shared/CharacterHelper.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/CharacterHelper.cpp rename to Frameworks/MAC/mac-src/src/Shared/CharacterHelper.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/CharacterHelper.h b/Frameworks/MAC/mac-src/src/Shared/CharacterHelper.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/CharacterHelper.h rename to Frameworks/MAC/mac-src/src/Shared/CharacterHelper.h diff --git a/Libraries/MAC/mac-src/src/Shared/CircleBuffer.cpp b/Frameworks/MAC/mac-src/src/Shared/CircleBuffer.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/CircleBuffer.cpp rename to Frameworks/MAC/mac-src/src/Shared/CircleBuffer.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/CircleBuffer.h b/Frameworks/MAC/mac-src/src/Shared/CircleBuffer.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/CircleBuffer.h rename to Frameworks/MAC/mac-src/src/Shared/CircleBuffer.h diff --git a/Libraries/MAC/mac-src/src/Shared/GlobalFunctions.cpp b/Frameworks/MAC/mac-src/src/Shared/GlobalFunctions.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/GlobalFunctions.cpp rename to Frameworks/MAC/mac-src/src/Shared/GlobalFunctions.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/GlobalFunctions.h b/Frameworks/MAC/mac-src/src/Shared/GlobalFunctions.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/GlobalFunctions.h rename to Frameworks/MAC/mac-src/src/Shared/GlobalFunctions.h diff --git a/Libraries/MAC/mac-src/src/Shared/ID3Genres.h b/Frameworks/MAC/mac-src/src/Shared/ID3Genres.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/ID3Genres.h rename to Frameworks/MAC/mac-src/src/Shared/ID3Genres.h diff --git a/Libraries/MAC/mac-src/src/Shared/IO.h b/Frameworks/MAC/mac-src/src/Shared/IO.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/IO.h rename to Frameworks/MAC/mac-src/src/Shared/IO.h diff --git a/Libraries/MAC/mac-src/src/Shared/MACUtils.cpp b/Frameworks/MAC/mac-src/src/Shared/MACUtils.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/MACUtils.cpp rename to Frameworks/MAC/mac-src/src/Shared/MACUtils.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/MACUtils.h b/Frameworks/MAC/mac-src/src/Shared/MACUtils.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/MACUtils.h rename to Frameworks/MAC/mac-src/src/Shared/MACUtils.h diff --git a/Libraries/MAC/mac-src/src/Shared/Makefile.am b/Frameworks/MAC/mac-src/src/Shared/Makefile.am similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/Makefile.am rename to Frameworks/MAC/mac-src/src/Shared/Makefile.am diff --git a/Libraries/MAC/mac-src/src/Shared/Makefile.in b/Frameworks/MAC/mac-src/src/Shared/Makefile.in similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/Makefile.in rename to Frameworks/MAC/mac-src/src/Shared/Makefile.in diff --git a/Libraries/MAC/mac-src/src/Shared/NoWindows.h b/Frameworks/MAC/mac-src/src/Shared/NoWindows.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/NoWindows.h rename to Frameworks/MAC/mac-src/src/Shared/NoWindows.h diff --git a/Libraries/MAC/mac-src/src/Shared/RollBuffer.h b/Frameworks/MAC/mac-src/src/Shared/RollBuffer.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/RollBuffer.h rename to Frameworks/MAC/mac-src/src/Shared/RollBuffer.h diff --git a/Libraries/MAC/mac-src/src/Shared/SmartPtr.h b/Frameworks/MAC/mac-src/src/Shared/SmartPtr.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/SmartPtr.h rename to Frameworks/MAC/mac-src/src/Shared/SmartPtr.h diff --git a/Libraries/MAC/mac-src/src/Shared/StdLibFileIO.cpp b/Frameworks/MAC/mac-src/src/Shared/StdLibFileIO.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/StdLibFileIO.cpp rename to Frameworks/MAC/mac-src/src/Shared/StdLibFileIO.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/StdLibFileIO.h b/Frameworks/MAC/mac-src/src/Shared/StdLibFileIO.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/StdLibFileIO.h rename to Frameworks/MAC/mac-src/src/Shared/StdLibFileIO.h diff --git a/Libraries/MAC/mac-src/src/Shared/StdString.h b/Frameworks/MAC/mac-src/src/Shared/StdString.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/StdString.h rename to Frameworks/MAC/mac-src/src/Shared/StdString.h diff --git a/Libraries/MAC/mac-src/src/Shared/Unicows.cpp b/Frameworks/MAC/mac-src/src/Shared/Unicows.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/Unicows.cpp rename to Frameworks/MAC/mac-src/src/Shared/Unicows.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/WAVInfoDialog.cpp b/Frameworks/MAC/mac-src/src/Shared/WAVInfoDialog.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/WAVInfoDialog.cpp rename to Frameworks/MAC/mac-src/src/Shared/WAVInfoDialog.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/WAVInfoDialog.h b/Frameworks/MAC/mac-src/src/Shared/WAVInfoDialog.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/WAVInfoDialog.h rename to Frameworks/MAC/mac-src/src/Shared/WAVInfoDialog.h diff --git a/Libraries/MAC/mac-src/src/Shared/WinFileIO.cpp b/Frameworks/MAC/mac-src/src/Shared/WinFileIO.cpp similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/WinFileIO.cpp rename to Frameworks/MAC/mac-src/src/Shared/WinFileIO.cpp diff --git a/Libraries/MAC/mac-src/src/Shared/WinFileIO.h b/Frameworks/MAC/mac-src/src/Shared/WinFileIO.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/WinFileIO.h rename to Frameworks/MAC/mac-src/src/Shared/WinFileIO.h diff --git a/Libraries/MAC/mac-src/src/Shared/config.h b/Frameworks/MAC/mac-src/src/Shared/config.h similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/config.h rename to Frameworks/MAC/mac-src/src/Shared/config.h diff --git a/Libraries/MAC/mac-src/src/Shared/config.h.in b/Frameworks/MAC/mac-src/src/Shared/config.h.in similarity index 100% rename from Libraries/MAC/mac-src/src/Shared/config.h.in rename to Frameworks/MAC/mac-src/src/Shared/config.h.in diff --git a/Libraries/MAC/mac-src/strip_fPIC.sh b/Frameworks/MAC/mac-src/strip_fPIC.sh similarity index 100% rename from Libraries/MAC/mac-src/strip_fPIC.sh rename to Frameworks/MAC/mac-src/strip_fPIC.sh diff --git a/Libraries/MAD/English.lproj/InfoPlist.strings b/Frameworks/MAD/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/MAD/English.lproj/InfoPlist.strings rename to Frameworks/MAD/English.lproj/InfoPlist.strings diff --git a/Libraries/MAD/Files/CHANGES b/Frameworks/MAD/Files/CHANGES similarity index 100% rename from Libraries/MAD/Files/CHANGES rename to Frameworks/MAD/Files/CHANGES diff --git a/Libraries/MAD/Files/COPYING b/Frameworks/MAD/Files/COPYING similarity index 100% rename from Libraries/MAD/Files/COPYING rename to Frameworks/MAD/Files/COPYING diff --git a/Libraries/MAD/Files/COPYRIGHT b/Frameworks/MAD/Files/COPYRIGHT similarity index 100% rename from Libraries/MAD/Files/COPYRIGHT rename to Frameworks/MAD/Files/COPYRIGHT diff --git a/Libraries/MAD/Files/CREDITS b/Frameworks/MAD/Files/CREDITS similarity index 100% rename from Libraries/MAD/Files/CREDITS rename to Frameworks/MAD/Files/CREDITS diff --git a/Libraries/MAD/Files/D.dat b/Frameworks/MAD/Files/D.dat similarity index 100% rename from Libraries/MAD/Files/D.dat rename to Frameworks/MAD/Files/D.dat diff --git a/Libraries/MAD/Files/INSTALL b/Frameworks/MAD/Files/INSTALL similarity index 100% rename from Libraries/MAD/Files/INSTALL rename to Frameworks/MAD/Files/INSTALL diff --git a/Libraries/MAD/Files/Makefile.am b/Frameworks/MAD/Files/Makefile.am similarity index 100% rename from Libraries/MAD/Files/Makefile.am rename to Frameworks/MAD/Files/Makefile.am diff --git a/Libraries/MAD/Files/Makefile.in b/Frameworks/MAD/Files/Makefile.in similarity index 100% rename from Libraries/MAD/Files/Makefile.in rename to Frameworks/MAD/Files/Makefile.in diff --git a/Libraries/MAD/Files/README b/Frameworks/MAD/Files/README similarity index 100% rename from Libraries/MAD/Files/README rename to Frameworks/MAD/Files/README diff --git a/Libraries/MAD/Files/TODO b/Frameworks/MAD/Files/TODO similarity index 100% rename from Libraries/MAD/Files/TODO rename to Frameworks/MAD/Files/TODO diff --git a/Libraries/MAD/Files/VERSION b/Frameworks/MAD/Files/VERSION similarity index 100% rename from Libraries/MAD/Files/VERSION rename to Frameworks/MAD/Files/VERSION diff --git a/Libraries/MAD/Files/aclocal.m4 b/Frameworks/MAD/Files/aclocal.m4 similarity index 100% rename from Libraries/MAD/Files/aclocal.m4 rename to Frameworks/MAD/Files/aclocal.m4 diff --git a/Libraries/MAD/Files/bit.c b/Frameworks/MAD/Files/bit.c similarity index 100% rename from Libraries/MAD/Files/bit.c rename to Frameworks/MAD/Files/bit.c diff --git a/Libraries/MAD/Files/bit.h b/Frameworks/MAD/Files/bit.h similarity index 100% rename from Libraries/MAD/Files/bit.h rename to Frameworks/MAD/Files/bit.h diff --git a/Libraries/MAD/Files/config.guess b/Frameworks/MAD/Files/config.guess similarity index 100% rename from Libraries/MAD/Files/config.guess rename to Frameworks/MAD/Files/config.guess diff --git a/Libraries/MAD/Files/config.h b/Frameworks/MAD/Files/config.h similarity index 100% rename from Libraries/MAD/Files/config.h rename to Frameworks/MAD/Files/config.h diff --git a/Libraries/MAD/Files/config.h.in b/Frameworks/MAD/Files/config.h.in similarity index 100% rename from Libraries/MAD/Files/config.h.in rename to Frameworks/MAD/Files/config.h.in diff --git a/Libraries/MAD/Files/config.sub b/Frameworks/MAD/Files/config.sub similarity index 100% rename from Libraries/MAD/Files/config.sub rename to Frameworks/MAD/Files/config.sub diff --git a/Libraries/MAD/Files/configure b/Frameworks/MAD/Files/configure similarity index 100% rename from Libraries/MAD/Files/configure rename to Frameworks/MAD/Files/configure diff --git a/Libraries/MAD/Files/configure.ac b/Frameworks/MAD/Files/configure.ac similarity index 100% rename from Libraries/MAD/Files/configure.ac rename to Frameworks/MAD/Files/configure.ac diff --git a/Libraries/MAD/Files/decoder.c b/Frameworks/MAD/Files/decoder.c similarity index 100% rename from Libraries/MAD/Files/decoder.c rename to Frameworks/MAD/Files/decoder.c diff --git a/Libraries/MAD/Files/decoder.h b/Frameworks/MAD/Files/decoder.h similarity index 100% rename from Libraries/MAD/Files/decoder.h rename to Frameworks/MAD/Files/decoder.h diff --git a/Libraries/MAD/Files/depcomp b/Frameworks/MAD/Files/depcomp similarity index 100% rename from Libraries/MAD/Files/depcomp rename to Frameworks/MAD/Files/depcomp diff --git a/Libraries/MAD/Files/fixed.c b/Frameworks/MAD/Files/fixed.c similarity index 100% rename from Libraries/MAD/Files/fixed.c rename to Frameworks/MAD/Files/fixed.c diff --git a/Libraries/MAD/Files/fixed.h b/Frameworks/MAD/Files/fixed.h similarity index 100% rename from Libraries/MAD/Files/fixed.h rename to Frameworks/MAD/Files/fixed.h diff --git a/Libraries/MAD/Files/frame.c b/Frameworks/MAD/Files/frame.c similarity index 100% rename from Libraries/MAD/Files/frame.c rename to Frameworks/MAD/Files/frame.c diff --git a/Libraries/MAD/Files/frame.h b/Frameworks/MAD/Files/frame.h similarity index 100% rename from Libraries/MAD/Files/frame.h rename to Frameworks/MAD/Files/frame.h diff --git a/Libraries/MAD/Files/global.h b/Frameworks/MAD/Files/global.h similarity index 100% rename from Libraries/MAD/Files/global.h rename to Frameworks/MAD/Files/global.h diff --git a/Libraries/MAD/Files/huffman.c b/Frameworks/MAD/Files/huffman.c similarity index 100% rename from Libraries/MAD/Files/huffman.c rename to Frameworks/MAD/Files/huffman.c diff --git a/Libraries/MAD/Files/huffman.h b/Frameworks/MAD/Files/huffman.h similarity index 100% rename from Libraries/MAD/Files/huffman.h rename to Frameworks/MAD/Files/huffman.h diff --git a/Libraries/MAD/Files/imdct_l_arm.S b/Frameworks/MAD/Files/imdct_l_arm.S similarity index 100% rename from Libraries/MAD/Files/imdct_l_arm.S rename to Frameworks/MAD/Files/imdct_l_arm.S diff --git a/Libraries/MAD/Files/imdct_s.dat b/Frameworks/MAD/Files/imdct_s.dat similarity index 100% rename from Libraries/MAD/Files/imdct_s.dat rename to Frameworks/MAD/Files/imdct_s.dat diff --git a/Libraries/MAD/Files/install-sh b/Frameworks/MAD/Files/install-sh similarity index 100% rename from Libraries/MAD/Files/install-sh rename to Frameworks/MAD/Files/install-sh diff --git a/Libraries/MAD/Files/layer12.c b/Frameworks/MAD/Files/layer12.c similarity index 100% rename from Libraries/MAD/Files/layer12.c rename to Frameworks/MAD/Files/layer12.c diff --git a/Libraries/MAD/Files/layer12.h b/Frameworks/MAD/Files/layer12.h similarity index 100% rename from Libraries/MAD/Files/layer12.h rename to Frameworks/MAD/Files/layer12.h diff --git a/Libraries/MAD/Files/layer3.c b/Frameworks/MAD/Files/layer3.c similarity index 100% rename from Libraries/MAD/Files/layer3.c rename to Frameworks/MAD/Files/layer3.c diff --git a/Libraries/MAD/Files/layer3.h b/Frameworks/MAD/Files/layer3.h similarity index 100% rename from Libraries/MAD/Files/layer3.h rename to Frameworks/MAD/Files/layer3.h diff --git a/Libraries/MAD/Files/libmad.list.in b/Frameworks/MAD/Files/libmad.list.in similarity index 100% rename from Libraries/MAD/Files/libmad.list.in rename to Frameworks/MAD/Files/libmad.list.in diff --git a/Libraries/MAD/Files/ltmain.sh b/Frameworks/MAD/Files/ltmain.sh similarity index 100% rename from Libraries/MAD/Files/ltmain.sh rename to Frameworks/MAD/Files/ltmain.sh diff --git a/Libraries/MAD/Files/mad.h b/Frameworks/MAD/Files/mad.h similarity index 100% rename from Libraries/MAD/Files/mad.h rename to Frameworks/MAD/Files/mad.h diff --git a/Libraries/MAD/Files/mad.h.sed b/Frameworks/MAD/Files/mad.h.sed similarity index 100% rename from Libraries/MAD/Files/mad.h.sed rename to Frameworks/MAD/Files/mad.h.sed diff --git a/Libraries/MAD/Files/minimad.c b/Frameworks/MAD/Files/minimad.c similarity index 100% rename from Libraries/MAD/Files/minimad.c rename to Frameworks/MAD/Files/minimad.c diff --git a/Libraries/MAD/Files/missing b/Frameworks/MAD/Files/missing similarity index 100% rename from Libraries/MAD/Files/missing rename to Frameworks/MAD/Files/missing diff --git a/Libraries/MAD/Files/mkinstalldirs b/Frameworks/MAD/Files/mkinstalldirs similarity index 100% rename from Libraries/MAD/Files/mkinstalldirs rename to Frameworks/MAD/Files/mkinstalldirs diff --git a/Libraries/MAD/Files/msvc++/Makefile.am b/Frameworks/MAD/Files/msvc++/Makefile.am similarity index 100% rename from Libraries/MAD/Files/msvc++/Makefile.am rename to Frameworks/MAD/Files/msvc++/Makefile.am diff --git a/Libraries/MAD/Files/msvc++/Makefile.in b/Frameworks/MAD/Files/msvc++/Makefile.in similarity index 100% rename from Libraries/MAD/Files/msvc++/Makefile.in rename to Frameworks/MAD/Files/msvc++/Makefile.in diff --git a/Libraries/MAD/Files/msvc++/config.h b/Frameworks/MAD/Files/msvc++/config.h similarity index 100% rename from Libraries/MAD/Files/msvc++/config.h rename to Frameworks/MAD/Files/msvc++/config.h diff --git a/Libraries/MAD/Files/msvc++/libmad.dsp b/Frameworks/MAD/Files/msvc++/libmad.dsp similarity index 100% rename from Libraries/MAD/Files/msvc++/libmad.dsp rename to Frameworks/MAD/Files/msvc++/libmad.dsp diff --git a/Libraries/MAD/Files/msvc++/mad.h b/Frameworks/MAD/Files/msvc++/mad.h similarity index 100% rename from Libraries/MAD/Files/msvc++/mad.h rename to Frameworks/MAD/Files/msvc++/mad.h diff --git a/Libraries/MAD/Files/qc_table.dat b/Frameworks/MAD/Files/qc_table.dat similarity index 100% rename from Libraries/MAD/Files/qc_table.dat rename to Frameworks/MAD/Files/qc_table.dat diff --git a/Libraries/MAD/Files/rq_table.dat b/Frameworks/MAD/Files/rq_table.dat similarity index 100% rename from Libraries/MAD/Files/rq_table.dat rename to Frameworks/MAD/Files/rq_table.dat diff --git a/Libraries/MAD/Files/sf_table.dat b/Frameworks/MAD/Files/sf_table.dat similarity index 100% rename from Libraries/MAD/Files/sf_table.dat rename to Frameworks/MAD/Files/sf_table.dat diff --git a/Libraries/MAD/Files/stream.c b/Frameworks/MAD/Files/stream.c similarity index 100% rename from Libraries/MAD/Files/stream.c rename to Frameworks/MAD/Files/stream.c diff --git a/Libraries/MAD/Files/stream.h b/Frameworks/MAD/Files/stream.h similarity index 100% rename from Libraries/MAD/Files/stream.h rename to Frameworks/MAD/Files/stream.h diff --git a/Libraries/MAD/Files/synth.c b/Frameworks/MAD/Files/synth.c similarity index 100% rename from Libraries/MAD/Files/synth.c rename to Frameworks/MAD/Files/synth.c diff --git a/Libraries/MAD/Files/synth.h b/Frameworks/MAD/Files/synth.h similarity index 100% rename from Libraries/MAD/Files/synth.h rename to Frameworks/MAD/Files/synth.h diff --git a/Libraries/MAD/Files/timer.c b/Frameworks/MAD/Files/timer.c similarity index 100% rename from Libraries/MAD/Files/timer.c rename to Frameworks/MAD/Files/timer.c diff --git a/Libraries/MAD/Files/timer.h b/Frameworks/MAD/Files/timer.h similarity index 100% rename from Libraries/MAD/Files/timer.h rename to Frameworks/MAD/Files/timer.h diff --git a/Libraries/MAD/Files/version.c b/Frameworks/MAD/Files/version.c similarity index 100% rename from Libraries/MAD/Files/version.c rename to Frameworks/MAD/Files/version.c diff --git a/Libraries/MAD/Files/version.h b/Frameworks/MAD/Files/version.h similarity index 100% rename from Libraries/MAD/Files/version.h rename to Frameworks/MAD/Files/version.h diff --git a/Libraries/MAD/Info.plist b/Frameworks/MAD/Info.plist similarity index 100% rename from Libraries/MAD/Info.plist rename to Frameworks/MAD/Info.plist diff --git a/Libraries/MAD/MAD.xcodeproj/project.pbxproj b/Frameworks/MAD/MAD.xcodeproj/project.pbxproj similarity index 99% rename from Libraries/MAD/MAD.xcodeproj/project.pbxproj rename to Frameworks/MAD/MAD.xcodeproj/project.pbxproj index f235fedd4..99bd9f87d 100644 --- a/Libraries/MAD/MAD.xcodeproj/project.pbxproj +++ b/Frameworks/MAD/MAD.xcodeproj/project.pbxproj @@ -275,7 +275,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = MAD_Prefix.pch; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; PRODUCT_NAME = MAD; @@ -299,7 +299,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = "-DHAVE_CONFIG_H"; diff --git a/Libraries/MPCDec/English.lproj/InfoPlist.strings b/Frameworks/MPCDec/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/MPCDec/English.lproj/InfoPlist.strings rename to Frameworks/MPCDec/English.lproj/InfoPlist.strings diff --git a/Libraries/MPCDec/Files/AUTHORS b/Frameworks/MPCDec/Files/AUTHORS similarity index 100% rename from Libraries/MPCDec/Files/AUTHORS rename to Frameworks/MPCDec/Files/AUTHORS diff --git a/Libraries/MPCDec/Files/COPYING b/Frameworks/MPCDec/Files/COPYING similarity index 100% rename from Libraries/MPCDec/Files/COPYING rename to Frameworks/MPCDec/Files/COPYING diff --git a/Libraries/MPCDec/Files/ChangeLog b/Frameworks/MPCDec/Files/ChangeLog similarity index 100% rename from Libraries/MPCDec/Files/ChangeLog rename to Frameworks/MPCDec/Files/ChangeLog diff --git a/Libraries/MPCDec/Files/INSTALL b/Frameworks/MPCDec/Files/INSTALL similarity index 100% rename from Libraries/MPCDec/Files/INSTALL rename to Frameworks/MPCDec/Files/INSTALL diff --git a/Libraries/MPCDec/Files/README b/Frameworks/MPCDec/Files/README similarity index 100% rename from Libraries/MPCDec/Files/README rename to Frameworks/MPCDec/Files/README diff --git a/Libraries/MPCDec/Files/include/config.h b/Frameworks/MPCDec/Files/include/config.h similarity index 100% rename from Libraries/MPCDec/Files/include/config.h rename to Frameworks/MPCDec/Files/include/config.h diff --git a/Libraries/MPCDec/Files/include/mainpage.h b/Frameworks/MPCDec/Files/include/mainpage.h similarity index 100% rename from Libraries/MPCDec/Files/include/mainpage.h rename to Frameworks/MPCDec/Files/include/mainpage.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/config_types.h b/Frameworks/MPCDec/Files/include/mpcdec/config_types.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/config_types.h rename to Frameworks/MPCDec/Files/include/mpcdec/config_types.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/config_types.h.in b/Frameworks/MPCDec/Files/include/mpcdec/config_types.h.in similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/config_types.h.in rename to Frameworks/MPCDec/Files/include/mpcdec/config_types.h.in diff --git a/Libraries/MPCDec/Files/include/mpcdec/config_win32.h b/Frameworks/MPCDec/Files/include/mpcdec/config_win32.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/config_win32.h rename to Frameworks/MPCDec/Files/include/mpcdec/config_win32.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/decoder.h b/Frameworks/MPCDec/Files/include/mpcdec/decoder.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/decoder.h rename to Frameworks/MPCDec/Files/include/mpcdec/decoder.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/huffman.h b/Frameworks/MPCDec/Files/include/mpcdec/huffman.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/huffman.h rename to Frameworks/MPCDec/Files/include/mpcdec/huffman.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/internal.h b/Frameworks/MPCDec/Files/include/mpcdec/internal.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/internal.h rename to Frameworks/MPCDec/Files/include/mpcdec/internal.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/math.h b/Frameworks/MPCDec/Files/include/mpcdec/math.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/math.h rename to Frameworks/MPCDec/Files/include/mpcdec/math.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/mpcdec.h b/Frameworks/MPCDec/Files/include/mpcdec/mpcdec.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/mpcdec.h rename to Frameworks/MPCDec/Files/include/mpcdec/mpcdec.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/reader.h b/Frameworks/MPCDec/Files/include/mpcdec/reader.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/reader.h rename to Frameworks/MPCDec/Files/include/mpcdec/reader.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/requant.h b/Frameworks/MPCDec/Files/include/mpcdec/requant.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/requant.h rename to Frameworks/MPCDec/Files/include/mpcdec/requant.h diff --git a/Libraries/MPCDec/Files/include/mpcdec/streaminfo.h b/Frameworks/MPCDec/Files/include/mpcdec/streaminfo.h similarity index 100% rename from Libraries/MPCDec/Files/include/mpcdec/streaminfo.h rename to Frameworks/MPCDec/Files/include/mpcdec/streaminfo.h diff --git a/Libraries/MPCDec/Files/src/huffsv46.c b/Frameworks/MPCDec/Files/src/huffsv46.c similarity index 100% rename from Libraries/MPCDec/Files/src/huffsv46.c rename to Frameworks/MPCDec/Files/src/huffsv46.c diff --git a/Libraries/MPCDec/Files/src/huffsv7.c b/Frameworks/MPCDec/Files/src/huffsv7.c similarity index 100% rename from Libraries/MPCDec/Files/src/huffsv7.c rename to Frameworks/MPCDec/Files/src/huffsv7.c diff --git a/Libraries/MPCDec/Files/src/idtag.c b/Frameworks/MPCDec/Files/src/idtag.c similarity index 100% rename from Libraries/MPCDec/Files/src/idtag.c rename to Frameworks/MPCDec/Files/src/idtag.c diff --git a/Libraries/MPCDec/Files/src/mpc_decoder.c b/Frameworks/MPCDec/Files/src/mpc_decoder.c similarity index 100% rename from Libraries/MPCDec/Files/src/mpc_decoder.c rename to Frameworks/MPCDec/Files/src/mpc_decoder.c diff --git a/Libraries/MPCDec/Files/src/mpc_reader.c b/Frameworks/MPCDec/Files/src/mpc_reader.c similarity index 100% rename from Libraries/MPCDec/Files/src/mpc_reader.c rename to Frameworks/MPCDec/Files/src/mpc_reader.c diff --git a/Libraries/MPCDec/Files/src/requant.c b/Frameworks/MPCDec/Files/src/requant.c similarity index 100% rename from Libraries/MPCDec/Files/src/requant.c rename to Frameworks/MPCDec/Files/src/requant.c diff --git a/Libraries/MPCDec/Files/src/sample.cpp b/Frameworks/MPCDec/Files/src/sample.cpp similarity index 100% rename from Libraries/MPCDec/Files/src/sample.cpp rename to Frameworks/MPCDec/Files/src/sample.cpp diff --git a/Libraries/MPCDec/Files/src/streaminfo.c b/Frameworks/MPCDec/Files/src/streaminfo.c similarity index 100% rename from Libraries/MPCDec/Files/src/streaminfo.c rename to Frameworks/MPCDec/Files/src/streaminfo.c diff --git a/Libraries/MPCDec/Files/src/synth_filter.c b/Frameworks/MPCDec/Files/src/synth_filter.c similarity index 100% rename from Libraries/MPCDec/Files/src/synth_filter.c rename to Frameworks/MPCDec/Files/src/synth_filter.c diff --git a/Libraries/Shorten/Info.plist b/Frameworks/MPCDec/Info.plist similarity index 100% rename from Libraries/Shorten/Info.plist rename to Frameworks/MPCDec/Info.plist diff --git a/Libraries/MPCDec/MPCDec.xcodeproj/project.pbxproj b/Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj similarity index 96% rename from Libraries/MPCDec/MPCDec.xcodeproj/project.pbxproj rename to Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj index 48cd76a68..2c571f619 100644 --- a/Libraries/MPCDec/MPCDec.xcodeproj/project.pbxproj +++ b/Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj @@ -30,21 +30,6 @@ 8E6096E809F314DB006D8BD7 /* streaminfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E6096DB09F314DB006D8BD7 /* streaminfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; @@ -215,8 +200,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = MPCDec; @@ -231,12 +214,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "MPCDec" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* MPCDec */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -303,7 +280,7 @@ GCC_PREFIX_HEADER = ""; HEADER_SEARCH_PATHS = Files/include/; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = MPCDec; WRAPPER_EXTENSION = framework; ZERO_LINK = YES; @@ -325,7 +302,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = MPCDec; USER_HEADER_SEARCH_PATHS = Files/include/; WRAPPER_EXTENSION = framework; diff --git a/Libraries/Ogg/English.lproj/InfoPlist.strings b/Frameworks/Ogg/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/Ogg/English.lproj/InfoPlist.strings rename to Frameworks/Ogg/English.lproj/InfoPlist.strings diff --git a/Libraries/Ogg/Info.plist b/Frameworks/Ogg/Info.plist similarity index 100% rename from Libraries/Ogg/Info.plist rename to Frameworks/Ogg/Info.plist diff --git a/Libraries/Ogg/libogg-1.1.3/AUTHORS b/Frameworks/Ogg/libogg-1.1.3/AUTHORS similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/AUTHORS rename to Frameworks/Ogg/libogg-1.1.3/AUTHORS diff --git a/Libraries/Ogg/libogg-1.1.3/CHANGES b/Frameworks/Ogg/libogg-1.1.3/CHANGES similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/CHANGES rename to Frameworks/Ogg/libogg-1.1.3/CHANGES diff --git a/Libraries/Ogg/libogg-1.1.3/COPYING b/Frameworks/Ogg/libogg-1.1.3/COPYING similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/COPYING rename to Frameworks/Ogg/libogg-1.1.3/COPYING diff --git a/Libraries/Ogg/libogg-1.1.3/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/README b/Frameworks/Ogg/libogg-1.1.3/README similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/README rename to Frameworks/Ogg/libogg-1.1.3/README diff --git a/Libraries/Ogg/libogg-1.1.3/aclocal.m4 b/Frameworks/Ogg/libogg-1.1.3/aclocal.m4 similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/aclocal.m4 rename to Frameworks/Ogg/libogg-1.1.3/aclocal.m4 diff --git a/Libraries/Ogg/libogg-1.1.3/compile b/Frameworks/Ogg/libogg-1.1.3/compile similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/compile rename to Frameworks/Ogg/libogg-1.1.3/compile diff --git a/Libraries/Ogg/libogg-1.1.3/config.guess b/Frameworks/Ogg/libogg-1.1.3/config.guess similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/config.guess rename to Frameworks/Ogg/libogg-1.1.3/config.guess diff --git a/Libraries/Ogg/libogg-1.1.3/config.h.in b/Frameworks/Ogg/libogg-1.1.3/config.h.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/config.h.in rename to Frameworks/Ogg/libogg-1.1.3/config.h.in diff --git a/Libraries/Ogg/libogg-1.1.3/config.sub b/Frameworks/Ogg/libogg-1.1.3/config.sub similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/config.sub rename to Frameworks/Ogg/libogg-1.1.3/config.sub diff --git a/Libraries/Ogg/libogg-1.1.3/configure b/Frameworks/Ogg/libogg-1.1.3/configure similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/configure rename to Frameworks/Ogg/libogg-1.1.3/configure diff --git a/Libraries/Ogg/libogg-1.1.3/configure.in b/Frameworks/Ogg/libogg-1.1.3/configure.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/configure.in rename to Frameworks/Ogg/libogg-1.1.3/configure.in diff --git a/Libraries/Ogg/libogg-1.1.3/debian/.cvsignore b/Frameworks/Ogg/libogg-1.1.3/debian/.cvsignore similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/.cvsignore rename to Frameworks/Ogg/libogg-1.1.3/debian/.cvsignore diff --git a/Libraries/Ogg/libogg-1.1.3/debian/changelog b/Frameworks/Ogg/libogg-1.1.3/debian/changelog similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/changelog rename to Frameworks/Ogg/libogg-1.1.3/debian/changelog diff --git a/Libraries/Ogg/libogg-1.1.3/debian/control b/Frameworks/Ogg/libogg-1.1.3/debian/control similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/control rename to Frameworks/Ogg/libogg-1.1.3/debian/control diff --git a/Libraries/Ogg/libogg-1.1.3/debian/copyright b/Frameworks/Ogg/libogg-1.1.3/debian/copyright similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/copyright rename to Frameworks/Ogg/libogg-1.1.3/debian/copyright diff --git a/Libraries/Ogg/libogg-1.1.3/debian/libogg-dev.docs b/Frameworks/Ogg/libogg-1.1.3/debian/libogg-dev.docs similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/libogg-dev.docs rename to Frameworks/Ogg/libogg-1.1.3/debian/libogg-dev.docs diff --git a/Libraries/Ogg/libogg-1.1.3/debian/libogg-dev.install b/Frameworks/Ogg/libogg-1.1.3/debian/libogg-dev.install similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/libogg-dev.install rename to Frameworks/Ogg/libogg-1.1.3/debian/libogg-dev.install diff --git a/Libraries/Ogg/libogg-1.1.3/debian/libogg0.README.Debian b/Frameworks/Ogg/libogg-1.1.3/debian/libogg0.README.Debian similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/libogg0.README.Debian rename to Frameworks/Ogg/libogg-1.1.3/debian/libogg0.README.Debian diff --git a/Libraries/Ogg/libogg-1.1.3/debian/libogg0.install b/Frameworks/Ogg/libogg-1.1.3/debian/libogg0.install similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/libogg0.install rename to Frameworks/Ogg/libogg-1.1.3/debian/libogg0.install diff --git a/Libraries/Ogg/libogg-1.1.3/debian/rules b/Frameworks/Ogg/libogg-1.1.3/debian/rules similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/rules rename to Frameworks/Ogg/libogg-1.1.3/debian/rules diff --git a/Libraries/Ogg/libogg-1.1.3/debian/watch b/Frameworks/Ogg/libogg-1.1.3/debian/watch similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/debian/watch rename to Frameworks/Ogg/libogg-1.1.3/debian/watch diff --git a/Libraries/Ogg/libogg-1.1.3/depcomp b/Frameworks/Ogg/libogg-1.1.3/depcomp similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/depcomp rename to Frameworks/Ogg/libogg-1.1.3/depcomp diff --git a/Libraries/Ogg/libogg-1.1.3/doc/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/doc/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/doc/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/doc/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/doc/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/doc/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/doc/framing.html b/Frameworks/Ogg/libogg-1.1.3/doc/framing.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/framing.html rename to Frameworks/Ogg/libogg-1.1.3/doc/framing.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/index.html b/Frameworks/Ogg/libogg-1.1.3/doc/index.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/index.html rename to Frameworks/Ogg/libogg-1.1.3/doc/index.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/bitpacking.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/bitpacking.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/bitpacking.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/bitpacking.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/datastructures.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/datastructures.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/datastructures.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/datastructures.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/decoding.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/decoding.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/decoding.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/decoding.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/encoding.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/encoding.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/encoding.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/encoding.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/general.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/general.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/general.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/general.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/index.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/index.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/index.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/index.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_packet.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_packet.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_packet.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_packet.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_packet_clear.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_packet_clear.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_packet_clear.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_packet_clear.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_bos.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_bos.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_bos.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_bos.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_checksum_set.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_checksum_set.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_checksum_set.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_checksum_set.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_continued.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_continued.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_continued.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_continued.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_eos.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_eos.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_eos.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_eos.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_granulepos.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_granulepos.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_granulepos.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_granulepos.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_packets.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_packets.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_packets.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_packets.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_pageno.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_pageno.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_pageno.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_pageno.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_serialno.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_serialno.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_serialno.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_serialno.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_version.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_version.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_page_version.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_page_version.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_clear.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_clear.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_clear.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_clear.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_destroy.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_destroy.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_destroy.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_destroy.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_eos.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_eos.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_eos.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_eos.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_flush.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_flush.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_flush.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_flush.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_init.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_init.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_init.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_init.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetin.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetin.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetin.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetin.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetout.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetout.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetout.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetout.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetpeek.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetpeek.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetpeek.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_packetpeek.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pagein.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pagein.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pagein.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pagein.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pageout.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pageout.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pageout.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_pageout.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset_serialno.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset_serialno.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset_serialno.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_reset_serialno.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_state.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_state.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_state.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_stream_state.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_buffer.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_buffer.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_buffer.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_buffer.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_clear.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_clear.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_clear.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_clear.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_destroy.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_destroy.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_destroy.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_destroy.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_init.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_init.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_init.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_init.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageout.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageout.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageout.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageout.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageseek.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageseek.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageseek.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_pageseek.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_reset.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_reset.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_reset.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_reset.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_state.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_state.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_state.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_state.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_wrote.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_wrote.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_wrote.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/ogg_sync_wrote.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv1.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv1.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv1.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_adv1.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_bits.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_bits.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_bits.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_bits.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_buffer.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_buffer.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_buffer.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_buffer.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_bytes.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_bytes.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_bytes.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_bytes.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_get_buffer.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_get_buffer.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_get_buffer.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_get_buffer.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_look.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_look.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_look.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_look.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_look1.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_look1.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_look1.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_look1.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_read.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_read.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_read.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_read.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_read1.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_read1.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_read1.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_read1.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_readinit.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_readinit.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_readinit.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_readinit.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_reset.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_reset.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_reset.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_reset.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_write.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_write.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_write.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_write.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writealign.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writealign.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writealign.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writealign.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeclear.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeclear.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeclear.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeclear.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writecopy.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writecopy.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writecopy.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writecopy.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeinit.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeinit.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeinit.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writeinit.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writetrunc.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writetrunc.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/oggpack_writetrunc.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/oggpack_writetrunc.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/overview.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/overview.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/overview.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/overview.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/reference.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/reference.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/reference.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/reference.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/style.css b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/style.css similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/style.css rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/style.css diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/vorbis_comment.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/vorbis_comment.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/vorbis_comment.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/vorbis_comment.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/libogg/vorbis_info.html b/Frameworks/Ogg/libogg-1.1.3/doc/libogg/vorbis_info.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/libogg/vorbis_info.html rename to Frameworks/Ogg/libogg-1.1.3/doc/libogg/vorbis_info.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/ogg-multiplex.html b/Frameworks/Ogg/libogg-1.1.3/doc/ogg-multiplex.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/ogg-multiplex.html rename to Frameworks/Ogg/libogg-1.1.3/doc/ogg-multiplex.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/oggstream.html b/Frameworks/Ogg/libogg-1.1.3/doc/oggstream.html similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/oggstream.html rename to Frameworks/Ogg/libogg-1.1.3/doc/oggstream.html diff --git a/Libraries/Ogg/libogg-1.1.3/doc/rfc3533.txt b/Frameworks/Ogg/libogg-1.1.3/doc/rfc3533.txt similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/rfc3533.txt rename to Frameworks/Ogg/libogg-1.1.3/doc/rfc3533.txt diff --git a/Libraries/Ogg/libogg-1.1.3/doc/rfc3534.txt b/Frameworks/Ogg/libogg-1.1.3/doc/rfc3534.txt similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/rfc3534.txt rename to Frameworks/Ogg/libogg-1.1.3/doc/rfc3534.txt diff --git a/Libraries/Ogg/libogg-1.1.3/doc/stream.png b/Frameworks/Ogg/libogg-1.1.3/doc/stream.png similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/stream.png rename to Frameworks/Ogg/libogg-1.1.3/doc/stream.png diff --git a/Libraries/Ogg/libogg-1.1.3/doc/vorbisword2.png b/Frameworks/Ogg/libogg-1.1.3/doc/vorbisword2.png similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/vorbisword2.png rename to Frameworks/Ogg/libogg-1.1.3/doc/vorbisword2.png diff --git a/Libraries/Ogg/libogg-1.1.3/doc/white-ogg.png b/Frameworks/Ogg/libogg-1.1.3/doc/white-ogg.png similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/white-ogg.png rename to Frameworks/Ogg/libogg-1.1.3/doc/white-ogg.png diff --git a/Libraries/Ogg/libogg-1.1.3/doc/white-xifish.png b/Frameworks/Ogg/libogg-1.1.3/doc/white-xifish.png similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/doc/white-xifish.png rename to Frameworks/Ogg/libogg-1.1.3/doc/white-xifish.png diff --git a/Libraries/Ogg/libogg-1.1.3/include/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/include/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/include/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/include/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/include/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/include/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/include/ogg/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/include/ogg/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/ogg/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/include/ogg/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/include/ogg/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/include/ogg/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/ogg/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/include/ogg/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/include/ogg/config_types.h.in b/Frameworks/Ogg/libogg-1.1.3/include/ogg/config_types.h.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/ogg/config_types.h.in rename to Frameworks/Ogg/libogg-1.1.3/include/ogg/config_types.h.in diff --git a/Libraries/Ogg/libogg-1.1.3/include/ogg/ogg.h b/Frameworks/Ogg/libogg-1.1.3/include/ogg/ogg.h similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/ogg/ogg.h rename to Frameworks/Ogg/libogg-1.1.3/include/ogg/ogg.h diff --git a/Libraries/Ogg/libogg-1.1.3/include/ogg/os_types.h b/Frameworks/Ogg/libogg-1.1.3/include/ogg/os_types.h similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/include/ogg/os_types.h rename to Frameworks/Ogg/libogg-1.1.3/include/ogg/os_types.h diff --git a/Libraries/Ogg/libogg-1.1.3/install-sh b/Frameworks/Ogg/libogg-1.1.3/install-sh similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/install-sh rename to Frameworks/Ogg/libogg-1.1.3/install-sh diff --git a/Libraries/Ogg/libogg-1.1.3/libogg.spec b/Frameworks/Ogg/libogg-1.1.3/libogg.spec similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/libogg.spec rename to Frameworks/Ogg/libogg-1.1.3/libogg.spec diff --git a/Libraries/Ogg/libogg-1.1.3/libogg.spec.in b/Frameworks/Ogg/libogg-1.1.3/libogg.spec.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/libogg.spec.in rename to Frameworks/Ogg/libogg-1.1.3/libogg.spec.in diff --git a/Libraries/Ogg/libogg-1.1.3/ltmain.sh b/Frameworks/Ogg/libogg-1.1.3/ltmain.sh similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/ltmain.sh rename to Frameworks/Ogg/libogg-1.1.3/ltmain.sh diff --git a/Libraries/Ogg/libogg-1.1.3/macos/compat/strdup.c b/Frameworks/Ogg/libogg-1.1.3/macos/compat/strdup.c similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macos/compat/strdup.c rename to Frameworks/Ogg/libogg-1.1.3/macos/compat/strdup.c diff --git a/Libraries/Ogg/libogg-1.1.3/macos/compat/sys/types.h b/Frameworks/Ogg/libogg-1.1.3/macos/compat/sys/types.h similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macos/compat/sys/types.h rename to Frameworks/Ogg/libogg-1.1.3/macos/compat/sys/types.h diff --git a/Libraries/Ogg/libogg-1.1.3/macos/libogg.mcp b/Frameworks/Ogg/libogg-1.1.3/macos/libogg.mcp similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macos/libogg.mcp rename to Frameworks/Ogg/libogg-1.1.3/macos/libogg.mcp diff --git a/Libraries/Ogg/libogg-1.1.3/macos/libogg.mcp.exp b/Frameworks/Ogg/libogg-1.1.3/macos/libogg.mcp.exp similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macos/libogg.mcp.exp rename to Frameworks/Ogg/libogg-1.1.3/macos/libogg.mcp.exp diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/English.lproj/InfoPlist.strings b/Frameworks/Ogg/libogg-1.1.3/macosx/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macosx/English.lproj/InfoPlist.strings rename to Frameworks/Ogg/libogg-1.1.3/macosx/English.lproj/InfoPlist.strings diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/Info.plist b/Frameworks/Ogg/libogg-1.1.3/macosx/Info.plist similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macosx/Info.plist rename to Frameworks/Ogg/libogg-1.1.3/macosx/Info.plist diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.mode1 b/Frameworks/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.mode1 similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.mode1 rename to Frameworks/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.mode1 diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.pbxuser b/Frameworks/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.pbxuser similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.pbxuser rename to Frameworks/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/me.pbxuser diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/project.pbxproj b/Frameworks/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/project.pbxproj similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/project.pbxproj rename to Frameworks/Ogg/libogg-1.1.3/macosx/Ogg.xcodeproj/project.pbxproj diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/Ogg_Prefix.pch b/Frameworks/Ogg/libogg-1.1.3/macosx/Ogg_Prefix.pch similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/macosx/Ogg_Prefix.pch rename to Frameworks/Ogg/libogg-1.1.3/macosx/Ogg_Prefix.pch diff --git a/Libraries/Ogg/libogg-1.1.3/missing b/Frameworks/Ogg/libogg-1.1.3/missing similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/missing rename to Frameworks/Ogg/libogg-1.1.3/missing diff --git a/Libraries/Ogg/libogg-1.1.3/ogg-uninstalled.pc.in b/Frameworks/Ogg/libogg-1.1.3/ogg-uninstalled.pc.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/ogg-uninstalled.pc.in rename to Frameworks/Ogg/libogg-1.1.3/ogg-uninstalled.pc.in diff --git a/Libraries/Ogg/libogg-1.1.3/ogg.m4 b/Frameworks/Ogg/libogg-1.1.3/ogg.m4 similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/ogg.m4 rename to Frameworks/Ogg/libogg-1.1.3/ogg.m4 diff --git a/Libraries/Ogg/libogg-1.1.3/ogg.pc.in b/Frameworks/Ogg/libogg-1.1.3/ogg.pc.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/ogg.pc.in rename to Frameworks/Ogg/libogg-1.1.3/ogg.pc.in diff --git a/Libraries/Ogg/libogg-1.1.3/src/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/src/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/src/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/src/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/src/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/src/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/src/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/src/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/src/bitwise.c b/Frameworks/Ogg/libogg-1.1.3/src/bitwise.c similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/src/bitwise.c rename to Frameworks/Ogg/libogg-1.1.3/src/bitwise.c diff --git a/Libraries/Ogg/libogg-1.1.3/src/framing.c b/Frameworks/Ogg/libogg-1.1.3/src/framing.c similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/src/framing.c rename to Frameworks/Ogg/libogg-1.1.3/src/framing.c diff --git a/Libraries/Ogg/libogg-1.1.3/win32/Makefile.am b/Frameworks/Ogg/libogg-1.1.3/win32/Makefile.am similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/Makefile.am rename to Frameworks/Ogg/libogg-1.1.3/win32/Makefile.am diff --git a/Libraries/Ogg/libogg-1.1.3/win32/Makefile.in b/Frameworks/Ogg/libogg-1.1.3/win32/Makefile.in similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/Makefile.in rename to Frameworks/Ogg/libogg-1.1.3/win32/Makefile.in diff --git a/Libraries/Ogg/libogg-1.1.3/win32/build_ogg_dynamic.bat b/Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_dynamic.bat similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/build_ogg_dynamic.bat rename to Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_dynamic.bat diff --git a/Libraries/Ogg/libogg-1.1.3/win32/build_ogg_dynamic_debug.bat b/Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_dynamic_debug.bat similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/build_ogg_dynamic_debug.bat rename to Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_dynamic_debug.bat diff --git a/Libraries/Ogg/libogg-1.1.3/win32/build_ogg_static.bat b/Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_static.bat similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/build_ogg_static.bat rename to Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_static.bat diff --git a/Libraries/Ogg/libogg-1.1.3/win32/build_ogg_static_debug.bat b/Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_static_debug.bat similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/build_ogg_static_debug.bat rename to Frameworks/Ogg/libogg-1.1.3/win32/build_ogg_static_debug.bat diff --git a/Libraries/Ogg/libogg-1.1.3/win32/ogg.def b/Frameworks/Ogg/libogg-1.1.3/win32/ogg.def similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/ogg.def rename to Frameworks/Ogg/libogg-1.1.3/win32/ogg.def diff --git a/Libraries/Ogg/libogg-1.1.3/win32/ogg.dsw b/Frameworks/Ogg/libogg-1.1.3/win32/ogg.dsw similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/ogg.dsw rename to Frameworks/Ogg/libogg-1.1.3/win32/ogg.dsw diff --git a/Libraries/Ogg/libogg-1.1.3/win32/ogg_dynamic.dsp b/Frameworks/Ogg/libogg-1.1.3/win32/ogg_dynamic.dsp similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/ogg_dynamic.dsp rename to Frameworks/Ogg/libogg-1.1.3/win32/ogg_dynamic.dsp diff --git a/Libraries/Ogg/libogg-1.1.3/win32/ogg_static.dsp b/Frameworks/Ogg/libogg-1.1.3/win32/ogg_static.dsp similarity index 100% rename from Libraries/Ogg/libogg-1.1.3/win32/ogg_static.dsp rename to Frameworks/Ogg/libogg-1.1.3/win32/ogg_static.dsp diff --git a/Libraries/Ogg/libogg-src b/Frameworks/Ogg/libogg-src similarity index 100% rename from Libraries/Ogg/libogg-src rename to Frameworks/Ogg/libogg-src diff --git a/Libraries/Ogg/ogg.xcodeproj/me.mode1 b/Frameworks/Ogg/ogg.xcodeproj/me.mode1 similarity index 100% rename from Libraries/Ogg/ogg.xcodeproj/me.mode1 rename to Frameworks/Ogg/ogg.xcodeproj/me.mode1 diff --git a/Libraries/Ogg/ogg.xcodeproj/me.pbxuser b/Frameworks/Ogg/ogg.xcodeproj/me.pbxuser similarity index 100% rename from Libraries/Ogg/ogg.xcodeproj/me.pbxuser rename to Frameworks/Ogg/ogg.xcodeproj/me.pbxuser diff --git a/Libraries/Ogg/ogg.xcodeproj/project.pbxproj b/Frameworks/Ogg/ogg.xcodeproj/project.pbxproj similarity index 95% rename from Libraries/Ogg/ogg.xcodeproj/project.pbxproj rename to Frameworks/Ogg/ogg.xcodeproj/project.pbxproj index 9e1496f47..d3516d6f8 100644 --- a/Libraries/Ogg/ogg.xcodeproj/project.pbxproj +++ b/Frameworks/Ogg/ogg.xcodeproj/project.pbxproj @@ -14,21 +14,6 @@ 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; @@ -156,8 +141,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = "Ogg Framework"; @@ -172,12 +155,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "ogg" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* ogg */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -238,7 +215,7 @@ GCC_PREFIX_HEADER = ogg_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = Ogg; USER_HEADER_SEARCH_PATHS = "libogg-src/include"; WRAPPER_EXTENSION = framework; @@ -262,7 +239,7 @@ GCC_PREFIX_HEADER = ogg_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = Ogg; USER_HEADER_SEARCH_PATHS = "libogg-src/include"; WRAPPER_EXTENSION = framework; diff --git a/Libraries/Ogg/ogg_Prefix.pch b/Frameworks/Ogg/ogg_Prefix.pch similarity index 100% rename from Libraries/Ogg/ogg_Prefix.pch rename to Frameworks/Ogg/ogg_Prefix.pch diff --git a/Libraries/SOURCES b/Frameworks/SOURCES similarity index 100% rename from Libraries/SOURCES rename to Frameworks/SOURCES diff --git a/Libraries/Shorten/English.lproj/InfoPlist.strings b/Frameworks/Shorten/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/Shorten/English.lproj/InfoPlist.strings rename to Frameworks/Shorten/English.lproj/InfoPlist.strings diff --git a/Libraries/Shorten/Files/AUTHORS b/Frameworks/Shorten/Files/AUTHORS similarity index 100% rename from Libraries/Shorten/Files/AUTHORS rename to Frameworks/Shorten/Files/AUTHORS diff --git a/Libraries/Shorten/Files/COPYING b/Frameworks/Shorten/Files/COPYING similarity index 100% rename from Libraries/Shorten/Files/COPYING rename to Frameworks/Shorten/Files/COPYING diff --git a/Libraries/Shorten/Files/ChangeLog b/Frameworks/Shorten/Files/ChangeLog similarity index 100% rename from Libraries/Shorten/Files/ChangeLog rename to Frameworks/Shorten/Files/ChangeLog diff --git a/Libraries/Shorten/Files/Makefile.am b/Frameworks/Shorten/Files/Makefile.am similarity index 100% rename from Libraries/Shorten/Files/Makefile.am rename to Frameworks/Shorten/Files/Makefile.am diff --git a/Libraries/Shorten/Files/NEWS b/Frameworks/Shorten/Files/NEWS similarity index 100% rename from Libraries/Shorten/Files/NEWS rename to Frameworks/Shorten/Files/NEWS diff --git a/Libraries/Shorten/Files/README b/Frameworks/Shorten/Files/README similarity index 100% rename from Libraries/Shorten/Files/README rename to Frameworks/Shorten/Files/README diff --git a/Libraries/Shorten/Files/TODO b/Frameworks/Shorten/Files/TODO similarity index 100% rename from Libraries/Shorten/Files/TODO rename to Frameworks/Shorten/Files/TODO diff --git a/Libraries/Shorten/Files/configure.ac b/Frameworks/Shorten/Files/configure.ac similarity index 100% rename from Libraries/Shorten/Files/configure.ac rename to Frameworks/Shorten/Files/configure.ac diff --git a/Libraries/Shorten/Files/shorten/Makefile.am b/Frameworks/Shorten/Files/shorten/Makefile.am similarity index 100% rename from Libraries/Shorten/Files/shorten/Makefile.am rename to Frameworks/Shorten/Files/shorten/Makefile.am diff --git a/Libraries/Shorten/Files/shorten/doc/LICENSE.shorten b/Frameworks/Shorten/Files/shorten/doc/LICENSE.shorten similarity index 100% rename from Libraries/Shorten/Files/shorten/doc/LICENSE.shorten rename to Frameworks/Shorten/Files/shorten/doc/LICENSE.shorten diff --git a/Libraries/Shorten/Files/shorten/doc/xmms-shn/AUTHORS b/Frameworks/Shorten/Files/shorten/doc/xmms-shn/AUTHORS similarity index 100% rename from Libraries/Shorten/Files/shorten/doc/xmms-shn/AUTHORS rename to Frameworks/Shorten/Files/shorten/doc/xmms-shn/AUTHORS diff --git a/Libraries/Shorten/Files/shorten/doc/xmms-shn/CREDITS b/Frameworks/Shorten/Files/shorten/doc/xmms-shn/CREDITS similarity index 100% rename from Libraries/Shorten/Files/shorten/doc/xmms-shn/CREDITS rename to Frameworks/Shorten/Files/shorten/doc/xmms-shn/CREDITS diff --git a/Libraries/Shorten/Files/shorten/doc/xmms-shn/NEWS b/Frameworks/Shorten/Files/shorten/doc/xmms-shn/NEWS similarity index 100% rename from Libraries/Shorten/Files/shorten/doc/xmms-shn/NEWS rename to Frameworks/Shorten/Files/shorten/doc/xmms-shn/NEWS diff --git a/Libraries/Shorten/Files/shorten/doc/xmms-shn/README b/Frameworks/Shorten/Files/shorten/doc/xmms-shn/README similarity index 100% rename from Libraries/Shorten/Files/shorten/doc/xmms-shn/README rename to Frameworks/Shorten/Files/shorten/doc/xmms-shn/README diff --git a/Libraries/Shorten/Files/shorten/include/bitshift.h b/Frameworks/Shorten/Files/shorten/include/bitshift.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/bitshift.h rename to Frameworks/Shorten/Files/shorten/include/bitshift.h diff --git a/Libraries/Shorten/Files/shorten/include/config.h b/Frameworks/Shorten/Files/shorten/include/config.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/config.h rename to Frameworks/Shorten/Files/shorten/include/config.h diff --git a/Libraries/Shorten/Files/shorten/include/config.h.in b/Frameworks/Shorten/Files/shorten/include/config.h.in similarity index 100% rename from Libraries/Shorten/Files/shorten/include/config.h.in rename to Frameworks/Shorten/Files/shorten/include/config.h.in diff --git a/Libraries/Shorten/Files/shorten/include/decode.h b/Frameworks/Shorten/Files/shorten/include/decode.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/decode.h rename to Frameworks/Shorten/Files/shorten/include/decode.h diff --git a/Libraries/Shorten/Files/shorten/include/ringbuffer.h b/Frameworks/Shorten/Files/shorten/include/ringbuffer.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/ringbuffer.h rename to Frameworks/Shorten/Files/shorten/include/ringbuffer.h diff --git a/Libraries/Shorten/Files/shorten/include/shn.h b/Frameworks/Shorten/Files/shorten/include/shn.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/shn.h rename to Frameworks/Shorten/Files/shorten/include/shn.h diff --git a/Libraries/Shorten/Files/shorten/include/shn_reader.h b/Frameworks/Shorten/Files/shorten/include/shn_reader.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/shn_reader.h rename to Frameworks/Shorten/Files/shorten/include/shn_reader.h diff --git a/Libraries/Shorten/Files/shorten/include/shorten.h b/Frameworks/Shorten/Files/shorten/include/shorten.h similarity index 100% rename from Libraries/Shorten/Files/shorten/include/shorten.h rename to Frameworks/Shorten/Files/shorten/include/shorten.h diff --git a/Libraries/Shorten/Files/shorten/src/Makefile.am b/Frameworks/Shorten/Files/shorten/src/Makefile.am similarity index 100% rename from Libraries/Shorten/Files/shorten/src/Makefile.am rename to Frameworks/Shorten/Files/shorten/src/Makefile.am diff --git a/Libraries/Shorten/Files/shorten/src/array.c b/Frameworks/Shorten/Files/shorten/src/array.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/array.c rename to Frameworks/Shorten/Files/shorten/src/array.c diff --git a/Libraries/Shorten/Files/shorten/src/array.cpp b/Frameworks/Shorten/Files/shorten/src/array.cpp similarity index 100% rename from Libraries/Shorten/Files/shorten/src/array.cpp rename to Frameworks/Shorten/Files/shorten/src/array.cpp diff --git a/Libraries/Shorten/Files/shorten/src/convert.c b/Frameworks/Shorten/Files/shorten/src/convert.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/convert.c rename to Frameworks/Shorten/Files/shorten/src/convert.c diff --git a/Libraries/Shorten/Files/shorten/src/decode.c b/Frameworks/Shorten/Files/shorten/src/decode.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/decode.c rename to Frameworks/Shorten/Files/shorten/src/decode.c diff --git a/Libraries/Shorten/Files/shorten/src/fixio.c b/Frameworks/Shorten/Files/shorten/src/fixio.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/fixio.c rename to Frameworks/Shorten/Files/shorten/src/fixio.c diff --git a/Libraries/Shorten/Files/shorten/src/fixio.cpp b/Frameworks/Shorten/Files/shorten/src/fixio.cpp similarity index 100% rename from Libraries/Shorten/Files/shorten/src/fixio.cpp rename to Frameworks/Shorten/Files/shorten/src/fixio.cpp diff --git a/Libraries/Shorten/Files/shorten/src/id3v2.c b/Frameworks/Shorten/Files/shorten/src/id3v2.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/id3v2.c rename to Frameworks/Shorten/Files/shorten/src/id3v2.c diff --git a/Libraries/Shorten/Files/shorten/src/misc.c b/Frameworks/Shorten/Files/shorten/src/misc.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/misc.c rename to Frameworks/Shorten/Files/shorten/src/misc.c diff --git a/Libraries/Shorten/Files/shorten/src/output.c b/Frameworks/Shorten/Files/shorten/src/output.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/output.c rename to Frameworks/Shorten/Files/shorten/src/output.c diff --git a/Libraries/Shorten/Files/shorten/src/ringbuffer.cpp b/Frameworks/Shorten/Files/shorten/src/ringbuffer.cpp similarity index 100% rename from Libraries/Shorten/Files/shorten/src/ringbuffer.cpp rename to Frameworks/Shorten/Files/shorten/src/ringbuffer.cpp diff --git a/Libraries/Shorten/Files/shorten/src/seek.c b/Frameworks/Shorten/Files/shorten/src/seek.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/seek.c rename to Frameworks/Shorten/Files/shorten/src/seek.c diff --git a/Libraries/Shorten/Files/shorten/src/seek.cpp b/Frameworks/Shorten/Files/shorten/src/seek.cpp similarity index 100% rename from Libraries/Shorten/Files/shorten/src/seek.cpp rename to Frameworks/Shorten/Files/shorten/src/seek.cpp diff --git a/Libraries/Shorten/Files/shorten/src/shn_reader.cpp b/Frameworks/Shorten/Files/shorten/src/shn_reader.cpp similarity index 100% rename from Libraries/Shorten/Files/shorten/src/shn_reader.cpp rename to Frameworks/Shorten/Files/shorten/src/shn_reader.cpp diff --git a/Libraries/Shorten/Files/shorten/src/shorten.c b/Frameworks/Shorten/Files/shorten/src/shorten.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/shorten.c rename to Frameworks/Shorten/Files/shorten/src/shorten.c diff --git a/Libraries/Shorten/Files/shorten/src/sulawalaw.c b/Frameworks/Shorten/Files/shorten/src/sulawalaw.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/sulawalaw.c rename to Frameworks/Shorten/Files/shorten/src/sulawalaw.c diff --git a/Libraries/Shorten/Files/shorten/src/vario.c b/Frameworks/Shorten/Files/shorten/src/vario.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/vario.c rename to Frameworks/Shorten/Files/shorten/src/vario.c diff --git a/Libraries/Shorten/Files/shorten/src/vario.cpp b/Frameworks/Shorten/Files/shorten/src/vario.cpp similarity index 100% rename from Libraries/Shorten/Files/shorten/src/vario.cpp rename to Frameworks/Shorten/Files/shorten/src/vario.cpp diff --git a/Libraries/Shorten/Files/shorten/src/wave.c b/Frameworks/Shorten/Files/shorten/src/wave.c similarity index 100% rename from Libraries/Shorten/Files/shorten/src/wave.c rename to Frameworks/Shorten/Files/shorten/src/wave.c diff --git a/Libraries/Shorten/Files/shorten/util/Makefile.am b/Frameworks/Shorten/Files/shorten/util/Makefile.am similarity index 100% rename from Libraries/Shorten/Files/shorten/util/Makefile.am rename to Frameworks/Shorten/Files/shorten/util/Makefile.am diff --git a/Libraries/Shorten/Files/shorten/util/Sulawalaw.c b/Frameworks/Shorten/Files/shorten/util/Sulawalaw.c similarity index 100% rename from Libraries/Shorten/Files/shorten/util/Sulawalaw.c rename to Frameworks/Shorten/Files/shorten/util/Sulawalaw.c diff --git a/Libraries/Shorten/Files/shorten/util/array.c b/Frameworks/Shorten/Files/shorten/util/array.c similarity index 100% rename from Libraries/Shorten/Files/shorten/util/array.c rename to Frameworks/Shorten/Files/shorten/util/array.c diff --git a/Libraries/Shorten/Files/shorten/util/exit.c b/Frameworks/Shorten/Files/shorten/util/exit.c similarity index 100% rename from Libraries/Shorten/Files/shorten/util/exit.c rename to Frameworks/Shorten/Files/shorten/util/exit.c diff --git a/Libraries/Shorten/Files/shorten/util/mkbshift.c b/Frameworks/Shorten/Files/shorten/util/mkbshift.c similarity index 100% rename from Libraries/Shorten/Files/shorten/util/mkbshift.c rename to Frameworks/Shorten/Files/shorten/util/mkbshift.c diff --git a/Libraries/Shorten/Files/shorten/util/mkbshift.h b/Frameworks/Shorten/Files/shorten/util/mkbshift.h similarity index 100% rename from Libraries/Shorten/Files/shorten/util/mkbshift.h rename to Frameworks/Shorten/Files/shorten/util/mkbshift.h diff --git a/Libraries/Shorten/Files/src/Makefile.am b/Frameworks/Shorten/Files/src/Makefile.am similarity index 100% rename from Libraries/Shorten/Files/src/Makefile.am rename to Frameworks/Shorten/Files/src/Makefile.am diff --git a/Libraries/Shorten/Files/src/libinputshorten.c b/Frameworks/Shorten/Files/src/libinputshorten.c similarity index 100% rename from Libraries/Shorten/Files/src/libinputshorten.c rename to Frameworks/Shorten/Files/src/libinputshorten.c diff --git a/Libraries/SndFile/Info.plist b/Frameworks/Shorten/Info.plist similarity index 100% rename from Libraries/SndFile/Info.plist rename to Frameworks/Shorten/Info.plist diff --git a/Libraries/Shorten/Shorten.xcodeproj/project.pbxproj b/Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj similarity index 95% rename from Libraries/Shorten/Shorten.xcodeproj/project.pbxproj rename to Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj index 42810c79a..272df227a 100644 --- a/Libraries/Shorten/Shorten.xcodeproj/project.pbxproj +++ b/Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj @@ -22,23 +22,6 @@ 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 8E8303D10A3226D3008E1F34 /* Development */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = NO; - }; - name = Development; - }; - 8E8303D20A3226D3008E1F34 /* Deployment */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - name = Deployment; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 59F1214D0A311CD40052FE42 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = config.h; path = Files/shorten/include/config.h; sourceTree = ""; }; @@ -189,12 +172,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Shorten" */; - buildSettings = { - }; - buildStyles = ( - 8E8303D10A3226D3008E1F34 /* Development */, - 8E8303D20A3226D3008E1F34 /* Deployment */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* Shorten */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -259,7 +236,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = Shorten; WRAPPER_EXTENSION = framework; ZERO_LINK = YES; @@ -281,7 +258,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; OTHER_CFLAGS = "-DHAVE_CONFIG_H"; PRODUCT_NAME = Shorten; SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders"; diff --git a/Libraries/SndFile/English.lproj/InfoPlist.strings b/Frameworks/TagLib/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/SndFile/English.lproj/InfoPlist.strings rename to Frameworks/TagLib/English.lproj/InfoPlist.strings diff --git a/Libraries/TagLib/Files/AUTHORS b/Frameworks/TagLib/Files/AUTHORS similarity index 100% rename from Libraries/TagLib/Files/AUTHORS rename to Frameworks/TagLib/Files/AUTHORS diff --git a/Libraries/TagLib/Files/COPYING b/Frameworks/TagLib/Files/COPYING similarity index 100% rename from Libraries/TagLib/Files/COPYING rename to Frameworks/TagLib/Files/COPYING diff --git a/Libraries/TagLib/Files/ChangeLog b/Frameworks/TagLib/Files/ChangeLog similarity index 100% rename from Libraries/TagLib/Files/ChangeLog rename to Frameworks/TagLib/Files/ChangeLog diff --git a/Libraries/TagLib/Files/INSTALL b/Frameworks/TagLib/Files/INSTALL similarity index 100% rename from Libraries/TagLib/Files/INSTALL rename to Frameworks/TagLib/Files/INSTALL diff --git a/Libraries/TagLib/Files/Makefile.am b/Frameworks/TagLib/Files/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/Makefile.am rename to Frameworks/TagLib/Files/Makefile.am diff --git a/Libraries/TagLib/Files/Makefile.cvs b/Frameworks/TagLib/Files/Makefile.cvs similarity index 100% rename from Libraries/TagLib/Files/Makefile.cvs rename to Frameworks/TagLib/Files/Makefile.cvs diff --git a/Libraries/TagLib/Files/Makefile.in b/Frameworks/TagLib/Files/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/Makefile.in rename to Frameworks/TagLib/Files/Makefile.in diff --git a/Libraries/TagLib/Files/README b/Frameworks/TagLib/Files/README similarity index 100% rename from Libraries/TagLib/Files/README rename to Frameworks/TagLib/Files/README diff --git a/Libraries/TagLib/Files/TODO b/Frameworks/TagLib/Files/TODO similarity index 100% rename from Libraries/TagLib/Files/TODO rename to Frameworks/TagLib/Files/TODO diff --git a/Libraries/TagLib/Files/bindings/c/tag_c.cpp b/Frameworks/TagLib/Files/bindings/c/tag_c.cpp similarity index 100% rename from Libraries/TagLib/Files/bindings/c/tag_c.cpp rename to Frameworks/TagLib/Files/bindings/c/tag_c.cpp diff --git a/Libraries/TagLib/Files/bindings/c/tag_c.h b/Frameworks/TagLib/Files/bindings/c/tag_c.h similarity index 100% rename from Libraries/TagLib/Files/bindings/c/tag_c.h rename to Frameworks/TagLib/Files/bindings/c/tag_c.h diff --git a/Libraries/TagLib/Files/config.h b/Frameworks/TagLib/Files/config.h similarity index 100% rename from Libraries/TagLib/Files/config.h rename to Frameworks/TagLib/Files/config.h diff --git a/Libraries/TagLib/Files/taglib/ape/Makefile.am b/Frameworks/TagLib/Files/taglib/ape/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/Makefile.am rename to Frameworks/TagLib/Files/taglib/ape/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/ape/Makefile.in b/Frameworks/TagLib/Files/taglib/ape/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/Makefile.in rename to Frameworks/TagLib/Files/taglib/ape/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/ape/ape-tag-format.txt b/Frameworks/TagLib/Files/taglib/ape/ape-tag-format.txt similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/ape-tag-format.txt rename to Frameworks/TagLib/Files/taglib/ape/ape-tag-format.txt diff --git a/Libraries/TagLib/Files/taglib/ape/apefooter.cpp b/Frameworks/TagLib/Files/taglib/ape/apefooter.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/apefooter.cpp rename to Frameworks/TagLib/Files/taglib/ape/apefooter.cpp diff --git a/Libraries/TagLib/Files/taglib/ape/apefooter.h b/Frameworks/TagLib/Files/taglib/ape/apefooter.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/apefooter.h rename to Frameworks/TagLib/Files/taglib/ape/apefooter.h diff --git a/Libraries/TagLib/Files/taglib/ape/apeitem.cpp b/Frameworks/TagLib/Files/taglib/ape/apeitem.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/apeitem.cpp rename to Frameworks/TagLib/Files/taglib/ape/apeitem.cpp diff --git a/Libraries/TagLib/Files/taglib/ape/apeitem.h b/Frameworks/TagLib/Files/taglib/ape/apeitem.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/apeitem.h rename to Frameworks/TagLib/Files/taglib/ape/apeitem.h diff --git a/Libraries/TagLib/Files/taglib/ape/apetag.cpp b/Frameworks/TagLib/Files/taglib/ape/apetag.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/apetag.cpp rename to Frameworks/TagLib/Files/taglib/ape/apetag.cpp diff --git a/Libraries/TagLib/Files/taglib/ape/apetag.h b/Frameworks/TagLib/Files/taglib/ape/apetag.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ape/apetag.h rename to Frameworks/TagLib/Files/taglib/ape/apetag.h diff --git a/Libraries/TagLib/Files/taglib/audioproperties.cpp b/Frameworks/TagLib/Files/taglib/audioproperties.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/audioproperties.cpp rename to Frameworks/TagLib/Files/taglib/audioproperties.cpp diff --git a/Libraries/TagLib/Files/taglib/audioproperties.h b/Frameworks/TagLib/Files/taglib/audioproperties.h similarity index 100% rename from Libraries/TagLib/Files/taglib/audioproperties.h rename to Frameworks/TagLib/Files/taglib/audioproperties.h diff --git a/Libraries/TagLib/Files/taglib/configure.in.bot b/Frameworks/TagLib/Files/taglib/configure.in.bot similarity index 100% rename from Libraries/TagLib/Files/taglib/configure.in.bot rename to Frameworks/TagLib/Files/taglib/configure.in.bot diff --git a/Libraries/TagLib/Files/taglib/configure.in.in b/Frameworks/TagLib/Files/taglib/configure.in.in similarity index 100% rename from Libraries/TagLib/Files/taglib/configure.in.in rename to Frameworks/TagLib/Files/taglib/configure.in.in diff --git a/Libraries/TagLib/Files/taglib/fileref.cpp b/Frameworks/TagLib/Files/taglib/fileref.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/fileref.cpp rename to Frameworks/TagLib/Files/taglib/fileref.cpp diff --git a/Libraries/TagLib/Files/taglib/fileref.h b/Frameworks/TagLib/Files/taglib/fileref.h similarity index 100% rename from Libraries/TagLib/Files/taglib/fileref.h rename to Frameworks/TagLib/Files/taglib/fileref.h diff --git a/Libraries/TagLib/Files/taglib/flac/Makefile.am b/Frameworks/TagLib/Files/taglib/flac/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/Makefile.am rename to Frameworks/TagLib/Files/taglib/flac/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/flac/Makefile.in b/Frameworks/TagLib/Files/taglib/flac/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/Makefile.in rename to Frameworks/TagLib/Files/taglib/flac/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/flac/flacfile.cpp b/Frameworks/TagLib/Files/taglib/flac/flacfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/flacfile.cpp rename to Frameworks/TagLib/Files/taglib/flac/flacfile.cpp diff --git a/Libraries/TagLib/Files/taglib/flac/flacfile.h b/Frameworks/TagLib/Files/taglib/flac/flacfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/flacfile.h rename to Frameworks/TagLib/Files/taglib/flac/flacfile.h diff --git a/Libraries/TagLib/Files/taglib/flac/flacproperties.cpp b/Frameworks/TagLib/Files/taglib/flac/flacproperties.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/flacproperties.cpp rename to Frameworks/TagLib/Files/taglib/flac/flacproperties.cpp diff --git a/Libraries/TagLib/Files/taglib/flac/flacproperties.h b/Frameworks/TagLib/Files/taglib/flac/flacproperties.h similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/flacproperties.h rename to Frameworks/TagLib/Files/taglib/flac/flacproperties.h diff --git a/Libraries/TagLib/Files/taglib/flac/flactag.h b/Frameworks/TagLib/Files/taglib/flac/flactag.h similarity index 100% rename from Libraries/TagLib/Files/taglib/flac/flactag.h rename to Frameworks/TagLib/Files/taglib/flac/flactag.h diff --git a/Libraries/TagLib/Files/taglib/mpc/Makefile.am b/Frameworks/TagLib/Files/taglib/mpc/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/Makefile.am rename to Frameworks/TagLib/Files/taglib/mpc/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/mpc/Makefile.in b/Frameworks/TagLib/Files/taglib/mpc/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/Makefile.in rename to Frameworks/TagLib/Files/taglib/mpc/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/mpc/combinedtag.h b/Frameworks/TagLib/Files/taglib/mpc/combinedtag.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/combinedtag.h rename to Frameworks/TagLib/Files/taglib/mpc/combinedtag.h diff --git a/Libraries/TagLib/Files/taglib/mpc/mpcfile.cpp b/Frameworks/TagLib/Files/taglib/mpc/mpcfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/mpcfile.cpp rename to Frameworks/TagLib/Files/taglib/mpc/mpcfile.cpp diff --git a/Libraries/TagLib/Files/taglib/mpc/mpcfile.h b/Frameworks/TagLib/Files/taglib/mpc/mpcfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/mpcfile.h rename to Frameworks/TagLib/Files/taglib/mpc/mpcfile.h diff --git a/Libraries/TagLib/Files/taglib/mpc/mpcproperties.cpp b/Frameworks/TagLib/Files/taglib/mpc/mpcproperties.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/mpcproperties.cpp rename to Frameworks/TagLib/Files/taglib/mpc/mpcproperties.cpp diff --git a/Libraries/TagLib/Files/taglib/mpc/mpcproperties.h b/Frameworks/TagLib/Files/taglib/mpc/mpcproperties.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpc/mpcproperties.h rename to Frameworks/TagLib/Files/taglib/mpc/mpcproperties.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/Makefile.am b/Frameworks/TagLib/Files/taglib/mpeg/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/Makefile.am rename to Frameworks/TagLib/Files/taglib/mpeg/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/mpeg/Makefile.in b/Frameworks/TagLib/Files/taglib/mpeg/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/Makefile.in rename to Frameworks/TagLib/Files/taglib/mpeg/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v1/Makefile.am b/Frameworks/TagLib/Files/taglib/mpeg/id3v1/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v1/Makefile.am rename to Frameworks/TagLib/Files/taglib/mpeg/id3v1/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v1/Makefile.in b/Frameworks/TagLib/Files/taglib/mpeg/id3v1/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v1/Makefile.in rename to Frameworks/TagLib/Files/taglib/mpeg/id3v1/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1genres.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v1/id3v1tag.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/Makefile.am b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/Makefile.am rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/Makefile.in b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/Makefile.in rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.am b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.am rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.in b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.in rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/attachedpictureframe.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/commentsframe.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/relativevolumeframe.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/textidentificationframe.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/uniquefileidentifierframe.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/frames/unknownframe.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-frames.txt b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-frames.txt similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-frames.txt rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-frames.txt diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-structure.txt b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-structure.txt similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-structure.txt rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2.4.0-structure.txt diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2extendedheader.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2footer.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2frame.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2framefactory.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2header.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2header.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2header.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2header.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2header.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2header.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2header.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2header.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2synchdata.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.cpp b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.h b/Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.h rename to Frameworks/TagLib/Files/taglib/mpeg/id3v2/id3v2tag.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/mpegfile.cpp b/Frameworks/TagLib/Files/taglib/mpeg/mpegfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/mpegfile.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/mpegfile.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/mpegfile.h b/Frameworks/TagLib/Files/taglib/mpeg/mpegfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/mpegfile.h rename to Frameworks/TagLib/Files/taglib/mpeg/mpegfile.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/mpegheader.cpp b/Frameworks/TagLib/Files/taglib/mpeg/mpegheader.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/mpegheader.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/mpegheader.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/mpegheader.h b/Frameworks/TagLib/Files/taglib/mpeg/mpegheader.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/mpegheader.h rename to Frameworks/TagLib/Files/taglib/mpeg/mpegheader.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/mpegproperties.cpp b/Frameworks/TagLib/Files/taglib/mpeg/mpegproperties.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/mpegproperties.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/mpegproperties.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/mpegproperties.h b/Frameworks/TagLib/Files/taglib/mpeg/mpegproperties.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/mpegproperties.h rename to Frameworks/TagLib/Files/taglib/mpeg/mpegproperties.h diff --git a/Libraries/TagLib/Files/taglib/mpeg/xingheader.cpp b/Frameworks/TagLib/Files/taglib/mpeg/xingheader.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/xingheader.cpp rename to Frameworks/TagLib/Files/taglib/mpeg/xingheader.cpp diff --git a/Libraries/TagLib/Files/taglib/mpeg/xingheader.h b/Frameworks/TagLib/Files/taglib/mpeg/xingheader.h similarity index 100% rename from Libraries/TagLib/Files/taglib/mpeg/xingheader.h rename to Frameworks/TagLib/Files/taglib/mpeg/xingheader.h diff --git a/Libraries/TagLib/Files/taglib/ogg/Makefile.am b/Frameworks/TagLib/Files/taglib/ogg/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/Makefile.am rename to Frameworks/TagLib/Files/taglib/ogg/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/ogg/Makefile.in b/Frameworks/TagLib/Files/taglib/ogg/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/Makefile.in rename to Frameworks/TagLib/Files/taglib/ogg/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/ogg/flac/Makefile.am b/Frameworks/TagLib/Files/taglib/ogg/flac/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/flac/Makefile.am rename to Frameworks/TagLib/Files/taglib/ogg/flac/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/ogg/flac/Makefile.in b/Frameworks/TagLib/Files/taglib/ogg/flac/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/flac/Makefile.in rename to Frameworks/TagLib/Files/taglib/ogg/flac/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/ogg/flac/oggflacfile.cpp b/Frameworks/TagLib/Files/taglib/ogg/flac/oggflacfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/flac/oggflacfile.cpp rename to Frameworks/TagLib/Files/taglib/ogg/flac/oggflacfile.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/flac/oggflacfile.h b/Frameworks/TagLib/Files/taglib/ogg/flac/oggflacfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/flac/oggflacfile.h rename to Frameworks/TagLib/Files/taglib/ogg/flac/oggflacfile.h diff --git a/Libraries/TagLib/Files/taglib/ogg/oggfile.cpp b/Frameworks/TagLib/Files/taglib/ogg/oggfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/oggfile.cpp rename to Frameworks/TagLib/Files/taglib/ogg/oggfile.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/oggfile.h b/Frameworks/TagLib/Files/taglib/ogg/oggfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/oggfile.h rename to Frameworks/TagLib/Files/taglib/ogg/oggfile.h diff --git a/Libraries/TagLib/Files/taglib/ogg/oggpage.cpp b/Frameworks/TagLib/Files/taglib/ogg/oggpage.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/oggpage.cpp rename to Frameworks/TagLib/Files/taglib/ogg/oggpage.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/oggpage.h b/Frameworks/TagLib/Files/taglib/ogg/oggpage.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/oggpage.h rename to Frameworks/TagLib/Files/taglib/ogg/oggpage.h diff --git a/Libraries/TagLib/Files/taglib/ogg/oggpageheader.cpp b/Frameworks/TagLib/Files/taglib/ogg/oggpageheader.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/oggpageheader.cpp rename to Frameworks/TagLib/Files/taglib/ogg/oggpageheader.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/oggpageheader.h b/Frameworks/TagLib/Files/taglib/ogg/oggpageheader.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/oggpageheader.h rename to Frameworks/TagLib/Files/taglib/ogg/oggpageheader.h diff --git a/Libraries/TagLib/Files/taglib/ogg/vorbis/Makefile.am b/Frameworks/TagLib/Files/taglib/ogg/vorbis/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/vorbis/Makefile.am rename to Frameworks/TagLib/Files/taglib/ogg/vorbis/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/ogg/vorbis/Makefile.in b/Frameworks/TagLib/Files/taglib/ogg/vorbis/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/vorbis/Makefile.in rename to Frameworks/TagLib/Files/taglib/ogg/vorbis/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisfile.cpp b/Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisfile.cpp rename to Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisfile.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisfile.h b/Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisfile.h rename to Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisfile.h diff --git a/Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.cpp b/Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.cpp rename to Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.h b/Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.h rename to Frameworks/TagLib/Files/taglib/ogg/vorbis/vorbisproperties.h diff --git a/Libraries/TagLib/Files/taglib/ogg/xiphcomment.cpp b/Frameworks/TagLib/Files/taglib/ogg/xiphcomment.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/xiphcomment.cpp rename to Frameworks/TagLib/Files/taglib/ogg/xiphcomment.cpp diff --git a/Libraries/TagLib/Files/taglib/ogg/xiphcomment.h b/Frameworks/TagLib/Files/taglib/ogg/xiphcomment.h similarity index 100% rename from Libraries/TagLib/Files/taglib/ogg/xiphcomment.h rename to Frameworks/TagLib/Files/taglib/ogg/xiphcomment.h diff --git a/Libraries/TagLib/Files/taglib/tag.cpp b/Frameworks/TagLib/Files/taglib/tag.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/tag.cpp rename to Frameworks/TagLib/Files/taglib/tag.cpp diff --git a/Libraries/TagLib/Files/taglib/tag.h b/Frameworks/TagLib/Files/taglib/tag.h similarity index 100% rename from Libraries/TagLib/Files/taglib/tag.h rename to Frameworks/TagLib/Files/taglib/tag.h diff --git a/Libraries/TagLib/Files/taglib/taglib-config.in b/Frameworks/TagLib/Files/taglib/taglib-config.in similarity index 100% rename from Libraries/TagLib/Files/taglib/taglib-config.in rename to Frameworks/TagLib/Files/taglib/taglib-config.in diff --git a/Libraries/TagLib/Files/taglib/toolkit/Makefile.am b/Frameworks/TagLib/Files/taglib/toolkit/Makefile.am similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/Makefile.am rename to Frameworks/TagLib/Files/taglib/toolkit/Makefile.am diff --git a/Libraries/TagLib/Files/taglib/toolkit/Makefile.in b/Frameworks/TagLib/Files/taglib/toolkit/Makefile.in similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/Makefile.in rename to Frameworks/TagLib/Files/taglib/toolkit/Makefile.in diff --git a/Libraries/TagLib/Files/taglib/toolkit/taglib.h b/Frameworks/TagLib/Files/taglib/toolkit/taglib.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/taglib.h rename to Frameworks/TagLib/Files/taglib/toolkit/taglib.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tbytevector.cpp b/Frameworks/TagLib/Files/taglib/toolkit/tbytevector.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tbytevector.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/tbytevector.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/tbytevector.h b/Frameworks/TagLib/Files/taglib/toolkit/tbytevector.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tbytevector.h rename to Frameworks/TagLib/Files/taglib/toolkit/tbytevector.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tbytevectorlist.cpp b/Frameworks/TagLib/Files/taglib/toolkit/tbytevectorlist.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tbytevectorlist.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/tbytevectorlist.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/tbytevectorlist.h b/Frameworks/TagLib/Files/taglib/toolkit/tbytevectorlist.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tbytevectorlist.h rename to Frameworks/TagLib/Files/taglib/toolkit/tbytevectorlist.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tdebug.cpp b/Frameworks/TagLib/Files/taglib/toolkit/tdebug.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tdebug.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/tdebug.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/tdebug.h b/Frameworks/TagLib/Files/taglib/toolkit/tdebug.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tdebug.h rename to Frameworks/TagLib/Files/taglib/toolkit/tdebug.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tfile.cpp b/Frameworks/TagLib/Files/taglib/toolkit/tfile.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tfile.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/tfile.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/tfile.h b/Frameworks/TagLib/Files/taglib/toolkit/tfile.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tfile.h rename to Frameworks/TagLib/Files/taglib/toolkit/tfile.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tlist.h b/Frameworks/TagLib/Files/taglib/toolkit/tlist.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tlist.h rename to Frameworks/TagLib/Files/taglib/toolkit/tlist.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tlist.tcc b/Frameworks/TagLib/Files/taglib/toolkit/tlist.tcc similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tlist.tcc rename to Frameworks/TagLib/Files/taglib/toolkit/tlist.tcc diff --git a/Libraries/TagLib/Files/taglib/toolkit/tmap.h b/Frameworks/TagLib/Files/taglib/toolkit/tmap.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tmap.h rename to Frameworks/TagLib/Files/taglib/toolkit/tmap.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tmap.tcc b/Frameworks/TagLib/Files/taglib/toolkit/tmap.tcc similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tmap.tcc rename to Frameworks/TagLib/Files/taglib/toolkit/tmap.tcc diff --git a/Libraries/TagLib/Files/taglib/toolkit/tstring.cpp b/Frameworks/TagLib/Files/taglib/toolkit/tstring.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tstring.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/tstring.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/tstring.h b/Frameworks/TagLib/Files/taglib/toolkit/tstring.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tstring.h rename to Frameworks/TagLib/Files/taglib/toolkit/tstring.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/tstringlist.cpp b/Frameworks/TagLib/Files/taglib/toolkit/tstringlist.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tstringlist.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/tstringlist.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/tstringlist.h b/Frameworks/TagLib/Files/taglib/toolkit/tstringlist.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/tstringlist.h rename to Frameworks/TagLib/Files/taglib/toolkit/tstringlist.h diff --git a/Libraries/TagLib/Files/taglib/toolkit/unicode.cpp b/Frameworks/TagLib/Files/taglib/toolkit/unicode.cpp similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/unicode.cpp rename to Frameworks/TagLib/Files/taglib/toolkit/unicode.cpp diff --git a/Libraries/TagLib/Files/taglib/toolkit/unicode.h b/Frameworks/TagLib/Files/taglib/toolkit/unicode.h similarity index 100% rename from Libraries/TagLib/Files/taglib/toolkit/unicode.h rename to Frameworks/TagLib/Files/taglib/toolkit/unicode.h diff --git a/Libraries/TagLib/Info.plist b/Frameworks/TagLib/Info.plist similarity index 100% rename from Libraries/TagLib/Info.plist rename to Frameworks/TagLib/Info.plist diff --git a/Libraries/TagLib/TagLib.xcodeproj/project.pbxproj b/Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj similarity index 99% rename from Libraries/TagLib/TagLib.xcodeproj/project.pbxproj rename to Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj index 6ebe812fa..157a7fa4d 100644 --- a/Libraries/TagLib/TagLib.xcodeproj/project.pbxproj +++ b/Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj @@ -679,7 +679,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = TagLib; WRAPPER_EXTENSION = framework; ZERO_LINK = YES; @@ -701,7 +701,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; PRODUCT_NAME = TagLib; WRAPPER_EXTENSION = framework; }; diff --git a/Libraries/Vorbis/.cvsignore b/Frameworks/Vorbis/.cvsignore similarity index 100% rename from Libraries/Vorbis/.cvsignore rename to Frameworks/Vorbis/.cvsignore diff --git a/Libraries/TagLib/English.lproj/InfoPlist.strings b/Frameworks/Vorbis/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/TagLib/English.lproj/InfoPlist.strings rename to Frameworks/Vorbis/English.lproj/InfoPlist.strings diff --git a/Libraries/Vorbis/Files/AUTHORS b/Frameworks/Vorbis/Files/AUTHORS similarity index 100% rename from Libraries/Vorbis/Files/AUTHORS rename to Frameworks/Vorbis/Files/AUTHORS diff --git a/Libraries/Vorbis/Files/CHANGES b/Frameworks/Vorbis/Files/CHANGES similarity index 100% rename from Libraries/Vorbis/Files/CHANGES rename to Frameworks/Vorbis/Files/CHANGES diff --git a/Libraries/Vorbis/Files/COPYING b/Frameworks/Vorbis/Files/COPYING similarity index 100% rename from Libraries/Vorbis/Files/COPYING rename to Frameworks/Vorbis/Files/COPYING diff --git a/Libraries/Vorbis/Files/README b/Frameworks/Vorbis/Files/README similarity index 100% rename from Libraries/Vorbis/Files/README rename to Frameworks/Vorbis/Files/README diff --git a/Libraries/Vorbis/Files/include/.cvsignore b/Frameworks/Vorbis/Files/include/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/include/.cvsignore rename to Frameworks/Vorbis/Files/include/.cvsignore diff --git a/Libraries/Vorbis/Files/include/Makefile.am b/Frameworks/Vorbis/Files/include/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/include/Makefile.am rename to Frameworks/Vorbis/Files/include/Makefile.am diff --git a/Libraries/Vorbis/Files/include/vorbis/.cvsignore b/Frameworks/Vorbis/Files/include/vorbis/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/include/vorbis/.cvsignore rename to Frameworks/Vorbis/Files/include/vorbis/.cvsignore diff --git a/Libraries/Vorbis/Files/include/vorbis/Makefile.am b/Frameworks/Vorbis/Files/include/vorbis/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/include/vorbis/Makefile.am rename to Frameworks/Vorbis/Files/include/vorbis/Makefile.am diff --git a/Libraries/Vorbis/Files/include/vorbis/codec.h b/Frameworks/Vorbis/Files/include/vorbis/codec.h similarity index 100% rename from Libraries/Vorbis/Files/include/vorbis/codec.h rename to Frameworks/Vorbis/Files/include/vorbis/codec.h diff --git a/Libraries/Vorbis/Files/include/vorbis/vorbisenc.h b/Frameworks/Vorbis/Files/include/vorbis/vorbisenc.h similarity index 100% rename from Libraries/Vorbis/Files/include/vorbis/vorbisenc.h rename to Frameworks/Vorbis/Files/include/vorbis/vorbisenc.h diff --git a/Libraries/Vorbis/Files/include/vorbis/vorbisfile.h b/Frameworks/Vorbis/Files/include/vorbis/vorbisfile.h similarity index 100% rename from Libraries/Vorbis/Files/include/vorbis/vorbisfile.h rename to Frameworks/Vorbis/Files/include/vorbis/vorbisfile.h diff --git a/Libraries/Vorbis/Files/lib/.cvsignore b/Frameworks/Vorbis/Files/lib/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/lib/.cvsignore rename to Frameworks/Vorbis/Files/lib/.cvsignore diff --git a/Libraries/Vorbis/Files/lib/Makefile.am b/Frameworks/Vorbis/Files/lib/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/lib/Makefile.am rename to Frameworks/Vorbis/Files/lib/Makefile.am diff --git a/Libraries/Vorbis/Files/lib/analysis.c b/Frameworks/Vorbis/Files/lib/analysis.c similarity index 100% rename from Libraries/Vorbis/Files/lib/analysis.c rename to Frameworks/Vorbis/Files/lib/analysis.c diff --git a/Libraries/Vorbis/Files/lib/backends.h b/Frameworks/Vorbis/Files/lib/backends.h similarity index 100% rename from Libraries/Vorbis/Files/lib/backends.h rename to Frameworks/Vorbis/Files/lib/backends.h diff --git a/Libraries/Vorbis/Files/lib/barkmel.c b/Frameworks/Vorbis/Files/lib/barkmel.c similarity index 100% rename from Libraries/Vorbis/Files/lib/barkmel.c rename to Frameworks/Vorbis/Files/lib/barkmel.c diff --git a/Libraries/Vorbis/Files/lib/bitrate.c b/Frameworks/Vorbis/Files/lib/bitrate.c similarity index 100% rename from Libraries/Vorbis/Files/lib/bitrate.c rename to Frameworks/Vorbis/Files/lib/bitrate.c diff --git a/Libraries/Vorbis/Files/lib/bitrate.h b/Frameworks/Vorbis/Files/lib/bitrate.h similarity index 100% rename from Libraries/Vorbis/Files/lib/bitrate.h rename to Frameworks/Vorbis/Files/lib/bitrate.h diff --git a/Libraries/Vorbis/Files/lib/block.c b/Frameworks/Vorbis/Files/lib/block.c similarity index 100% rename from Libraries/Vorbis/Files/lib/block.c rename to Frameworks/Vorbis/Files/lib/block.c diff --git a/Libraries/Vorbis/Files/lib/books/.cvsignore b/Frameworks/Vorbis/Files/lib/books/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/lib/books/.cvsignore rename to Frameworks/Vorbis/Files/lib/books/.cvsignore diff --git a/Libraries/Vorbis/Files/lib/books/Makefile.am b/Frameworks/Vorbis/Files/lib/books/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/lib/books/Makefile.am rename to Frameworks/Vorbis/Files/lib/books/Makefile.am diff --git a/Libraries/Vorbis/Files/lib/books/coupled/.cvsignore b/Frameworks/Vorbis/Files/lib/books/coupled/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/lib/books/coupled/.cvsignore rename to Frameworks/Vorbis/Files/lib/books/coupled/.cvsignore diff --git a/Libraries/Vorbis/Files/lib/books/coupled/Makefile.am b/Frameworks/Vorbis/Files/lib/books/coupled/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/lib/books/coupled/Makefile.am rename to Frameworks/Vorbis/Files/lib/books/coupled/Makefile.am diff --git a/Libraries/Vorbis/Files/lib/books/coupled/res_books_stereo.h b/Frameworks/Vorbis/Files/lib/books/coupled/res_books_stereo.h similarity index 100% rename from Libraries/Vorbis/Files/lib/books/coupled/res_books_stereo.h rename to Frameworks/Vorbis/Files/lib/books/coupled/res_books_stereo.h diff --git a/Libraries/Vorbis/Files/lib/books/floor/.cvsignore b/Frameworks/Vorbis/Files/lib/books/floor/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/lib/books/floor/.cvsignore rename to Frameworks/Vorbis/Files/lib/books/floor/.cvsignore diff --git a/Libraries/Vorbis/Files/lib/books/floor/Makefile.am b/Frameworks/Vorbis/Files/lib/books/floor/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/lib/books/floor/Makefile.am rename to Frameworks/Vorbis/Files/lib/books/floor/Makefile.am diff --git a/Libraries/Vorbis/Files/lib/books/floor/floor_books.h b/Frameworks/Vorbis/Files/lib/books/floor/floor_books.h similarity index 100% rename from Libraries/Vorbis/Files/lib/books/floor/floor_books.h rename to Frameworks/Vorbis/Files/lib/books/floor/floor_books.h diff --git a/Libraries/Vorbis/Files/lib/books/uncoupled/.cvsignore b/Frameworks/Vorbis/Files/lib/books/uncoupled/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/lib/books/uncoupled/.cvsignore rename to Frameworks/Vorbis/Files/lib/books/uncoupled/.cvsignore diff --git a/Libraries/Vorbis/Files/lib/books/uncoupled/Makefile.am b/Frameworks/Vorbis/Files/lib/books/uncoupled/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/lib/books/uncoupled/Makefile.am rename to Frameworks/Vorbis/Files/lib/books/uncoupled/Makefile.am diff --git a/Libraries/Vorbis/Files/lib/books/uncoupled/res_books_uncoupled.h b/Frameworks/Vorbis/Files/lib/books/uncoupled/res_books_uncoupled.h similarity index 100% rename from Libraries/Vorbis/Files/lib/books/uncoupled/res_books_uncoupled.h rename to Frameworks/Vorbis/Files/lib/books/uncoupled/res_books_uncoupled.h diff --git a/Libraries/Vorbis/Files/lib/codebook.c b/Frameworks/Vorbis/Files/lib/codebook.c similarity index 100% rename from Libraries/Vorbis/Files/lib/codebook.c rename to Frameworks/Vorbis/Files/lib/codebook.c diff --git a/Libraries/Vorbis/Files/lib/codebook.h b/Frameworks/Vorbis/Files/lib/codebook.h similarity index 100% rename from Libraries/Vorbis/Files/lib/codebook.h rename to Frameworks/Vorbis/Files/lib/codebook.h diff --git a/Libraries/Vorbis/Files/lib/codec_internal.h b/Frameworks/Vorbis/Files/lib/codec_internal.h similarity index 100% rename from Libraries/Vorbis/Files/lib/codec_internal.h rename to Frameworks/Vorbis/Files/lib/codec_internal.h diff --git a/Libraries/Vorbis/Files/lib/envelope.c b/Frameworks/Vorbis/Files/lib/envelope.c similarity index 100% rename from Libraries/Vorbis/Files/lib/envelope.c rename to Frameworks/Vorbis/Files/lib/envelope.c diff --git a/Libraries/Vorbis/Files/lib/envelope.h b/Frameworks/Vorbis/Files/lib/envelope.h similarity index 100% rename from Libraries/Vorbis/Files/lib/envelope.h rename to Frameworks/Vorbis/Files/lib/envelope.h diff --git a/Libraries/Vorbis/Files/lib/floor0.c b/Frameworks/Vorbis/Files/lib/floor0.c similarity index 100% rename from Libraries/Vorbis/Files/lib/floor0.c rename to Frameworks/Vorbis/Files/lib/floor0.c diff --git a/Libraries/Vorbis/Files/lib/floor1.c b/Frameworks/Vorbis/Files/lib/floor1.c similarity index 100% rename from Libraries/Vorbis/Files/lib/floor1.c rename to Frameworks/Vorbis/Files/lib/floor1.c diff --git a/Libraries/Vorbis/Files/lib/highlevel.h b/Frameworks/Vorbis/Files/lib/highlevel.h similarity index 100% rename from Libraries/Vorbis/Files/lib/highlevel.h rename to Frameworks/Vorbis/Files/lib/highlevel.h diff --git a/Libraries/Vorbis/Files/lib/info.c b/Frameworks/Vorbis/Files/lib/info.c similarity index 100% rename from Libraries/Vorbis/Files/lib/info.c rename to Frameworks/Vorbis/Files/lib/info.c diff --git a/Libraries/Vorbis/Files/lib/lookup.c b/Frameworks/Vorbis/Files/lib/lookup.c similarity index 100% rename from Libraries/Vorbis/Files/lib/lookup.c rename to Frameworks/Vorbis/Files/lib/lookup.c diff --git a/Libraries/Vorbis/Files/lib/lookup.h b/Frameworks/Vorbis/Files/lib/lookup.h similarity index 100% rename from Libraries/Vorbis/Files/lib/lookup.h rename to Frameworks/Vorbis/Files/lib/lookup.h diff --git a/Libraries/Vorbis/Files/lib/lookup_data.h b/Frameworks/Vorbis/Files/lib/lookup_data.h similarity index 100% rename from Libraries/Vorbis/Files/lib/lookup_data.h rename to Frameworks/Vorbis/Files/lib/lookup_data.h diff --git a/Libraries/Vorbis/Files/lib/lookups.pl b/Frameworks/Vorbis/Files/lib/lookups.pl similarity index 100% rename from Libraries/Vorbis/Files/lib/lookups.pl rename to Frameworks/Vorbis/Files/lib/lookups.pl diff --git a/Libraries/Vorbis/Files/lib/lpc.c b/Frameworks/Vorbis/Files/lib/lpc.c similarity index 100% rename from Libraries/Vorbis/Files/lib/lpc.c rename to Frameworks/Vorbis/Files/lib/lpc.c diff --git a/Libraries/Vorbis/Files/lib/lpc.h b/Frameworks/Vorbis/Files/lib/lpc.h similarity index 100% rename from Libraries/Vorbis/Files/lib/lpc.h rename to Frameworks/Vorbis/Files/lib/lpc.h diff --git a/Libraries/Vorbis/Files/lib/lsp.c b/Frameworks/Vorbis/Files/lib/lsp.c similarity index 100% rename from Libraries/Vorbis/Files/lib/lsp.c rename to Frameworks/Vorbis/Files/lib/lsp.c diff --git a/Libraries/Vorbis/Files/lib/lsp.h b/Frameworks/Vorbis/Files/lib/lsp.h similarity index 100% rename from Libraries/Vorbis/Files/lib/lsp.h rename to Frameworks/Vorbis/Files/lib/lsp.h diff --git a/Libraries/Vorbis/Files/lib/mapping0.c b/Frameworks/Vorbis/Files/lib/mapping0.c similarity index 100% rename from Libraries/Vorbis/Files/lib/mapping0.c rename to Frameworks/Vorbis/Files/lib/mapping0.c diff --git a/Libraries/Vorbis/Files/lib/masking.h b/Frameworks/Vorbis/Files/lib/masking.h similarity index 100% rename from Libraries/Vorbis/Files/lib/masking.h rename to Frameworks/Vorbis/Files/lib/masking.h diff --git a/Libraries/Vorbis/Files/lib/mdct.c b/Frameworks/Vorbis/Files/lib/mdct.c similarity index 100% rename from Libraries/Vorbis/Files/lib/mdct.c rename to Frameworks/Vorbis/Files/lib/mdct.c diff --git a/Libraries/Vorbis/Files/lib/mdct.h b/Frameworks/Vorbis/Files/lib/mdct.h similarity index 100% rename from Libraries/Vorbis/Files/lib/mdct.h rename to Frameworks/Vorbis/Files/lib/mdct.h diff --git a/Libraries/Vorbis/Files/lib/misc.c b/Frameworks/Vorbis/Files/lib/misc.c similarity index 100% rename from Libraries/Vorbis/Files/lib/misc.c rename to Frameworks/Vorbis/Files/lib/misc.c diff --git a/Libraries/Vorbis/Files/lib/misc.h b/Frameworks/Vorbis/Files/lib/misc.h similarity index 100% rename from Libraries/Vorbis/Files/lib/misc.h rename to Frameworks/Vorbis/Files/lib/misc.h diff --git a/Libraries/Vorbis/Files/lib/modes/.cvsignore b/Frameworks/Vorbis/Files/lib/modes/.cvsignore similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/.cvsignore rename to Frameworks/Vorbis/Files/lib/modes/.cvsignore diff --git a/Libraries/Vorbis/Files/lib/modes/Makefile.am b/Frameworks/Vorbis/Files/lib/modes/Makefile.am similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/Makefile.am rename to Frameworks/Vorbis/Files/lib/modes/Makefile.am diff --git a/Libraries/Vorbis/Files/lib/modes/floor_all.h b/Frameworks/Vorbis/Files/lib/modes/floor_all.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/floor_all.h rename to Frameworks/Vorbis/Files/lib/modes/floor_all.h diff --git a/Libraries/Vorbis/Files/lib/modes/psych_11.h b/Frameworks/Vorbis/Files/lib/modes/psych_11.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/psych_11.h rename to Frameworks/Vorbis/Files/lib/modes/psych_11.h diff --git a/Libraries/Vorbis/Files/lib/modes/psych_16.h b/Frameworks/Vorbis/Files/lib/modes/psych_16.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/psych_16.h rename to Frameworks/Vorbis/Files/lib/modes/psych_16.h diff --git a/Libraries/Vorbis/Files/lib/modes/psych_44.h b/Frameworks/Vorbis/Files/lib/modes/psych_44.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/psych_44.h rename to Frameworks/Vorbis/Files/lib/modes/psych_44.h diff --git a/Libraries/Vorbis/Files/lib/modes/psych_8.h b/Frameworks/Vorbis/Files/lib/modes/psych_8.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/psych_8.h rename to Frameworks/Vorbis/Files/lib/modes/psych_8.h diff --git a/Libraries/Vorbis/Files/lib/modes/residue_16.h b/Frameworks/Vorbis/Files/lib/modes/residue_16.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/residue_16.h rename to Frameworks/Vorbis/Files/lib/modes/residue_16.h diff --git a/Libraries/Vorbis/Files/lib/modes/residue_44.h b/Frameworks/Vorbis/Files/lib/modes/residue_44.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/residue_44.h rename to Frameworks/Vorbis/Files/lib/modes/residue_44.h diff --git a/Libraries/Vorbis/Files/lib/modes/residue_44u.h b/Frameworks/Vorbis/Files/lib/modes/residue_44u.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/residue_44u.h rename to Frameworks/Vorbis/Files/lib/modes/residue_44u.h diff --git a/Libraries/Vorbis/Files/lib/modes/residue_8.h b/Frameworks/Vorbis/Files/lib/modes/residue_8.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/residue_8.h rename to Frameworks/Vorbis/Files/lib/modes/residue_8.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_11.h b/Frameworks/Vorbis/Files/lib/modes/setup_11.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_11.h rename to Frameworks/Vorbis/Files/lib/modes/setup_11.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_16.h b/Frameworks/Vorbis/Files/lib/modes/setup_16.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_16.h rename to Frameworks/Vorbis/Files/lib/modes/setup_16.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_22.h b/Frameworks/Vorbis/Files/lib/modes/setup_22.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_22.h rename to Frameworks/Vorbis/Files/lib/modes/setup_22.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_32.h b/Frameworks/Vorbis/Files/lib/modes/setup_32.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_32.h rename to Frameworks/Vorbis/Files/lib/modes/setup_32.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_44.h b/Frameworks/Vorbis/Files/lib/modes/setup_44.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_44.h rename to Frameworks/Vorbis/Files/lib/modes/setup_44.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_44u.h b/Frameworks/Vorbis/Files/lib/modes/setup_44u.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_44u.h rename to Frameworks/Vorbis/Files/lib/modes/setup_44u.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_8.h b/Frameworks/Vorbis/Files/lib/modes/setup_8.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_8.h rename to Frameworks/Vorbis/Files/lib/modes/setup_8.h diff --git a/Libraries/Vorbis/Files/lib/modes/setup_X.h b/Frameworks/Vorbis/Files/lib/modes/setup_X.h similarity index 100% rename from Libraries/Vorbis/Files/lib/modes/setup_X.h rename to Frameworks/Vorbis/Files/lib/modes/setup_X.h diff --git a/Libraries/Vorbis/Files/lib/os.h b/Frameworks/Vorbis/Files/lib/os.h similarity index 100% rename from Libraries/Vorbis/Files/lib/os.h rename to Frameworks/Vorbis/Files/lib/os.h diff --git a/Libraries/Vorbis/Files/lib/psy.c b/Frameworks/Vorbis/Files/lib/psy.c similarity index 100% rename from Libraries/Vorbis/Files/lib/psy.c rename to Frameworks/Vorbis/Files/lib/psy.c diff --git a/Libraries/Vorbis/Files/lib/psy.h b/Frameworks/Vorbis/Files/lib/psy.h similarity index 100% rename from Libraries/Vorbis/Files/lib/psy.h rename to Frameworks/Vorbis/Files/lib/psy.h diff --git a/Libraries/Vorbis/Files/lib/psytune.c b/Frameworks/Vorbis/Files/lib/psytune.c similarity index 100% rename from Libraries/Vorbis/Files/lib/psytune.c rename to Frameworks/Vorbis/Files/lib/psytune.c diff --git a/Libraries/Vorbis/Files/lib/registry.c b/Frameworks/Vorbis/Files/lib/registry.c similarity index 100% rename from Libraries/Vorbis/Files/lib/registry.c rename to Frameworks/Vorbis/Files/lib/registry.c diff --git a/Libraries/Vorbis/Files/lib/registry.h b/Frameworks/Vorbis/Files/lib/registry.h similarity index 100% rename from Libraries/Vorbis/Files/lib/registry.h rename to Frameworks/Vorbis/Files/lib/registry.h diff --git a/Libraries/Vorbis/Files/lib/res0.c b/Frameworks/Vorbis/Files/lib/res0.c similarity index 100% rename from Libraries/Vorbis/Files/lib/res0.c rename to Frameworks/Vorbis/Files/lib/res0.c diff --git a/Libraries/Vorbis/Files/lib/scales.h b/Frameworks/Vorbis/Files/lib/scales.h similarity index 100% rename from Libraries/Vorbis/Files/lib/scales.h rename to Frameworks/Vorbis/Files/lib/scales.h diff --git a/Libraries/Vorbis/Files/lib/sharedbook.c b/Frameworks/Vorbis/Files/lib/sharedbook.c similarity index 100% rename from Libraries/Vorbis/Files/lib/sharedbook.c rename to Frameworks/Vorbis/Files/lib/sharedbook.c diff --git a/Libraries/Vorbis/Files/lib/smallft.c b/Frameworks/Vorbis/Files/lib/smallft.c similarity index 100% rename from Libraries/Vorbis/Files/lib/smallft.c rename to Frameworks/Vorbis/Files/lib/smallft.c diff --git a/Libraries/Vorbis/Files/lib/smallft.h b/Frameworks/Vorbis/Files/lib/smallft.h similarity index 100% rename from Libraries/Vorbis/Files/lib/smallft.h rename to Frameworks/Vorbis/Files/lib/smallft.h diff --git a/Libraries/Vorbis/Files/lib/synthesis.c b/Frameworks/Vorbis/Files/lib/synthesis.c similarity index 100% rename from Libraries/Vorbis/Files/lib/synthesis.c rename to Frameworks/Vorbis/Files/lib/synthesis.c diff --git a/Libraries/Vorbis/Files/lib/tone.c b/Frameworks/Vorbis/Files/lib/tone.c similarity index 100% rename from Libraries/Vorbis/Files/lib/tone.c rename to Frameworks/Vorbis/Files/lib/tone.c diff --git a/Libraries/Vorbis/Files/lib/vorbisenc.c b/Frameworks/Vorbis/Files/lib/vorbisenc.c similarity index 100% rename from Libraries/Vorbis/Files/lib/vorbisenc.c rename to Frameworks/Vorbis/Files/lib/vorbisenc.c diff --git a/Libraries/Vorbis/Files/lib/vorbisfile.c b/Frameworks/Vorbis/Files/lib/vorbisfile.c similarity index 100% rename from Libraries/Vorbis/Files/lib/vorbisfile.c rename to Frameworks/Vorbis/Files/lib/vorbisfile.c diff --git a/Libraries/Vorbis/Files/lib/window.c b/Frameworks/Vorbis/Files/lib/window.c similarity index 100% rename from Libraries/Vorbis/Files/lib/window.c rename to Frameworks/Vorbis/Files/lib/window.c diff --git a/Libraries/Vorbis/Files/lib/window.h b/Frameworks/Vorbis/Files/lib/window.h similarity index 100% rename from Libraries/Vorbis/Files/lib/window.h rename to Frameworks/Vorbis/Files/lib/window.h diff --git a/Libraries/Vorbis/Files/todo.txt b/Frameworks/Vorbis/Files/todo.txt similarity index 100% rename from Libraries/Vorbis/Files/todo.txt rename to Frameworks/Vorbis/Files/todo.txt diff --git a/Libraries/Vorbis/Info.plist b/Frameworks/Vorbis/Info.plist similarity index 100% rename from Libraries/Vorbis/Info.plist rename to Frameworks/Vorbis/Info.plist diff --git a/Libraries/Vorbis/Vorbis.xcodeproj/project.pbxproj b/Frameworks/Vorbis/Vorbis.xcodeproj/project.pbxproj similarity index 95% rename from Libraries/Vorbis/Vorbis.xcodeproj/project.pbxproj rename to Frameworks/Vorbis/Vorbis.xcodeproj/project.pbxproj index 4522237a0..1faa1d445 100644 --- a/Libraries/Vorbis/Vorbis.xcodeproj/project.pbxproj +++ b/Frameworks/Vorbis/Vorbis.xcodeproj/project.pbxproj @@ -7,8 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 17C93DE70B8FDE20008627D6 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75726F09F319F90080F1EE /* Ogg.framework */; }; + 17C93DEE0B8FDEE7008627D6 /* Ogg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E75726F09F319F90080F1EE /* Ogg.framework */; }; 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; - 8E75727009F319F90080F1EE /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E75726F09F319F90080F1EE /* Ogg.framework */; }; 8E75727909F31A150080F1EE /* codec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E75727609F31A150080F1EE /* codec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8E75727A09F31A150080F1EE /* vorbisenc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E75727709F31A150080F1EE /* vorbisenc.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8E75727B09F31A150080F1EE /* vorbisfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E75727809F31A150080F1EE /* vorbisfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -60,20 +61,18 @@ 8E75730309F31A200080F1EE /* window.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7572D209F31A200080F1EE /* window.h */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; +/* Begin PBXCopyFilesBuildPhase section */ + 17C93DEC0B8FDED8008627D6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 17C93DEE0B8FDEE7008627D6 /* Ogg.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ +/* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -139,7 +138,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8E75727009F319F90080F1EE /* Ogg.framework in Frameworks */, + 17C93DE70B8FDE20008627D6 /* Ogg.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -308,11 +307,11 @@ 8DC2EF520486A6940098B216 /* Resources */, 8DC2EF540486A6940098B216 /* Sources */, 8DC2EF560486A6940098B216 /* Frameworks */, + 8EA8CC360B8D40D50066A92A /* ShellScript */, + 17C93DEC0B8FDED8008627D6 /* CopyFiles */, ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = Vorbis; @@ -327,12 +326,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Vorbis" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* Vorbis */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -358,6 +351,22 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 8EA8CC360B8D40D50066A92A /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "LINK=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/Versions/Frameworks\n\nif ! [ -e $LINK ]; then\n\tln -s A/Frameworks $LINK\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 8DC2EF540486A6940098B216 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -421,8 +430,12 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; OTHER_CFLAGS = "-D__MACOSX__"; + OTHER_LDFLAGS = ( + "-sub_umbrella", + Ogg, + ); PRODUCT_NAME = Vorbis; USER_HEADER_SEARCH_PATHS = "Files/lib/ Files/include/"; WRAPPER_EXTENSION = framework; @@ -453,8 +466,12 @@ Files/include, ); INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; OTHER_CFLAGS = "-D__MACOSX__"; + OTHER_LDFLAGS = ( + "-sub_umbrella", + Ogg, + ); PRODUCT_NAME = Vorbis; WRAPPER_EXTENSION = framework; }; diff --git a/Libraries/Vorbis/English.lproj/InfoPlist.strings b/Frameworks/WavPack/English.lproj/InfoPlist.strings similarity index 100% rename from Libraries/Vorbis/English.lproj/InfoPlist.strings rename to Frameworks/WavPack/English.lproj/InfoPlist.strings diff --git a/Libraries/WavPack/Files/AUTHORS b/Frameworks/WavPack/Files/AUTHORS similarity index 100% rename from Libraries/WavPack/Files/AUTHORS rename to Frameworks/WavPack/Files/AUTHORS diff --git a/Libraries/WavPack/Files/ChangeLog b/Frameworks/WavPack/Files/ChangeLog similarity index 100% rename from Libraries/WavPack/Files/ChangeLog rename to Frameworks/WavPack/Files/ChangeLog diff --git a/Libraries/WavPack/Files/Makefile.am b/Frameworks/WavPack/Files/Makefile.am similarity index 100% rename from Libraries/WavPack/Files/Makefile.am rename to Frameworks/WavPack/Files/Makefile.am diff --git a/Libraries/WavPack/Files/NEWS b/Frameworks/WavPack/Files/NEWS similarity index 100% rename from Libraries/WavPack/Files/NEWS rename to Frameworks/WavPack/Files/NEWS diff --git a/Libraries/WavPack/Files/README b/Frameworks/WavPack/Files/README similarity index 100% rename from Libraries/WavPack/Files/README rename to Frameworks/WavPack/Files/README diff --git a/Libraries/WavPack/Files/autogen.sh b/Frameworks/WavPack/Files/autogen.sh similarity index 100% rename from Libraries/WavPack/Files/autogen.sh rename to Frameworks/WavPack/Files/autogen.sh diff --git a/Libraries/WavPack/Files/bits.c b/Frameworks/WavPack/Files/bits.c similarity index 100% rename from Libraries/WavPack/Files/bits.c rename to Frameworks/WavPack/Files/bits.c diff --git a/Libraries/WavPack/Files/compile b/Frameworks/WavPack/Files/compile similarity index 100% rename from Libraries/WavPack/Files/compile rename to Frameworks/WavPack/Files/compile diff --git a/Libraries/WavPack/Files/configure.ac b/Frameworks/WavPack/Files/configure.ac similarity index 100% rename from Libraries/WavPack/Files/configure.ac rename to Frameworks/WavPack/Files/configure.ac diff --git a/Libraries/WavPack/Files/depcomp b/Frameworks/WavPack/Files/depcomp similarity index 100% rename from Libraries/WavPack/Files/depcomp rename to Frameworks/WavPack/Files/depcomp diff --git a/Libraries/WavPack/Files/extra1.c b/Frameworks/WavPack/Files/extra1.c similarity index 100% rename from Libraries/WavPack/Files/extra1.c rename to Frameworks/WavPack/Files/extra1.c diff --git a/Libraries/WavPack/Files/extra2.c b/Frameworks/WavPack/Files/extra2.c similarity index 100% rename from Libraries/WavPack/Files/extra2.c rename to Frameworks/WavPack/Files/extra2.c diff --git a/Libraries/WavPack/Files/float.c b/Frameworks/WavPack/Files/float.c similarity index 100% rename from Libraries/WavPack/Files/float.c rename to Frameworks/WavPack/Files/float.c diff --git a/Libraries/WavPack/Files/format.txt b/Frameworks/WavPack/Files/format.txt similarity index 100% rename from Libraries/WavPack/Files/format.txt rename to Frameworks/WavPack/Files/format.txt diff --git a/Libraries/WavPack/Files/install-sh b/Frameworks/WavPack/Files/install-sh similarity index 100% rename from Libraries/WavPack/Files/install-sh rename to Frameworks/WavPack/Files/install-sh diff --git a/Libraries/WavPack/Files/license.txt b/Frameworks/WavPack/Files/license.txt similarity index 100% rename from Libraries/WavPack/Files/license.txt rename to Frameworks/WavPack/Files/license.txt diff --git a/Libraries/WavPack/Files/md5.c b/Frameworks/WavPack/Files/md5.c similarity index 100% rename from Libraries/WavPack/Files/md5.c rename to Frameworks/WavPack/Files/md5.c diff --git a/Libraries/WavPack/Files/md5.h b/Frameworks/WavPack/Files/md5.h similarity index 100% rename from Libraries/WavPack/Files/md5.h rename to Frameworks/WavPack/Files/md5.h diff --git a/Libraries/WavPack/Files/metadata.c b/Frameworks/WavPack/Files/metadata.c similarity index 100% rename from Libraries/WavPack/Files/metadata.c rename to Frameworks/WavPack/Files/metadata.c diff --git a/Libraries/WavPack/Files/missing b/Frameworks/WavPack/Files/missing similarity index 100% rename from Libraries/WavPack/Files/missing rename to Frameworks/WavPack/Files/missing diff --git a/Libraries/WavPack/Files/pack.c b/Frameworks/WavPack/Files/pack.c similarity index 100% rename from Libraries/WavPack/Files/pack.c rename to Frameworks/WavPack/Files/pack.c diff --git a/Libraries/WavPack/Files/unpack.c b/Frameworks/WavPack/Files/unpack.c similarity index 100% rename from Libraries/WavPack/Files/unpack.c rename to Frameworks/WavPack/Files/unpack.c diff --git a/Libraries/WavPack/Files/unpack3.c b/Frameworks/WavPack/Files/unpack3.c similarity index 100% rename from Libraries/WavPack/Files/unpack3.c rename to Frameworks/WavPack/Files/unpack3.c diff --git a/Libraries/WavPack/Files/unpack3.h b/Frameworks/WavPack/Files/unpack3.h similarity index 100% rename from Libraries/WavPack/Files/unpack3.h rename to Frameworks/WavPack/Files/unpack3.h diff --git a/Libraries/WavPack/Files/utils.c b/Frameworks/WavPack/Files/utils.c similarity index 100% rename from Libraries/WavPack/Files/utils.c rename to Frameworks/WavPack/Files/utils.c diff --git a/Libraries/WavPack/Files/wavpack.c b/Frameworks/WavPack/Files/wavpack.c similarity index 100% rename from Libraries/WavPack/Files/wavpack.c rename to Frameworks/WavPack/Files/wavpack.c diff --git a/Libraries/WavPack/Files/wavpack.h b/Frameworks/WavPack/Files/wavpack.h similarity index 100% rename from Libraries/WavPack/Files/wavpack.h rename to Frameworks/WavPack/Files/wavpack.h diff --git a/Libraries/WavPack/Files/wavpack.pc.in b/Frameworks/WavPack/Files/wavpack.pc.in similarity index 100% rename from Libraries/WavPack/Files/wavpack.pc.in rename to Frameworks/WavPack/Files/wavpack.pc.in diff --git a/Libraries/WavPack/Files/words.c b/Frameworks/WavPack/Files/words.c similarity index 100% rename from Libraries/WavPack/Files/words.c rename to Frameworks/WavPack/Files/words.c diff --git a/Libraries/WavPack/Files/wputils.c b/Frameworks/WavPack/Files/wputils.c similarity index 100% rename from Libraries/WavPack/Files/wputils.c rename to Frameworks/WavPack/Files/wputils.c diff --git a/Libraries/WavPack/Files/wputils.h b/Frameworks/WavPack/Files/wputils.h similarity index 100% rename from Libraries/WavPack/Files/wputils.h rename to Frameworks/WavPack/Files/wputils.h diff --git a/Libraries/WavPack/Files/wvunpack.c b/Frameworks/WavPack/Files/wvunpack.c similarity index 100% rename from Libraries/WavPack/Files/wvunpack.c rename to Frameworks/WavPack/Files/wvunpack.c diff --git a/Libraries/WavPack/Info.plist b/Frameworks/WavPack/Info.plist similarity index 100% rename from Libraries/WavPack/Info.plist rename to Frameworks/WavPack/Info.plist diff --git a/Libraries/WavPack/WavPack.xcodeproj/project.pbxproj b/Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj similarity index 96% rename from Libraries/WavPack/WavPack.xcodeproj/project.pbxproj rename to Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj index a87ee035d..e5fb702f5 100644 --- a/Libraries/WavPack/WavPack.xcodeproj/project.pbxproj +++ b/Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj @@ -27,21 +27,6 @@ 8E7574F509F31C7D0080F1EE /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E7574F409F31C7D0080F1EE /* libiconv.dylib */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; @@ -192,8 +177,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = WavPack; @@ -208,12 +191,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "WavPack" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* WavPack */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -283,7 +260,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; OTHER_CFLAGS = ( "-DPACK", "-DUNPACK", @@ -294,10 +271,11 @@ "-DPACKAGE_NAME=wavpack", "-DPACKAGE_TARNAME=wavpack", "-DPACKAGE_VERSION=4.2", - "-DPACKAGE_STRING=\"wavpack 4.2\"", + "$(OTHER_CFLAGS_QUOTED_1)", "-DPACKAGE_BUGREPORT=bryant@wavpack.com", "-DVERSION_OS=Darwin", ); + OTHER_CFLAGS_QUOTED_1 = "-DPACKAGE_STRING=\\\"wavpack\\ 4.2\\\""; PRODUCT_NAME = WavPack; WRAPPER_EXTENSION = framework; ZERO_LINK = YES; @@ -319,7 +297,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; + INSTALL_PATH = "@loader_path/../Frameworks"; OTHER_CFLAGS = ( "-DPACK", "-DUNPACK", @@ -330,10 +308,11 @@ "-DPACKAGE_NAME=wavpack", "-DPACKAGE_TARNAME=wavpack", "-DPACKAGE_VERSION=4.2", - "-DPACKAGE_STRING=\"wavpack 4.2\"", + "$(OTHER_CFLAGS_QUOTED_1)", "-DPACKAGE_BUGREPORT=bryant@wavpack.com", "-DVERSION_OS=Darwin", ); + OTHER_CFLAGS_QUOTED_1 = "-DPACKAGE_STRING=\\\"wavpack\\ 4.2\\\""; PRODUCT_NAME = WavPack; WRAPPER_EXTENSION = framework; }; diff --git a/Cog Help/Cog Help.helpindex b/Help/Cog Help.helpindex similarity index 100% rename from Cog Help/Cog Help.helpindex rename to Help/Cog Help.helpindex diff --git a/Cog Help/images/add_gray.png b/Help/images/add_gray.png similarity index 100% rename from Cog Help/images/add_gray.png rename to Help/images/add_gray.png diff --git a/Cog Help/images/info_gray.png b/Help/images/info_gray.png similarity index 100% rename from Cog Help/images/info_gray.png rename to Help/images/info_gray.png diff --git a/Cog Help/images/logo.png b/Help/images/logo.png similarity index 100% rename from Cog Help/images/logo.png rename to Help/images/logo.png diff --git a/Cog Help/images/remove_gray.png b/Help/images/remove_gray.png similarity index 100% rename from Cog Help/images/remove_gray.png rename to Help/images/remove_gray.png diff --git a/Cog Help/images/repeat_off.png b/Help/images/repeat_off.png similarity index 100% rename from Cog Help/images/repeat_off.png rename to Help/images/repeat_off.png diff --git a/Cog Help/images/repeat_on.png b/Help/images/repeat_on.png similarity index 100% rename from Cog Help/images/repeat_on.png rename to Help/images/repeat_on.png diff --git a/Cog Help/images/shuffle_off.png b/Help/images/shuffle_off.png similarity index 100% rename from Cog Help/images/shuffle_off.png rename to Help/images/shuffle_off.png diff --git a/Cog Help/images/shuffle_on.png b/Help/images/shuffle_on.png similarity index 100% rename from Cog Help/images/shuffle_on.png rename to Help/images/shuffle_on.png diff --git a/Cog Help/images/wheel.png b/Help/images/wheel.png similarity index 100% rename from Cog Help/images/wheel.png rename to Help/images/wheel.png diff --git a/Cog Help/index.html b/Help/index.html similarity index 100% rename from Cog Help/index.html rename to Help/index.html diff --git a/Icons/files_off.png b/Icons/files_off.png deleted file mode 100644 index cf2e323b0ec7bf54807f6c904f4d7c14cc93f028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VV#4P)_UUi$!jjo$hWK0t0gK18@h`D6TXxZs zTMiu<#+{w{=9`&S8pjc?5gD!&WwY6Q>$?6#2hN7fbVEXz6! z!+`;0S>^{paD%}xZO69l$L)5zTP~NvDa-O`7)F}s`5PX;7{K{_ZcsH0{-vZSOfAa- z*LBsu%<%3$ilTP`fR$wg0AfILJRX^*X$n{!=#CP(^*m3-79PY5P;XDC6T2kabsad4 z1Ey)thQ(PBJB(AN0HA3atX8WT)uw46NfH=_0s6id>ifQ6%Uc+UUQraYU}7@01X$NK zYh|`Zti}M^wiN*Uo03Usb>yeY7XgU!6o6MIUsY8i=^_9Ifd}05}^XPk+9| QSpWb407*qoM6N<$f)+x_B>(^b diff --git a/Icons/files_on.png b/Icons/files_on.png deleted file mode 100644 index 9615e75831ad7782a139e30ff935a098247ade55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hRBP)Y9y~N|!pWj!C_R;a6 zHU^E>*7qm(?_90V%r=jozYuWT(C?=g;p6gh|Jl9ym_w@3_UGm=O)JY1yOg_rwZ3=q z_NxPxqBcYnLck`D>jm!0`nS78c|_=_FixUG8~gcUGfOPl5@ko>^vo2lotc&tl4i_V z!9wlfQ+123ON6&dT0&^5!47!e>k*6DsqK0#PjGzQ0y zQ^cvpAlB$mj~9;}#B8+;uFQ?4X6S*pvLj)%w&+@A!%AylU)jc$lZRl&X3*LWvAEua zAEodH2?8n-(E0k=`iMfsVey}#Az-cTWdtVo3B54M&Md&meY!{FGD*#@LYV;fw&ln0 zqG1A)S!73mz-{o1xK(3*OQ?jhQ|hA^vOw;D1b8l)bxzj91l~1q#~--baQnSajSYmM zv@J`DQb9lpi3wX^k7MmTg^&cna8RKJT4k#g--D0~P816mi%zWqjX6A6qVv`H%@o69s*Z|{VvDkN%a*qH!0zsux0g}Y? zJfKXdR;%p0ySoehejnoT_zSLoghHWTAAtmu$>c~V6!LPp9LnV~10lEBY|N1dMF8_*t6r<$O| zH3OH+1qTNQtWGQMcDtZZC;;oUw*fR94%c$9%?ymJUazzD>g;0-UAB!;jo46)uvYA5 zN?45r0k1%)gU`>;B(1gqgb7!LLIKojHA^O$cDo()dOe6lB5=FiYq=VY1~Qop{a<|s z`i4VxjjVoR5N|S>pja$II-Q18Dz%nLY%CTF0E$c;uL zG@DIUd@`9#20J@Dtc%fTbcpOuZ*OnIUp^5WeGf7_H=E4{r_;%#5+fSOL?QvDQmKxy zXLomZ;Xl4LGM~@4k1amL8k}Hv^aO>;0sZP}WHLr%yw%UxOhcVXqU4ZkYFZreiFb z!_1PJ{rX|x%HXX_x9B=e5bKHTDg52#Pf+XVoNGoqh4%_dN7wM z;@xZ(5uXc34{dS!!yV^?TlXI$|7yaTB3ps6a}`q520bpk{F(tTYTzXu$M@9Y#J(uF z#_2!DD3NUr`p~hn!RHIL_mFQB!M#f4C`wz;=71Nmc@>(*Aj-8N&3&(DNR|RFG&8KG zOH3|0aAl&nC;LMR0vjDF?&r>A~Q$=z) zhqh<~1ri>*ATLxA7EEdRLP-(A00pGzB}i(yB*ITqX%v}&!3A`#LukLATyW}_R!-7S zaIMuy{ZaUyQuCY8y}uM9>U6UEJ402gf&7(^3#huEPvqamXK%D zfwnLPMiaQ#KaM+(M?spY;FO`%(Y3t+Bk>8uhTk(a^<|uVX9(&lkv%*4F75KwiOGq4 zcc9*H?`*C`iE*kAqYQyiwHLcvA{d{JK)2=7&er#n^MQe@Yl6EdJV%-@E1@M5-bk z$0`HSo=ShDOM&izE@-YwypT!E=F`)kSs^n_c5etngzu~S_Q%p%WYyNhwp(-Jv)<(` z8D9vKe_L8*Ll+fm>;oI-gjrq6{p&OGUyhm4|6=9#4i8<002ovPDHLk FV1h@lu^0dV diff --git a/Icons/repeat_off.png b/Icons/repeat_off.png deleted file mode 100644 index 94cc5ca96deb29e298dee038c8a0456be0de9b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)q{(L@5KA%s% z2gH43gdj=$e=(cQyk4&dolZv}a6BGiwOYYwG^*qOtKaWW-5^~eLbuyZb~>H6-EOCl z?Du2kSvtyT+*#p2z8<9>fzEEYge zKrmwVEffmLS2aSTh)xWoP$)pDRC>=Hfv`60+w1j0G#Uk`)5*8nZ4piK=VC{wCYTP$ zvJ9dqlJgby;cy6&Br!%NlZkvIA4~K^4~!@f8v>%}1VV4p)9D16Oa`o0E4#4SY`|bJ zz~OKZZh+LzsnG|60bBw=Hk*Zhzt2>)AqWd_k5Lsn!rC1UhasI#vkT2;lL4rJ9*+m8 z1oQcvMxuH%km#7lIr(b0+aVALFePRI3f}<`S;TPk37MH72dY+rRH)^|sR)T4;jci51E><^#HAPD zihz((gj7gNsoF?c+>|6vlX{7l#L0LWk7vfS{dhlPOI2V-U)eMB-skszZ}~BB;<|jh z618-7nAlc7!!Ul^)LGkVO2pJlTD6c{xjmmnGZRH#^r0>{Uvg6hSYpfow; zv!?=HE(U}^QEcRr1!ZTwz-%T`;$QXs#LC{?Pmj^f>Hu4yH$TsN8IC)DBVL)G93bxv z4Ms;if(zWvF3JH_GeDAMc)q!H^k8j&X(1ustG;}4KmX`Xu@fENqG2TO$IJ8QN4h>9 ziw(P72vBtkB*g&2FyQ1_h=zN>=erPcIGpcl$}{&}dCW%FMO2N#xGP_kqf;T}>g8DT z!*k=YAcY)DI%qlp3r%g5W)Y~X1_ZrM2!(>2QacQ1j#Q%Zp@VuZafl#;w{&fIx~Doh zG&nLsA$RWQ;oj2}U?9NYwk+EMmSw@RESMOLz-KqcVQOZ!dvxVReA^S4MMx5*@x(Iw z2Qjf8K>%5^;8%ovbS(}OQBNyBgx>hOoom3?KRtt5V-$J=-7p+ktM+R z{T?>va`MnL>{bcRMm%7nHl8 zp)1p*Sg^G(V{S+b{N-W>(&>GC*TC&Efa!v!ZsP(LV2=q15n3SI)TF|(oKsX299W$z zugBolx4(mpo$+|P3fXK9?QHnwmsL3ZS_FJ94oZ~4|&_rOD~Gb&Qz^_ zZfKwvuFi(w?df-bU_^5heke&}@MvWRKDjvuf`bDOf)blW*vnUIx_o?u423o(t4qb) zYM$9#TU$FSODatw<^sQve<$Gjg%G?keFm#W;LLyk*@GH9{Np!euhbM(F`Y(}3I%b6 zC*R53*fj^EiGE^8<2}JXZm?Hq<-+uIX9D`gZfG%E#1`5+axd5_EKa6sUc1G+dC4$CsE|NRmce)wMbbNP8Tv0K`z zrIsI6mDpq2&iJ-i)~W#x4!_y55Qka=gErkJ1vGrU?h4+(;kRYuU0b?q_zB z_3Y|nt&(4EN7EV+=9N=`&Ydqh_rVM=1ZG)mHrgk)(G(1|svEL+q>8Dulv&+q186y= z&d@R^jug68H_G4c*g(5apj{oB*fOe$QvY*|oVYsCb+y4<`@Pkc@qY)~KLQK@A{*-W T9am<)00000NkvXXu0mjfS=;`{ diff --git a/Icons/shuffle_off.png b/Icons/shuffle_off.png deleted file mode 100644 index fd3a36ccd1d302d0230a79a592ae1d854756ca9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)jtjQc^_9TD#+&^?vhxv$HlZ#^5WO;XTlBI830)pg)B@O6#hs_R%)b zKE`6P?uS65(I|)W8^7N#IUEkKTCLo_-ELvASiod5c|x#KJRZN(ArTODWRe>U1~P79 z)X3syCd)G0Y&P7tTCG^C)smadX70T2+&Lp;l0f?q3WX$MF`v(QkYce2eo=&<*VlZG zOkurVL#NXrW>@KST9YZzfXVVE4 zzP`U4DL$(DJo)|W58U7X<=>HPlBxruIw4uaiZNA_qp}l!7X$%E6$}Odr_%|u*^C(V z|0k_MiL~48crv24DB_8oC5hq>Zf!OjjK^aFYUm0QYa@YR50OYj@_0OewWCR0E|>hI zXijTblu)nNpK$3ao6WvG{$w)QMQNpWyR8syx7!Uyqmd`yY&L_*WYR!twVHzd(j|!Q zid3uB98$gshr?1J5a58v;}NFQDVNjh_4pMj6bg4AUfN2flEABxK|rdLC>0~NJ_0n5 p2{$xtGw`5Sv=MqAt>Z{#uYM_uvnloccc%24 zFHcXU9FmrzgJ#(9@zP`XeMf^greo06EEtRUA(c+C{gY;P|5&2~F5T?bHV%=$i4b#M5O^32 zEwF7g#1aI7Otc7VjF*a)8j5&_YqBwgVDW^Ol8<~Gyu9uLB%RE41u7)K_bLK<*)-k{CMA5e!N-T z+S%Qdx0ZiJk}{g&j0g>8r;8%O2Abv#EjO|7(ReUZd^vDMMrQoq dV*6Ks0RTbZzkz@=HsJsO002ovPDHLkV1knV=I;Oi diff --git a/Icons/add_blue.png b/Images/add_blue.png similarity index 100% rename from Icons/add_blue.png rename to Images/add_blue.png diff --git a/Icons/add_gray.png b/Images/add_gray.png similarity index 100% rename from Icons/add_gray.png rename to Images/add_gray.png diff --git a/Images/file_blue.png b/Images/file_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e79e352eb4fb142a66c92780ad8610878e68da GIT binary patch literal 1885 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 X355Ktzx9Wm00000NkvXXu0mjfta_3` literal 0 HcmV?d00001 diff --git a/Images/file_gray.png b/Images/file_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..9be2898cc7ad6c80e28b6095ede20e59a15ab8c3 GIT binary patch literal 1902 zcmV-!2a))RP)P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO79r~m+hGXMZ? z%m4tx5dZ))_5c7N{d2J>y#N3P_jWP1)3i~}=ILGOp6@&7`_8%K+_`h0l;ZK@$EZ{)s8lMbR;!4k z2p|NFMq|Lh4BNK-J;6nWQfh0h{V0xJ_`bhHKo*n9b0@4V`If)G2h?s2`Oz7_`a!a)T3w5o>k`N=H~C+yZ4V5 zYipMo=PTcq@BcueD1zsCZ_UoU`itr5=^q>!J>sNN{oJwyp_GD93ZpfYQZkC;1Fy}_ z?tAdy!K>G}PVkoT<#xWQr zuq+Ew*pP;h9=BIyvpI3_;GrMxEB*7p_3PL7#c})>0RB#1cKY;b5JFI^)u`6`*E2IS zzd3W}%-%viPn9-MO2HTdr8R8Z24@_b%@!Js27A|gZJKj7q(-=7$D_& z2*VI`n-C!ci9`Z}gM$;bTJ5Zq@&g_O;eN|;ULP49bu7z597SDb0APUbS&T34e}P7$ zfiq`*gvrS%wA*cHt)aDsQW~5yP|D!@J~lTuQ7jgnjg5`h!!Z1aD;2$z9T+&2%VsHH z01$vsPyhx7f(wLUi1qb#ywvu&*!4EXzU|c3agg$bf)?TO3+z1VMnWo_vLi z7cZi=QOBc450Omt;hmqngQ@8$RI4=vK>#5HIOm|0!gXC1MbRMVocCFl1;!XCjbJnZ zp``09Vh}_DKA-;_PoF$NbF+zNtBGQvfLtyIVhosI*laXmw1zDu2%!KWkd_50B>?ns z%d%7yMSuY)WiUj85Q4xD5ycUdX=7nw5ief6!13cREvAf;5?b=}%lrvs&8Fvg*^LZ{O~qtQehN9b`~cqtE=Tn;0nBRF{Q0Jhp& z=yW>Wmh`yLT6HVf4nhfxF^HlF$z-xdJ(pZ73B(2oA@Qux$&y zt_#buptS*I3_@67jDs--AtZ#bwgnfkr46k#qA-j+&s(DTeEx0}h1J!yHKU9{$M1j; zpr=Pd+Fh-DKL7wYj`NLV!s>qc&j0SYh5AO_0H_uUg}XeL%iYcA3wItqe7Gl*$q+6C z2D1~4GN+~#wgH$R7DJ^K-T_s;f*Ca3i=Nw@aVdd$HDGm6sq4D6@$vDG zYqeT^X=w?TWp%eL7qGV35<eMf_*7pb@AaNY;dRuG#>Wv#WK3H8{J$`KL zm?)J>5S9RAZ1?R~N^NUKK?s2{8ete>d3hOgb8}HHm%DS~#EIWgO0Srmx!C~$u#@cg z{QUgy7Z(>#B@&6=QmI4>g#v8b-X*hh+4p^v%VjJtFY9Kr*%}@mzB)EG_6GoWlu}>Y z;=e&Cr3k|iQp$9r(fHZI!oqvya``A@%GZ#P odU~!ALY``^5k(RH7vw(!03a?QHH}0#EdT%j07*qoM6N<$f|*ll>Hq)$ literal 0 HcmV?d00001 diff --git a/Images/info_blue.png b/Images/info_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8bab8970fd61a450dbf71a1e303020996e88c0 GIT binary patch literal 1848 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 literal 0 HcmV?d00001 diff --git a/Icons/next_blue.png b/Images/next_blue.png similarity index 100% rename from Icons/next_blue.png rename to Images/next_blue.png diff --git a/Icons/next_gray.png b/Images/next_gray.png similarity index 100% rename from Icons/next_gray.png rename to Images/next_gray.png diff --git a/Icons/pause_blue.png b/Images/pause_blue.png similarity index 100% rename from Icons/pause_blue.png rename to Images/pause_blue.png diff --git a/Icons/pause_gray.png b/Images/pause_gray.png similarity index 100% rename from Icons/pause_gray.png rename to Images/pause_gray.png diff --git a/Icons/play_blue.png b/Images/play_blue.png similarity index 100% rename from Icons/play_blue.png rename to Images/play_blue.png diff --git a/Icons/play_gray.png b/Images/play_gray.png similarity index 100% rename from Icons/play_gray.png rename to Images/play_gray.png diff --git a/Icons/prev_blue.png b/Images/prev_blue.png similarity index 100% rename from Icons/prev_blue.png rename to Images/prev_blue.png diff --git a/Icons/prev_gray.png b/Images/prev_gray.png similarity index 100% rename from Icons/prev_gray.png rename to Images/prev_gray.png diff --git a/Icons/remove_blue.png b/Images/remove_blue.png similarity index 100% rename from Icons/remove_blue.png rename to Images/remove_blue.png diff --git a/Icons/remove_gray.png b/Images/remove_gray.png similarity index 100% rename from Icons/remove_gray.png rename to Images/remove_gray.png diff --git a/Images/repeat_off.png b/Images/repeat_off.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7f38b6d22f07f192151c2d684bf8e41d69f47c GIT binary patch literal 1856 zcmV-G2fz4P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO79r~m+hGXMZ? z%m4tx5dZ))_5c7N{d2J>y#N3Pwn;=mRCwBiRZVPE*A@Qm-+MFf&3HUB9=kRkjEM(i z)3ITUgk_Qz%TOQz5mkVMl!yp**EXB7ZlzXA)kUSKs>G(y1zChmqmUFfg?Lj~6b!W? z)Yzb4z=I8*VQkNvVeVfS54(g$%9TF7tMl$X-#MSoIhUL~c@mUT)M_<6dh`g-o;^dU zRKooHJYumJYPDKgDV2*vB3+EL3;}U1> z|9xwG{Kf@q%ooO(hu`JzTO`(6D5ZEhoj$Z@_wHYejEub5*W1UNlg;3agE9s}2&}a* zT1TW-T|e2gr|auGU+?|utFa^FH^%?0l=|FSt6ufXhKGki2!WIm)oL~2`~J`O@8AE2 zBZrUl<@5d2^E_x{p|paO3bOG6QfX*oKtU0U$FZTSo8~s_L|=$yQU z*K7b_tbrGeBAd;MrOHyFSS-$VcXv;8baa3UA<$?vdebc}ACBzWl}aQMP)dgm=xZPZ zl+agf;hs_o&N!4(NF)+?>ql>;;_>*0jYgwa2m#6&qd^cHEfflcuC5J`N`X+UU0#Lj zx=1u7;KyR%JS+f8|Cfza3Lpe9Ks+AD`mXhbTCH}Jb57|CDZ3rV+1Iya3uBxC)`AiW zO4!S9h+C7l@bRBM#<_FnP+bY&x-JL^IODL^;;(1U;MvosP)4C#E@ORmJp-^$O4&_~ zR@*X}%%+a^4rpyc2?zy!MRUd&vYnmKQsd0&(>QhN6w2l2a3gM5+JsK=B|AW51KBStHkg9>Pu`&Fhy&bOWf>H+8b@6mzK?oskbIy5ZJl@0|*M(FXQ&Uq| zn4b^z1wepsPXI<3ve_(hn>OL*%^UdW_aEW-`^VAR){5no6=<#Dx-O(ra3d}}&*OxU zPR=<`IKly?6pkZs@!~~XxNrgNWp^8EV6=fT2HI#aLgD#7D5IF1n8fE_oW}>pKL8;F zuHztVK)`iE1+29R?z*m)QUU<9);N0fDE95$3#k;U)oR#~O2KFY#u{&dReSqDgqd0c#7@CvKs8$0o#vp`%5CV)bSXd~fY&04z@nkaj&Aof~WW8Q@ zJkP`O@-ixwN;sQnNWd6Fu~@|E)2A^xc?$;)9K_+nN8q?FtkDp{fs_)AF*uF`z@k>K zLrN)=$>cXYlgZqinwl!l&CRvtaybOSYE)sm;gF)JR4N!89K^nT`_Z4z!*wH2MuQ0f zLI^f*-i&xW4$c@j=Xmt^F({?wOeS-atgNgguU@@+wpOdXGcq!Qdc7VxUmgEpVL@;K z&N+-Rkc|e6d3h!*KPVMu!Wjby!KF)=kV>WgJ~TA+KJ`4WJTNfuX{l5SW@cvK`~I4? zLI^lqKyU#7P)b1?1I9UoBSHuPAvk>BhwHkCMx%HzJBwK@ebWZVodu zGgw+$LO!3r(A(SlYpwNlt@YZ2_AL@hY1pwqOQlkIZ+d$Ay@wAU4pK@HjYc7aSR;^9 zqE@TH7=vs!dp(!SeUeBdJ^}DdDFtK9_mZsI)&)VZ>-qENJIm$rmLLe$ODUU#5KErt u%_ft{+s)0*|MWa>j1cm8_1^0w{~Z8Vf$*9_3h)2`0000P)P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO79r~m+hGXMZ? z%m4tx5dZ))_5c7N{d2J>y#N3QUP(kjRCwBim0N6F)fI-nz0YONnHkU6nHf(!j_pk9 zOA^PI80P_kXhK4p5+{JTi%6xBN_i-KD1r8cRw^%*Xz5EpR4t;BBKlCEDn$`eQV}IM z5OADe8yq{aV`m(Xo%%AiCo|)jbI$IA;}8T=*UQ@459{CiU;n?BICSU`QcCjqJQEWW z%*@O%H#f)h^fbX>kbFKLaU7??vaC8y*J1+UQ>bOvasOK=6vlO3zhv9?Y&M%E9*?tT z%^IT7DC^d(!?tZa&qL=s!t*==et%6Q64}?$vGxAembNWbRaNndH5Ha^S>y`^=I7=M z>2!L!um6jI-rn=al;{21^Ssn|)%ymBQVPd$^hhM~zm_`>V9zFeRW?Ae)YqTK05hm@A=-tj^q4GDdl`8h*Ano)52@luKnpf z_uTXA-Me;2s;jF}N>OqgmP;mX)={gKiSsa{&Lseu23)-pyZT5 zfj}VTN?{=cLI`wS=kn#ty#4pL$>nmiwYDLo!1DR1si`p*7Zy9x>GaiPGTE0%B+wpy z_+b_n7B&eff4_gAb#!!e)Yh#Bz_xA1#>N;K86lI& zpp?S4?UmmkP$;C7=(o4oerBc!~ z%{`l&n>EX_7#|zs_=)43Ir9nEuU|*X6}na_yFCouKsO9L*W={Llia)WUQE*@lbNTs zrdG?$XZDmzrK7s%I$LA0SmXM-^$ZLQ@cL`7k(x-+v9*IoA9;l8>S|2WM0wtd3Rh)m z=;U*GjvP5csaWLTPYx1^L`Y4fC@vR>$KwQo!A940x9UR3jj`C8P+&pz*AaBz@&ckJN72lgZ63inFg_WsqR;OwWLacy#vC!ctNjT<*| zW%LTQwY4av=13kwJ#sH&>suDkAHX=#b6^c0$=VVY)G_nD@vl%l+% z9Lw@CF_A)Qf@0BSdAY!q@i9I=eVWADDq31wR~(Nd;P(Rp*K@IKA0W`A03E zjRK#~bfxY0&lL&<)!Es}mgW{d`Q%f2&h?VZed;7s=!qOll(Kmgkxz_Kk2 z-M}ymET4sK+1QrF`1m;8-QCpI*3#bIj_0|`w(U8+qM~AKbab>7kH^hJFB~G3O5yYQ zNT(-x>u+z7y|Kh|&;5dAay_o=-g3QC;CddOQ=(XM=FH?>A3n@L{{WraIyrmxET>POLanF(fxvZK zviTe2b2-xKG_$j_BoYZ8fBbQNv}X@P!@~$6=3}wg1w9^*pHCzbJwro7dlQKSQqz!9 z;=1n2;9M@Uw6sXESiEIIA;5J#ve_&`2sSr2)702VdwV;{WRm6OWyZ$FsHv&xiO1vT zh39$9%*-4(cI?=n+uGXvO-)UBo<}N`;!m%>O1@Cw#TQ;AQJuhX926i0c%Hfi?DzW# z27`E>2TE~qc$hCPT*!5Gb^R<7i5!)V;}DC*K4@uadB3l(kGZ)yd_Eub4fXu;`R9>R z^2#4xVPax}@^CrfP#M9pGD6`Hm6b6nW0lypAIEVpbe*}mIr{thXl-qMKN^jG;5ZK2 zOE0~IQmRl@RW*{$X15J|`DLQAvXZj0GNREav1pX>t5*pIgETfZqHd0Vantz#x~}2# zSgwvwZQHi(SFY=h0f^hV_B?NQZ*T7(M@L6nJ3BjRXlVGxV04_Xx2lx# zHl-0!f$4SgLQ9nVWCPu%L^D#*?Ci>7IJ3=R(duD`$k{!l1HeSJNNL;}Cx z|E(#U%jKAyoaFN5%PcM~($dm$Y}2Mqzj0mn+^XEa1+uy$fat=)!huVdE*(gvQg=wX zvWyJFxCKxumB{Dwc%Da1P0hK6hK8fzaQG-N<2VkU=lx%h)w}9kF1I6-$!wpWpKs3P zaP000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO79r~m+hGXMZ? z%m4tx5dZ))_5c7N{d2J>y#N3PdPzh`nBVXb zV+P}P8~-q_>aKdfEV^yM4AMO5>Zz{YJ4d(fIrq`Uix!DOCH6WzuCQ#tuVx!HAMx*gmO8F?APOollZJ|^up|i6SU0q$+vu6*| z=`^ghka)|o)*_q9^c9Q6vz5xR4-bzX8QHyicd5`>NTpLL)Ef<~udO$#)oN|-_Lp~N zW@fKAYyV}fefBoIH%Odw&|1r4vG|ksPoMtn#KgqA!{uR_FXSPG1PcKof^!bmn3OVl z;D_(OKXC8HhpepcIGcy>wh}u^y|1{Y-|if1f>+hFzm=?v%fiW=FI2ketK?r zbo4N1G8q`_ppAx78Y+pQw1Ke}3`VZ44SNR$dFa5<-c%|zxw^Wlg%Edhxm@gd9-MO! zr%s&$Gb2fo0Ko4iCnx`ScIs?Lu~>xG8ro<$=RhD36Nnf@wDWD90}+tV=dtgdcQVZU z?$Xjy#eATC_E0N?kqRIUE}$kC&pPW^bQJ(tTuX$3em!RT87g0%)w6d_3x zG#U+9Ymm$3(BIeZZNA*BRIAl*1_uY{dU|>wJvMy&t^SIsbJ2lO#!QdY*S*N+CFkqK_(- zN@ZYRFO=3G-iCV%ON%57L(I+1!CH$biclUN1~UWBp{=bA{R91#jrEO>q?Dg>tkj_I z`yUJ+IwXV?fOBACFp1XQ3{QFp`~bf1Bk+AlA>sQ0JU?jeLc;Sr#Bq%E^>y_3^$P$W zD5VCaHTqb0clUvw-90eIf|x;g^G`YFFn#SBs?{pM1i=Emy}b}Zz&Q)RK?nh343=t3 zP%6Q$UAvIYrWAdW9rOptXiE1}qps5VR_{JN60z@Y!dd zLrRGxNpSMyNyLp9#+atG0chPaDKmr+5JEso2_k}E2Pq_+b4aC9MrO0wwR$6RT5FP0 zLP&u|qk&qjh9C%Fj6tIjgIi!k1R)qwN(g4CR^Oy-s%zV@4h~vtmrkeGxKJp}hhd}| zjYd;~jTl>7Tkt#&zVElf0}Fo5^-U5mgIhTv1U%n^=Xpq_0vKzclv0I4VV=9YyKiZ& z*B2KTK}3k6sMQ|^5n2FprwSqh6E~+a(avO+Qo@rhk|2fE)m1R_dUtpCEiRQxvpqdM zHy%8AfG`Z<`97qS2*VIjR7V(wP%1$j$IVQzW7VXejB;2@$X!t(MmKm}1B7$~JsE|*a*mk|U3zIyNgU*5VEO-)Vxs#q*uq9jS+d0u{IX6CPV?%es= z(d*Z*|9#>4^Wzia<0zF%J0AGHB?LnViRI;GOixdvx3~A^*x1-Ft+ltDbD$(i zUU%{7nVFeCKY8-x@QD*AFf=sO8Z!>oI#_FW&NhWXJJ0dMhYxY%#trP-w{Naesr;Uq z|GhJ}w@I9H+on2x|Ni|y-M)SM!}j)e?BBm1Jv}|hWHR5WAc`U^E-vEnQeec^O{~rJjISr`bxXqUU0000i literal 0 HcmV?d00001 diff --git a/Images/shuffle_on.png b/Images/shuffle_on.png new file mode 100644 index 0000000000000000000000000000000000000000..923a31e608202400f880bfec2f35f06db37a2799 GIT binary patch literal 1816 zcmV+z2j}>SP)P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z^Q>-8KIssI20AY({UO#lFGm;eBCjsO79r~m+hGXMZ? z%m4tx5dZ))_5c7N{d2J>y#N3Pj!8s8RCwBimdkGx*%`&p{qDW>azET|H$67k#>Pei z*gSez!Ayi@$P5!uHer-Vvtkz|nN3)*N~C0!MRt+$4~zucV2Ra?W+W@C*k)o32yB5L z#E)RRjYU^?)qQ1AcEcnirKD2TE!F*g->q}%RIyvPZh?rpI*6q`Pbv);~$_T3n8UMnx-ep-Q8b|U%J#) zEEbU@N!BULAl6zuefAVDUc3Miff(Uj?Huy?JRBSt7#skl6pF=8eDtG_x|WugzDUz_ zMoRgF1m_gT@n^MKtu`=l6iRC_0vNHZASWC=R%c$@9zwpb2#e&=D-+-HU=9T8&E36p+kqzk;@%7#+(z3(fg%Rz7PgJlu~d2 z?oHmqZhaSwF=(xkqzOFV+wXk8f6l;&WsU>TOq$r-{5Rr8142j$A&~3nC=k*6LI`mr zpDzf{_mL_E&I!Kn!7&G-Ob<_bZ6kmI4lY{(5mKelY&Ow|8_-I@_kB13e&8dDBEc9t zB7_h{PkQZw#0Wsx()T!=QHZCB|*cpjt>kW#|;JxDJT zJP3RkYoL@;rBZ2$DwWE2TI>4S+8P*Rh~pT}?TgN`RdC|pgD}P*I0rHIPBJqHo&f_t z!1newh^StvRKBBXwfdm9w|DyK)2E2z7*fi800Uz@OHt0+5#NRg(Ht4Nj<(zZQ7~_;uE=dxXrm0g(Ii-|KRq9$vt39^XIOm+( z+}w0`?%Z)xQ&ZE%n6pYLq-hFv(B1yG{qpSW?4O@Me}4M>`STbV837RiaIn_FTHC(& zt!|lC&z?QQ^z<}_hKA;9wc2lq=&OT!+mK9P4$k=pPo6ya!^4LUKP?mr7#kle*O8v!ougP ztE(Rn5yCKpl(G#_`dm&Ic7O8{G1YglXlFXZ6b;W&;j?e6Ygtk>(O z;yCVCN)@D(dr=gvluD&Xot>S3kD};X#@N3O=KVM1KLY^b_%w(152-`|0000CFBundleVersion 0.06 CFBundleHelpBookFolder - Cog Help + Help CFBundleHelpBookName Cog Help NSAppleScriptEnabled diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/categories.pbxbtree b/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/categories.pbxbtree deleted file mode 100644 index 3fb6981e1d15ad15a189132cd4ed5d80bc1ce73b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 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

u4Dio-EAj#@Jc=qkr43fpQ{ON` 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

3%Eivlf}i@Zw&f)F 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 WY&!R0T*T|Hx_F&ejLQ9ftM|VN@5A;0 diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/strings.pbxstrings/strings b/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/strings.pbxstrings/strings deleted file mode 100644 index a29b1ab8c2021b48a8459ddef9fab9bc0e4bdb37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903126 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

8=g5iOz;@F7{***TCoWUK2i@J#E(SWFU z&?U4{UIG}3QG=wK^`qf|(wcd}v*DZ4ulZO51~aFFj~4y`Y1!=S=!jpj7qZ1L;jJcS zbE2(d!KVf7vK}WU-R(R}iUils9l~jB`}dZ80pdAg$KxeKyb+hb%T*r;@Xh`Pu9-0; z3m|r39AyO<)<%@UN?kDUFSPALEuI+@b@o9fZiHbgh2?QS--8Nnv2#J?tFecYByieM?#SV_0ZT^>6}18S8PD`bzi6YWe+m43pPA`PqpB^xN%j z^C-oqSs%R8AF2*-c| zM}0KbUK-bhXfUh`26>dkdS}+s+N5U2(RDvNzyr5Syqh$40^$JX_ zh!q&O_N12x5(3G^Di@Yp6a%7K*kFCx;==Q^ys9*8GSkj!^r&!$YQhIU zyG_V2=gVulp`YnRC{ONrl7_ee?OAGct zg|u789TvAI+&ID}-`fC=g8DGWiX0FOnD|L~izN2$gj|+1ViE;>4Ix5VI}#p2JoEXl z$^rTYHYkBlh%jr6Co@CXIBuY5K(d6tKB9_Y++!+ci0K2hOq^^bK`IgyCp2=kBSkBK zV@99{?V7yZU7EB4He>^tlUS4?lwjuhWaGjISi;hCEyhd&_cJGS~*sV~tm-T=Ueh&Hoy|G8(3E%DJX0^jTmK?iL$r3Il<4-zrJ=UvN1mOrDk?pM& zVb!3?#S2aB$;we2aqQrimg%73j6qMhe^Nl7TdaE8!JG>wWx|=_-KS%|EG5Y~_t1DU z4MlPc3I4=z;~#uE5!2Ybx_v;J<@HNdy<8?juWttV_Ov0Z>Q<)ItPr!1)lDJ@ME^E4 zM|jFwQzfOAgwuDNhQ31x30O=R9JQnkoX+t^;C2~V$9SGwq$pv3JGdrrDp##lq^uRu zLUVy9kKmMa4RE0-<+Jv$bt@FL3PXXZ+;wLCaGlS(JFYg`z4%pl_7$j^Pt(*&h5>(~ zZ${BIbv;99(x2`9a{^x(V7b#fP+e7P9VQ4Whx7Rt1Sjay%PelAZ4_UV`!uqkDz;rH zaZmzif4eMl5j9a9bUg8^(fU-8%G z0Z*(Mh%b|D9_*2-%>zPU@Ssct&!$$$Tj z9BDmAggN`bX+L~{?f3h4e!)e>dcbiG8;y@NM1#FOeMg@w%yWTZOrY@MuHik5L372W z=rQI`pu>|MRTy33k{&{H?2fLtyA1_mu`4n60hTB1oDSkQz!t7<&7rXGiq~K^rJ4!c zGoc-2oCz_PsCy}pb1}<{7ZR|iM{EgMmJ$tn1eXG0k6=Be?}nonGVhYU?3mR?nWWV0 z?Q)I-4wlHxl)ma z7%}b&g9$j3L~Y?tIX=WQ!j4YHk|68{&mNkHLh9d~9LK2@(AV*evCZBQxXmSLcg-(xhj(zbV?R- zqonl0_V6aj{L2@G(QW1@9!SsNlz^TB2xQe~(ScI}6GT0I3r*x~EtpGt`VQPBC?ZJ$ zV-a#m;M4Di9S^!S^T?(lPK>VL5XSYn&$@@FBqoVV0vz*RZ@;->r2JZfK}zUnx7a*~ zaQvoEY{Q^7*l+PNwg&ck7~eK|;$B2fVeRP#h@2=MAHsX>e8~vsd4uHBB#9AJIEM4Y zO)7Y+_AEw`DKSG2J}POSa)?REFvJ`d4_J^31j2ZZ)J=nRc zLPeERYQ3M`+d7WJ`=`SJ9(wM^&_Z32EkBaP_?rxV{>@*a)U&QG7KY6=<`;{=oD+Q5bnOoh^3@mtU6@3V0GAL z(duw{;p$Lj@p5=tz`8OLLt}7J#8Qf$%g9ph)WhXGA@Y)*z&-c06hde2idm4Y`r_;g zc2b4u2`AN}1%yVq;U}C5RT){g~d~%;?1f;b=#jASKmxe?>Wc%sr zs>cYp9j4T+uXYHw?|ZD&>@BJrqb(8_k)vcSqVyrbI+CUL&ic(7w@KraQZi%&U)@fo zDB?tO3g6_;^J2tlvAq4nwj^wjBN;dN;)^n#yvY>;-cFO7{U&Q$FxX0OH@EPD^#bOW zEJU)!mHasTK%Sge8q^GzW>^1JTY7`IIJ2+0{(`_M-TOVH)U1MNfxzkhK7roCMS8iZ zI-OfIPOu+BhX)bWYlET%Yr8-Pz~s< z7kY7>)j|`K2Y%}A!QLNA@`6S-s4T-S9=JZ0-yMyr8J$S8Qn{ccjDLXv?!#fCe_aOc zXzK-%jJ!$^Ky1nJ3i76iSvcX>H=RMd-&U360pojbtj2pu2${mzm2Ga`afOTNYG}p+ zDP{ejPV`REC66?43VGETqZK%=Oik5xMFm+M*0`vki+E}50SJxXl-Zoxl{b_MiWY)r z2M(R-sJ2poTZT4bR~vj4AJG_tMq%JII$2sPXQ~}?kr^m5Ced%0w0PP0Gs4hjFxQ|k zF=V)Jq%z32N*QFkp$yTo+&9%gZGzzz4>_&TLRn1EoC`5{Ulv6GC?rMd)sz2Q((qEP zhtStMtT1-q!aIZv%zA>WR@+-M&7PbconQP$vuyYP7*=}Wy<22NZxF@mrLvx2b_q(# zasyuO<$}wF84h9@#r@D~!FpwA_!wjut*!a{!%EkOGUyZId!^zqFme8tZfmg~_zczJ zuv@DxUk;mN{GKiD?)7&!zqY@)ZASPWg=7(DOZR=4txy;xeOxW{_X%0+$BH%r%VTzb zdAPo~C-}^~M(}ON%N4f8{k_Y>_R-F$VZdJ6ujBa>O}zTp2YwUiMZ%t(U7f=?d$+xw z!Fs$~&wmgy)5>(spQaPkZ(pp@^tbX2@nJx(c5AJxCHzvjePv~MDagUp_G}()nq^xLBRvKYjLKRu5OM&|DB1I8 zfj-r4}g~3z&Z83x`jhdKk(uhdyxY#fBW#uAV@qMW0BZ<7I(TmwFkVp z_>*RdadeoC_aR)N=o1)IL%c8kz)IJX3rA zxOf9Y+c3TRSMtjz-vG_!A=;s#zltS z-sw`*vPIT+eD9$2&1n$0O#vD8+jwvcaI>|YmxxMmnRvI)xq|#O>Fzl^RvqT+erMWLlsA93iu>W)GR&`QQB#7Sj3ceult*v=q(O z6nXLmS|eA(E!Hc%rHe~o{DClbGkfG!!7t%dZDpI09xcuC&7Q!+t8_i#{6wu z`Aaf&9sCF>%w}uGJA1dkwPw)|%SJyXWcVut4R_dVQ;t85G!BRn` zqPVuTmV*PPu{GJD1Yqct$s*LDigiV0Vt5k{p+w|KT+?ZjC19Bg zOq$@H-1dcS>I!QTSFoqOXEOYbSr*^ujvZlIBmx*sNx3tMVEYT61JXRvgmD4_ z+4646!j569m2-BD;e2+O;oO>r#hDF#TLA3076C{|GMb&Ejb{r@_;YWc**W$HP$!=r zHh9fx4O4?4AHfU^^$DHL3C{78m~%)*?|LZv>h^P3tmCuSh(Y_*;oC4ZaqCa zSN3ZZ2X@oLoy3E$Ng$C+flq6YY9`NEzWwYPIqy+8Y6%8EH+2;-$|xFd<`{pferV_}kVHRN1cT#;S8>lfG_!LG9Mzn74sr(Wl)^!qEThzVXJHi+ z7+DZPLF%P%0fuh>Bm*D|`yU`=DX3@)XM&0ygMCsOzC2jG$bQM=qRZ z65bh5s^mbOi}b)UQzBEyV`wGug;~-tr{*`LtkfuCcDfilmltNP+TrwsQ-WimmEB%5mPe1;C zc6>^0;OJE0`!I%)L8S(=~)dgA{2Hw}w zGn5)y0#Th>7{?LpMlBHO!5Y1s>K;6gPSMDt@BlI^_6b<{g?m^tuwCIbYuo7}I~fQp z7MP7N7#dIrg;qm-Kith1V{oM(An=OFXac|o2{yOe-SYJlUQRk|!>y`N8)%PmkiL+@ z4>by4E&h5DgkPvytRxdzW$~8`XBM7uD^l7j*BLRzzj_B z=ro!HCM=H1Kq8Ae^C{wh z_vLNcDu}#6QW+XDtS3qb;zioj~6=)Rc*%?wc)wF%7ZTILrZArA&ffZf34 z!@nfE|FpT^Al&6S1HI098PEYxH&%~uoqoT3f-#8N2S2}D&F`0{U6{=MVp5YU2A2-* z>Ax7Q_UT`OuYDP&f!!ao#1-KUk5gLQ9N}}I2i+?zV&(YV)pGZ+g8iq5t5`#DeflX4 zak5XJzJ3g0+{nx7wba;`6cil z7YxU^fwY$H^y+_ml?KPJum0!%eD#0*`s<7wV@z~B2{w*X{30O-*sobK%h>?Rsuy5( zLt_pPO?o0~QK{|JG&c!gw=i$K3HLqiNOGGKvpT3bvs|~jG3e|j3f_^$_;uedV8UNcH$|0=?>We8V>#lyWJ$pBvdUoGqK5lW_b_o6x&LOfq zi0p0PWu3GXz&H)VO|7WvJ*X0Y6b-MKr}`HLIBna1<1X!a9ziz6=HKRzb2xi0->zWg zWHp{=7vz5o`j`0r37h=;zk_ekzr^>=)7qk{{7gfZQn#sI%H!>PeItvN`uArWCMS9+ z2fEiSwHW;*_mbcx&boH+_i!!=UgAu9$=|~`=%@I;-ac+0wg@!+d=ubYk`Kmmto|{Q zOtDO~rNRCV_9e{}e=MGO4&eoke}W}ozWJlkPH~En`2w#Xn_`nH`~s&$ImPU9_3-E| z{Q|Q@ImOIc;RQZM1QzY;5n_~Qr}5iFYP*mI4yTjx)5xAxd%?5_Q>xpcA-=}B+}hSv zo;01n0TbK$QiDQQ5|cvJzbqiCAvw`u-=n$&TpW2s04vIJB4J0;F*sVojKJMcM^?(6 ziZDgnv5dXI^Tircb!=P@f>rA>@asEK`^! z7dx1r@w)bIH~-PHdx4Vd%AAV1_toOXqxbBI=d;YRP{Z`t(}A0mcZAHVHZzZ+Ql=o? z7zz`)i$pDKwe za3@WZZ0?*SW5U@_KVbc^C>-owQT??9PLmOQrDovI9%;XbK$Z*;riLIuLT4V$S^!OJr*ms3}H zK{j1mAgd64nPE@lI$oa2vZpK& ze)egzF28dU9%j1%*;$1zQLST>2hDbNQ8HyrAgwRBItQnm0XvbBqPwI~nC>@^A&LB=7d zg!G=(kI6JRM87WNn1kG9d6LK*p$QWdG~)RBhc;x&nUmL#LoK%;vX-|dXkp=cAbKO? z**q*{$gbffh_S^*H+c4`4LeD`H*2iwFm zbBpMXFYKXuaxv18&j6J;RRX+fCQ-I8nFAs*mI1h?_;|Nk6r!Uw{EPRnmf|gKL}!D~ z4#j7r0Q?Gfx8P&H`|%Fm)w>_WprkZ@M!atoujJkoNZB`#$iD!`3sBI*5)_m-Is4d5 zDmXsT)d#4FA$3sHM5bxQ;%1mF3Iw9^^a`UA6b(Qpelr{ghvs=kqO%*rA61}pD_@QBQfX)P02jCa>tb3 zuRT*hZPzs5+BXFpol^j9?<8<(i~^hLA0v3Cg9?Yy9x7Oy6m1t3Y~c2fZl`>CL?C@3Zc?22V{0rqe3x5S3sy#1oPF_Ae_-(W<(<}G!XkRP`+ZFDjR zLR#*68O&PyrfT~gXGKLuMRR0gWLDllg$@##k(7-Zq!?`a8PO(83g=qosy5Xsh^}4* zUMp5WAk8%^@IloY47-}8EWoaE1)ggs;GlZaCAN=T+i(Q5hq8g|-t4^Df8;LHB!n%^ zv~K5O!76BC(^AC}l@Hg%%eU5{@})(fd>x&=c~d@Id=+NM>jOL!aHwM8n?tUZl9)-u z#dly;AZQR5mkp$ojjRjmDS1NUZkr~9^J6uG8#~&_+ z6wJrf;!YK0B+i;4O(61Wrn?7oGyrde)i1jhR=@qBmr8xd;M1H}DG?l_0E7=P-*oLr z%L?eZiPZN+h4g5RHwrDzObd$;FD=yWj@O(h`cuYeNgFabONj#0eiEsboVefTJ9w?2 zfd*I|rB9>T(h-RxrTv6>Z9GfiAV83xG6qz307S|v$8W1Dzbr*1*w*@5>TPK%2}2*8 zN{}MeQM%TBCTeL|Z&XRv<`+Sak@BftWJeNBcQjqon@x%NB9R7;ctvGj_bI z>^lEpjO@77Jmm78sxc~oXT!!_AvTBtUvZRxiQn@sil27Xyci|Si1#+L>>82 zJ`g}We_le5jjnb4091Pz*IWum>vJzttl_0>S?yGk$^H=5Y=58$)zi{g`%ZwHW=~vN zc%4NO=uftB+}oeS{EPi~uo+7GG!n4Fz85HOYd2uK#EMA>=N@~UPSUd^dylc>vb(^n zMc@v?$?L}g%*?M2c}Ir9Aw20-FRIFzT)1>cDt?{9ps#{^m+#sL7(UQ9t4Bb;+|_ENSHG&i>46r zO!(&$t_lIj453A`MX(V3i7eYS zzgP3PUD>cFDYvn=3M^YBWefWF+v}E2L$XOZ`*N$qUz$Att)~}qpEZrxI@$GSLu!Ie zVsRrVaLCTqBJ5gx0g&;EpKz?u3tPs&k^v4W?b4?K^Ku?H-H<1%Q$@bacV+4YhCLpGFT=1yD=LN$ zz(D&nAFwV%E(pnc6quP02+$)jKG}ZInXGBNJ>wgL4bntApG@YXxhA6;knb~Q;@bM9 z5i^>+;8z7VogH%x$1#F+ZmDBGnywk*T7IS@)Ct?rLv4Wcdp?!XcrqOB^9>e@^N`Ea zAX;KG1C0=P|22SUHP1>a7*Fo;9(H1 z4|b7eq=5%Csa6a@xSqZK#jE!Y3b@)yU<8m^f(vTnEp)TKT)!w7Y!I!SO`$_&BDXSDlXZ_1|t#?W%3WJ}@u5`S^1!-nKL;2f+vYy=91(!(E zpm_Gk;b#`<*(x38!8uL)iWc;V!8c4<1|w)A47<#3q(K%xXItMG6dFjsIn+|gEd=Y) zQivVGY*l}P6HdRIZ_HS|EWDCz))2dut7)T9&&5TX}i3q_XarC|*LSgy< zVjC5+$u>(o3N;sgpp!MF5U#?UVoU>m`tXP_0i@1cQ6;phvsyJ=kvr#=?IbCM%L0rb z*cD?VbhYg$ETay%A`AD)NZgz@CL4LfM$DPR#^ErOyamkDItA>HnqC&4m**tlgks}= z8;pgM%8T^TRcM2{F`BLFZ)qe*f4aEaVugj+=C866&Q>rF0 zKwIK>yz2R+SY#rSG_{07z>h#sIreyw70 zO>Mp6Nf#-RoJLs|&5~|Ms8!X+A1uikBb=DiGbVu7W(r}Apw`~gMr6wC6O9yvI2!L^XfHNulpoTHS z+KeqXWj1*zS9Oc&8EHPWfY456HXFsniHn|*<|PiJF_vBQW2iP?C8vfzM=?MI4?yL-#{bsxZ5i`B?K*UE+y1affjo!1fKb1``dv9d&V@c*(wY! z_ASHDs<#Rll<#54k^p@R5`DF;WCl@A7Otu4b+#Ip3_~L(Kn{WMje=DMa|8N{x`*CO zuDrZG`#>Yw)i$QR16Y0oU2OwYegKDId8;!5oQz-yTR=6}$Iy4cVv4v4cXhJ5(eHyv zvPXGD>$6-EK}m1DGg4W$yr!0lm78I3o$sm0j? zdYX#tAC@qqxB0_TQ@g-m&-+7;gS1ujdYDON^+iXmZ_iv&#!#|f6r_A23A{M5beRN_ zJj`H=;)+~pXnJwwhL1i~1mAH8K0BObV6<;gT21a~Ik^1?O(I8ogV4)n+k2KKQD7!j zMM;+Vgrs8IW3T>l1=ogKwt}L(O3yEKUSOL8%sJl72??TNst-AeSxAm?8J1fVSN0YX zCxR{1&Z4MG6ctDlWCSjSgV{o*|MSVscE{I)F=N7L+kuNYRgVnQ8vN&zAWfh`#x;zm zHHUnT{Qt4`uFZ`lIhrPaN?L#FG25xEyi`q(jqRFIw~#7zD^Zcz)nCFWijvrpNES&& zWYpUJ_kCUfemmz-(X+K?5#n(G4!^s@;c$35Ku?FwJpxx>4MlZ~#DpPi%E?~FIbWA6 z^m_E|Y&V(#6-n_a7J9*~-e!r>24X(}r}Nn%S&E!F?~R=)k{G}kk@hK#i3;pWMPGfB zf{HFg%f(JlZOZPe3fbnX3i~$0bU#+DzQ`+$n&>GRHu>q~5V>`Z5Ur{bMnONeRcth{Ou zYQMv?sGtTAMKd&j%nF?WT$(ZL#K45IGzikxOkwo}NnvR&?8nMoFGb4$9bqZ10bs;@ zm<1t%$mnVI)E&16^EUQCHrS$qZRgWxkBmOGI5;YZD$-@9xn<~JnD;BS`QlvFRT_Y|2 z9l6eeN+3yf4p?P)sEDi`au>7ua`lit$%~^pTY+j4>0l^MYA@SqYrS8@7F=fAqXqL| z=^UwMToGuyVqzpY5>m6fFCffJ^?pIRqH=nCuB&Q1Cu?A&Y3UXbFfK$T@r2HGibEWP z7x@SJ`x{fZ(2^=&z6M-?7>Ws!<5*U~Uz%10CL&JTuS8ve%xfe|@O_123f5tvv_X~+ z%YbRuC}0JK9=cegYzBHzL+*&?~6)`;@nRUgirLn)I<-qA4LeyN+0L&;iMe5Cp7~P zCTEy^=@DaJkv&Qei@_N!U`+Sml>0rXcXrIHnV6 ze7D63^A2aq^k}q}x!aIz>Ud(7zMV-58M74VWfVXsHE{xZnDZ<^)Juj9m0&RM#=K!? zkcM9#|E%$!X}kM055(9^U{!2@%+AhBiMPgAk<9Z>FD@2K9hpUZ)1n&KPtqDN z<}kG23l_ms)@7ST(5(am-`wvZab`}UUhpoDXHA>TD7OC#3087D6K0yPtRkLXUzvoM zTlw&O`-~e|8||i#X^zylM=oE)RUplG_U#j0(1@Vn$bzSX(9@MKed4LvuAz}A=B;7M zbE~8zqVbf+%j%B9O$^1fO-xGx+r!9nZc&slR6;7r>4h)ag~~)e8jr=r4(A6kvXAK? z*k*=}r54CuP9-RI5_3>Dp#rTE2{E%<{0wdik)cDZk?g#19qzF}4yBM$y;L%0D5VD3 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⪙H&RTl!VzyNFVdE+z`q1?K{G5mjM3sBTHR=(bcHtkwV7;}VmMUSV2rDM|~E zg0#R~j22uKqCs?v&?4IcRJhVWTcij_a054sJO0JXQ|y_np9SDt0!a;U4OQ-fjI7{- zjpr-tLY40pk-BCuzFN*@B#D#IFJ?B`5|Rn47=av^XGdEYWTz{0*etJM;`tgF1Qu6smj25Nmi3&f~JYi zW6u6EUB2PjXEZyR-);QsLSDSd$$GOz2)2~L9TaB=OM37_JMLXdeNSPj>9tys-js=zJTmu)J%Z)^(}oj zc-!J74!S|B^KwQY6@f{EEsGYi6y52ws_9{szLhQVor9c=ylqn`l`4f1Z$h5RBuBT` z1#2#9s{EUrqhVex>=|Zm(?>I{@m@P*gQ9$<%4MO0kdzZch?(Ba8Ky2`c#DSUC*2h- zZk0%^t0jhpI&!3D{o9VLYJjH4U633jjBeaIX~_<2CbRn!giEFXo?mkf8y~63>@(Nw z+K!MhVUU<~^}>6DHDI)+eOyP6F{8X5KaY6BSB-77(e7&{i8Gwn=~`R8+%kUdx3+?x zF&KXz$zP=GbKF-|O0o-Nmlz)RO|804du*6*UAKhX>?+rFv>f}&T-6Drj%=kt3|=c> z@_GKU5}a+RTV!Uj_Adj|!t(i;jzHGw)u=PQS+iy)qc@nDh6zFIHZ+lG7+bIV7EIo) zD(ygsYSK8z)jclxor!mhwcca!diBC9oSRVrwG^cnc*E{1+Rh<%&}umEZT4CC<5=j<15Q0nj#i#U>~L+r`jBgtFzTc2^(S6?)# z`A;=g*FKj0r-AErsv3ZYml6!ch7u>s=IB$M91r~h#mq!++Od>GRoi5haj7y6xwbx& zN7uD2J6;PXI6IGxflUE60HjEIW1#&u-7K$`$F?@nd;ep_BkA|D*AmtBYAqT*0L<@g z(ILdcz%RU^qP!)IO@C6iA#BTu4;xX;(P!Amv4APFnCm{01cj5KfVQ4MM5eCUAJR;c zH*>w0`B~3u(Sy08BzM?sk|?7laQ+e5K9%1zAFhcB%gycrxsx79P##v*Cr3WF{1CrC z#_vz@`*ZyMDSrPPzyCvto8_ZAQrp!7;V+X9qWZ%lafyy-XBz9mp#fj6n&4!~gP$vv zr2!xCq}=Pg1M1dk2VKtw9h3%T2c(&z1F|Wjfte^!COYeiRKMz7FNq-h`$A+=7)`^u zo6m7HsdoT%ulf8es8=~93G^YcjAlfj6~nHDS8m&*)FdTK`bNoxRfUMZCcVaTP3L~1Cu1gSWjMP z61~f7)heWglJz*_O8}xVgOc}A)gO6GaEnrF?k^K)JmrNf#kJml_$Kw~#)d!yv4}EHY{k3)+k!O5O{~-?uC6 zHU#~fmRs9Fut7Q{TvVy|`ds zC{$5z+e^kKZwC~x4YU%xKserfEn#)`5cWI3UW!I)^I(Tk^S*+jKF~SK85Fs1ih5^D36ZE>UvSXF^{FvwkjD zyQHniV5h!7QFLHkRGoY@h)rF(U}4Dw${V~Z7Dnc8-^k?13C+ev4i*~t6~}{L(Dqc| zGdkCHrx!rPvnBUb#zw(zu3?2hVxm0`dVRgf6+>|R!XD}VtM0O+3d`~06*i()%uKYs z)(x7ivL2#+iR4xF8!!7j-ZB~r0;$BTLvSGDGzaKFu!c<;LDcc7KQ;n2j>UQ}?m(vz z_{ET0A()Mi?X;n?T+1n>9LT{cEic)MwIro4`AUVOM|(pfrDvo=+@8Kb-FpnIPW(h9 zv7+mMtOhi%+vHqoeeOzwSLkk>x zvONgOisW!*uB6KHXd^Lm&_hC>arZ7qSkzY?k0Vzo6~$Tl zSBG5y`>cfE26C103{n1aV1S=R!&7xPcZ!4fwq9{1pwveLO{_E70Q-U)PQowQbW%vb zlt2m(@Xx4W_AqvH_;`CZEq2s$jp&2X*!O|PM0Hi7L)QX2Raq#j%#V;x(A~i3goSgu zD@08E)*0~qS$Dxg;4iuvFP+~qyqRs#bF7~hc>mDspG!v7OIy>S&FD@>)m`yl{Kflc z;ZkMWNJ@MSKBvAw1wMLZG4mc@MQ&Tg=&mm?sq%QbmbHG(DQ5T$CT8Dt=q!k)K_?I| zY;-iVEFo6Og*JmL?*1f=4Q58D=caNK zE#mz%kt(R{CRn8Ni0GjI%IS%=$<@T#<#2^PH*cX&Kex$+oq_nZ2qkVjS}^j@jD1d@ zo_5$-9Op#epK;$Q3e~34;u5bG8tK5ydmDX>l~>7nn8F@xR$o|LU2LuqC)3X>Nst|S z>_kj7XqY4oiiqc=M}`%VkMt?n!5`smd2gy)&yd@vogT4&6yJ5!eLs zd(QprMZ!IEYF#~0T~vg#JPMXN z{yYl)rpZZLhX)JggxPy}QPpou7(tscHFOOa&1D5B6el0(Wf%t2&oQawFHI=~Bv@Bn zyaeU1-`cl;s=ii$Rzqrv0#dgdd(#!*;nRwhv%`_KHVV||5M8wsBX#RN*ru0vqN3$s z%an#}H-FLHTlC=powVv#79P#mgRNe{aGIhskNFq-ek)Z;br`AUbG}_}L>YI7RGhCA z8>P|0EZdt^=sbG(3WYq4Xu`L7m2rzD;p#V)`u2bbS!1{qSt&#-QEBBm#|OfBB@w%tpwPXIzgD6?3_^w8Bt zHUbI2>r5{%ryNVhdwSkXc{HenL!bKMPS~c9tJ(_7BSgeO4#NzB#M;a+JA6B~+gN*eeL1-Lb5TwJ+ zjUMsQl5M6j@OLj|QX*H~NUm%yOf+*_LuIyUE^ldkp=e>b;T%kAdE&A`uF9fNdMIY; z3v57cVj*sT9w3Uk{x2BLF6P)%D24#4<`%+~6_6k)14I$VTjUsb7ZrGB-2?*SE3ZFH z>TWZXR2*OGi@k9?TWXoOT&Y(S8AsJ5y(UVW<(6|=Y1^7*9`sK`%<&y z#tT1PSr?S^rykQlqui`~S$GtPrNu{7c)wA-0%q{>@(gRW^u*?q$Eui8vlM-vOHxre z^C_X$h*YI4UUjo1Fyh~}m>HuC)a@XHXfai>bkD7l9BS~0gQmA6;^|xTHo8f@Ce&HX z*N`E4aLjo1W=to_0CfKSoQBE<&|<5z*}S!~?Xo}hp=t<|y zn?PFO?7S5=A);AlQEHRWLm)F?NL)j*8x)%Wys<13Wd^C5br7!?r09uQ6_HZ6;XAyn z=vKyPc;|={i!?_0G{M!{o0k}>)?a9SOxhxQfrLI{Rlrr7U{vbR`$^`ncDAZBF4<%+ z)6+$6tk&}`Do0I_JiT};wcV_ney_`Q2}<|dgR!nSjPq_ejPoAT#pT{v5dIbY!2{86 z)JhJZl|oBigQ{Iq4fgIvTjYM1nW)>V1#E7iRh!1iJP_X+!i*pr2{AAsc`8-pE)BQm z^X!$0y)UUtl#5C7mOs=nYl?qfKPW>>6hS)V|AuC;p_EQgPrhDVUXL%2&!r8-(vGLY z7o3)DOdWW5b$)eoeRlZE@eSB#oB%9dvHZ~aH?oE7%wtxrB4XyI3v7MF>6|A}cbpq& z4K%TV^&VU4xo+{;ukOO%yVa@~@Z#bYsf8@D!r0BiLn5F!;$2I8AtYGIv$K}t+t03! zdam+SkjySz$Su*B#n=<$QtBEPwfOe$BFD=GdUy`!`dE~jW}iqFail!fbFWS8v!&ZL zdEy;Zr4b#(dqWJMj^_A*;K?)HDrDG8Biyi-j={@^9{e2J#ZlE{r;}d|H#(i1`^VwM z-~8j6=YOefRM_@w(oTY1RzQCo$+I_#pSAUx2qgi{)NvRSm=z?uzS*1U-Z|pH&8ajJ zYmOmZH!-l{WqZ z3!FLL2%?gcre^@w)M8BfU9tc-?IxB1Z&Q0478fmY_70pa06?T~p}jjcDU2bQ8FYPv0X3sYBIZ1o5%k(Vic zK0qD-6e8=Gk>WhsAV;vyo`G#7HD4VswM&BKxEayL&tR`fOFJ5-$0EU74hdQ@C@rIl zAdD-dyvezrJx$Ja=rlR^8L!?YJqzj*y}t4uN?Y~G`Q_^4&H3$dQdCUNQA>q{s-fvb zT&ZF4@EzMW?U*}>v4fbL!^@X)NsMZ^d(UUwY=feiVHnaDZlYR?1YxvJ&AEWOZP2BP zHb{voVvK?+qYX53Bn}%l^X$i%r&N9vqEcy_F#p}&>D1Pr^+WY!8{anozAc&GD-K+U z9d%zfjMbGafP+f%6rW=$KWiBl@QBano6trQh zz{!O$mC>UE%!!jxM_6YQMh~@3Ns$^F#OZ65fajrsT3QvnNwNp`l>1;i9I*l#bLG01 zk0VTQ*m>y+=CcT_qD$taDkyOCJty+<@AK^*lwTchktggiQJ~yvtPNsP2k2nS^Pp|4 z48P?e#62ig;XYi+<3lR4I?VBAgDqmzLGBM$yA4Y9l+k}ZGJ@E%iq7gQ<5ibuDtQO~ z*P}sT&Fnws*wPOrHhP-s&I?QY5LQ#t$u$pDr=tAo_Fn+|!-7qW=(J8@O_FmxT3ALb zi;GLya+~Y2#mTkxr(4cXXDp8R<9mfQsC65-j)=W{^rjkK^; zg$mXKo}dNo0o6%+z-X>PE{7k;HXf~a+^N3f-f^#@T~i=$ASytnQ$4pODulj87S_LP z^7-dCou{`K=Qqsa_(1s96DcjJww(q!*0tt%B4s`0A+pmO`WCkcu;LiC-z-556BL9= zi*$O^#Z)RNaZwiM8xj5VqjmVx8ziHW(v$UQQZ+iGz+~z{!>pw|TZZc5^d^?&!sPTu zOQGBFv*)+Rk3vCudgD7)Q@=mHA(JvVLZl{zv+e1P4LV<*L;Xsm`R+r`1_4i7gU|KE z`ZB6xY$@(_Z0m%G*P+r(nIP~_|#!o@eimHqU zDx{N*-Zn3B7Sv76bIaBE=Um*J0&SHN==1gA``dI&N?I~7C{7!a)0+k?@m~|2Tt>_{ zJ=9{^1CiQtvya}mTegRitr5M1yGTpA3+yD`M>9K9=2Td&`90Dc$kdv{9M>jXU<(eV z6xZ>kj5U;ROS0vk8z-TANmwL77t7%kG6876JmM1I>CO3SrCY|#V;UB5vE;di+oZ?- zrXuxeT?cG6)Ce!|SkORI?T|8ai}l=8JbGr88S1`}v_~?xnJaxZrCY-W z6M{C^rqYRU-8&+gz|b-S9X~<4-N@klfrpYw!Q4m&=#-;|MWV6L4dqM#1 zdQymQ!NgOI^HN}Tkw?=I{KUsL-4^dgcfJLJ#J5q5{C4CpVb#fPNVc)Q)`Zo7u{^Q5F&l5lBX2O) zDa_=CON5sz{F6%KkEU*N6W?{~G`XQZ4;EOUI?zvlOU%Uf*!ptaVj0QN!T($(#cH$ zcvGuib9~3olevwW+^GJ7HND$R`3dG~^A~B=MZ;`$x4{Pu6bX=4gaU~Pxdp_W*8+V4 zYGEa0BT$VH>d9X9$j-2gF)YUO2vA|IDZL!?dn+Zx=1J>qeYNy)z#V_|jv5zbq&kz# zfexH-e0Go}ULO~^_9l-uBPpHNp|FrMt}comh4alHe|$duM;Aqx;sCR%0lSV=4gMDE zqY_77*58UZFAKIv4jZFOW9gFyyt>=7!pE-QlRWBC#DJ0H{;% z=94Kd&roL=%|(~71|@G+#i#+~vP6yoiSMxArdZyhn&M>HPErh|>#$x#ClYzA69sU4 z{O`BK)Kxa2ZCWiMiE)Vh?Ym&Zv zSz4#n36OQ}FTP4)2$Z6Gu@V1Pu{BTGjf&z0rT+{Jy>cj?bR(w3uzG9xYU7^x!Z0%; zKYhZAk$JvqDJZq81AAa(j1CNC5#1fp2c;2H6ko2+?vUa5!CaAwwXR{gaAhrIF75m> zJXqSa1$ev`risu}yXPb{e}vawR$tJ$Q>AP%VyDkWyKTR6G^1cm&fLAn0cLNYtl5Wo ziJ*NrwPZT7MQ!vjMZF`LB%sG!zxe-QQ!-~h#_I6&>>In0LTB5MwAA(J2TYEb!z3TIJKF~5k+H!Y0v)zeB?3d=n=1Qu#}C6DcX4HK zF8i8a!1tkF$nV-buZ!2Czde+ru=muZlkL{3PN74tsLCqM&5eMRX{{U3EF1R;3}ps8 z$w8A4yv%TOexPS>e%FxBAa~i(74q5b=IeO5T7KnX&F0KmEn;3cBQVyDQLJ*RF8cGaYAb1yi_;C-kJ3pLlr z_2~+2X$G?dXiwCTl8oIgH9sANG-aou)#RCX^o7 zBiA@lGoN9FONx45K;EP|3qC+AGkI;p!U9NaSi)7g@z_YdE)$_n|6c zDqkBWDU-}94aKiSJ{tn)lXN_{H5YrSks0XPAuz+FB_mG`@EU#hFZ^}2_`g^ONNs4W z3|m8-#+}p2SuPLzF3{K;T^H)K7iSm8COjKW3OP>malxff!Pzo~lFgzD9RR1Gf@Pd6 zL#CaR)DWjhdAChcQyM{>M)R1**O$XI`O(Dk}&Y9KBKXITdfK%MAaPQ+npyjQEgM-h}YO)oZRHKP`J77+C zdV70)Gv}xtAB1yWB)O03>4JOIyd9@=Qe#{(ad40NV0HhsM=M}Wxn1{}CRm|UD~u5} zQbUr{3@TK`;aTqbp38e%p3M}_sV5jsFL+@hUWu{-wXlB~!Go<3e_ftQmI@h=S2Iz% z;zp9Jj&W!85C&UKIf*34ks7Tf3B_7N!G@$y6w0=Su)wNB#nF{;4Q&Q>NR`q;n$0w; z+sSG8Sc^RpD(n!|pw4tTrqBH{Ngo=l)8~UI@nyEivKCvng zyXXQSMq2ZNI0bD6Bns0@0tLmPzr*Ungr{n2kq(Ic1EB469jU3yX6t```*OB?et+L0 z0&PmpE`P}~H8Abbv`|!^E^h;1N?JX$cQ%)(9P1Y?x)fCjsWpy9_AizUoL8mWJH!!&i9YE;p+vbqB%F;JBY8Y&}W znqdAe35Mp|t!De0{B*^`D^jRv<8N&ASf7~_<%+yD|HTG#rzIUaCV10AwqQV4I=SU` zkFMQ$qM3Q#+iy;BUGonzFnzIillBubwj9~=}jc*s6vP(iiVP5Q2brJr^H5Q8%VGMwppk0zKgMHAr;l}b~csqX^E!?n5y9U{2|_>sDL-RiRC`pE2v2QrNo+n(e}Z< zt*is1jFl_yTb&awIfjTH6b*3`wr1lnR@(*53MWcmH zaDIV^xGWr1XRSJ$=AF@^0$9)W7_RxO2DlS@-ybdL7d%vi`YjI~#kE-o?;WNtt9<`!4q!?4Pw{EHomk)ydUY*@}!p?|g+Zg{AZV9gQXvL&fWCsrzW7h5m}!!kl4C z98NJ%h*3gqTX^9o@?u^L;@f?iCXA|KvGaU59PVXU=e3kXF1V06=zxTD=_wv&~=L*>^e>@a~y z@%6S2>&)?Kvcyy7d64gUG+i^}$U%jw|DUf*vjOAf4IM)Vev z$JFuJ;kcTITsj2Q_&W_@@NgW*Cd7%ajLAYUxcr^5N&mN6s!Jd8cChOMEu5)LE1`jL zC}X*~2)m$6JDKSmoZUUINhYp6*s~?|`uetvhkMi|1fL_3y6f$wkjD`|8k*T+KbEZT8)$VWd%i~%1QczVx z)K21-Oj;7$NnlFHvCZhoHNu{bYkeq#IF4@V!(^wf8E2Htw9k&ZnRfh#kNYrZR};T@ zrt^#8$W>zTtzAJbPPna^@z+mgbyUJf;|lBUCPgi!yCaes-a=~k{1LX9 zPz%h}a(buYDrBeqIfRR=SHA%s=#o%sV53a|;~dxJiP3=Lvb+*%;CP4k_c42zqwBLi zcTN%PQB!w)-(_~f)gQes(&xpdExjH!j5U|hC>15gb+V|}K3JA@em8&}%Yx0fHl27Z zh#0-s?Cdg35>va>RKLyBbp)$X+n)EJw&?btw@=i-lJmrYbh*$^)jy=Z5Z>cr`ZD?e zp^ljOq*g=GFrt1`iYeyPe1=y8%{~p-I=5^`FbUw0u8P45E#0Zhq_!uF8r8`E$T0rl z&qkhtT$fPn6#VngIXG#F6|9IAtcba5UZoRn$`)3xr%VaudR3}zbxJZ)xlH(VU6^r6 z@Csyey<3u0YIvhIluxb*oRP5#=qJ|R(+rH=0{VfL)L=bIZ;TG91NYEsEQbERn>p!m zdMIZ$hzdQbm&^){%|>BrIktzfRMS?ll(W>Ya%qu929pROA)S&G<}!`is;+@)_d+*^w8fJa z7Mz@QS{xQ{NEi(4Gc=p32cbm?UH<6#2CcQ+*Gt%X#wcxPHt{|w)PwU_?;6oFSVxK# z*#YiK5D)UIJY!{?E;9p^98_C15k3Fq7R!1JRt$~`wgU1MoK7n}n zxA~pq7jIcL%xGmMI4WO!V&uA02(moAi}0R2YIv{<$@9i&tA^2)G6CBmc72ev%b-FZ z&R4WJ6|5*!z~K{5eA-sv`XE4;yC;JJU}sL-cz#E`6#H^te_IKhO(_zwyigSu(Lrn; zoGSCJD0IiD!s{ANq@>S^(4ol7Ot(2H4=Vd~m=1;KFV$tQqzR!+#W7r!TEZTDRTDwe zaua0_sLl;=ds}rpYl&Tu1hc4|gv<=RPI}-3$aS!ed^fewqw>UjrjT^w$#`W= z=+-eN9GrG4Hat3`2S#aJy+_7Q^nS#C*jQKxpC^aQRwFqSa{axnf6?fqkq!Vf{>c>Q zEq-f@#|KS|IbLEAX|ClQP85wkXOK!?Zn@`LEggO|bMt^Q7*fxVW_Dh6cWC-?P}N%$lt4?(Hf<)@`ludkrakNcq}##9oi)#j|E_*Jrkrg``AvTZ&R;vQk*{i@Ma}}`3S_N-1R>Lh@Er1)mTAY$} zY9r3}j|MhHVRCG0iz{Ydkf+vR1$J$(wq~KXI~;Rg0oxfyDOE;?n~fG)mQ%-ctTCfL z@}o9sQO6CMMMu}AShl!TQ7rkquDR7O85#or<@)%;5d8M+V*zhIUEH4~ya) zPD5rOnx%3%-(gr9LVMmUavg-%#9|{*4GPub$H{@oa;hzx4h3Xm$m^eY$dGr;26OQ8 zHs7)IJ@rwyhu3GI{2uz`ZRt(?Vn-4E_%^fjw*Jmr)uSGb z2*5llQ^bJ`{Px5d^uhE+*VqQo_)q(QE_eVlq($*`Pf)+Tq`gzWNIV;by(rTCaEip% zt8%*M(Tkh(I&8Dd0mmLPQ>pC1B^Eu^kmo(2X(hds{0%04_^>~p2Y7{2E6kT$6YBf6}s2$Q(e%i6$w+jbX zlTWvQyXHx()6pl0KFP%`Qto&0YcOisVDW1(bYBik9|nD(Q;)v0zhbtKruNfLsegK_ z1APDVV}-~85P$v|1UvRSDSq^exB&wO((|XgH>RG==*g@qKcNU8-C-SRA4+4*fOg2e zwuy$@`Z)K%0~4lyZFqKY!yz=6x%77IC#EBNGH!{)=z&0__z^S?@vSVO>W)z67`Zdb z`KQ&V?dZ<_(th|*UGk1N*|Z-;=Yw@d$#P<0HMQMQr>~z_AE|&y!%Jt$<#gVbTY3&f z@B~#~Bt?Drm!gOu7^N!wB9pTP*BEl88id=+%h`y!wmev68=RxD$7M@8lLb#=hj>91 zq>x21kG2^^SvWN8CYRAKIw(%j75E{CruU!g?}8A^j8UMVa?!oJ)Wvz6?^6GX^bS7t zDkDH%8!cH=6G2y3#lfehE)s=VGi6TQ+6bytnuAYueRwDr?%-2ZBNnJob)6_DRizw! zYHEdGRV@df+Ipe45c!p%q|S!ir%t(6{tD*NjHOpLt0d^d3-@)MOnuH<+`5T(!rUo5 zn5)WzmV*CxU`-q&cIFgg(B#b^`ojd2lkiseX~@4ndBG1po}Azd{p|Aa=J?|H@^{Q2<&K Xmj}6110)PBO`#IdbO?$vP~rywUQ#OK diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/subclasses.pbxbtree b/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/subclasses.pbxbtree deleted file mode 100644 index 4c4f6e741eaf519b128632e3378a30585f14fc0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 VcmZQzU=a8Z1Plr diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/symbols0.pbxsymbols b/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/symbols0.pbxsymbols deleted file mode 100644 index 163d5b7955c7a09434f0e158c24cae6e46a35480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 974688 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ℑrn4bzG}mLP5mE$hZz4o2#+!4s{>Do!qfljs$bLJ>q&$D z|E>CeeZoEO`v14C|2Kda;ID>>{@*Ck{~sb8?U!!f#_)2(55snTY63GqrR(1m-V!n8 zYX&c%Jk6!9e3=VWz80|lz5u`K{q*dP{Oe0tkCX8I8#uG+-;Q}79eZ!=zvg|%3eIeH zV-z0y<6g=yZ0tiwX}Ys>$C3274vU4KNBGj%c?;dy=kcD}`sjUn!n1GZ{R8YghN}Eu zCA_|m8HLwA*rl)cIJMNRN4uKg5*IFW(gjJLAmPelRR=zB}XoaBTbmyYDs0LACLRv!6|T zy%vN&#Jnefzw~}ZXivAFwJnCO+3~Jog{=PyDqG`xs+imx%u{cJudK@^KvzOaCbL*Gzo&wR!1NAKBlH@^ftJ zPyQ#cZ#D5x#M95u{wuXVuYPbW|NQJ5QpfV*!?FBj&&rDOFOid7TWSWn}!S})sy{GY6;509lt-o&&_6Io3U+)=VXP=vWYF_?u z+wD}`{9ZPF>LYtE*`K({ z)laPF+hDafcD*kqo*l96KQ8`6?3$jV@Op36t*>GHUu6&ak4w+3|LR}VZwUF#RQO=M zhU5O3fPJO$--Lwyb?hIT_^&7GC;L}wPrYbIdBnE9Vq0J0$Lb5m>Z|a!z6x*aE4K9& z+xosoeB0mNOVnq(m&%uI>bpH*{~7x^uDLT?pGX-a^u0R&tl&9#LjITwYS2%@1PF*-nGBj%x48X${Wm=uDozGK4++Z7c7ds zabA7lxcwsRgYw$9;6VoGvfvbKRBCtZ#6bzTOAJ&UH(^87BYg2|N3V ze6N`N8zk}<+x*2gfA$;sR+;#%6Y2NFzQyFckv7cwk$9Z(j{sDHKr$+HP z_l&iV*!oAD_7CNSZGRHy^(WfrQ_`&*aDaY4a;w2)nudgJb>`+xj{-^(}lB@w?{b569ClgZ=Tm{0o;! z*g5wo@U)44Zz6v_y~_J%%s0H=OM4Z@9xIPHU7pbH`X`S;MB!b39PZ|$!kkMKm}~ND zoG4Fw>?=%p+b8UUv2QZ*2ix+N$SFJyyUr)V{tCza@f`N=O#06y?CfU?1oNjmUntCe zHm|>v{#q|pFw3OBHW7at_R~!I+Y7kTKNm+y=45&>u({u z{V4X_ka_Rcg-`R#3a|HtgZRwP*tLHTnD?l|^`b;hku37BD0`4U9QxNz&=@+@&`X^x9KV-N4!?EcfV&0ood0hV}!Z~Ka_9p$x>HL52R6foD z3%d1Yc#!|?3406d!G0jHw@8!^j+IYr`fm}jEgu{!UsuwfX3Ez!k^eyK`YyZ|mTzFf zPX8;o*4bVEDnkFW?JeegN8$(jbvRW}`(OHl+Eeymzsl>60ej=!_agP)W?<+2$FRK} zrwZmOz2JJT$Rg4^Bo5o3`_aLCr1u{2?;BpKP^M}BHxl-p*wvq+_&XEjhhyd2>8X6$ zpHo26|BCo!O#H7B=^w>j+2nsTZZGO%zb`MoNjkc{0XND&2h~8*`&|8a3PJiuzlh1?^!7V;bA-eU~i57UWU8A zs+v=@p;o>cIYk?h&MK61+d_M)

-7{XR_e{g{@yESu$EQhMGv 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..208496318c55d5790c7e715b344ad9e55b78548f GIT binary patch literal 10744 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..232852ca0d7b3cd1a44dedab849fafb45eebe247 GIT binary patch literal 6978 zcmeI1%Z?jG6o$*&NIXF{oe_`_MH2!`gu*Cf5h5i~BtT);u{{&d*xi=x9y4C#UFQMj z6(Ijtr)#R(HenDcn+3A$?yj!Ox&G(kKmK$N-F;WM7p~TCU%wN5hOTl8Jx|?CBj;}9 z1{xb^soZi4)pxJzRY~&KJUz4 z`MKY8Mi1O~+V@rlI)Ct|@%zq|Zm#QF&rhX0c$-TGr8pUD6y8gXab4;yqc*<~|3keS zc*!ih92>12>OJ!L-Ai(zHOLiNaH8!!)4RF5qvv0>uF;8il(HnO=J0PcbE-M4JJWuRyVRP>U1@}KPW3C_>)m#zz0!{k^vubP z{Ib&QK*6d#X;%_5tJ}tJ;qF~qFFu8Y%;LZD7;zIThs&k-8|#W!;fqN7X0~n;twe=M za#Lpadj2NVa3rV4LO#2gA^l{EVR;WZz>)@n!e}2Z27J~W1vy|ps$s+ z?k+r19r>|{QZtW7mF5x?4DrGIQeSqMOHSx;qLCBr_E=BPd{jWA3-`d!wONLIGmXr3 z8n!;vI`$fP&Nzk9nWq(+3hiW9_!*0ruFrvg|4Z#=Qp;nxN78`dX27dxogq88X_UH? z;OVE{cfZ`Dp>2qoa{QAl+^o491$>-XiwB0ftj@(35f8)x{qVzDI1ytfxIOTZG~hxv zqXI1rYsej6$#cn}ENjBQ$uhwU;wdK)Q$YiA&6w>R`FH!GVtR5pbH&vsJ}>Y4oH=B+sf3WURh#4hr6{s`Fzo@n1YK0igsOx{Y858k zjFBoA&_JL`6mt_U{2)fY0#9NBiegHRqc zKJFkQ9f*-E8@s}Wk#N!0&v6Z$jQqMh==VaWMhmc~JSV+$&y$nvDbGniOR6y|ekuuD z-IB&5u=m1yXhgAlo0dhtjLM&Vg?j2h61nN9&^ep*YCjVA z$6gD?^3SfN!~YXJSH5dG6@?Rh`)!|@PW6@OK9l9sGqC>*h_!hvhYssJvEJ~U>ooF# hyOIDhBRYrwQUVsF{{M?Bl>;#| + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..81c59b757587358bbabd4343563376b80d4c474a GIT binary patch literal 10691 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d371ff21d9e947292a6e7105b8e82eb4eeef951e GIT binary patch literal 6438 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d51f9ad2ebf9b29b4a30b33089cf12a4b7c07851 GIT binary patch literal 10841 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 Sk78Ob{@9o5Ps^8o&i?=mOp;dHSGp_7|=3 zz4VoKe$a!Y--K*@zDjjk>iaY_n(7zYErmiYT_zeu`&wgsU+XQSo?i)pk=_jhn^hpW z*4mNYgV3*m#0r2wBnNO8?k)TR-+@d?w3QVRQ7mjI+>!^$R_n>o-VE)0@zNH|K#2 z>xP=q)XgV9N?&dy`8klw^Vln+3=-@$)eh*>zs<*?$3W*T!h-nxWMjiu8(Bs|7kxnn zZHIfB!f*;yyk;43C~l&zW{08peVCyLdW2M9g#{hm7`8BqT1f zcUs1_hi*%QKG+L?*oCKZevY?UoLX?5>&-%(f*%*JG*evb4Y(n%M^@qso@%lBJiKV2 z-(Z9{f2bYMY^-%7aSLk}vL(!P5MzavV1cRrU=U&+j)&#z%?`_8e%P)KkA0%?XE6gC zuF@wl*R#xYSYfHt?EA0d{V+7+6h;>zD>7Bu$=~QRkuL41%WTd}*faB|85@sc73|Cm z`v|gQQDg!)`)z*bEO;I=I6JNam*ez@#=KA093(|<_?O*5mlIC)opZ`aTvw$d&C7me zn{7*eruZi}uoL(#r8lRWtKkpxf|;s`B`dHkn&T^7h?4cmffsR#5$%Uf4s;IL ziI303EhXc^?rjhoI1;u6`X*z;TWo*` z3p(ST>H9*fs$evt%dC-W5~8%oz#7Z3Q0!f46`t0PJZE-fK}tLwhUhOlAB5g_BW!G3 z-+?qWV8(kb9vN;>b4_S=g}ZZZ*fsXU$W&BgCC501XANny&%hFB(x9*ld?pu;(ttDb)8=3iI@vK8e8Fvf@u!%Ks`KZL^B&k4bQ0z9(am++m=$qRQna zTzLB^W^~28V-JK}N3k0Ah6(arw7;zOROfR4rj9Jqej6Fi-Zt#5c6b_oI#6tuI=G28 zNc(n5B}f#nl-uU54nfx*T_`&n!b#-mvR{9<^FzsgEo}4MFGp=t!+kMiJG-~nSn4i) z^2&ayx})gxY;*iwlE09Bd_QqzR5EeSZB!7{Cd1IVzbfLH&ar*n)yjRYAHv5=zo~e8 zd&Teav)nn_?&FM z%)aay{n+>J?w#+~wma155`Yvu_zQN?ZI0rr5 zqs)3xYq&$@DzRk$yUqloW{p)#H?(s{sHtZ^9`jOXEgK&Dz2xaDAG{R$YxOZ + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0808fc651a9f9b3c54a3643bf6a87ee6da80c783 GIT binary patch literal 6406 zcmai233wD$wmzq-_qDnztSDkk9W;5JW39YsZDSE9%`fQ+MlI_Ti82qJT;suT0XH?Qmay0&}oIp@Fsf9|=} z*b)gRk{-{yfWQF{I?#gwj9{tH48(&?;Z<^cekT1T!m(&gW-`_?KQq>NksM4W8U&}$ zKTB?tLq+L^BH+4B`@sa}#pT7>TC-3f8DO|oxCN|WgB-|*@h}-Kgd&&@vtcpBAO)Ag zWx!w!Tn<;jm9Q3Wg*)Lc_#@l{o8SR>5FUbu;c<8dUVs;2C+vc5cn98tf53#rbM8qp3*bs33wJ9N+{2Tp)r38PE^H?9JOtUt~=PwEdf#q_%p2m|`C#hkb&p$U7OR^}tfnChnS&X%@o7g4Hz;0$H*1{s}My6*V3}9S0 zA?}4-$fLm3U=^2`j`0mbe}8RJDj91IB*Vel7Gk(u6p`b}ZkPZCFcBur*MgE03$%+U z_3VU6P`HGKN+qbL7SQ~j$QlHpytpJ5j0Jil=!Plez*Lw$NQGSDbT8iaER)No@lO=CE^ zyq80DTBe{5={FRkKbDFIWyZ1d*f|2n&SmE_%lohd8ek~|pplFRAp|lkqoWDJa1pG4 z2sA@jWv?=GbLB)!EE-aa zCs@IC6S5{X+rMmSR&~U#=|X1_o|$1@7aCMSNqhImzB9!RZ2=$EKgT~VO;)l1)uv-@PUw|jH5+!Jy;vfS~J{oe#P!!0xy{$PMqP3L4=L?!@<5=l9lRDdsvhDj@Og5DNI!pozI zqG)>5sUiaRUV8;#{Y-2Sts}pH$N^BE-#`Yva2wnXcaVCB2r8LWEe>D9BLO&c-DO(?weH}4_Xs3i2k41=W$^+`$%Tvk`tCVy*$sPFLF4d}!iP*n+u338o9_@lh z;W5Qon!Ml97hyn8d*ybvhPT2Kq~Rw?!%vgqa#;@ZlHS}0f1@`=YtO1$`wKj;3gQoD z=3zq{gaPgCIiCD1caGPiP$0KpB3(~VIPh0^30@`^Y)f=g*$9_OAQviA!Eh)rBOai1F}64s z32Df_3kN#k02EShWnnk~2jOq7e1U`VHM5P|5)w5zop{EjvzaQ>AJO>z;bZtj9eG|;I4RHaWRKT=6G7nF z7|plO;9w{DQ`pz3WAM4=6w78~6&u9f^zgla_L%reF;VP+p7Fkg?>57C@V&xlHH9iY z%EEFar0|*|Dhet|{a2Fz2q(6{i9RIn?Lb!3JWhs_5m|X&-+Og7`A)+xM7}ey5Ru3? znN4DaM85prAs^~B@}Ws3-*|<56G$~_@)hLtaxXXM|KJ|lVLPJ6J(WWR#G!mPu9r9{ zq6BYazoA7QV#q{dh)r13mmj~XG$bd~G^`Z46eFSbnv|q!`FVMpElGF-1I*#B4I7X8iX5m=OhW7zK6 zOva+Bbi56M=<`?0@o+2@4wh5Cj#E!!d7m~afqI&h%8@`@gCHq+JUy%;WF^fL_QkA# z6|pJ8AaUm8IcL~(VFw!~(xw6$gu_^X080t z+LYmp%{W7o1_?oH)hh%n$BHdj(IW&JUu)2fm89e_`cy>yO@X)^Dpx#=24ypwsSRC? zbGmR2&Q%;3==0Ym7F88uFRiKnAH?fbh;P6(XFE7ZiGJyRBanhTnhs&G_UqbY@GZ)%iPqxVkT zMv(-xcXMgeNjFsg%5qe>QThi~EB$-hqzkQiHEO=11fV=nhhfVp<1A$jY#D1}Ra@6`8hcRdp_}5We+}uN#cX%0g*>x6#f~LHOjyWnUq}f9QYo9 zMesBtpUp_Y=fQ#3ZVR9 zHkXlTIO@AZ)rGPHvnst6xWB-|52dYnG;6)KxU?Iu3}fSYuL4HJ-d!w&zc3R&`&T5F2N}{1ifGuB*7w> z1X0Kk1fjnc8GSI=q>!6X=F0m-R++vg+H$kG>Q1g&rF?m@_6?(y3S#==H;BGMWzpxo zNd&+gsH6S-GQ6HXo_&B{aW?LJaz39vbTx1h?lNv2w}I>Ap5S(I?{Ob<$GPvhAGx2n zQ`~9p439j|>vP)ck(V?;`{Lf_(A+oKAZROUVau|!!PEW_-6hRel33|e?R{i z|2V&ue~y2d-@|wFhxlXs7yNPlEB+h)JN^g$1bsIKRburya zT|$@AwdywN{-k?e_o{A>?tt#F?laxDy6<&A>VDFl)ScFy(W9Q%>-7EfZv9YwrhbHe zls-p4ML$hntS{A<>1XOI^p*N1{YL#?^?%oYV{jOT8_EnmL!BXDh!~OvX1LyPqv2-5 zErtz-yA1al9yL5~c+v2ZVVhxx;jrNo!!g5Yqrqr54l)ikjx|m+mKZCHb;g)6WxUFG zlkpDYR^v;?L&hVy8vthHQax!Q8Af8uCyksNo%XM&Dw6=VBKjwWIb*@ zZ4+&7o7XneR$;5O`E1p;xwaZxy=|dwv8}-tvUS=XwLNS5i|qy5cH3TCx9v0A*S3>( zqg}9{W6!jYwNJAb*-Pw|cE3GpZ@1rX-)7%$f5(2ne$f8D{RjIA`$_xH_S5z=4s;B5 z%y!Ii_#L&5d5(I=LPyB4%+cg%c5HBLaXjdF*zuU-&yJTJuQ+x&_B%dueBn6d)H$ur zVa`0~cxQogl5?`N-nr1Z*xBG*>TGm|oE^@moX+2dz|~6hn!zH zk2}9|e&hU37%of{W(l=IP*^EkDy$c76FP;*gy)3kg%^dFgl)pB!gk>eVYjeXcuP1Y zd@KAc{NggYY%YgufGg8A!Zpfufh)_E?ee(1u0mI_YmTel)#7S%G1r~0F4s2KPS-xy zhpx|DU%O6-PH~_(MjR`S6LZ8|F<+b@P818p3&pA8OtDI=6T{*Pv003XE5(GE5?jSK zv0dyC*NJzCcZqk4_lWn2_lsTP7V$yxVeu*PHSu-vO>w8VTih$YCGHpB5f6xm#pB{B z$s~!=5NWjJm2#zgX^J#eDv~Osn6y$#NGYjRYLnWf4(T#!jdX>yR=P^MMp`djFWo5J zEZr(?lwOfulU|qJly*wHrM=Qy(thb3>40=ldS5yu9g&VoA4(rdpGcod|B^nJ{w;ke zeJy<}eJ}ke{Un`|PD^JpFoVyqW!N*E83Qv0Wt@|dnK3+LWQHdrpK4F~amptp + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..aeec008765ab49756bc2a8d825d4f4f48561060a GIT binary patch literal 10689 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 O{zH$bf7^ab-~SJC{z0n% literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..92064db7fc6d197903e946d8deb2042e4803dc35 GIT binary patch literal 6938 zcmds+TW=dh6vyYepJIuqS}Ig-j|dgF1gRj>iU<(AZQ@IoI(D>P*Dary&(Nm|`2WuF zWM*xXq)jJW6xo}Z**SAA|2a4R@n`rb+zVAW2y=ZO>-$uHqc97d#%H0`%=6HMq2`8~ zISMcJ&H6;MGyONxJNGqrPn2$jy>MHjkHa*K!!ym!^{jexdm4YC4{v@F-tWErT<_29 z{ZD%7kZ1Q_UiOtvQ}6tupKHSJJ^qYeUmc zCn>71)ZUSv=;(!Mv(p}Qi#|BfX}4Nig!eT5N&A+f3H_J$f2C0)J+jBCa?VsIEk*ZO zJVSpjZXQUVeZ9J5=#l?c+R=(Kl=^Ztnu7;ycqm#f)$Q=vdgrfN@4|2TxGYOOCz?y# zv(5?7;e?rSQ{G~YcmT6VhF-wzbZvnXjh$ckg4aqohQo#Aca+tdsWn2MNBSN~2N!FR z6QMNJu1Fs{cQ$hR=U6u+U$`u6u)(xJ2tn<};mkGOFdf&m=)3 zz0_LseRu2(v;sDdZBHvC;C%)*mpqSaVy1WT_3p{><+VOgSeSpuqt)gQ9%%ltd3zAh zg%9mrf6KjDtC@vP^ZRmY>qG751jj>byw1f*B})E8o~dN%-_7W;(G~s?8pwTUI6%5a zSOG0A>51uJV%D8V-cq-4ARgdkrKjUL*(}Dw$opl{1}>vd-#?cS>Pvk#Jqzc>=y^4d z|IcdytMBqp*OT0_6!o9`DiI{ z9z0w0oY%3+z$|t#Hr@q)|5e+pggmk^e46LV!~vpHv`~s_t>LLL-&)!x*Wv5`U<>y< z$p%z4+gV?<&3J9Yo3zT?bNKJI&!#u>2st%B94k!s7G9lCY=zu#J8D+phn{bvYNbZ= zs@1b3s!y-zh$)`$mWz{*bOx0xIbF(b29~SEOpRz!DpowQ{P@^%*O+1E8b=qNMR{zd zGG;xmuRY3=zaDCpI**7qGoM98p6eWX3sIm}M=t1;ssFwb-z%LE>#=xmbLs9YhUfXh zKzcwvau70t*bCT|UH*M_6seYxYu~yjn-Sq%Nrg>1*_U`j9YL1kIw~X0W1Wz)J~A!u zCw*@>BK39B-RSRd3&AIOi|_TUEAJ<B|c@va@+N7T(ZKPSoDhIkd zN#h5y1$>m!;FIuecAAgM$OWom%<%p|U%z?8_(gcar)}ETD`@Z*t7$5LauFi;o>kbF zclC-Y=e1w0z*k=N?8Y0nrDWxw_(sRn6?AzMs&;ebH#x7|OQG)Ko}PE49U~sA-X=zF zcYtCan=TX>LO0;2(Kz<4yknK0O64_M$0hIRjtvFiGv=GSJ6x4@*x8%Mx!wIiI#kqs zQ6H7){fmtygl#0v&&0X#BU1V0Un;3)MR+I z#_^Y#*G8X+by>E74$63zpC!v8L-#l0u-sYvE^C!wM#bR@zJ{( W*m`7I^?2#O3Pg*L$MN>LU;7K07K@?) literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2f65f2f49 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBOpenObjects + + 5 + + IBSystem Version + 8H14 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c4201cf26aa4490d0092bd8c36f61259550aa224 GIT binary patch literal 6571 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 Zr5sj{Vqu9tM%(ey&U1`&=fCpCKLLTjt6~5E literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..be3dbd9069137fd7dfa8bbde36f0a264de1c690c GIT binary patch literal 10634 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

( zpR+I6QFe@d%YI-#vE%Fn`;GmkWy#}`FHf#djwjDczAkw|^1|dr$%~WkNPaN+vE)t3k0(Ewye)Zm@}cBUlYcQK znWll7T9jH-Dg{C+hlv%_PXs| z+dd!Ssln74sST--)GJeCsZFV~Qs<;Lr_N2iHub*L z$5KB`{VDZinkTI=Z9-Zs?bfulX-}rTnD%6 zl4L?Bvr4H_N2!z4S?VfvmwHI~QlZpS>Miw^ilzS27^zm8E8Qc#A{|aoNpGKCoL-TB zUHbLucckB$epmY4>C4kw($}ZInEp=sf%Fg3kEI_^KV>)CQ|*eqi#^{y)IP~R#Xikm zX%E=1v2*);`}Ot(_C@xa?EkT^v43Fy&i;=h)zRLO?-=Nq zqK>#@j$^Uo0mlkQi(`%BamQB2YmPS@yB!A|#~jBUCo_^V92rVRmyDhn12V>BOwI^o z%*nVZ<3Aa|9mO?6eeu6AAH;;#9w>s$+5 zH@H@~4!91w4!J&b9d>=<`pk92b=-Br-PzsCJ=9&{p6(90XS!#*uX11QzQ)bn^WE3G z7r1Y5-{`)>z0|$Tz1-d6UgKWtUhjU%{ib`j`y2Pqo>Y(Iv3oK+PLJEu+0)h2-P6M} z$TQe8)N`3XU)u-m-Rr_6It7`Ue4N|bvWyXte>)uXPwCU zHS1KiFZ;smF4^6(bF=fZ3$lx{du5N!o|N5?eO30{>}#{&n&WAaF`7(X&d>wtAd|iCqe7U~izLCCBzA?UX-#Fg{U!!lnZ;5ZIZ<%ko z?_S?p-zMKq-!9)C-#*^~-$CCY--o`#zE6Cg`HuL$^d0pb^L^_(;rqi+{eHjVZ}0Eu z@8s|7@9OXF@8Qq)7y5hpd;9zPi~armgZ#XpM0v-o2l=)bMs%2WRb8qh0> literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..6bf42f79b03ffd17af6b43ea71a0ba4eda2c5f7e GIT binary patch literal 6908 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..236c082b7b7ab556173032f83295d118589b9af1 GIT binary patch literal 10634 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 CH7pna literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..e7f61432a3597b14a71c5330fd8fe062a3084efc GIT binary patch literal 6583 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..ac21bcba231d538f843fbb6d8ac9616452fc6320 GIT binary patch literal 10787 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..c52cf30ced86e6628aef76744f03c40f73c271e2 GIT binary patch literal 6954 zcmd^^-EJF4429=9Pq8*yBn=9uKbJ+38mWP%1`;DpQuuOX$+jX{5+tovy|133mu=2R zYO*sc!%=FCFH#7Wc4ucf!$b0rL;v${coH6mD!d32eV^(3N}qlhhlTE^VWyGmFbF-3 z^)&J>tn|(E3yqF-)z_Q@jXjp62Vp;at-J5SD4d6(Mko5Mvax;L|Exb|ejmQdWk8fG!l0HWBaNbatucO=ddjHJucUup&w7T; z!ftqqp!%w-1_uLwR383nB#^un3Vd+SvY5_ipv2uCQ?>oWN%;?V}w)4iBp3Z}`^1 zPWD4zq_`ch0NzP#f`Ho*X-LmkMgD!^;vR{&b+xR*qmQ0Vyn%~H!#BnsyF@@w7%qjt zNWVlJaSFzt69;4SX?*!63?FSUCKe;AsXzN(x4o9RJ^f)5j}zYVwMzRXsNijm19-If zPW5DFQ9U=!+y|XcmU;qyEyFDICU>=%e=7Y4@^f@@-+gFn^mK>cpJ{xetChv^p^dfN zHIuh`43jB550D8!2MKeX~Md zS>Pq#Qzc344J2TQX%=J0#xU^OTAZ>rOT#hF%zf>O{Sr(3ItMq}FVV;Tx4CGjaq0gF*NPTzt{)Pgu&O+6J~T=;77O> zOW?t4&BVr0Q?APK!J*bAzby6J<-J%5?3!=)5>|Y(;l5mI*AgHACT_>bw%x3U+%jyq ztM;Bjwi)ujYne29jiGb7!&KWKGoGG^J#%PuEjrHzgkJplsX7De;>$|)`b;(H$mWgLwFpfQf z3wuJ8r&+Aa4rFZJd9Po%6^5YVfg8$YsArPSiJ3~U%^1gumn*Ga7pn)JS>8BPOt$rC ziYu5p9$vZ74d8ito`0?V5!FPrS2xp)alI-fQ+3bHD~;U70_9F6ze=n0lon$#)%`#W znC5RzRGu$#{m`0<)n}Kf+m5V9)8*~kc6(x6>-~@W-|usIvwH&-K5^-NsaNLVZGWis z^|m@92Yc72>o53FeoCpNWw*yts&>wG+Qnm1ot%f#N+kMzS(n*rNhE$xD+aHvg-CoOi90bmgS(gvWnOC z@j*Z=hN0}PLe(O$=#oqvF`0%Ha|JL)u~nK@_c^w+V14UjyBySVihFl zO3+V<{U=tVuiCEaonHDJ@EqsBbF(kKpIE=$+^LGSMYEM-@?JAunr2tn@g^Ukr*08Hne@|{w+h|f&b8!wFSC^v`&!-s&-a>E{=5-8!}%`h!TNs@VqdA;N%d6rn + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 439.0 + IBSystem Version + 8J133 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..552a5bdd373f32c150427e896ec6c6f8b1721bf6 GIT binary patch literal 6548 zcmai2349bq)_>JKNB5k40fK-dhk!ts$w9&)l7oZ*nS@LdKoY_*X_Ar2OqhcZ15%3M zg`$YAx-4QMAR@9XA6|IvuHvnTh!-lWuAlDedMzHX$iD8L3|a8oFY`-xSJ$h0@BQol zUcKr?ZIN&y>Gd840t~QV0y9{^3buK}g7HvGc$pfXI}9(0a4cFgEE#K?J1n;7ay67p zGzxBiV5ZukHWj7?B_M0Jya62W4dq2yhFDWD8Kh*lumSAg03YPRc$f^AKp{+nN@#!> zq~JDKiy5 zVhWie5@Cv&5@s4x%9JtFnQ~?pQ^{1<4vVHDk&grkoZtdC2q1z4GAPgo`a(ZA5BkFZ zI3EVWAQ%i6fCnywAutq%!Em?;M!-lI1sB6;7z1M=3&w$0U!zK6z3PIIl!~j?-ybLp zh15hMyeJ$ACp(H`(I~EGEN-l5aU_^Xs0l;*GJl{l+?2poPR#cQ{J~aLe{S#x(qdZA zxl?Lmj0x(E33_x3{y<$A6-U%L;b>E=JyAC-r0LTpG|WJnX)RrqF$!C04-94f&a%Ik zfu(V@uss%Ef@4Z!(PTw18f;eM^Kd?Oc@hQd{DJCNEJ>sEW_ktfq%qn-Z=oxwh2Baz z+D0REJvCDh`cdW(BAyL7kc*D%&T1x66J;BPzJc1pR5I2YOol_XZOCx7Frvnjhaevc zU;<2>YdEDQE;AmYII;^S!lVT_RVsla4Tt9Tc-ANgkr`77+DJb?NA2Op&VwwOqc}~l&2TaTzUze zMeAq-4ZRIjFdM2N05zzo7Q8SA=E6L<4CX^U0$8FZlHn-&7>go+h<#Ns*)qo;m=#>4 zMjC~I2x@py5iVmm+MMA~oslVUK)MHg48&6LkV+Xkh@LMnbRZo}ZSTSYXoQ6jghi-4 z1WlmAV*Is07%qn;5P?<*>+IE5u3AmB#iC7W9M>X{YE$FO!fHF3qN9bnrbRUbno!rW z(nzp5fy-R1Mj|L(5)U@lbhP18pj1;>M~d3;f z%gyqhD=;9fu)MhD+|E9TP&lG$^h;Ffrf5){vC?05?ii)BGdpLDCqHN97*FT;+%cZ< zxhq$`18d=0xDKv|8xW)$VIACrznft_UT=Y0VFRv3AQZ%?#(T0Oq9TAuiKH4$YQPsp z!x$@S0(%Q1;pV6oQMf$%QXzpe&)EXdJ{;|j`^YaKF#zx;Y($0Ga68-qzrpB1BIsn& zW3eASkM_km%UdzX8wC+(NA$xXowDVjSkwrX-@>MD*aW|WNf>6RO%K4HiE!BPv)>uR z?tv}$!4|j|$vFuP)|F_M)}wr;VTg9aeOuu^*b3WV`x)Unqz`ga!yz7vASJaII8%nq zm`IjsIeDTd_@8#y>aUUgXT3MHJqWwHVHZ54`GYI`D?x}r;oD41o*U?U;13w+doj@W zVOZu+AI-*~^t^pmP-+4Bm>!V(;R!uzF660~4rvtnb$0r^d1E}jY_GKY7k{TTtn0B?)M zlbC^ephMi~2s(xiqeH2Oj+0CpJ%p(MRfpkKcnvkZ4hP{4I0SDZ%z^L~D&91TU_w}| zvusFV6#yMhFA}-)(1cm3P`D{r77t=h8Cw*KG#SVqfw#NhZJ30kwcX<_co*J-_u(ii z_y9hHkKh>m1^L!vw0_srXdKoY3A6=6s%AIVJds$lPST6%D8WKU($RH+4onEG^~g(& z5Bh*N;jcJ z>wDAXOwcx|2|aadg)#bwAfEN+EMLhWGMHR|zIxEtA+(Inq~&x5`a0#;e7y+5WF#3y zF4ld$6n872rF7~Uck>Dice63_3RbTCfQ%(sM&yxk#7lh8mt@0@BnOlA0g^`ql23-9 z@(E-jnM5XIEFK_J^o7TrecIAg7}pHbwVomiBS|%mJHM*uIm{+Ssbn%1)gvjpQIPzB zDm5OCHHAavnB(I(5=q}nMxVAvq(qGbI~oO9%l+wTwYb){2E@LI7SKXEMd&Y0pFI0C zohH0Mhe~)5ftXN)XM_|a@r2NdWkM3yekrz9Y^e~%wg>;ez(U~*q;LyL#Gx5`;`maWpoghVQ&mp@ZD50YU6gqfD?PJK4lNnpd3^LOQI!qddoEBmY7(i!Q zhIj?>ZzcYoa6^5Dz#&qF86!-p^`#251mkK`c{Gs>Mnfu3ryFByNNqQ%C3TuX=lKJ* z2{m4#E)J$5$wWG-V!^7XEj<}wqfr=|j#~Ye$m&(&1|yLUqt3;$@4s~)#*(rct;1rH z%qR7v0VBGG*3yb!V|Xyl@Ftz%eje#vY0x`g<8-!0Z(km6GCA4*mENS8wBYY@(m*0e z@74^x+h{eNjlU{dArSdA{;j=wDsl`N#$j!NM6O0|B5ZL_TO^h6B(YY@Bmy|7CxVoo z15C;x(vE(;OqSyYm6b@wvF4=#1M4eDXE*62E7EzirySR1G?wTO3*x9M6%Dn_!mx@@ zG)Ar>w42c0J9&C>@MavzdIP!|0bPTD)+3;Eehtv;(}1qi0iCM>I!^~QCp$j_XukLV z2Xws-=mxUp96;ymfL=!DXec7rGXS;*!&*!SqsiIM`W|2XvG$1>56Io*w`3D|=>mE= zT|$|oSJvG`klxgW_Ii$YPSB)oMY+wjSnu@ z#%E;Gh1{GPJpp1O&|c`%&}K|w3uz-=Ok1d3YFmzbMwkXM=5SB)Vey=ot#3+sJ|8YX z9`ab{5qX#_M`jonAdNI`k;lmL8f{{YR(SLyPk?_L)Wbev!gXlC4a0`DPaYy)L8s7= zL7?Zzfo^huJg=WD)5I%`$AcYOrLEl?1+3>$_XI7NdRd{JRLM)Qt=lMBb(SD8^kUAJ zU4V~1uNTd|EIlYccV(k6pfe{c*PC6Ct&YwqKo*^8tTfDdogC~U2emlBIy;TM+S;a_ zb?Vyn^S&YXCOO`-!WjK2jz;R-jpG;N**1N}u?zI@U@})6t>OI*Id(s4^CIHC zbup;xKQw8wCpFoBkyGRsa+(2#Fbu=er8G_xG)Yr*8EvP_X)996NZGmd+A(ZI!c*BE z)zfaKR?4n3V9JR4kkLj?_w*!e-bvE7152Ek19q#h6b z)1d+}XuyvEUYLPcl%aQP5W_P32rvaPtiw+N4TwYq&Be@e33|$-zjF*swb@7LGcqHY zQOw26Xl4vEmdRqqFUWHUKTE|bTMXY!c>x{_W=S5Zo@qF2+^^cuQ`uBF$~>*)3L z26`i1M{lC7f+Q${C|HF)f?en<2!czH1+!oiIKeIOhBq_7zeQuWrn{n-XI1HEHU@n7sbv;^+Ni^?3XAbG-fiSV@(q5B8;nlm;b*r- zCc>;@)-oHJF6Q^lOUx1GQ|2Gcapp(nXXYexiaE^^mSxSXmE~DG>tx-m$jWRVwjbM{ z9l~a@UN)PZ$=0w9Yzy1Uu3*=&ce3}g53;-1-Rz_6)9fqkA@+UtZ|s-sKiF^B@7RB` zKd?WsCrtfJ!%gE%`KCJ4LQ~kZ#MEkvnU2cGaOs|;UG95L2Zu;JI z-1MXAXVVGODbr~)F|%fqxsTan9%3G5zQ{b%>@!a>Pc;{rOU$L_>E;>cS>_h=Ci9c# z_sri}T$bUMQj6bGX9-#&mZXJRZnCVm+-lii*=V`Tve~lJ^0?&*%TtzTEH7A&TK;PJ z(sJ4=TL)T)TYc6k)-r3gb%C|T8nbp$8k2!!HwcZ zb7Q%2oR`byaydU2<5qL)xx2XS+zxIhw~O1&?cw%vk8)3PPjRnvN4O8T&$z#HUvXb^ z-|-gS%`5!*yq7QFOZeG*BOl~LyvjH8VZM!D$=|?l;5YMI_%41Y|9k#9{(1gI{$>7E z{uuui{|)~gf6`{M^|cMPjj>IzO|wJ8k=HkJuiw?YBK) zd&>5V?Oodm+rMnT*ul=&O?HdDpM9Wxu-#)HYWLd9?ep!+?N``W*ssJ>#ntv}?DyKc z?OW~J?f2Vv+IQJ^+h4Gsa=0Bs96m>>qsFn=vBGhsgF3EuT;o{lxXy8tW4+^6$8C-~ zofkMqI&+=lodwQ9=L~11Q*}n29nQ7Rjn3aW?|1HTKJI+g`I_^f^IhjL=Sdgm%5qh> z7PuC=7P*>Si(RW-Yh2g5u6NzwTIagiwcT~p^`YyS>tolauFqVbyS{aO?>g=};dZ+{ z?ji1B?h$UUd!l=?dzyQedx5*zz0AGJz1F?iz1zLVz1O|Z{fPUp`-uA;_j~U5-559Fl>RI| zC%q=UDIJx*mcEs~mySz6NZ$QQ~(<>B%Od6Ya_9xIQN3*>Tn zrd%Oc%CqHwTr1C!=gISBRgTN6W*PrA#STW-1j*r7~LyD7DHQWu7u$X;2!Kpb}D4 zrCA9pOO#e6rYuzwN=j*0I+RXjrLs!7N?EO}QLa_4S2ifODYq+|m3x$Xl?Rla$}Z($ WWj_|5_{V4;xU_q%aqqb*FZ~;Xd73Z) literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..b0e7f7bd7 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 51 356 240 0 0 1280 1002 + IBFramework Version + 439.0 + IBOpenObjects + + 5 + + IBSystem Version + 8J133 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0cd65e6c00e0d716af8aedf26ac4fa7190cd1295 GIT binary patch literal 10882 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..9cca1c37057f662eb7273cef65051dd0671b96f0 GIT binary patch literal 7344 zcmdU!-Etd65QXOj@(vpp!H@#;cS%vfmEntqQevxm=QVXJ==+Pj{d0Y5((Y`YPQ|ReG8x`aab6iT(y@oaVZprkO_GreW%9 ztgn%Sbf#~fA8T~1tAXb1Y3#mMx|4R&J>7ksM(HU1q0xzctJc_#?tjpSnct*OTC?l4 z&}z*8w)JEueXq6ebRg@Gu^Zp7Q!mx}JqVq~xz~DSrMsbUE={*&d}bIlyb>i8#G zckdZ!OKjkq;6QAQmX>}Ul4IjjeXwXHy}+>+78A_{`?n!Ix*deBdskR1uLSyU0wrSX z`gFBVZIZl7pPl0>XSiT$u~CI7b1U$0++AUGH^uq(EhhGZv!PVqsr z$Ejon>%u2;cmF{h`Jux;jh5@_vjJrkW`}#`=R@j`bYo zhxdO5RZ>FRYEE z#0~Z_3Y#r32yX0-q4q<1ICedXbA^G0x5?pm8{GS1i6I`i2rhG`U*E;nb>7BnF3P2# z$qwCQrEPJrhpgwF|F3)YpUv#srRHQ(B8`fac$>&WOHL+>^ur4?|Fo-|!fDj1&lP9X zYp&4nZK_&$sae6mI?lVfvdaEqIqdaF<-G6emG~YnBM@$(UL?L@X`=fwxn62M@og_8 z_Ga=l)~~h3nXb?ro_5_toX)gZN^+k=tO7S!Y$w z!(iaUI0@vczKJ=S`(#btB?HbS)3ntC`9%_%$upyqIgy*UGv-`3867*)(I{Pr;;G&B z8XifT=6N{BcvI&+<@n}_<~Mo8>Up%tnxl%`mUV4uT7BA?^&UsJYc-!-rpu!(IQ=Fx zc_Lr8hq=>7L{MkqTX+c70X|kbZ|yf+t+}@bHx#exE_T`yY~xAoH%e7jPP8|H{Zqw6 z!IislXCC`3{nXgYcio)d@SL0>+>yaT#mAcY;kkIN^kCcb>{;Eh|BF`D{#cUu)YX*F zqxlR(FV8vYO72kvU5Dh^_c^l{Px@JPkxzYX-nZ1A+l}on?~J;$V4rZ_`k4H;-cif{ zN1($)^#Ce#0EfEIeL$agn!9p3BhULkADoSk!UO2RaFHZm9>W> z+d11D^zj)x_rK`xjHAC*y2Esi-ShD|dv)*a>V=FH>`ryj&cUTy=d)JEhB{+YkFdLQ w{42>;H{#%#bRTxcsILOsUHJ?r0CIo+|5feA^-pY literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..e4c7ba07d43f7a4acc01c7f0ed63e9fa13806abf GIT binary patch literal 6498 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..af7bfbb258d69eb70caf7842c3617e1162668df1 GIT binary patch literal 10712 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 M9aVoDzoozb51-pti~s-t literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..60da7d5eeae976b1da182f4bb2881b762a1075fb GIT binary patch literal 6212 zcmds*UvFAR5XJXpU-Bt#tVT(r*8TTbRjrlgA*z&Cm8vR_#9#-NfMp=m-_pbohlUcz zazfxkwEdkK*7p)yE|z>PwL-w|-rc>sXV09OoxlDLpM|?23lBq!-%Wm>@~MSp=uqDY zyRN4*pYu5ZNR`V@rE~Dx@6ONSPAP(a^PUBG=P*ZsjM^>Itd$njE$CG$WeQZzqR{PUN z_v5~`%^3Nfk#A|;k8|F6D}3ee&>mu+r|+2IDE>ihtUmEDj%|JApJ5#&#o;dJA*96N z#^Ow#7>YWL9$#Uf!E1514aP0{>U5v+)yY=ifzEvWUvVA9eM9IuJAY#s4cPUeVIZsr z@kN|~n2^_O*M)-f;=Da&;m#?)#CoCNocx#-uExWvv91Y5EoKm7>xSrRY;;6kgU&1X zCKla+D`Lzj&TK8tDO=AOPKnFn;KAv5vA;}QwOet&`a%7qY?jeQxsW~G)PLK(I-4P z)*Ip^e9C)#ubY&X_PQ8_0%@mkXewqg@&zl=JQF_Hq|M~3o0n*x8?4W@=d9`^54oxr zx|wTI%vI+w9)PfRHY?y?)P0RB$4XY+o$K>imA%Z4ay2b;Kk^3h4T^rm_7>Kd`xWV3 z)x1oyzU5dUw`l3CNR16KdFO+83`VXiV21`Nh8dwe|7Em$cpF7C;+;pKQgHc|gn90d zc4=2{MFUrd@(HRvf`P8?Q&8O#kuNX`BEh$90Pq}9JO?2CyDAFqWjAXGMQE~?{?VH23ci44#e&QZ$ z)ICfQP_Em382=I^$EEq(dlp4*T7;M4up*K|(Qh>Q9aGN>w?wqBkIoI_)O4??c=92B zZ_^&ii><$BjXm&7cZj4(#ht994#mh)zAeT6`KhN~-P z@E&y+*R&i9=azpRt4e%T)-GqqL@_pTA~;z-uPmlqoE7v;qMxYZH)Rc!b-kQdIGY(r z`A20Zn#?B*l*y=5Px%bbWE9`3NWICu$TOz8 zoO%8fn_1O^>As{KLdphsmO(j$q8HRHAl;%S@czU+%}aX83Oq+zo`OH(?Air>iCJZF j>Jd8E4Yw_p$|&vF`FOnQ=UcSBeD~5~ao$lnwY`4;5_Id$ literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..4fbd2d684eebafe14748acfd3d9314067dfd9bf7 GIT binary patch literal 10634 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 F{{sk2E0_QP literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c815112f63daa8433d72635d772f429a05988ce6 GIT binary patch literal 10634 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 EKL&p+B>(^b literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..44b9da5f9eb0dc93032562a5294da0ab7e618ac3 GIT binary patch literal 10634 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 CXDjvq literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..85c1567de213c5d7f3da25097397e45d4fa60604 GIT binary patch literal 6942 zcmeI1OK)366vt=XPjM4bwNwyZON78Gk*JUYq5{N*mJ z|L+`6XRZ^4AUZY+WZC!5nb(>BdCu|b&+t)r5UOw#7WzHb?+bkQ|5Vhu-Xa$HK6UQ{e`}a{3N_L7+tSN ze>$M=htIY0odTSGWxVlw7V6OI`P5D{*Bhs6g+i^f%tYn%wP-w->V@j#D?BZ{#H_2 zXe|2iQeSkVmL{P!2Y(|O<|D;F!ZXcr#Hw(q)lb7KSpyn}u1usmmD;b2!pf&=`|OpT ztv

`Xhx;$kie`)><3*Tw5lsKWiXI*p})o7=(r;_!C5KQ>LD3)O{Iz)GejgPSbC zab$?6M^K zV1n%355RFk_gp=VPJm7)4Rt@VR1fGS&(dioty(_+To_Mf1+_-FX5X_t&?&6qSoDS7 zF2bH>jEt6iR%7}%*H~hNM*v~~xUfQNaRFagtA8TjRfR|9_mN~5KCrPq%Kab~(rP!X z!|ee1b24^;+8D3!giQU(d1gAx&;s#>|D$$0)XHe?ND^=_dewi%Y~i*sYcKPz?|R+c zo*oHZ=SlMuA1P`KV+Auj-vUARbVDD<{8A?)Qn4pFBbK<3r%16Bk3F`?8a)F~k9g!# z$=l$szZZp^%CjgeoV*i{L40K=pTT~)g^#RnS6u84S;qwL3|3P;$=clm_ws^c!xs+^ z)qNx$IC}WfnD2tW-AQAqXi63c-k$#xp@^GNCMn)FqBEMDsI(Ne$=81aefJy*b#A#= zGs!58leN^gDTnQGSW+UJKE|WhOui`HjNJ!#P2tpf$V~Hy=HC0?tySif4`sjHxydQh zUHcnl|D8VMw)opO#iHv&%g>K3ca9lujuUwM9n>Q#bp`tK%D_mpGf|15>2AZQb47&L zl1Qu5ardpl@A@{PadRMw^tMtNY`+%gOYIVGcF|h%^Bu@H=5hXUcJGR}=R6nci%H_p z>N%VK{3c#ULU(0%M34sitC*L{${q>Vlw*-Wc?IhS)8tf1N;>^mJ>B|7>wKbF+~iyz z;GZlL{c4J#JmmX!8Uf#)-;f_}4`Z+#R{!8Pp`LrVA2+NGG|38Psux|Ft#O0B5VG90 z<7vo(JFV$B^r2i9eJtN$*1o9*PSGCP5J%6|`qtKU#^xp+;7J4N*5*J)5W z+!K#c*QpXGN#uGn6_4Iq2Cthd(O$jwIue;H^&l$!|12t9t@*^7H+3iM7aXWjP1TN- zDz8!HyK;w_%htV0&mHl^q)W9lW_8Z7|EtjtqDWrJtF6-Kr|{|+@f@VRh7K1VJ;6U# z2KxUc?xfL&c2@N|6tB>q>%*Ebn}V)Qy=c>^xUmLKmIooEj+jCUkBK` Wj(}M%HLsdJQ)M00f78lut^6+q*qg@y literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..53fa5b31973f6c55c9bc07b504987781350fe54f GIT binary patch literal 6415 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 T(jTXOTT;)n^mEUzcgBAJl~#x8 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0e8d6a6ae40560056863267417ab47cac563c677 GIT binary patch literal 10700 zcma)i2YgfI_x^d`H)%85o6)SM$-OKE8Eq-Ef))@#p^TP2O4{C*K$?^!1!}FnpdfAq zaSx_|h#-Qf-~il;C_@B9L_x%XiW3p}oqKO62>idFfA1&B9q%~rInO!gIqz+GZ6usX z=H~7K0u&hNKo4n<4yI8pLh*`;;i+D@of!pB@xDy_MC*dhr083ywJO`^`4LlF)VH3OwZ@~`O3H#x5I0(n!JNO=ch7<57 z`~|1r49>Bd=!l+}h@Uhgtw?*4PkNGGxO-JVREJXUQsvk=5h{@*;VK zY$UIdt>gppAvs9CB!|fn@-6v+{7il&zmY%5KU7Ec)JijGCKYHFZBIMUT$)D<=+*RE z+K&#RgXu6jmX4z`t)kU*I=zu{I)mOqZ>6*7o%CM%0G&@CrjOAl=~DVMT|=Lz>*>q% z75XZDi@r@iqTA`m^b@*+?xdg6J@j*WfPO=d(r@W8`V;+`{z8AHf6H8V03 zv(ux@!JNu-=3^4xZN{3j%UNsIon6TWvN7ZY3$saVGK;Vp@)C=(7^`JdSe(_d>Fgo) zBHO@TVlT5-Xp(JYo7k)DHTF7tgKcJ8*jDx?dyBoz-hpq}yX-yoKKp=u$hNVM*e7fk z+cT_1v@Q}kDA>UY8ITDA*uV}Ba6%TizzrVof)BF64>=HkAc!DAGiVMipe3||%iwZo z4Q=2GXbbJ2J#>Iv6^4T}NDdE0>SP3_x45LJqC!q2!sX#eI9cC27L6igV{r|%y(6JS zLQZI{M;Dh23Rfl&$cZtl{Sv?>{2 zR>r0!hPS9t=2HgL#6V9{uGFctUU-#Sfi{`@0{PDqux}hCoED2u#y)*x(d58TG*m6e zN8xz#^dvSMUR*LX7EAJ-{0#q!f6aICLo*2Bhk4ozLb-wO=AXs6%UI?l$G3>#L9&MOy1UCgUGK7jO zk(0xUOYmFk*%wMz!L`s2`onc_Jq&<>Pz-}$FbsjAP{NHo$P0K4zk$!-Yxz39iND6* zImM!{&5U<~BKI2aFQFabhPjtcD~Cz9c4D2WzAg`zD6hmsRV6qgJL zmCKPb!H-G~m-j-mhNIO@m>RAHN9>S#f@?2{)x|4hPI(T`7AW`g05|Q0N|2!ns$n8d z9)?LU86tQ@AqKTD1>%r^n2Kh_l0)T0Z7f@t^347)ur{dXd-M?8CEsO&3HJBHe%sE?&KEZE|`kqRG}c#(2eTh z25ekXSFTKw;J0z$EBS+(wr_;1pN2-b32p`sGhimS@(iBI1#aVZo{o-DR9hR7#le00 zinXCcQZA2$;+0|&1t=5pisg}|;x*BVP;H_vf?%o?2gef0l8Sh^HYrZcYoC8{pMct@ zw13~e;?#onxfeI^r6%m(yY%9RS*W3KL{?y#7_5q-sN$TI#n)b zVnb&ji*?#0~sFW4ynrng6N!hCoP9)~B; ztq=(+npDqpa}RgnnEh+e>&pZij*jXNSE!inUlEIHUbGMvErvy~7z)w$Vi0UII_UGDK$~3an0|NIDkVH(h8=SHLq%;Tc#7&%&y6jfW$C5S)r0;;{%~ zQn`U6HKDmoa7|T$bayfIU%7{=w-Npq+}CDX3ok5&7hs*T9yIYKybu+IcblB@Vo%=y zFQKQujGn#`{jwv^OsY|msW09ER z*rn*`>N)BRoxC;{Phu20t36a5zl^u#EqHS-@(y;Lf)L?qfWf<97wpEFK7~E-8SI69 zsOggM4Kn^HD8Zmmr2?&4(O>}HlDD!MJSf6|x{7dR=-PM)<4U_;u}Gz++yn5%BKQId zvA2>@cEgu&2)=@^ae~8e1ipcz@GU~_tkCMOGK~UbWg#WCp$b`%8>wC-R;}W+4R0-^ z@yq!Y!%ONhDAbHaXey9UJM4rXaC{g12*=ftM@$SS&8fx!3`nry$omy1xI z!t;gt6@Jr%;_Z1mWe&u6YWOCFo}J>PGDWXkI6K}yaC!-xhJO`=tFcz;(KjqdDpi~- zc~^=4%7rQb0fNkr5PBZco4P1&(R6`Aq>!BqCnK_Qe^k@iE=)Wlam8au8c8Px$mN~* zWFF!4b2Sdj#7rzuMXWH9WMH#NB$EilhKGYVNfxqBH?${S;)C|6XC*ygZc<%qa9pmE z<8lZ?~F%RK8%+dY{ZVyeiHA? z5m8D`P*RkOAmv9XV-TLwSk9A5!VOU+KUB7pLaT+PZSgZtd&hk#;COX1q2kJs29U zm?$bPCL-1`&njHv5>&yiq~fNm@vpe>N$*f}P^}zI)n-L? zSg{~?LLL{vak8}51H(w(>S`3hH9=DM&q~>J-=($h6He4dLiL(xsz7bE2Nz2|AQr1t z@Yoc#vAJQKmY78?GYeLM2xg<^cx%Y>i^=n3t&*)AO$AY(u$rYp@p_DZ=PtA^>&W^= zWIcuml;PYw3GLwq^3qcB5_ws3tp7nkjW*%*^O9Dia7mlF3+9%`N!|-r|zMay%TX z3|I6=G9SmDm~qZ)qYitvNgo;Qu3DyPSk#DG1Mnn|<1vLt1+U`_{>`3w^%*`@c$YV~ z8vp=nlG1nxcLplLA#nnbYM)I$kKd6)u$O$z6UgCo&avk+xEU zX}A<{&OnS3@*ZU>aBf84NC=!p6*wL95iJ^U^13J_{eJ_8rYXRoMsn&x;P9JO%iY8q z_*C9JCS>8ZLKt@{V_2eBV*OBq94UfVB9`r8IElYWysJD556K=Mmuql?V4yqzAr|j` zo?B2mF;FM2?s+7BGY?P~byE-ZQXkExewsrAGzcy#Qi(Q$GTNNBpe<=DdKtYOBD4*? zg0`jY)G|T~U24fWFqD|A;!(S&&dO5{T1YERVU)^w$A^q{G=XG3vkOrue< z991rq{-Nng|E4xdAi&!rN>w*Oa;Mx-hf%?=(g7uwCPGtXg<=XBd=m0zhA}teW)tLJdWKziUCQHI&{88hFA}PS|rekG)yN!6`c$dX@nHe z8ni=H+0P=+!aO>K#%Y2kv2d}$ajLNNUa>fCW@(!-_})MTB<=-;m1;|=gcbIs1RX@# zpsK2boK&_*F+fHWwFrQy0?J;o=}Lb-Pu0RB{2~6ZU^ieT^OOdIdWF~9@VZF5Zd9(* zukLqjRvzS8Duu{4xF{e-xQmhx6>Kgl~F}621lDydr_#NAFJ+2~Y6HwIachL_T{# zg^(&^>4Rz+n}=oW**lLYcLwH)x$V2=s(;EuZ9$LICzjABv?bxbDXQ&Km|BQAxIc!{ zC8{A+9S$$8Vl$%=`Zf;Q4ki|D2lrP30Z+FaYUy_B-v zKnL7{G2%^CSt~H_m@rH{b1qDD%q>u{)dhEi^1J>&c7*5(R8~&~Ep(e2CYGRzmgCM2 zT&-wD!)Uh)Vm_te*yCs9X?Hc zyYbn%9d-JJvcUnl^h3+eEBK@15qW|DJ zPva_k@YnfPzL{^ql`Yu82r44Rn5x&3i5R{r)o6;FG)Df0s(YqqX^UAJOINh-DK5c{ zn|P|aNTdi7zIMT|dG4Z2XpUS|**R5z675Td{ik}-#Ke~r|LgH3%*8Cs3S}&VWvUCI z{2l%lf1AInETv2coHY{W0<==ojM{9t=j6KdgOr_E7IUMWn2W!^ka_rfeB%Xbgk0ul zIXHg+XYYxs|A>Fcx8dB&ap=@~E9Hdx!T>>}l>BJW3+^{C&M^}u%M%=No(XRAwqz*_MF#pX&!eBzTG$VcJgxO>c8n;0u5IZ#6 z6_Qbllsy=2#2z>zj+3k8K4cS4%z!o$IClrfp=#7HNghqv2koXD`OK_h?TPnR>@>m#j5$Id=LMO@8$dWe*QT> zz`x)J`ImeL;zKi?sJ_<|FHe&o&|H$fO$=41=^YutXtDMrk;0R&$_J^{OWtXeo&08Y7j|7a(5l- zrw4AQ4@6C0i#i&NM9+yfv!SN(tsmO%Z+ss(ge!0Tg80^N4!-y6gm$b!i!MOjtwk#s zQH!skb!VbIJEIkpcY<@#x&`=tFs0Fl)!Er2>``(Ldz?MNo@7t41#BT(#1^w9Y$>^$ zEn~~s3ib?J$)07a*mG<(Tf?4bYuO8I9Y4aq!Htxo{9AsEf5*S)Kky&JUVN?I7V_}z?ErjrIvlBS6|JRH>1O;-f}a?{z~Eu6ST8mRffZ)c*eo^=7yL4N z2jAp>#`dw#*%$0f_7ywKjmXlx~{t3 zx_-J5x(T|3?nd2hx;eT#bn|qN>XzwN>0Z=*qT8w4t=ps9tJ|+TpgX8Lr2ATTM0Zqo zO!vL+N4-h!(Kpk#(f8Mv=*Q~E>nG^T^_BW6{Y3pF{k{5y`c?Y%`q%aE>bL9n>%Y-| ztN%{_gZ@YT&-xSk-}Haz|4cKaInuJy+-csl?6ekXd1)QfI;C|<>y}oS)+6nzv@vP- zrmacamUbkaqiScRUa^o|`)y8$k z^~Sf2+l;%62aI1C4;#NR9y6XcrJ2koyXi7h2UDS`pJ}*hq-nHitZBSyf~ne+G|e#G zZklg;$n=P5k!hJ}lj$|n8>TI$H%)s?hfPOK$4n;bVUaD>mat{ArN$DoOt&;x8Z9?lmRp{;yl(l>@{#3Z%MQyf%cqvl zEc+}!TK=${w4Ab>w)(6stnID2)_iM$wX?OGwb0tvI>tKAT4oJdE37wKXIbyFK5kuR zU1Qx~ecSqxb&vJ1^-P8%L(FKMk)Lr@M!$@T3^}7ZBb+fgqb4JkF(o6BQI|0-qdub{ zqcP*=jK?#c%h;dsbH=GmZ)V5L5t)h1do!11uFHHq^X<%cGvCkrFmrF_q0GNB|IYj; z^Iri3D(HkX!GO+Z5i*39!ev5h;R>Oh&_T!(ItrbHEuQ;|kwmG&tK64y&{NniA$($L^Y-ej{zO#q3uXB{M z+!=PxaL#o;;C#^eu=7#p2ItGpjm}q{uQ@k6w>sZ)ev#$K%F1$Qd9$*!a!d5q<#6S=+PDf_SG$J0M!H73#=6G4Cb-I7 zm98q+WLJ$V=9=QV%eBu z-tv6p`NXr+v)l89=aA=X&k@f*UcJ}iZRKs}z0NzpTkIX|9qKLh%HC>k*gM(Fy)(VH zdS`p*c%SsH^gicZ<9*fpfp?qtQ}03V5g+yGd}%&|&*(GztiD#hF}`uWGGEA7;gfxn zd=X#Nm+-Cgz2$qy_nz-V-)`R_-`Bn)zT>_>eg9t#kV3 z^vk&}XFyJI&fuJ(Ib(97IkB86IXC3Y$ay?xMb7q|6B|AUlu~=ouIh zs0>sG!huL28mJB29k@4ee_&oYS z4Z+6X&A~arr-BQEi-Svp%YrL{D}$?otAo!6UkI)bZV0{++!Ndz+#fs;JQzF_{5p6f zcrY-YGsHZWlihcZ$2kJ>p(* zzj#1AC>|2O7LSNW#be_4;*a7_;xFQ_;_u?0;z{w8cv?Io5s689DP1y3c4?qANE#xQ zNW-KN(kN++G)^j$LQ;h!OVv_Xnk>~wF=>jFkm{sqQoYn5HA**2Go)LjS<-FN?b4mn z-O|0%{n9*XzVwjvi1e8Bg!GiOP+BZ4m6k~>q?OVtX|?pc^n$cr+916lZI-r5A4=P# g?b2t`UTME{SUQHg#`s6EgjW98KJEAHxAfQl0c)#G7ytkO literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..7a5a38459fa813dc813331b9d9272159f1e953ce GIT binary patch literal 7170 zcmdU!-HsbY5QY0XPvNXUh6pVLE)gQDWiM7pAGK!8CSe}dx?YBrMmAv@ z#u^)I=A3Hmkyd&TPQu5!`XbE2>+rKi7y2G_#!htojo!?B96svI zu0s=Nf7uy7314gF2L&{J5~cC^CRCx;_p4~pT)(ic77CSYnQ0X3D~<7eqq~fH{y+#! zbZ;E7Sw|!rJv-5T5c)M@xz;lv3mQoD+AH0w!$V#Fq~{u~$@;hP_dr)up~y2{6*)6W zYP9Z1IDpFpS4U2*)mPyU{j%?g10usH3?;d~yH0az zjbWSTZDPFed#q8c{c5WPR=&`zCXTQ4S!piOg-oP_;Y6z;1DneGeJWYReIpIf0efd# zKfZ}N;lZ1z6&bP7uT`{np}Afg~@wH@vYRWe3XO&$Uj4vhOuPE(0 z=G{U%%r%$jG|si=pwU!XppEtTQ203t`_LGKPwt|b90NaRz^9Ql4vG4)EW43yGkp^w zMUU2pktHwV?tTlY084Ep6Zj2$*0+u0#QLwg7 z1FeK^AOR~bcQOy&LynQcw?jSKY@eQn-}I{Vw%ta=KE}h&b4JO3xIS6c#f9wieO7NH znpXz9E6If?2GRhIrH-H*2o5z))deLiMXDo~dTi9-8vJDTWgMmg4YXw?>cLdcnst$7 zTfq?h(GMwoSSE?sZ=6BDiinoskTYp)X5Hnx+%w?8L+bLw7UN#XPOJcJvm^HU+FtZ1 zxZ}|-pMyi-rPjl|>Pf|vUEwvEN_n(;2?OZLwdC3JZGSU8rjxunI!HVj6u zNj@(W%ef-M_hV^EoSSFvd(=66s+rFe>GWdmzQ_>zRWgf=KoXe@yU?}fuIWm5-6uIB zrec@Gj44msS~?=oid;6ol4HBNWfnlY=enPI>ayAOeoT!9Q4UHl2c4J^ZlvXSi<3KH zb1j^ZD#h{9CT7um6uk*MW;Vt@Sd;Zmo^T~^6cN-u#|FGh?7<1CADhPhr0cQF4zS27 zW*1RZiVNQF#hb|b#5~c-PJ@V~ZYN*ndcV>*HG&8~zW0XGB31O{8)sFnr&(kCgU2z*lAB@rUqzOOmh3NcyqUk6#Eu@0Hrv=TUc2`zskw zmew^zJp0G&k+XNQhtCB|>9zl)(ffLzkkKXoyNY-Jd@G&gQv>Kqz=YZc@1#>XpU1VO zvd^MI_~eEi?Ca=pPQ+5bXpOyFX*v}rpICZLaOIyC&QtQqkt;D#lFznw&q)7U6$TA# z#&(}uapJ>H9Q!xQQ%(SvveW0QyZ;8bGu_pgF074D+OIk4L5%yH+vNX}o + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d31704664714e4cf26e714745c86b2a4fa1dddc8 GIT binary patch literal 6450 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 + + + + IBDocumentLocation + 531 94 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..00b088deefe357bbd8b8ecb196628b870b2e1913 GIT binary patch literal 10724 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 + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..aeb4628f8848d1b5d132b2d8fb75b92706c1905c GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..26b2e8affa01d31ba0c939981a08e61da60cc167 GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 528 61 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..36947a7baefd002f3c19113796b1c9bffc5eb7d3 GIT binary patch literal 10634 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 D8Fwp~ literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..2c989294dd85e83ffb44c00a75fdc2ee2e8b05eb GIT binary patch literal 7056 zcmdUz-HsbY5QY0XPcc~$0TBv+mk5Pbb|pg4CIS(ZORw#99K2)8W5?u8c>&%bS0v}_ zvqg{X(e4syj3Ub(Pybe(sybEO|GZ0Iru(T%XKAkAp?)v*8K*j}^u9<-wY*N#G*a70 zE$8Wte(9g6wbs9}#yn8leXVpS9i@AE`zp=SMfyXnb3LoAwj;fNuP-CNPM>s+{${KF zD1E1u@AM$)4_P*TU#3B7^gPcR)%u5ajZhd!mzi48exNp<8}-ua@s$u5t8bLCS!E>G znmblM2>qF{Txkx-f(AQ!?WOvfbXV`cYu;LGvi_U=ztY=OC^E;Zvd>IAt+nn@GPC|% z(mWKJ+o)PIa18C18gZUiTxEH7^+OWuHPJ6Nt+X?H@ekRp?NWPVSM)*yWSeAMn0GII zd$nWH&TGx(ON%Q#1G|ydYU99Ki}bgCYaw7MYrUgg{~j=vK19G;8iO+tFuSto%d96l zZ}dgCN>PDkjgXmZEWYttUvwK}oX7I)>#bsBh%Dx#bHUVzPtvR0JJBz`z_aZ9D(}o} zb~+S7_P8#6tMu8wo=ZG|kiGqLNq9RCA7y{8rR`iR5DU|c_U-)Kh~hKhv-=1lr9BTB z@$T?iOZk`ZY;x4m=aH<3UBlyx&CCmj@KTV$KOFOTV8M8yo~76YA1)qg&e*6246%h< zR+`D%Ajc$rHPnAR4p06x?=jLFQ83JNma;1xb)4G@KfwmIK5z-~58K1{1ASQm9I@b~ zTJYV6dV8ElV9!(?;6kk@iu}2;>p+ZJ<%|^iu7N2Dd}nXDw+Kl8W3JQrSk%QsgvxkZYAC``9gE zz6o7jFYVW)VHu-v7@JUO1#dZO8`S~SG-f606u#{`6-FY?LQYN!9~v$FWy)GI?J^Tp z0Vi*GEKb%~CGI4sx~PUZJC{?|(@y4a1~B8tX`b2653o3u+9a>k4{txpI}EkwtR?NS z;^tg>aMtY$-A9>Yhw_tBEw`}-XP;lmZmv=3Z{H|9SA>%}U9~zd<8@KZcJsCIh8gfc zk12cfccwqlUK`mnPLL7HZLJ?D4%)TD&(a*(EOSInw_Y)~A5S^Ww?(^|;5yl#Np_!Y zsAyp9KzlcX_AB{gVQ%~SW-RW?e#u^6?yO3*ZqG3GzJDryvU?-cSDb9iavPu7o`LkC zL09$CFZO5h`GV`2B$@WcC{NRq)?R+=Cl>IW;C^Rf>{5KJ&HPUk@37bQxqW-QZPed6 z=(kqYTBTD-vatP_dySaxhUb8Eiz1d^>vG4Ua-o7Qb-Kl=Li~8?b zZ2!I~?$){UqMiT^?#HHjCj;O??8aSi*_9JVEp~PNz=@RG8{eqJ`0o3(D&Gt-x1Dji zZW-A>ZZJ5-vX@VmoMLa6Z`)Pke$MT>Q{tZANR<5Uy?nx@kGnn2TjQK*>_4um0v9S9 zq@QM72Ku*uJLVhiI^)ofN4=1QP0Oc$l4gBnj2E*0TDPU}zU$YxUyZ!mj{6gh^&QE6 Jc3zdr^F0HfqH6#E literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..6da4ab11da41b3eba731161f1225a4d005b8e755 GIT binary patch literal 6565 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..dc2fbf34b20611c7a4057cbb3e394fb0d5f4cd58 GIT binary patch literal 10720 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..32c75670bc6277f736e5fb06aaa2d9c37458ce56 GIT binary patch literal 7076 zcmdU!+izP%5XSdBAfEaM0-jwbFyI8y>0kbr^+{aIW5ozB{$PUA2GEn~~py&uXKW zHul?E?{4^B>po~f&Yx^IKHr8i%=Fzgea8BQZZly}N|TX#(Y;h3-wQpZ*T;9H|3J_B zhRob>tTcC^=iu{~AvxC^a0Lr?^tGpYHVY5ceyw?x)@1#6_Pe9jP#7}DS7o1(cB-^) zPcpOqMAG~yEbExMX5h%LrAFC)#eucTns%&!W}NF#?{2XpDVF-p&ZnBo?hAX~*RM{f ziuY>uG@?}N()##xX;|rkQNpD%Ik72L8|$;ulSkn@lMKBNwG%s|PfufJYWuFYRwzEz zlYAeSaIRTXNwPE?+P9UVWJF%{<3#Y3k?Am(4)N3%rVBoFW%A9WI|yM#S9)VXrR)vc z+WWxyo!zW8)||5y&O)mAMC)-TI$fRGWf)rzdr#GOrWR{&3ll&8bsBcU6Cs3!yRU(X zd%_oz@P5{ho(t(d(l_3QwSw<$A9$7{VkeUjbk3>!#}nDkdY{0))7%?eH9A?bYjBqx zW3yds)GT;=_6lNnlw$-|@SJ0RX*Pmi&h(15={&QLtYFI-c~7+LQZ{y}6Bx?=OFi>> zk8O{>TKGfH=1he<{=IK~iPPYOv0m`&sh$%bh!7yk3NwouaAm3I1Nn3(ys#0R^E`ZM zV||oc)Kon)?FPdQjCrsQG-DTfVF&bJFL>Pb059JSzSvPqr@i_<*J`j=sTG{#-9p)CGlq_Fj(F4`y+C+)G)zG*(N^Jp?}%tbim`$YVQ8881SMDm;o_^ruFjaH#wXTuex_mKdDZ3;` z^Q;U;z@K0kKUH!qW_T`}vZ>c*#dDplJl(RVZgHR%yTj^zNdymoaK3-3{xkLX-gw!y zStOo#Z5bBxuZyL5$3SD-^oS25iR_-of(`sf&hNOwfc+IZuBCG*{J3q5J(40HoE(`2 zNs~;DJoW;6JGb#YvhkjUaz1ZAn$uZGR`Nxnir**Do;VxND8=WgX*RSdzb(thLzl7= zu=bmR-zc2-OPv*H59I-sqUy)u6FKV67zu4`i!7j?kH%9tS)JCl@L%s0o~Mx;{C^N{ za*0Q#kt`(Lpg}q2EM!Pzu-uUoD<5z0YW!m%mM)7oD_m$H{$? zj4x#!o`GTe+}hg80}i!5c_-DDnBC?$gE6w?H3y#ORfCw9&eZSOE)@XJ1~+r)?HJh1 zTqE1ES3BsFx#V6LeKbd4Pacrx`J7ExKI&1#YZdF`#GvzeYmz^=%21QZ?~?nK*8fS-kc z-&o1x{XU+Lj`??cx3A+`R{UJ7>Gzae%7dG`!X^)GGcF|wqh)g+O?IqW8hNX?2k2p-h8$WLRH%PY6}uH0|N#;q_Mc6MTC zOuUGh-uikNwId=QnODL)##r`|eKP_dtn6EU;1%95Dc)Eeag9wCRHw)W z^LuHXU5R>VU*1_Us!I`Ppw~ndCaTcxbzVX8JYg#NxD7jJd$lU!kmqxyR&iw7v9Uj- z;Vi@bcS(D$c3Znq)qX6?Ap0bG$C_!pGv|zOZ2z2)kNW={dF + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b2f8b50abe452bdb19173eb17458f1da6d65a777 GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..7c8b8eae513b3a25a6d325791888542e21555681 GIT binary patch literal 6922 zcmeI1T~k|C6o&W3zUpPw8)vKsP^%rqK#R?k(lkLv85A669H*Bl2{dDxFeEAR=hf$3 zD<}Je&<-8h;Dy7SbF#nJe%JTnufM~$;Xx?Eei-sT4qbaXmg)Fy+WW(pT1{|s@LZipwMNk zWB7~>%?WF}j0>ed4bL%agsu?LiN5zKW23M{`*+q&*i-wT+wX!_4b0r^dcqAKbBuP@Unm7|zkny{*7Mpyx<9BhxzRlR8Z!12F>v1z~@T*3DgLc!} zkLWpw2lTBo`kdanT2l?G@>yry6hI+HjVW@DWNiVlCzoOdwcx)IpRmI&d=RqV*i4sVr@4rq7`NaVJgM2-@*WwR6t@sn|XK`(gpLOO+Lv!**h)F8lB1kq9_9rH#ufcFskyW=SXUMOx zO*UrCO10W}fD<^-Lm%4Aa2daEXLM*uKMv_1^6T6zSkwBF^*S{>HDInhhWi6~gf@?M z7@3!lRctff1*0PDn$HlQ$Kh+6>$BV}=)6?_mYY=tHY> z-AkTOeo^tG^l*rsNIq58ykj1=vZXsoVOZ%Q1^V^{B_PB9|FI6-s+4Vd? z{z+c5+bhp4x6xna-ijz^-X`87@_$NJpxiB&U){F2{Lo_N zGP12AB&0nHO?kJ*E46|6Dfy%FOy!XWZ_QSeYc`mn+~zS^O@rJ>IZn*DF63RF`EAF2=uWxvem0KmSY_v;MSmB?1!y+Gvj*kj!yZp9?iXKV zqj48ZT^_t%RaUTmH3?3Yq$JBLP?#zb^{JFd78)iu8x@&oQHxN{n@i^BslSR$BU*e z{M%eayMr(BoTG~Qz4#+iuqImp;)}JJgN&Fb`bybV?RUln{KjIX$TPHDym@!^%`4Mh z8B#Q=3XdxJ@8@q8t2kvnTa_evcA=rFQ;&98d-AGN^;G301EK)0z$@=NGXARWQ$}h| zvH#a%GUpw!>PGtCJS4#XWZN|3pw{FrSyazq9*+h<0F&Br_i8^qSMx-*Q<+OMf`cX(*7$ljV|zP(CbzGeAV6; p@O_k|G?eW;I{X5=Gzs@D4)mC>{BK8@t5&sn#jw1d8v4xE{sT;BJ#hd4 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..7a79f4dc117e0ee56e5dd32a6c98abab06f7ad6c GIT binary patch literal 6574 zcma)A33wD$wm!G2m#SW?x(XtzEt@PMbT$$QTNVNV(!_KUwm|4~DoLA8cjzS{gy0ng zS3rGmg(?#DzIk)d_jv^Lyzpwcc~jIsf_3 zxuBh-Y*nI*N8uqBjD#yj#Um|?M@4F{R08o> zjo|e9<}2+=U4C+)3&_UZuK@@A@{)oyeOR48?x*CCunnwWgLKG-$uJG3Lq5!gg|HkV zkbre?6;QYu*26V$Eo^{WVF&DlJK!$pf_vdU_ygPzhv3if1Uw1H;3YT-r{GQa5I%yB z;lJT?_zM0B-@w1%Cmj1T{6dVxM(ji;gUDdGj|?G0$w)GRq>`Cr7AYdL$y~C4EF?a% z2;VLyOUMeMkb1I;L`f@YC!J&+xteSwo5*Hz8@ZkAAUnxjE#F!b5;Ta2KC0@qHI2ji+hJ=`@Odc~0-e;yWGnkpo zEGC~RU<#QcW;RpI%wgs-CCmb5AyZyCDx3&~-WOb82M0Jo01;dufeZs+Af&)0FbD?2 z5Eu%>U^rX~Znz9az(^PcqhSnO4r5^)jE4!33KJm>CV@wb(Lz05RsK*y!Ke-L`tkz- zB^C?T21CJkdtoFT#&|}edPECD{#Z7$o=eG7wiF^qC-nb+s_H!Irpa<4BrOnr0l zl&XwALA5?XuWrHXs|upxkg_Nku8XwAszwD=ed>g|8AvnrPE(~z;a$=LU0KQn_V+We zIEogwMWRh8QydA$OZ{PggA!eW^C_$2IIzm=E009tG)yQp(dyX%?MM7tkuY zoCe;2GPnZD!3PznsS-S}2o}QpMrNuzC$lrv-7z^U)jc_@v-3^Z z2-m^&a0A?kAl(Ev!zTP~hAnu!1-8OAjD;`Y$E?P4ygj5KfJlkB5{|3D=ZAxsD@qLC z=7)j}VKt*LJX)xbz_H-EWYTgmgh}L{yDPQF$o>nS>)H;$!EQJR52*fNgnuOo5h#4xmy;JK`h)N%O!S8^(GO!UswXC^}rye?@Mo8)CNcUu?y3;c}Do-+Vr{HytN|dMIY4}g1 z$}>r#{1-e6&%qHm3`gMwcu@;efj`jH5RD|lb%l{oL`~`nOmgiS0mB4uiA3XAfqJ1s z-00;rm5!n#shdu68B}@*vjECY!praqYI+rp!)wq3ClF>|aE*c|l_FRW>NS>)$S(t+ zqv;rty97;GkO&0p{BxpytSJ)kc-*B!bQUATqJ7!w$jNe7jrO) zl3dJ9@1tU7`u{;iBES)1(5a|VDiDBHx3AnSz9|4Xy4^m-9(m zr^K|0-68J2Ft%mw8h;uYSdk@J+=n6<-Z_(G%xR4g9olILW9%$6^ zffSQDU1W}$Jm{M4yat!v?dW4l$h^H|9+|JF8I}osoSIb2F=fu*>BCEjcQ5hwCK&3| z2lS9KtPw#{t_8=}=#MIOCE-}y9}XxyovX`MkjidSNvc$XF7f&*V@kA0srM&B@mR8q zVvDL3Dy{tBO^q-znWx$*me#MU^@l?3dS{D`-fz7=iA`iVT8Hf;Sw^bKa?IfhT1iWP zjnn=lr|UFMdwC@ELY>f))77;^C3JcYb|0A;ze#A)KpOFPC0R~FNa*H1LbuRzdIkQ< zXsJM?bNIJ${VZe^a*D%lA|lAx-KsolMeewfO)YrVIHfTqjI4PSP{i^NQ4883oyN+ zQ+3I!2<;}c|B9Xr8J_e{v;Ht&gD`JEn5z-yMZX5~4M~`9)?i+&!n{O-IWrUcxg^Y! z{~s`K(O}+2He3YrG7aXXbdic}M381$h9|>Uv`vX?41LPoifE1c}G#FOf11wkin+kP>>buiE^DsyBcjfp|j5pYyD@s_sQRV%s zRr$U#$sTV}g;pD}VyF+aX=nphx0SSp*3(96b+xR<VuAdd^M=W^}_I2ysEcTck9iCLT z*5{>rGSKpztjV37OOrA=S)Db);Ev3+EKf#mhB6^D7t{CrO{Z?ntK@hWIj&{~cHl|q zmF5=pE2yeX+X>LeoggQ>$w@sEWUY%`n7{~OZx?QLJ7l81G^F=kWofoDc5-HS(r!lRcP)`KhXfJ5 z7ylxvYE+D4wFke={kB9rSxjLo?b(*r5or* zdL6x<-av1pH_@BvCfY2Bf-DGvRTv;Rgn@!2aDqi}3cTPFi~{a?AhOIn@a|U0tzMV* z^Qld^r*s?q8>N+ZYA%LuW*}g zI69Gy8*(*Fh`EZ{$ZTi2m_ITvGOsfqGk<5kWxi*AV18tNX3nvMWmzL@W_i}i+F2(n zvJyLhO<@PIBiJ<7!)CDa*$Q?!+sHPvYuOF#4t5WFfIY|_Vjp3jVqao=*tglw*e}?> zvtO}av){1avHxPv8d40S4U-HxhAP8KL(tG4O_#eZ!hVKnO7|t4gHk>mOBWpAm2N>PP5ynx*F~+gRbmI);EMtMO$XINgYn*3X zU~Dw*GCpB^%lNg)VH#~JHhE1|Cci0UikqlulWB`-t7)5QyJ@HCF4O&{znC63J!yK{ zbky{Y=@ZizrgLV=Jk&heoNk_Bo?|XIuP`^7BjyhCcJm$P1Lni#$IU0rA927joPjfO z9B1Kd+&FFmH<6pfdAJNNi}P|3?iy|jx0Bn?-N)U}9pnyi4{{H2k8n?LPjatvuXFEm zf8{>szU2PFea)MACol6ucn_b;7x7o{HN2k>@Cx6+2l*DhlfRMQ#^1&7=DYa&`9Jc{ z@z3)w@W=R<`7`{N{8#+f{ErrcWuRrGCDk&;GTTyaQ7jS5&6drUTP)iw+by?Qc32Ku z9=1GcdCc;-a6}EcYTH87swXL^ZYujkM-nPlM z#kSRUt8Ir}v=6qAv5&Qnw`ba?+4Jp->?`d}_SN={_AT~1?A`VQ_NVMm+n=!?v-jA) zw4Zgj9Wxzej&etZqsp<^k#Mv*+8rH^wT^WT>e%Uc#c|xx<2dPf-SMX5EyqWWPaK~* zzHp{E$2!M5Q=OBXxy}M-k+alU;jDK?oa>y|IX64^IUjaD>U_-kg!3uqJI?o7@VW4<$cmykT$~_g ziv{8Wak02mtQJ>@E5%x|POKN3#AY!f-YDKG?h@}3_lpO_2gHZPXT>ApQSn9bCGi#U zxY#4UEq*BeQ~bdtxCXi0u3T54Yo#mb3cId$UGLiJ+Tl9ndc<|i^|I?#*K4j5u2Zfz zT&G=cyWVxZ@A{kTOV@W2FIgqKDk&xo$^)k)$%p+2KhSq2Kgp=le|UVD&H#qPQG2poUcOu2BX`RO + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..13cdb318f106dbe76d578781b2ddfdc1451489ae GIT binary patch literal 10776 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..fd3ec529c3273ad57b390d7ea50a2ad710d86c76 GIT binary patch literal 6902 zcmds+OLH4V6op&cZ1@Xf7a<`?li)`I`WPth`q z?6RVY$NBD^R?kR^F_4J^<&rehJ=5Ly+;h*p-TwWL@NT#jvTzv2`tIrbRDXjo3Ul30 z!c;A1p$L7o_0`f1=lZ7qv06vE8t9qZYP+S8u7&+@U3c$=VK@pWY8~r0Yqag_{$qW3 z^8N5;;{WT;kb&(+57LcO&5 z^O@`)sIPCx%nip=ERcV$;6uk6CJ*z}wFa($lIT=={&&*$pL z)AaK$e9$U8KdT>m2H_pGX@#9P^m{#gSk0$(R&!uqY2(iIGMq+Isf&NW4q6)tgm-v{q;k}i-M;oJofqOKQM_0P`I0tE3#5*b4 ziB{uSx$3Tj3GeQy^?|JhT_9Q=V=~oPQSJ;YbqAK%SepF@X06YUN=i9RH?fmg_fc2@ zntG~FPuDZ8d#qm9#fZ>T>pu%mtM+ZIU^f`$hD|%VaG>?M{%tE?%<}l+GP!iGri-6z zmx64g~m)hHgyNPn;vuhVTP;4!CAJQ6Y93_Qnc62S~44mQwb7qr!$c%C+OcM|8m+1` zhGK@tD=`F@&P-j1YH~O&R7~f3n;6N$H;T_+^{mGsye4*^SM#>ToWI5r^t_@39qgt0 zcHN~CKs|iTw7N2)yHVHw4a(?Tq1l(=nW5p_9qG>N;W%5u8vV+J8&w{aa$yRKCm83y z?TLl>LM=!B@G2gCB~wO!qzpSXb`_>gFT(@G+7hmIKGBs|>3AWRhv4xuwGjdTAB0^C z60$IByE2T3A61@t8Ca8l$=a?-o{?ky=WzuCW>O3GQPe`OKkl1KK|M))Vi(l|steYx zs$*4c^iWmSvlBJUc4VWaXfZWbs;#;j4_(e}gm(1vjz(waOBI-M!w>j`U6U&HwsJnZ z1gc~z*jSC$F$Q1X1CmjQQgE9zcINjDFF#MoZCBCU$!ND{t-JL!A}w95avpO~Yqw?d z7qY0nFN?8RxBIqoX+2MqK|Djlj~FMrEy}aET3h>FJ9XLA>x)+YP}WAp^*aCRR)0?{ zcOLmEQ#^NiXv|ONKPd(d#X0$>Vg@^D<&26=*fBAEQ|7X^rN-xpvNimh7F>oodSku% ztH%FO=+v=A+1iS-`{AqFTz=P%dcvNl{eEVEUlPyi%I}pRDo+jAJOk8QYfpJ4ShlG7 z-!^LAyIPU&L+YzVoxQSuQ8mgwzAX=?6-J(O!khTBnMIrI_GjDi_{FDheh%$Spr-t1 z`EC28C!St&+C+r`Dt=xZcP_DttIx_FW+X-O^LFZ!Bl9$8L-G0DCs~~C!O*giiQq&! zXGZPVQzl*fySdlVA|f_3Fr3>wgWv=VzjLO6diXgx6#{iG=N(j$r{THIgyM-3JJu8R z=@i6NIwG>t)9g>#m-%TCw!Y}Rs=agJM_R+I#_M0SDs-|P?mp7kWw;@ + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c4116cc628a85c11df80a6e1f76713d8f7dbe673 GIT binary patch literal 10634 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 ui7QRYwaRtMJmnVUU&i+;#4l82- literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..9d3a515bc5033a73cfa7831bdd08b6be42a04079 GIT binary patch literal 6912 zcmeI1T~8B16o%)TU$GF4N(_Eo8lwcbAP_JnYPc-jwp2>nbhlLgFa8bnedctS-O^wU zOzVYd+TER3Xj1&eb~5HLJC4==q(#^nB$W)p|Fy7QJ8B+Be)= z&AgUC(hq($e$QOP6}p~!jrzJnyFw^5q)Sh&Xx~s9*NNWJYW*`I(9*lyV^ex0#~Rzx zdl35Wu`D$PWYLcmZSIlY6>eS6Uo~#5Ihp^;-)DO23Pr})tgO@1N@LC2l+4UOkTmaw zW*t@23>=rQ-J9vE53ON(FX+k^?1Hf@3fAm`-qfmR-VWGvqA$8-@>aaRkd+4Ni+^0| zi*GdKNqEiHA1rgN@tOOk6>Y}8?lSoRYvUta@yt?pc!Bv{$6c$vqZPXPZRky15=OD| zvJf*boTq>0p5Ayfdki^k2RxI6i+O$SeY`Ji2bzKX(e>yr=KF@Q;W{5bWXwJ8NQgZi zJM&?a@yir-?1FW$Zmtiw;}47o7GoWDV@l+~0}r&_j~_;4hhClwNnGd?{LxsS4RQo`8SDvl5eOqLzk@W8C18a6PBfJmugAp?n zJ{rJ)4ZUv(qs;C59$2w-&wXF(W$Xv4g;q1)zwqyKjb{bsDikR6UiLenFBFLjHs|TED94DQ`GaU$Ua1ekJ`&*R+dY#{~tI_6Cr#)g*nJljE_)NX&v*?iPRuKYe zJA;xLbBZYyWrwxOz@g;k9cB7RaI5hPy)>Y!V%6C!`KLzM*&ydCfl@-t5P z^}eP@x=j8^R*crSr!>BJ><%g`*;AU8K3AA7b9>r-c1o$@PM_O+Scox=^;1h0Jen$T z#D7*QV-D++Mxwjx(N@E@x)PZy^&#s0e;1o>*MLIhn>rNdJJ6tJ)%Cl;Dpyvss;Nz8}y=AEyg{;mbw*NN9wKy_c-wXTA{-2;KK@M+G^**tan%A+I(X=A|QuQj_ z5B;7`^$iuq5UGP^_+HPm05KVkHBGKOO7@QllBTQro=D!J;*sGwjrX01ea5Olk~vz0 e4F7?IGi-Iw?y9d + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..2b1c6e30ed9cf1910d5be091ea41349cdbcd1db2 GIT binary patch literal 10691 zcmai434Bw<);}|ov`w0{w@I6=X>x<8s8~uVP(hX!WD#1HmQvQ5wzq8{BsEEaTEPJo zalr*tT#+3GL`6{$5dl#Vc|0}|S=|s9Q1L19Q2EZ>n-&DV@5}w&w|%4EGK6#5TL+72YN_=L@^LIfK7{>H3%+`uk`(u7iUP&W*NCp$MhmOz*Zia490Jp#}sDcJ) zf_vazm;v{}Ot>E&fCu4em(kr&|!vYf0SE6K|cCa;j! z$(!VDvYxz4wvg@Q6LORsBVUtm$O-Zz`I-Dm{zJ}?KdFxDshOtGR4UO7noZl$9NM1d z(Vny~?MDaE!E_iMO~+7$*3eoynchh`oks7b_t1OkgY*&lIDLXXMW3bf=n}e=uBNZk zx9EEM4xaDPEp$8mgzlyL=%;i){fr)cmT8A2f!K0D|%#Z@9AVC^fzzXS*0XDFM1DxQ3OmIUMc)$xX_@EVB1+C#~ zxCX9;HgFwW4>v$txDm3U9ptD`9Hhar%pYt}5S-59l7gx#B^nJ>27-ZDW3O;1gs=@q zG~o6M`lC@Ls+AsDTrwz79YrulM-`V8`zI*s^_b$4cro$j@+L(ct%1>61I>L)#U*6{ z>^P_l4}_}2lcHs5*dN*DU)MZu&lUbXgD0>`=$}XzvkcYPx)8V2;;|j!Zf1eNqj%wGmTKL=OB&a zbT?`}7dk*54qhFw5R2QV>)kvE9%a^5G`vQm&0giH_7RLRfqubb+p8 zv3^4|7M`Guq`Y}Z6_V7yuvfS$>~9f$H+08ddq7XrecV+<=kr9Zk3#6R2zo(p=!%Lh zYKZw!lO;-QSaAt{Yc=~o>C4a;`ayrV6$ZdSD1u@b1cPA+422SI;9j1`C-6J?H2wyE zlfTQ~;~(%Hd>1d+4`nbM%3%bILO@|PK?p+Ha(u#65?MG>mFAZ2miE7WOf%FSyl z=iZbzrLEl52`@Y4O_}l;JOs1gVR!@{MJ+uBvtbS%kHZuA{UpqVr*JY#s{Cl@_#0~s zDyTukL`(_AgysuEfeAR^D84NS25LjXzHoljxk6;OT<1!_Gm^Ly1L)sip#T`;p1}@t z;aPYNo=3AnB&cXoEz`~&+=gxTpMYjxA*EsKsQy5eirM~E;gDuU3t-_QSO|-tE7~9S zrdnomLs;$VOP^`gmcY`*uoRXdI=iC4Y9~U{(OACaMl1RfEMEf4VFj#&moF49L;N5( zg&rc|AYxKHz?NFjTp`&e3NPJ7_Wx7vVd`Uq|0U10-d4lwi{N#5LyQNf_zG5tio&NY zMtQlVzXfa2($}G-uSdJ=z}xd&v`TsZB~~dcawA&gCfE#HRI~A+*(C8C-l{^fH#N1- z>C{&4kk?*7B`>c-Te*E_ft3&7L-+{MvMr94k6}A}0y|(m?1X>AE_J2~{Z->@BjJWn zb+2$REDXC84PCuPouQG}ha)lcLe1Jk)$wb2Ti%*q#bw^kq7w*_dIAjI3wvQ7_Vg+2 zhtJ>ue2$tf3EZLJk3b1Jg&GxTtqKMM@T>VXX-N(gVPHd5pxWOz;zz%7V_`U0tts~~ z99alQpexoEA!Q#NgD>Dq_zFAt8oq(!@GYD`$TbVC{)%n{jKx4o>it!UkQ@14FkGwR z^m=}sl)&5Y8_G%=(J4$AjnEX3P%G?#AF+KKoP<+q%fsseF=aqbb|>v~6G)8Tpvm?N z99xL;biG)pU*SKRP&}L8DEdH*$D40aXmb~5MHhuR(A?gi@YiDa3;q@eSADIh(I=n; zt5uwfz$?7JxKRZlK#=|sLN7vkOBG=jEjK7c9NDozEU1X*BU-NZV&Eyq5sxAXB#|UR z4)4gv^B|{(R6necWMYCEVum`Bg2l#>R3ecyJgg+0WFYmlLpE^|7i6QJMR>s2q?*>? zh*G0Oln}C=3du4ostAzv2}dTO6CQ}{euNq?#FUKai_oiAC#N&-ghxIf#!HjZhy}g< zINpaNqC`v(A<9OwhzAcD?%N%jOZUP?xjF=VXPW`*RyR(m&w{1XCInz{=8k*Meby@Kd498t9A z|In$p(OSHX_!kqu*4k*Spw6xK8o3;)f}SsvYNC)DQcLPcfQ%#KNsvq+ArdC_yf5#^ z`}14*06vfx@nSxR59UMoP+lVVLp+@KD=iv$d1y|pZ>YrRmfa8u-iXp;#JgUl2SWo@ zb+Rxq8L^IWR&a?cPz8$!%@HJP7pTC<3oTYinK+bTLkC8O2V!-l!fOA)8SHWYcDYzS zje=lpIi3JtUM9|qu=y*z(*{x6r}yRWGMbuhY~NPSQ3FgfzNYLUQ&G=%!45KwOdr|5 z8sQ(P2`G^=ErY-a5#VKepgXw-i``2eBhMowvd3fYvVzPY_u+Xzp5mBA9wv{F8N8BL z;aQERI22yPYkB1gGMmgHkCP|JlVmP=iabr8ADt4=!G_vEDB4oir9JMg)c6~M=!hpP zYI)%{Dx_<)mj%IKcv75CRjV{4dcp0XBgD9@6%oijyjzxqOmtP&fz#tY;f{H(?6o-+#UT^^KkPVB-291EF zt5j=H1KJC+mw0O365$|+yhk>X%}BB)^F|)J0>L65;1bG5WE=TdC0Jo3STdi)>yaD^ zf+a{*u7H30yql0~bV`LA^CVR;~Job~#xHNNsd`=FM zL&&&xkRxh%NA=!vdqV&tGg^$wg$sf)C4xDgqD~jm#=?eJEF4l}OD=-9xMZ*r352Ty zRsE67N3bSFoQuk+%{CY5t>CLWPG4rF0Bhh<#-Nx5w9a(zyb0Vk0N)|rH{Utx$P#$ks|CS-(pzGj;ijBH)yl_ z9r=C{`JVg`=Qhphvsy-ErRs%N^dvd8gq$KjX;cVdqzzFJpD{>lF5GFwe<7!rkkid1 z2;0&MphlxO2r-8E5V~mPe4&L}+Npy&sf%V(H_f6R>IEB>sgJgT z3VIc7O|Pcc&}(TM2-5564YV!25dl$LqWL8?pDgl6$E#q|o(b-No&zTx-IH)j2utma z8o65T)KwguPwm}MT=&vAlA?sfji~RREb6zE5mt_mhnK20fXq!iP@7Sat;TxcD5L&~ zir|k@3V(&)!|&yH^Huy+o@}X~j9JENK7+r8Orxo(LwmGfq(;JoJ9ZK?(z(MFoU7E5 za7_$}sUmADONb&(NEOjEmwa0)dKO?tQb9XH=}S-v>uEkt)n?k2cxX4;of|P1nu${s z;iXytJ*k5WZ@*nmiWL`8C5 zZpRiR=OVNG|ByUZMY11NbBXKYkEuw06jg*s9@{?@#mp=iSNjn2VNi)at)l@t4r=Il zsG~uWM<<}xLt;&etb{rAb{e5k8pGrx4Ng(PvsC_|T?t7GFpl;| zx42l<<^qAFh4CPYX4g^Uka@YNv`$l|91%g3F1vCVg&p)Ix}2_{D`_`Oe-6-9&4HA@ zhLcz=uh+bpm1+UQ|M}w4D z_Q}ovUzUC73e;tH0Vldg^%{#&W6N>*26_q=X&}DoQs0QIUqz>2J-PXKnJotVzoU>u`mlhi$o&n_&R)33!U2ISD=^ji#MC+K(Jr}@I*>xCDH zVgy{r-{Nce+qk$k6W3kq0@awTbdjTVxEB(4oEo>(-eA{UFEp+D2p^gj#eFZ`Va z^jE%~Z$NBgbQ0@_s#mE&R4NfM?P{DXRtHlU4kLlp)cBJmU=8fQbew}O84!cB#A6%tOdJgWXgvrC5k!=yAZ zaVO&cdVPiIVisn_VWhJRbs&^);~(;m_{U->6_TfUk}yc%EVcBg^@a;ewkyAg&lAgJ zSvXJ3%|BVdJbXLfaETfrhqYo?VgIeM_wK0rfAfFwo!IwsY&t&PY9*@f3LuC?UXK%c z$&;2Tq}|yKDoB^}-2$YeE-I)74VJ@ttU|WXopwX!kbvQFGZKP)SkC||NgC3$*=UgS zkwbLE02xBxITJa>CS(?!_;kKko4W!sVxd@Q(OT?drE1Is}=it2um-EE_ zia0u{-_zA^ir=$wwAdo@8CJ@AtZ0@Alcddp*)X78QJ!XLC`u#P%_fvfl|XG-`OV|M^P=m!SdUjEH*Vq$6x=pJZdyTDTud_GU8uli8 zi>+nr$SnRXKf%A_-}4{%kNhM*#ed>I^Iv!kKh1yT|KY#!-}xE-2S3aI%g^yY`Ct5R zetsGOTw>WP8KhjvCfTJ{(m<&~@<}74TB%wJNd2UdQlcbFM(Gx5w3H?lNqR|<#%N01 z2c`4le29H^krEHauW@UZ9brcovZLy{VE;mG3$`~d$KxL|oVa`57TV(;?LgFP8B*mM z8l!j6t@x*bUzr~N4&Y|jvp%@(U&AKg2LJtRE{=KwZsPA_hp^o**jMZu_AUF4{m4$S zpV_bMH+F`dWq-22b)cgN0g%x*K$Px^B9Dx+2|ZouZqpo2Gk6H%s@3?kU|1 zx|O=sy7jtGb)V@z*B#Ow(H+x$sry=YTz5kEz3xZdDc#Sy)B03>mi}6OJAJXfT<_Oc z=@osgKA<13pP&!xAJ;F{uhzebiL zaYABa;*7+Zi4P<`m^dqOcH-Q`#fh&cu1S0=ab4o3#C?fJ62D3OBgvGMk>p9bKB;q3 z&!hoK!;}0;bxE(kjn5dLGtM(EGp;mlGHx+$HGXK^ zW;|s4&iJG8l<`b5BwLcb$!(H5CKn_ZC;OAfC*PSo6jCX*?}B$=)@U2D3|bc5+eQ#(_>sjI1*sfTH_sm?Uc6f}iQ z^`?j^W}0H+rs<}8OfQ?>G`(-yW!hufXWDN%U^-|zY&vQ>Z8~TA+YDxE_L{FVcQAJ} zcQ)T-?rQFC?r9!izRg@|t~S@0>&(;4515}YFEFn(uQ9)4-frGwK4ktbMVI18xjH2~ zrE^N}l%kZnlyND+lu$~2N+czgGBIUx${i_prc6!YDbrK#Nm-Ecddjhs-%=sflbWA8 zI(2gDdw?%sYgrR$}(Qnr+X zrkN*olJcc4(#=wLsi#yZl}Y2J>Cy|*N79#RQd*m|o@pb}W~SYrHaG3*v}e0pCLPj~(;ey8q_<1&lHM!5EWIMVCVgu9Bk7N&&q;qGeQx?2 z>2Id5O@BLmefqoU@1<`}KbRq9STfQxY#ELWSB5*olaZ5=n^BN4G@~@5ETcSQWX2;I zi!#<^Y|Pk^aWLaV#%~$tZ6=$|*2tegv*4@_AR%q*O>tpL@E3yr;4Y8HjLN;!@ z-!|Je*Y>n+p>2)rE!#TVdfNuuM%yOa7TZ?ahqi6D6 zbL_eHJbNd5zP+!#+&;!$VfWjs?bGac+wZmCXP;?*!2XbZiT!i?A^Q>gG5eSHukFX} zC+uhJXC2v&u8tzd2uGFUc1M$AisLTFG{@bJdmZ;V?sq)kc*yavW3J;F$8(N(j%AMJ zj+Ks8j;)S=Irceza{TVJIy0Phr_-6~%yMQsbDX)(JZFFB0B4bNkaLK$)){k7ayB|= zI3IUD>3qTYqH~pVyK{$gr*oHcw{x%aQ|C{vHm**td{-CO&93gQo~}YyUsr$E0M}sG zgRbXX^IY>?i(Id|R=eJCz3JNM`pC7{^{MMK*B7qiu0J!KnVFecnchq}^Qz3NGq24o z$gIq)&aBC-%N&;(%nW5lGatxYnE7(%$C*bnPh_5SgWKSCx!rD$TXwf{U+2EnUFt4# zm%B&0N4v+mZ*y0=r@HTTKkZ)Xe#yPUy~_Qnd$oJJ`>^}C`v>=*?!U7ji)QJvtXVl( zxmkHxowD+?x@6s)bxT%x)`+Z8S=CwNvu0$?$y%57S=QOCb6J07oyYAy=Fxi+J#9P% zo?_1sPl>0@Q|=k*ndE8oGl%VYxQP$?Oxe?wKv;4z+2=UUfg zui~xs2D}mP{oV(?v%HUZAM?)fKH;6~ecJo1_j&IN-UZ&}-c8;u-mTsbz1zIoy*s=+ zy}P`7y!*WSy$8IZD<{fnvPW(!cbCV=HFB*SkRx(bZjh(S>*V$F26>~rN!}uF zl|PiX$=l@}@=ke|yhq+A@0SnA2j#=^QTYq`EBPDwTlqWr2l=G@ll+VPtNf?0v+pKf zS6??@4_|?=m+ux|UtfRU0AG=BkZ*{u#5c@0+&98E$~VSW;q&{de2TBu7x0bug?#nC zh%e@w=$q`j!*{1|s*n4o`|k10@Xho+;CsmTu9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..6e20460839b0b2817dc5902712091986b034dac0 GIT binary patch literal 6568 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 O7duxO=kBBW!T$ovNR9ab literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..4f31fd7587e850f6ce885835e89ceb52dc46cd3f GIT binary patch literal 10773 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..f165c1a8092076ef5e6b3be3b675545aad2e8bc6 GIT binary patch literal 6346 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 azL8EzXQ|DkKTi29q?~7I=dRygrvCtr&v?85 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0d56dd12cae32325b6dd750255c05f48f7a7e3db GIT binary patch literal 10489 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

  • BSr1Y1KN3qacZOjRU!jt0> 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..9f7b3901ee37b2fa9bd7afab6a45eb921282b350 GIT binary patch literal 5536 zcmd5=&ubiI82;>`LehxWdg&xsyOt)KC=^7*mRL-v&Srm+nAcqynvRB(Ns@6GJYc0&^h6U#C?GvDv;`JVTA z-*^7$sGvHj3}vbk{xkSr#LrSiRmJ;~Dx;*X@+yn6EK1U98UL)$p|pr63vI?wb`m2E zs1bD>Z{w<cJgbKhje^q8`V{13s+uj9wf6=T%Boa8K(U z74gK~Re(YYdnurlyHBBv_XcWND(wv*V4*Inv8ie#Yv^mCo(R39v8xh2dB*vT1GAj#*QkBgxI=Z!qc+0*|WOL zwb!z?%p%%SA4UDBe<@rXp`taBI*>xW1-muWv{p!-NL8KEZKaiHKp7IWWCz*u1GRqnwb<&7SN>l8@#Rme zhhxv>tY|25)kh0Di(QKS_glW>YslQa==rd#3u5{8CVFah?orHpeA9!y?nX4RU)grq zLFT*AN3=-u&5oaYpz2bC87q*5C0L28-&CEfR&&QHdOfRaX=7+PqZOOJSnQLQM$YGO zu^)XRdq~vL^?LMf8(*yqnxo;rD(x#rTerp!wfE3 zBPvmd8mu(Cy(5V^#D=L5jsooim&|9@>FCp|pND=*maMJ25Ss=pmA;y%Es+xSj4JCO z*puWYIbB09@6kdsejyVNY+PS^#vJug`zEm_M&k6gT`h|Ku(;-%$C%WyN=C;K zj<@$>M!X~rcJm9?dol$2a*6dX{}S1p{~~wO_lWH&tf>K{oH*36ZSTs*VAGy>h3Dr) zle&g={$wBLbcS}j?(DKQst9rOd2Q1`O-@qsO(z45XwJErV3&RLgfE_s-RIf0D-#ahDlh^}A)>oKuOfiM6kh z--Vvoqb^MC9^ii}AIsPmbB86HV-#3mf_i7W;aX zn%RHrD*EbO#sfS17Rei#HAcbDcz|B$jT_Mm<|w^%`n-4|A0zbyP_MYWu!BBYYXbUH iQzvw6V&G{>BP;QnoQ%gtLP`0qGCN@h + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 62 61 356 240 0 0 1280 832 + IBFramework Version + 443.0 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..9be94287a6b35dcddd1dda04137e023c11270056 GIT binary patch literal 10742 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 literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..a5486800d7018ff468ed73ffb846e1b9e2249fbd GIT binary patch literal 8562 zcmdT~+iw(Q6#p!VxU>!OB0(M)KxEsn-K|C+ym1qx0<-P5rEUsryW5?ix81V0QbI#P zB&A?jl#3X{gYnJ8@K2~wBJctaMjuIxFDA%?fxvox-|6YhEG-w40ZFsBZ)UzZ*WdY_ zGp*bUt43ugQ)THrMeoD(msS~7px+}ZM=K@Ouli`Mk5-aujNWnFrqv96OVc?`wAQG? zs$MNnE7U6b9Z^HdQiHUfrBB1Nwt{}YOD~++tX`S*?AJW&E7aS1Z|v`fyz8`tc<)zv zdQYh$X_eD@7DyB5Tu^)Hx1n_&rEhs{p_0}=PuFGXh@pDPTD|mZh~AU*o+j<8_2s)k zLwvirD{LwIV){sFOKy$*q&3Zu+@rI~ZKxpWoh3^cq&f70_Nz$d2JP=IeQZcag`77; znh)yp3Ut()MJ9 zswRS?x2%il%bnQQ|9BZCjSwqE(ocMiD1qKNy;>bJhPGjju5zNKsIM5N9SXFXqR%1v z8`Bof zp=+^PGjMX=Ns0fOh@ootFHFp{H;g9-;rD~lo@l^M49v4X>OMWdvR#_`<q%zd9kQi5>jmQ+1i2pvmb;=oU^^OfPT{DZF}q&-4Ok6C&yfyU ziZ%!5kej0vZ-^}T+oJaZ9mfhs5??h!{^SVeRq=H%`FcdhFL3cKwUe&G3wYt+-__Lh z_Lq{+$I7<%{0-LawtM;T=if|KU-^HsNr5yUo3Y1S2qzY?rfpfRk<`A$JFF?heyzDU zc6wmTo~L7jjpWaaT1`GfRo_RSK$(>O-AilLkq+5cQ6JA>AZgBI0AD3Ll8U@ z%K$gQHGradiZs+3t|zD$SZX}UZ_zx5E8*(tD`3H*Mo?rN zc0m=CjDl3y6S8w`fj`*v!Wjnb&e(}-;U(m#Xaeb=4J-vz#yO}WKy#;B!_xccs8n7z z3fG%=CoUxB@>j^5IDWeg)i-ezn2ZRm@A#>=cJ!U-!#z=I3z_19uqC_vF|@Gv%`195A~&H> zCla5wSyTRE<%4q~N4|&OV0}a`V?XLB{J?0A`UyVB%n=v}4{{XcDI%OI%()>}c-CSF zH9Xk$Z+C}Gp!>>!g$dXIyndZpTKQlsoW7NkRpz|n^~dwM-}Rlno+2L(xhmH6 z_Q_$tqYbE)(r9OCtN~^?%!y+RcmV806oI>qC^vfs6WU;XJ#fQDj`+=gHAuWMk(3$Hiu$lV^a4+z0kce z+vRJ4rEEEHW~oIj`X0=g8Et{pqhwvIrBz7F#`z13bxRCZ>eMCf`$Q6;dtUppU*oY& zd##=Bn6}eCKn*W{4o_FKYP-M&4(fw>xT`}olF#3HFCVbMoEu|(XKNye1G8MaU!B|1 zhLr_}f#7u&oDsHO?Fe>-J134KbKi@H%%D0P4|a{VpX=V6xY8OjmsJ`RkoV5mwb;kq zkr=M};Vh8X|17MItzohn>Mfmwd zFu;bujli4MPgf4lT=#J~b%yW`no-M>%%+%6LV zf2*}ux<|1dqu%$5zwb6k-XELc3&`>`b*|Fe7}Pms39}5< zLazae6IA{CXOP?t&4$HbB1yUqS1~id>?=(;?C=q%x5Atk7>v#pdoHJ|S~bIvnc0JT zI(Pn$$Eh+C2Iwx!Jbvt`Srb{5?AEg}#Lnq~y2|D#j*iE#v`!8;$B&xN>CTAeU%Dg0 zZhoQ$vJbthGc82yJG{z0-8!2&--@XBd#1&R;LIoy{ornSS5zJ-ZJT_#{9%Xx)*06I z7}2<$WH8h=vKOSuxujulT}^#3=g`VZ6LD1 zzGODU6B>U0IpSJpm_VCJ;+4bSX!Ye^Zn zxh2%YxyfJJyFj;D78&1a;ulgR~af!xH5xq7DJ+!ga) zOt9sdp}WtM?4JuMfo{0g%|d#jb-S0^V(DO)cdB%`b6EvZTyNG@dZK@|-!LyEkPrLH z-*tw}t;uUKnLqj6W5-E$ca0BQ{^kqMyJe;i{1?QQEOKW~PxR)lfQ={msHooj!T&G( E3ljf5aR2}S literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Sparkle b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Sparkle new file mode 100755 index 0000000000000000000000000000000000000000..9dbf9e7fa1ed6ebd9ed45e0025410c23453d15b3 GIT binary patch literal 197376 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�J$G{!-et`Tr@b@`Bj`i;SRN#*Bem?`aqrLaD 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
  • eJ-$}o}$17td{r-vc`@6r_qV%qD<;Nb&ufNTY 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 `nPX>W&|i^vn-~ijtmrVNg*`Kd7j*|C5q0E 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 o??`fbs_nQtjL;rz5|DiyC2G{REj-OcC2gFY- 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. - -The code in the src/GSM610 directory was written by Jutta Degener - and Carsten Bormann . -They should not be contacted in relation to libsndfile or the GSM 6.10 code -that is part of libsndfile. Their original code can be found at: - - http://kbs.cs.tu-berlin.de/~jutta/toast.html - -Code in the src/G72x directory was released by Sun Microsystems, Inc. to the -public domain. Minor modifications were required to integrate these files -into libsndfile. The changes are listed in src/G72x/ChangeLog. - - diff --git a/Libraries/SndFile/Files/COPYING b/Libraries/SndFile/Files/COPYING deleted file mode 100644 index c396169ee..000000000 --- a/Libraries/SndFile/Files/COPYING +++ /dev/null @@ -1,503 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - diff --git a/Libraries/SndFile/Files/ChangeLog b/Libraries/SndFile/Files/ChangeLog deleted file mode 100644 index 553149207..000000000 --- a/Libraries/SndFile/Files/ChangeLog +++ /dev/null @@ -1,5161 +0,0 @@ -2004-11-15 Erik de Castro Lopo - - * Win32/sndfile.h Win32/config.h MacOS9/sndfile.h MacOS9/config.h - Updates from autoconfig versions. - -2004-11-13 Erik de Castro Lopo - - * src/aiff.c - Fix parsing of COMT chunks. Store SF_STR_COMMENT data in ANNO chunks - instead of COMT chunk. - -2004-11-07 Erik de Castro Lopo - - * src/file_io.c src/common.h - Change the ptr argument to psf_write() from "void*" to a "const void*". - Thanks to Tobias Gehrig for suggesting this. - -2004-10-31 Erik de Castro Lopo - - * src/file_io.c src/common.h - Add functions psf_close_rsrc() and read length of resourse fork into - rsrclength field of SF_PRIVATE. - - * src/sd2.c - Make sure resource fork gets closed. - - * tests/util.tpl - Add functions to check for file descriptor leakage. - - * src/write_read_test.tpl - Use the file descriptor leak checks. - - * src/sndfile.h.in - Add SFC_GET_LOOP_INFO and SF_LOOP_INFO struct. - - * src/common.h - Add SF_LOOP_INFO pointer to SF_PRIVATE. - - * src/wav.c src/aiff.c - Improve and add parsing of 'ACID' and 'basc' chunks, filling in - SF_LOOP_INFO data in SF_PRIVATE. - -2004-10-30 Erik de Castro Lopo - - * src/sd2.c - Further cleanup: remove printfs, change snprintf to LSF_SNPRINTF. - - * Win32/config.h Win32/sndfile.h - Updates. - - * tests/util.tpl - Add win32 macro for snprintf. - -2004-10-29 Erik de Castro Lopo - - * src/sfendian.h - Add macros : H2BE_SHORT, H2BE_INT, H2LE_SHORT and H2LE_INT. - - * src/sd2.c - Use macros to make sure writing SD2 files on little endian machines works - correctly. - - * tests/util.tpl - Add a delete_file() function which also deletes the resource fork of SD2 - files. - - * tests/write_read_test.tpl - Use delete_file() so that "make distcheck" works. - -2004-10-28 Erik de Castro Lopo - - * src/sndfile.c src/file_io.c - Move resource filename construction and testing to psf_open_rsrc(). - - * src/common.h src/sndfile.c - Add error SFE_SD2_FD_DISALLOWED. - - * tests/util.tpl tests/*.(c|tpl) - Add and allow_fd parameter to test_open_file_or_die() so that use of - sf_open_fd() can be avoided when opening SD2 files. - -2004-10-27 Erik de Castro Lopo - - * src/wav.c - Update ACID chunk parsing. - - * src/sd2.c - More fixes for files with large resource forks. - -2004-10-23 Erik de Castro Lopo - - * src/common.h src/sndfile.c - Add error numbers and messages for sd2 files. - - * src/sd2.c - Reading of sd2 (resource fork version) now seems to be working. - -2004-10-17 Erik de Castro Lopo - - * src/file_io.h - Update file_io.c to include win32 psf_rsrc_open(). - - * tests/floating_point_test.tpl - Remove use of __func__ in test programs (MSVC++ doesn't grok this). - - * Win32/(config|sndfile).h MacOS9/(config|sndfile).h - Updates. - -2004-10-13 Erik de Castro Lopo - - * src/sfendian.h - Fix endswap_int64_t_(array|copy). - - * src/test_endswap.(tpl|def) - Add tests for above and inprove all tests. - -2004-10-12 Erik de Castro Lopo - - * src/sfendian.h - Improve type safety, add endswap_double_array(). - - * src/double64.c - Use endswap_double_array() instead of endswap_long_array(). - - * src/test_endswap.(tpl|def) src/Makefile.am - Add preliminary endswap tests and hook into build system. - -2004-10-06 Erik de Castro Lopo - - * src/configure.ac src/makefile.am - Finally fix the bulding of DLLs on Win32/MinGW. - - * tests/makefile.am - Fix running of tests on Win32/MinGW. - -2004-10-01 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c tests/floating_point_test.tpl - Rename SFC_SET_FLOAT_INT_MULTIPLIER to SFC_SET_SCALE_FLOAT_INT_READ. - - * doc/command.html - Document SFC_SET_SCALE_FLOAT_INT_READ. - -2004-09-30 Erik de Castro Lopo - - * tests/floating_point_test.(tpl|def) - Derived from floating_point_test.c. - Add (float|double)_(short|int)_test functions. - - * tests/util.(tpl|def) - Make separate float and double versions of gen_windowed_sine(). - - * tests/write_read_test.tpl - Fix after changes to gen_windowed_sine(). - - * src/(float32|double64).c - Implement SFC_SET_FLOAT_INT_MULTIPPLIER. - -2004-09-29 Erik de Castro Lopo - - * acinclude.m4 - Fix warnings from automake 1.8 and later. - - * examples/sndfile-info.c - Add a "fflush (stdout)" after printing Win32 message. - -2004-09-28 Erik de Castro Lopo - - * Win32/Makefile.mingw.in - Add a "make install" target. - -2004-09-24 Erik de Castro Lopo - - * src/sndfile.h.in src/common.h src/sndfile.c src/command.c - Start work on adding command SFC_SET_FLOAT_INT_MULTIPLIER. - -2004-09-22 Erik de Castro Lopo - - * examples/sndfile-convert.c - Fix a bug converting stereo integer PCM files to float. - -2004-09-22 Erik de Castro Lopo - - * examples/sndfile-play.c - Appy patch from Conrad Parker to make Mac OSX error messages more - consistent and informative. - - * doc/api.html - Fix a HTML HREF which was wrong. - - * doc/win32.html - Add information about when nmake fails. - -2004-09-05 Erik de Castro Lopo - - * examples/sndfile-play.c - Another patch from Denis Cote to prevent race conditions. - -2004-09-02 Erik de Castro Lopo - - * src/common.h src/ms_adpcm.c src/ima_adpcm.c - Fix alternative to ISO standard flexible struct array feature for broken - compilers. - -2004-08-31 Erik de Castro Lopo - - * src/common.h src/string.c src/sndfile.c - Make sf_set_string() return an error if trying to set a string when in - read mode. - -2004-08-29 Erik de Castro Lopo - - * src/common.h - Change the unnamed union into a named union so gcc-2.95 will compile it. - - * src/*.c - Fixes to allow for the above change. - -2004-08-20 Erik de Castro Lopo - - * examples/sndfile-play.c - Fixes for Win32. Thanks to Denis Cote. - - * Win32/Win32/Makefile.(msvc|mingw.in) - Fix build system after removal of sfendian.h. - Build sndfile-convert. - - * src/Makefile.am - Remove sfendian.c from dependancies. - -2004-08-10 Erik de Castro Lopo - - * src/sndfile.h.in - Fix typo in comments (thanks Tommi Sakari Uimonen). - -2004-07-31 Erik de Castro Lopo - - * tests/(a|u)law_test.c - Minor cleanup. - -2004-07-29 Erik de Castro Lopo - - * src/(pcm|float|double64|ulaw|alaw|xi).c - Optimise read/write loops by removing a redundant variable. - -2004-07-24 Erik de Castro Lopo - - * src/file_io.c - Remove call to fsync() in psf_close(). - -2004-07-19 Erik de Castro Lopo - - * src/pcm.c - Inline x2y_array() functions where possible. - - * configure.ac - Detect presence of type int64_t. - - * src/sfendian.c src/sfendian.h - Move functions in the first file to the sfendian.h as static inline - functions. - Improve endswap_long_*() where possible. - -2004-07-17 Erik de Castro Lopo - - * src/pcm.c - When converting from unsigned char to float or double, subtract 128 before - converting to float/double rather than after to save a floating point - operation as suggested by Stefan Briesenick. - - * src/(pcm|sfendian|alaw|ulaw|double64|float32).c - Optimize inner loops by changing the loop counting slightly as suggested - by Stefan Briesenick. - - * configure.ac - Detect presence of . - - * src/sfendian.h - Use if present as suggested by Stefan Briesenick. - - * src/pcm.c - Update bytewapping. - -2004-07-02 Erik de Castro Lopo - - * src/common.h src/*.c - Change the psf->buffer field of SF_PRIVATE into a more type safe union with - double, float, int etc elements. - -2004-06-28 Erik de Castro Lopo - - * examples/sndfile-play.c - Merge slightly modifed patch from Stanko Juzbasic which allows playback of - mono files on MacOSX. - -2004-06-25 Erik de Castro Lopo - - * examples/sndfile-convert.c - Move copy_metadata() after the second sf_open(). - -2004-06-21 Erik de Castro Lopo - - * examples/sndfile-convert.c - Fix a bug which caused the program to go into an infinite loop if the source - file has no meta-data. Thanks to Ron Parker for reporting this. - - * src/sndfile.h.in - Add SF_STR_FIRST and SF_STR_LAST to allow enumeration of string types. - - * Win32/sndfile.h MacOS9/sndfile.h - Update these as per the above file. - -2004-06-17 Erik de Castro Lopo - - * configure.ac src/common.h src/ogg.c src/sndfile.c src/sndfile.h.in - src/Makefile.am - Apply large patch from Conrad Parker implementing Ogg Vorbis, Ogg Speex and - Annodex support via liboggz and libfishsound. Thanks Conrad. - -2004-06-15 Erik de Castro Lopo - - * src/avr.c src/ircam.c src/nist.c src/paf.c src/xi.c - Add cast to size_t for some parameters passed to psf_binheader_writef. This - is Debian bug number 253490. Thanks to Anand Kumria and Andreas Jochens. - - * src/w64.c - Found and fixed a bug resulting from use of size_t when writing W64 'fmt ' - chunk. - -2004-06-14 Erik de Castro Lopo - - * configure.ac - Bump version to 1.0.10 ready for release. - - * Makefile.am - Remove redundant files (check_libsndfile.py libsndfile_version_convert.py) - from distribution tarball. - - * tests/header_test.tpl - Fix uninitialised variable. - - * src/GSM610/short_term.c - Fix compiler warning on MSVC++. - -2004-05-23 Erik de Castro Lopo - - * src/wav.c - Improve record keeping of chunks seen and return an error if a file with - unusual chunks is opened in mode SFM_RDWR. - - * src/mmreg.h - This file not needed so remove it. - -2004-05-22 Erik de Castro Lopo - - * tests/header_test.tpl - Add extra_header_test(). - - * src/common.h src/sndfile.c - Add SFE_RDWR_BAD_HEADER error number and string. - -2004-05-21 Erik de Castro Lopo - - * tests/utils.tpl tests/*.c tests/*.tpl - Add a line number argument to check_log_buffer_or_die() and update all - files that use that function. - - * tests/header_test.tpl - Modify/update tests for files opened SFM_RDWR and SFC_UPDATE_HEADER_AUTO. - - * src/aiff.c src/wav.c - Fix another bug in AIFF and WAV files opened in SFM_RDWR and using - SFC_UPDATE_HEADER_AUTO. - - * src/test_file_io.c - Add a test for psf_ftruncate() function. - -2004-05-19 Erik de Castro Lopo - - * src/sndfile.c - Fix another weird corner case bug found by Martin Rumori. Thanks. - - * tests/header_test.(tpl|def) - Two new files to test for the absence of the above bug and include tests - moved from tests/misc_test.c. - - * tests/Makefile.am - Hook new tests into build/test system. - - * tests/misc_test.c - Remove update_header_test() which has been moved to the new files above. - -2004-05-16 Erik de Castro Lopo - - * src/aiff.c - Fixed a bug reported by Martin Rumori on the LAD list. If a file created - with a format of SF_FORMAT_FLOAT and then closed before any data is written - to it, the header can get screwed up (PEAK chunk gets overwritten). - - * tests/write_read_test.tpl - Add a test (empty_file_test) for the above bug. - -2004-05-13 Erik de Castro Lopo - - * Win32/Makefile.mingw.in - Added a Makefile for MinGW (needs to be processed by configure). - - * src/mmsystem.h src/mmreg.h - Add files from the Wine project (under the LGPL) to allow build of - sndfile-play.exe under MinGW. - -2004-05-12 Erik de Castro Lopo - - * src/GSM610/gsm610_priv.h - Replace ugly macros with inline functions. - - * src/GSM610/*.c - Remove temporary variables used by macros and other minor fixes required by - above change. - -2004-05-10 Erik de Castro Lopo - - * tests/pipe_test.tpl tests/stdio_test.c Win32/Makefile.msvc - Make sure these programs compile (even though they do nothing) on Win32 - and add them to the "make check" target. - - * src/sfendian.h - Fix warning on Sparc CPU and code cleanup. - -2004-05-09 Erik de Castro Lopo - - * src/file_io.c - Fix warning messages when compiling under MinGW. - -2004-05-01 Erik de Castro Lopo - - * configure.ac - Set HAVE_FLEXIBLE_ARRAY in src/config.h depending on whether the compiler - accepts the flexible array struct member as per 1999 ISO C standard. - - * src/common.h src/ima_adpcm.c src/paf.c src/ms_adpcm.c - Added ugly #if HAVE_FLEXIBLE_ARRAY and provided a non-standards compliant - hack for non 1999 ISO C compliant compilers. - -2004-04-26 Erik de Castro Lopo - - * src/strings.c - If adding an SF_STR_SOFTWARE string, only append libsndfile-X.Y.Z if the - string does not already have libsndfile in the string. Thanks to Conrad - Parker. - - * tests/string_test.c - Add test to verify the above. - - * examples/sndfile-convert.c - Add ability to transcode meta data as well (Conrad Parker). - -2004-04-25 Erik de Castro Lopo - - * doc/command.html - Fix minor error. Thanks to Simon Burton. - - * doc/win32.html - Started adding instructions for compiling libsndfile under MinGW. - - * configure.ac - Add --enable-bow-docs to enable black text on a white background HTML docs. - - * doc/libsndfile.css.in - This is now a template file for configure which sets the foreground and - background colours. - -2004-04-20 Erik de Castro Lopo - - * configure.ac - Do some MinGW fixes. - - * configure.ac doc/Makefile.am - Install HTML docs when doing make install. - -2004-04-19 Erik de Castro Lopo - - * examples/sndfile-info.c - Print out the dB level with the signal max. - -2004-04-15 Erik de Castro Lopo - - * src/file_io.c - Define S_ISSOCK in src/file_io.c if required. - -2004-04-03 Erik de Castro Lopo - - * configure.ac - Improve printout configuration summary (as suggested by Axel Röbel). - - * doc/index.html - Add link to pre-release location. - - * src/sndfile.h.in - Remove comma after last element of enum. - - * src/float32.c src/double64.c - Fix read/write of float/double encoded raw files to/from pipes. - - * tests/pipe_test.c tests/pipe_test.tpl tests/pipe_test.def - Turn pipe_test.c into an autogenerated file and add tests for reading/ - writing floats and doubles. - - * tests/Makefile.am - Hook tests/pipe_test.* into build system. - -2004-04-02 Erik de Castro Lopo - - * configure.ac acinclude.m4 - Rename AC_C_STRUCT_HACK macro to AC_C99_FLEXIBLE_ARRAY. - -2004-03-31 Erik de Castro Lopo - - * tests/misc_test.c - Perform update_header_test in RDWR mode as well. - - * src/aiff.c - Fix problems when updating header in RDWR mode. - -2004-03-30 Erik de Castro Lopo - - * src/wav.c src/w64.c src/wav_w64.c - Integrate code supplied by David Viens for supporting microsoft's - WAVEFORMATEXTENSIBLE stuff. Thanks David for supplying this. - - * configure.ac doc/*.html - Bump version to 1.0.9. - -2004-03-28 Erik de Castro Lopo - - * src/command.c src/sndfile.c src/sndfile.h.in src/wav.c - Started work on supporting microsoft's WAVEFORMATEXTENSIBLE gunk. - -2004-03-26 Erik de Castro Lopo - - * src/avr.c - New file to handle Audio Visual Resaerch files. - - * src/sndfile.h.in src/common.h src/sndfile.c src/command.c - Hook AVR into everything else. - - * tests/Makefile.am tests/write_read_test.tpl tests/misc_test.c - Add testing for AVR files. - -2004-03-22 Erik de Castro Lopo - - * src/file_io.c - Fix psf_set_file() for win32. Thanks to Vincent Trussart (Plogue Art et - Technologie) for coming up with the solution. - -2004-03-21 Erik de Castro Lopo - - * tests/write_read_test.tpl - Fixed a bug that was causing valgrind to report a memory leak. The bug was - in the test code itself, not the library. - -2004-03-20 Erik de Castro Lopo - - * examples/generate.cs - An example showing how to use libsndfile from C#. Thanks to James Robson - for providing this. - -2004-03-19 Erik de Castro Lopo - - * src/common.c - Fix problems with WAV files containing large chunks after the 'data' - chunk. Thanks to Koen Tanghe for providing a sample file. - -2004-03-17 Erik de Castro Lopo - - * configure.ac - Detect presense of ALSA (Advanced Linux Sound Architecture). - - * examples/sndfile-play.c - Add ALSA output support. - - * examples/Makefile.am - Add ALSA_LIBS to link line of sndfile-play.c. - -2004-03-15 Erik de Castro Lopo - - * acinclude.m4 - Add new macro (AC_C_STRUCT_HACK) to detect whether the C compiler allows - the use of the what is known as the struct hack introduced by the 1999 ISO - C Standard. - - * configure.ac - The last release would not compile with gcc-2.95 due to the use of features - (ie struct hack) introduced by the 1999 ISO C Standard. - Add check to make sure compiler handles this and bomb out if it doesn't. - -2004-03-14 Erik de Castro Lopo - - * tests/write_read_test.tpl - Fix compiler warning on Win32. - - * src/file_io.c - Fix use of an un-initialised variable in Win32 stuff. - - * Win32/config.h examples/sndfile-play.c - Win32 fixes. - -2004-03-10 Erik de Castro Lopo - - * configure.ac - Fix bug which occurres when configuring for MinGW. - If compiler is gcc and cross compiling use -nostdinc. - -2004-03-09 Erik de Castro Lopo - - * src/common.h src/aiff.c src/wav.c src/float32.c src/double64.c - src/sndfile.c - Fix a bug with PEAK chunk handling for files with more than 16 channels. - Thanks to Remy Bruno for finding this. - -2004-03-08 Erik de Castro Lopo - - * src/common.c - Fix a bug which was preventing WAV files being openned correctly if the - file had a very large header. Thanks to Eldad Zack for finding this. - -2004-03-04 Erik de Castro Lopo - - * configure.ac src/file_io.c - Fix cross-compiling from Linux to Win32 using the MinGW tools. - -2004-03-01 Erik de Castro Lopo - - * src/create_symbols_file.sh - Christian Weisgerber pointed out that the shell script did not run on a - real Bourne shell although it did run under Bash in Bourne shell mode. - - * src/create_symbols_file.py - Rewrite of above in Python. Also add support for writing Win32 .def files. - The Python script generates Symbols.linux, Symbols.darwin and - libsndfile.def (Win32 version). These files get shipped with the tarball - so there should not be necessary to run the Python script when building - the code from the tarball. - - * configure.ac src/Makefile.am Win32/Makefile.am - Hook new Python script into the build system. - -2004-02-25 Erik de Castro Lopo - - * src/configure.ac - Add --enable-gcc-werror option and move GCC specific stuff down. - -2004-02-24 Erik de Castro Lopo - - * acinclude.m4 configure.ac - Fix clip mode detection (tested in one of HP's testdrive Itanium II boxes). - - * src/file_io.c - Added check for sizeof (off_t) != sizeof (sf_count_t) to prevent recurrence - of missing large file support on Linux and Solaris. - -2004-02-19 Erik de Castro Lopo - - * examples/sndfile-play.c - Fix a MacOSX specific bug which was caused by a space being inserted in - the middle of a file name. - - * configure.ac src/Makefile.am examples/Makefile.am - Fix a couple of MacOSX build issues. - -2004-02-17 Erik de Castro Lopo - - * doc/command.html - Document SFC_SET_CLIPPING and SFC_GET_CLIPPING. - -2004-02-14 Erik de Castro Lopo - - * doc/*.html - Applied patch from Frank Neumann (author of lakai) which fixes many minor - typos in documentation. Thanks Frank. - -2004-02-13 Erik de Castro Lopo - - * ChangeLog - Changed my email address throughout source and docs. - -2004-02-08 Erik de Castro Lopo - - * src/file_io.c - Make sure config.h is included before stdio.h to make sure large file - support is enabled on Linux (and Solaris). - - * tests/misc_test.c - Disable update_header test on Win32. This should work but doesn't and - I'm not sure why. - - * Make.bat Win32/Makefile.msvc - Updates. - -2004-01-07 Erik de Castro Lopo - - * src/common.h - Changed logindex, headindex and headend files of SF_PRIVATE from unsigned - int to int to prevent weird arithmetic bugs. - - * src/common.c src/aiff.c src/wav.c src/w64.c - Fixed compiler warnings resulting from above change. - -2004-01-06 Erik de Castro Lopo - - * src/common.c - Fixed a bug in header reader for some files with data after the sample data. - -2003-12-29 Erik de Castro Lopo - - * tests/lossy_comp_test.c tests/Makefile.am - Add tests for AIFF/IMA files. - -2003-12-26 Erik de Castro Lopo - - * src/macbinary3.c src/macos.c - Two new files required for handling SD2 files. - - * src/common.h - Add prototypes for functions in above two files. - - * src/Makefile.am - Hook new files into build system. - -2003-12-21 Erik de Castro Lopo - - * configure.ac - Add checks for mmap() and getpagesize() which might be used at some time - for faster file reads. - Add detection of MacOSX. - -2003-12-13 Erik de Castro Lopo - - * doc/FAQ.html - Minor mods to pkg-config section. - -2003-12-12 Erik de Castro Lopo - - * src/create_symbols_file.sh - Andre Pang (also known as Ozone) pointed out that on MacOSX, all non - static symbols are exported causing troubles when trying to link - libsndfile with another library which has any of the same symbols. - He fixed this by supplying the MacOSX linker with a file containing - all the public symbols so that only they would be exported and then - supplied a patch for libsndfile. - This wasn't quite ideal, because I would have to maintain two (3 if - you include Win32) separate files containing the exported symbols. - A better solution was to create this script which can generate a - Symbols file for Linux, MacoSX and any other OS that supports - minimising the number of exported symbols. - - * configure.ac src/Makefile.am - Hook the new script into the build process. - -2003-12-10 Erik de Castro Lopo - - * doc/index.html - Added comments about Steve Dekorte's SoundConverter scam. - -2003-12-07 Erik de Castro Lopo - - * src/file_io.c - Axel Roebel pointed out that on Mac OSX a pipe is not considered a fifo - (S_ISFIFO (st.st_mode) is false) but a socket (S_ISSOCK (st.st_mode) is - true). The test has therefore been changed to is S_ISREG and anything - which which does not return true for S_ISREG is considered a pipe. - -2003-11-25 Erik de Castro Lopo - - * tests/misc_test.c - Fix update_header_test to pass SDS. - - * src/sds.c - More minor fixes. - - * tests/floating_point_test.c - Add test for SDS files. - - * src/command.c - Add SDS to major_formats array. - -2003-11-24 Erik de Castro Lopo - - * tests/write_read_test.tpl tests/misc_test.c - Add tests for SDS files. - - * src/sds.c - Fix a bug in header update code. - -2003-11-23 Erik de Castro Lopo - - * src/sds.c - Get file write working. - - * src/paf.c - Fix a potential bug in paf24_seek(). - -2003-11-04 Erik de Castro Lopo - - * doc/FAQ.html - Add Q/A about u-law encoded WAV files. - - * Win32/*.h - Updated so it compiles on Win32. - -2003-11-03 Erik de Castro Lopo - - * examples/sndfile-convert.c - Add -alaw and -ulaw command line arguments. - - * configure.ac - Add library versioning comments. - Add arguments to AC_INIT. - -2003-10-28 Erik de Castro Lopo - - * src/file_io.c - Ross Bencina has contributed code to replace all of the (mostly broken) - Win32 POSIX emulation calls with calls the native Win32 file I/O API. - This code still needs testing but is likely to be a huge improvemnt - of support for Win32. Thanks Ross. - -2003-10-27 Erik de Castro Lopo - - * src/dwvw.c - Removed filedes field from the DWVW_PRIVATE struct. - - * src/file_io.c - Change psf_fopen() so it returns psf->error instead of the file descriptor. - Add new functions psf_set_stdio() and psf_set_file(). - - * src/sndfile.c - Change these to work with changed psf_fopen() return value. - Remove all uses of psf->filedes from sndfile, making it easier to slot native - Win32 API file handling functions. - - * src/test_file_io.c - Minor changes to make it compile with new file_io.c stuff. - -2003-10-26 Erik de Castro Lopo - - * src/gsm610.h - Rename a variable from true to true_flag. As Ross Bencina points out, - true is defined in the C99 header . - - * src/file_io.c - If fstat() fails, return SF_TRUE instead of -1 (Ross Bencina). - -2003-10-09 Erik de Castro Lopo - - * src/common.h - Increase the size of SF_BUFFER_LEN and SF_HEADER_LEN. - - * src/sndfile.c - Fix sf_read/write_raw which were dividing by psf->bytwidth and - psf->blockwidth which can both be zero. - - * examples/sndfile-info.c - Increase size of BUFFER_LEN. - -2003-09-21 Erik de Castro Lopo - - * configure.ac - Add checks for and ssize_t. - Other Win32/MinGW checks. - - * src/aiff.c src/au_g72x.c src/file_io.c src/gsm610.c src/interleave.c - src/paf.c src/sds.c src/svx.c src/voc.c src/w64.c src/wav.c src/xi.c - Fix compiler warnings. - -2003-09-20 Erik de Castro Lopo - - * tests/scale_clip_test.tpl - Add definition of M_PI if needed. - -2003-09-19 Erik de Castro Lopo - - * configure.ac - Detect if S_IRGRP is declared in . - - * src/file_io.c tests/*.tpl tests/*.c - More fixes for Win32/MSVC++ and MinGW. MinGW does have but that - file doesn't declare S_IRGRP. - -2003-10-18 Erik de Castro Lopo - - * src/config.h.in - Add comment stating that the sf_count_t typedef is determined when - libsndfile is being compiled. - - * tests/utils.tpl - Modified so that utils.c gets one copy of the GPL and not two. - - -2003-09-17 Erik de Castro Lopo - - * Win32/unistd.h src/sf_unistd.h - Move first file to the second. This will help for Win32/MSVC++ and MinGW. - - * Win32/Makefile.am src/Makefile.am - Changed in line with above. - - * Win32/Makefile.msvc - Removed "/I Win32" which is no longer required. - - * src/file_io.c src/test_file_io.c tests/*.tpl tests/*.c - If HAVE_UNISTD_H include else include . This should - work for Win32, MinGW and other fakes Unix-like OSes. - - * src/*.c - Removed #include from files which didn't need it. - -2003-09-16 Erik de Castro Lopo - - * libsndfile.spec.in - Apply fix from Andrew Schultz. - -2003-09-07 Erik de Castro Lopo - - * src/vox_adpcm.c - Only set psf->sf.samplerate if the existing value is invalid. - -2003-09-06 Erik de Castro Lopo - - * examples/sndfile-play.c - Started adding support for ALSA output. - -2003-09-04 Erik de Castro Lopo - - * src/sndfile.h.in - Removed from sndfile.h. - - * src/*.c examples/*.c tests/*.c tests/*.tpl - Added where needed. - -2003-09-02 Erik de Castro Lopo - - * src/common.h - Added ARRAY_LEN, SF_MAX and SF_MIN macros. - -2003-08-19 Erik de Castro Lopo - - * doc/index.html - Remove statements about alternative licensing arrangements. - -2003-08-17 Erik de Castro Lopo - - * MacOS MacOS9 Makefile.am configure.ac - Change directory name from MacOS to MacOS9 - - * MacOS9/MacOS9-readme.txt - Change name to make it really obvious, add text to top of file to make it - still more obvious again. - -2003-08-16 Erik de Castro Lopo - - * src/test_log_printf.c - Add tests for %u conversions. - - * src/common.c - Fix psf_log_printf() %u conversions. - -2003-08-15 Erik de Castro Lopo - - * src/aiff.c - Fixed a bug where opening a file with a non-trival header in SFM_RDWR mode - would over-write part of the header. Thanks to Axel Roebel for pointing - this out. Axel also provided a patch to fix this but I came up with a - neater and more general solution. - Return error when openning an AIFF file with data after the SSND chunk - (Thanks Axel Roebel). - - * tests/aiff_rw_test.c - Improvements to test program which will later allow it to be generalised to - test WAV, SVX and others as required. - -2003-08-14 Erik de Castro Lopo - - * tests/pipe_test.c - Add useek_pipe_rw_test() submitted by Russell Francis. - - * src/sndfile.c - In sf_open_fd(), check if input file descriptor is a pipe. - - * src/sndfile.[ch] - Fix typo in variable name do_not_close_descriptor. - -2003-08-13 Erik de Castro Lopo - - * src/test_log_printf.c - Improve the tests for %d and %s conversions. - - * src/common.c - Fixed a few problems in psf_log_printf() found using new tests. - -2003-08-06 Erik de Castro Lopo - - * configure.ac - Add -Wwrite-strings warning to CFLAGS if the compiler is GCC. Thanks to - Peter Miller (Aegis author) for suggesting this and supplying a patch. - - * src/*.c examples/*.c tests/*.c - Fix all compiler warnings arising from the above. - -2003-08-02 - - * tests/aiff_rw_test.c tests/Makefile.am - New test program to check for errors re-writing the headers of AIFC files - opened in mode SFM_RDWR. - -2003-07-21 Erik de Castro Lopo - - * examples/sndfile-play.c - Applied a patch from Tero Pelander to allow this program to run on systems - using devfs which used /dev/sound/dsp instead of /dev/dsp. - -2003-07-11 Erik de Castro Lopo - - * doc/new_file_type.HOWTO - Updated document. Still incomplete. - -2003-06-29 Erik de Castro Lopo - - * src/sndfile.c - Fix VALIDATE_SNDFILE_AND_ASSIGN_PSF which was returning an error rather - than saving it and returning zero. - -2003-06-25 Erik de Castro Lopo - - * src/file_io.c - Two fixes for Mac OS9. - Fix all casts from sf_count_t to ssize_t (not size_t). - -2003-06-22 Erik de Castro Lopo - - * src/wav.c - Fix for reading files with RIFF length of 8 and data length of 0. - -2003-06-14 Erik de Castro Lopo - - * src/*.c tests/*.c tests/*.tpl - Added comments to mark code for removal when make Lite version of - libsndfile. - -2003-06-09 Erik de Castro Lopo - - * examples/sndfile-convert.c - Add extra error checking for unrecognised arguments. - -2003-06-08 Erik de Castro Lopo - - * src/ima_adpcm.c - Started adding code to write IMA ADPCM encoded AIFF files. - - * src/test_log_printf.c src/Makefile.am - New file to test psf_log_printf() function and add hooks into build system. - - * src/common.c - Move psf_log_printf() function to top of the file and only compile the rest - of the file if if PSF_LOG_PRINTF_ONLY is not defined. - -2003-06-03 Erik de Castro Lopo - - * Win32/config.h Win32/sndfile.h - Updated with new config variables. - - * Win32/unistd.h src/file_io.c - Added implementation of S_ISFIFO macro which Win32 seems to lack and is - used in src/file_io.c. - - * tests/utils.tpl - Added #include to pull in Win32/unistd.h so it compiles for - Win32. - - * src/Makefile.msvc - Added src\test_file_io.exe build target and run this as the very first - test. - - * tests/win32_test.c - Add support for testing Cygwin32. - - * configure.ac - Detect POSIX fsync() and fdatasync() functions. - - * src/file_io.c - If compiling for Cygwin, call fsync() before calling fstat() to retrieve - file length. - - * tests/pcm_test.tpl - Add a test for lrintf() function. This was required to detect a really - broken lrint() and lrintf() on Cygwin. - - * tests/misc_test.c - Don't run permission test when compiling under Cygwin. - - * src/float_cast.h - Fix fallback macro for lrint() and lrintf() to cast to long instead of int - to match official function prototypes. - -2003-06-02 Erik de Castro Lopo - - * examples/sndfile-convert.c - Modifications to improve accuracy of conversions; use double data for - floating point and int for everything else. - - * src/ima_apdcm.c - Completed work on decoding IMA ADPCM encoded AIFF files. Still need to - get encoding working. - -2003-05-28 Erik de Castro Lopo - - * src/aiff.c src/ima_adpcm.c - Start working on getting IMA ADPCM encoded AIFF files working. - -2003-05-27 Erik de Castro Lopo - - * configure.ac - Fixed the touch command for when the autogen program is not found (Matt - Flax). - - * src/ulaw.c src/alaw.c - Made these pipe-able. - -2003-05-24 Erik de Castro Lopo - - * src/paf.c src/ircam.c - Fixed writing to pipe. - - * src/wav.c src/aiff.c src/nist.c src/mat*.c src/svx.c src/w64.c - Return SFE_NO_PIPE_WRITE if an attempt is made to write to a pipe. - -2003-05-23 Erik de Castro Lopo - - * examples/sndfile-info.c - Modified to detect unknown file lengths. - - * src/mat4.c - Fix reading from a pipe. - -2003-05-22 Erik de Castro Lopo - - * tests/pipe_test.c - Add more file types to tests. - - * src/mat4.c - Removed explicit setting of psf->sf.seekable to SF_TRUE. - - * tests/utils.tpl - Add macro for generating and check data in the stdio and pipe tests. - - * tests/stdout_test.c tests/stdin_test.c - Use the above macro to generate known data on output and check data on - input. - - * src/voc.c src/htk.c common.h sndfile.c - Disallow reading/writing VOC and HTK files from/to pipes be returning new - error values. - - * src/w64.c - Fixes to allow reading from a pipe. - -2003-05-21 Erik de Castro Lopo - - * configure.ac src/sndfile.h.in - When the configure script determines the sizeof (sf_count_t), also set the - value of SF_COUNT_MAX in sndfile.h. - - * configure.ac - Remove -pedantic flag from default GCC compiler flags. - - * tests/pipe_test.c - Add a pipe_read_test() before doing pipe_write_test(). - - * tests/scale_clip_test.c - Add test to make sure non-normalized values also clip in the right way. - -2003-05-18 Erik de Castro Lopo - - * configure.ac - Add test to detect processor clipping capabilities. - - * tests/stdin_test.c tests/stdout_test.c - Fix a pair of compiler warnings. - - * src/common.h - Add new pipeoffset field to SF_PRIVATE. This will contain the current file - offset when operating on a pipe. - - * src/common.c - Removed direct calls to psf_fread()/psf_fseek()/psf_fgets() etc from - psf_binheader_readf and redirect them to new buffered versions - header_read(), header_seek() and header_gets(). - Add "G" format specifier to emulate fgets() functionality with buffering. - This will allow reading some file types from pipes. - - * src/file_io.c - When the file descriptor is a pipe, manintain psf->pipeoffset. - - * src/pvf.c - Change use of psf_fgets() to psf_binheader_readf() as required but changes to header re - - * src/au.c - Fix reading from a pipe. - -2003-05-17 Erik de Castro Lopo - - * src/pcm.c - Add clipping versions of the f2XXX_array() functions to allow option of - clipping data that would otherwise overflow. - - * tests/scale_clip_test.tpl tests/scale_clip_test.def - New files test that clipping option does actually work. - -2003-05-14 Erik de Castro Lopo - - * doc/index.html - Fixed a typo ("OS(" instead of "OS9"). - -2003-05-13 Erik de Castro Lopo - - * tests/open_fail_test.c - Include to prevent warning message of missing declaration of - memset(). - -2003-05-12 Erik de Castro Lopo - - * src/common.h - Add new "add_clipping" field to SF_PRIVATE. - - * src/sndfile.h.in src/sndfile.c - Add command SFC_SET_CLIPPING which sets/resets add_clipping field. - -2003-05-11 Erik de Castro Lopo - - * doc/api.html - Add docs for sf_set_string() and sf_get_string(). - - * src/common.h src/sndfile.c - Add new SFE_STR_BAD_STRING error. - - * tests/stdin_test.c tests/stdout_test.c - Removed all non-error print statements. - - * tests/stdio_test.c tests/pipe_test.c tests/Makefile.am - Add print statements removed from two files above. - -2003-05-10 Erik de Castro Lopo - - * libsndfile.spec.in - Fixed a coulpe of minor errors discovered by someone calling themselves - Agent Smith. - - * src/common.c src/common.h src/file_io.h - Added is_pipe field to SF_PRIVATE and declaration of psf_is_pipe() - function. (Axel Roebel) - - * src/sndfile.c - Fixed determination of whether the file is a pipe. (Axel Roebel) - - * src/paf.c - Force paf24 to start with undefined mode. (Axel Roebel) - - * tests/pipe_test.c - Mods to make this test work and actually do the test on RAW files. (Axel - Roebel). - -2003-05-05 Erik de Castro Lopo - - * src/sndfile.c - Fixed a potential bug where psf->sf.seekable was being set to FALSE when - operating on stdin or stdout but then the default initialiser was reseting - it to TRUE. Thanks to Axel Roebel. - - * src/aiff.c - Fixed a bug in the header parser where it was not handling an odd length - COMM chunk correctly. Thanks to Axel Roebel. - - * src/test_file_io.c - Add more tests. - - * tests/win32_test.c - New file for showing the bugs in the Win32 implementation of the POSIX API. - It also runs on Linux for sanity checking. - - * tests/Makefile.am Win32/Makefile.msvc - Hook the new test program into the build system. - -2003-05-04 Erik de Castro Lopo - - * src/test_file_io.c - New test program to test operation of functions defined in file_io.c. This - should make supporting win32 significantly easier. - - * src/Makefile.am - Hook new test program into the build system. - - * src/file_io.c - Add compile/run time check that sizeof statbuf.st_size and sf_count_t are - the same. - - * src/common.h src/sndfile.c - Added new error code and error message for new check. - - * tests/benchmark.tpl - Fix to use frames instead of samples in SF_INFO. - -2003-05-03 Erik de Castro Lopo - - * src/file_io.c - More stuffing about working around PLAIN OLD-FASHIONED **BUGS** in Win32. - - * examples/sndfile-info.c - Applied patch from Conrad Parker to add "--help" and "-h" options as - well as an improved usage message. - -2003-05-02 Erik de Castro Lopo - - * src/au.c - Added embedded file support. - - * tests/multi_file_test.c - Added tests for embedded AU files. - Added verbose testing mode. - - * src/common.h src/sndfile.c - Added an embedded AU specific error code and message. - - * src/wav.c - Added patch from Conrad Parker which filled in a little more information - about ACIDized WAV files. - -2003-04-30 Erik de Castro Lopo - - * src/file_io.c - Fixed Win32 version of psf_fseek() which was calling psf_get_filelen() - which was in turn calling psf_fseek() which in the end blew the stack. - Now of course this would have been easy to find on Linux, but this blow - up was happening in kernel32.dll and the fscking MSVC++ debugger couldn't - figure out what call caused this (it couldn't even tell me the stack had - overflowed) and was absolutley useless for this debugging exercise. - On top of that, the reason I got into this mess was that windoze doesn't - have a working fstat() function which can return file lengths > 2 Gig. It - HAS a fscking _fstati64() but the file length value is only updated AFTER - the bloody file is closed. That makes it completely useless. - How the hell do people stand working on this crap excuse of an OS? - -2003-04-29 Erik de Castro Lopo - - * Win32/unistd.h src/file_io.c - Moved definitions of S_IGRP etc from file_io.c to unistd.h so that these - can be used in the test programs. - - * Win32/libsndfile.def - Added sf_open_fd. - - * Win32/sndfile.h - Updated to match src/sndfile.h.in. - - * Win32/Makefile.msvc - Added dither.c and htk.c to libsndfile.dll target. - -2003-04-28 Erik de Castro Lopo - - * src/file_io.c - First attempt at getting the Win32 versions of the these functions working. - They still need to be tested. - -2003-04-27 Erik de Castro Lopo - - * src/strings.c - Found and fixed a bug which was causing psf_store_string() to fail on - Motorola 68k processors. Many thanks fo Joshua Haberman (Debian maintainer - of libsndfile) for compiling and running debug code to help me debug the - problem. - -2003-04-26 Erik de Castro Lopo - - * src/sndfile.c src/file_io.c src/wav.c src/aiff.c - Much hacking to get reading and writing of embedded files working (ie sound - files at a non-zero files offset). - - * doc/embedded_files.html - First pass atempt at documenting reading/writing embedded files. - -2003-04-21 Erik de Castro Lopo - - * doc/FAQ.html - Updated answer to "Why doesn't libsndfile do interleaving/de-interleaving?" - -2003-04-19 Erik de Castro Lopo - - * src/wav.c src/aiff.c - Fix retrieving and storing of string data from files. Need to be careful - about using psf->buffer for strings. - -2003-04-18 Erik de Castro Lopo - - * src/file_io.c - Fix psf_fseek() for seeks withing embedded files. - -2003-04-15 Erik de Castro Lopo - - * src/sndfile.h.in - Changed the definition of SNDFILE slightly to produce warnings when it isn't - used correctly. This should have zero affect in code which uses the SNDFILE - type correctly. - - * src/sndfile.c - Fixed a few compiler warnings cause by the changes to the SNDFILE type. - -2003-04-12 Erik de Castro Lopo - - * doc/FAQ.html - Added question and answer to the question "How about adding the ability - to write/read sound files to/from memory buffers?". - -2003-04-08 Erik de Castro Lopo - - * tests/write_read_test.tpl - Removed un-needed enums declaring TRUE and FALSE and replaced usage of - these with SF_TRUE and SF_FALSE. - - * tests/multi_file_test.c - New test program to test sf_open_fd() on files containing data other than - a single sound file. - -2003-04-06 Erik de Castro Lopo - - * src/file_io.c - When creating files, set the readable by others flag. This still allows - further restrictions to be enforced by use of the user's umask. Fix - suggested by Eric Lyon. - -2003-04-05 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - Changed sf_open_fd(). Dropped offset parameter and added a close_desc - parameter. If close desc is TRUE, the file descritpor passed into the - library will be closed when sf_close() is called. - - * tests/utils.tpl - Modified call to sf_open_fd() to set close_desc parameter to SF_TRUE. - -2003-04-04 Erik de Castro Lopo - - * tests/write_read_test.tpl - Add a string (using sf_set_string() function) before and after data section - of all files. This will make sure that if string data can be added, it - doesn't overwrite real audio data. - -2003-04-02 Erik de Castro Lopo - - * src/sndfile.c - Started work on supporting a non-zero offset parameter for sf_open_fd (). - - * src/.c - Removed many uses of psf_fseek (SEEK_END) which to allow for future use of - sf_open_fd() with non-zero offset. - Associated refactoring. - - * src/aiff.c - Implemented functionality required to get sf_get_string() and - sf_set_string() working for AIFF files. - -2003-04-01 Erik de Castro Lopo - - * tests/utils.tpl - Modified test_open_file_or_die() to alternately use sf_open() and - sf_open_fd(). - - * src/svx.c - Fixed a bug which occurred when openning an existing file for read/write - using sf_open_fd(). In this case, the existing NAME chunk needs to be - read into psf->filename. - Fixed printing of sf_count_t types to logbuffer. - -2003-03-31 Erik de Castro Lopo - - * src/sndfile.h.in - Added prototype for new function sf_open_fd(). - - * src/sndfile.c - Moved most of the code in sf_open() to a new function psf_open_file(). - Created new function sf_open_fd() which also uses psf_open_file() but - does not currently support the offset parameter. - - * doc/api.html - Document sf_open_fd(). - -2003-03-09 Erik de Castro Lopo - - * src/sndfile.c - Fixed a memory leak reported by Evgeny Karpov. Memory leak only occurred - when an attempt was made to read and the open() call fails. - -2003-03-08 Erik de Castro Lopo - - * tests/open_fail_test.c - New test program to check for memory leaks when sf_open fails on a valid - file. Currently this must be run manually under valgrid. - - * tests/Makefile.am - Hook new test program into build. - -2003-03-03 Erik de Castro Lopo - - * Octave/sndfile_save.m Octave/sndfile_play.m - Added a -mat-binary option to the octave save command to force the output - to binary mode even if the user has set ascii data as the default. Found - by Christopher Moore. - -2003-02-27 Erik de Castro Lopo - - * doc/dither.html - New file which will document the interface which allows the addition of - audio dither when sample word sizes are being reduced. - - * src/dither.c - More work. - -2003-02-26 Erik de Castro Lopo - - * tests/misc_test.c - In update_header_test(), make HTK files a special case. - - * doc/index.html - Added HTK to the feature matrix. - -2003-02-25 Erik de Castro Lopo - - * src/htk.c - New file for reading/writing HMM Tool Kit files. - - * src/sndfile.h.in src/sndfile.c src/command.c src/Makefile.am - Hook in htk.c - - * tests/write_read_test.tpl tests/misc_test.c tests/Makefile.am - Add tests for HTK files. - -2003-02-22 Erik de Castro Lopo - - * src/wav.c - Fixed a bug where the LIST chunk length was being written incorrectly. - - * tests/string_test.c - Added call to check_log_buffer(). - Minor cleanups. - -2003-02-10 Erik de Castro Lopo - - * src/wav_w64.h - Applied patch from Antoine Mathys to add extra WAV format definitions and - a G72x_ADPCM_WAV_FMT struct definition. - - * src/wav_w64.c - Applied patch from Antoine Mathys which converts wav_w64_format_str() from - one huge inefficient switch statement to a binary search. - - * tests/string_test.c - Dump log buffer if tests fail. - -2003-02-07 Erik de Castro Lopo - - * tests/string_test.c - David Viens supplied some modifications to this file which showed up a bug - when using sf_set_string() and the sf_writef_float() functions. - - * src/sndfile.c - Fixed the above bug. - -2003-02-06 Erik de Castro Lopo - - * doc/FAQ.html - Added Q and A on how to detect libsndfile in configure.in (at the suggestion - of Davy Durham). - -2003-02-05 Erik de Castro Lopo - - * src/sndfile.h.in - Add enums and typedefs for dither. - Deprecate SFC_SET_ADD_DITHER_ON_WRITE and SFC_SET_ADD_DITHER_ON_READ, to be - replaced with SFC_SET_DITHER_ON_WRITE and SFC_SET_DITHER_ON_READ which will - allow different dither algorithms to be enabled. - Added SFC_GET_DITHER_INFO_COUNT and SFC_GET_DITHER_INFO. - - * src/sndfile.h.in src/Version_script.in Win32/libsndfile.def. - Added public sf_dither_*() functions. - - * src/sndfile.c - Implement commands above. - - * src/dither.c - More work. Framework and external hooks into dither algorithms complete. - -2003-02-03 Erik de Castro Lopo - - * doc/version-1.html libsndfile_version_convert.py - Remove redundant files. - - * doc/index.html doc/api.html - Remove links to version-1.html. - - * src/dither.c - New file to allow the addition of audio dither on input and output. - - * src/common.h - Add prototype for dither_init() function. - - * Makefile.am doc/Makefile.am - Changes for added and removed files. - -2003-02-02 Erik de Castro Lopo - - * Win32/Makefile.msvc - Changes to force example binaries to be placed in the top level directory - instead of the examples/ directory. - Add src/strings.c and src/xi.c to the build. - Add string_test to build and to tests on WAV files. - - * doc/index.html - Added XI to support matrix. - -2003-01-27 Erik de Castro Lopo - - * src/sndfile.h.in - Added prototypes for sf_get_string() and sf_set_string() and SF_STR_* - enum values. - - * src/sndfile.c - Added public interface to sf_get_string() and sf_set_string(). - - * src/wav.c - Added code for setting and getting strings in WAV files. - - * tests/string_test.c - New test program for sf_get_string() and sf_set_string() functionality. - - * tests/Makefile.am - Hook new test program into build and test framework. - -2003-01-26 Erik de Castro Lopo - - * src/common.h - Added fields to SF_PRIVATE for string data needed to implement - sf_get_string() and sf_set_string(). - - * src/strings.c - New file for storing and retrieving strings to/from files. - - * src/Makefile.am - Added strings.c to build. - -2003-01-25 Erik de Castro Lopo - - * src/xi.c - Read seems to be working so looking at write. - - * src/sndfile.h.in - Added SF_FORMAT_XI, SF_FORMAT_DPCM_8 and SF_FORMAT_DPCM_16 enum values. - - * tests/floating_point_test.c tests/lossy_comp_test.c tests/Makefile.am - Added test for 8 and 16 bit XI format files. - -2003-01-24 Erik de Castro Lopo - - * doc/index.html - Added a non-lawyer readable summary of the licensing provisions as - suggested by Steve Dekorte. - -2003-01-23 Erik de Castro Lopo - - * src/wav.c - Fixed a compiler warning found by Alexander Lerch. - -2003-01-18 Erik de Castro Lopo - - * configure.ac - Fixed the multiple linking of libm. - -2003-01-17 Erik de Castro Lopo - - * Win32/Makefile.mcvs - Added comments on the correct way to set up the MSVCDir environment - variable. - - * doc/win32.html - Add on how to set up the MSVCDir environment variable. - -2003-01-15 Erik de Castro Lopo - - * examples/sndfile-play.c examples/sndfile-info.c - When run on Win32 without any command line parameters print a message and - then sleep for 5 seconds. This means the when somebody double clicks on - these programs in explorer the user will actually see the message. - -2003-01-14 Erik de Castro Lopo - - * tests/misc_test.c - Bypass permission test if running as root because root is allowed to open - a readonly file for write. - -2003-01-08 Erik de Castro Lopo - - * Win32/Makefile.msvc - Added pvf.c and xi.c source files to project. - - * src/sndfile.h - Updated for PVF files. - -2003-01-07 Erik de Castro Lopo - - * src/sndfile.c - Modified validate_sfinfo() to force samplerate, channels and sections - to be >= 1. - In format_from_extension() replaced calls to does_extension_match() - with strcmp(). - - * src/xi.c - More work. - -2003-01-06 Erik de Castro Lopo - - * doc/Makefile.am - Added octave.html which had been left out. Found by Jan Weil. - -2003-01-05 Erik de Castro Lopo - - * src/pvf.c src/common.h src/sndfile.c - Fixed error handling for PVF files. - - * src/xi.c - New file for handling Fasttracker 2 Extended Instrument files. Not working - yet and included when configured with --enable-experimental. - - * src/sndfile.c src/common.h - Hooked in new file xi.c. - -2002-12-30 Erik de Castro Lopo - - * src/rx2.c - Added a patch from Marek Peteraj which sheds a little more light on the - slices within an RX2 file. Still need to find out data encoding. - -2002-12-20 Erik de Castro Lopo - - * src/wav.c - Started work on decoding 'acid' and 'strc' chunks. - -2002-12-14 Erik de Castro Lopo - - * tests/peak_check_test.c - Minor cleanup. - -2002-12-12 Erik de Castro Lopo - - * tests/write_read_test.tpl - Added check to make sure no error was generated when an attempt was made to - read past the end of the file. - -2002-12-11 Erik de Castro Lopo - - * doc/lists.html - Added "mailto" links for all three lists. - - * src/pvf.c - New file for Portable Voice Format files. - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am - Added hooks for SF_FORMAT_PVF format files. - - * tests/write_read_test.tpl tests/std*.c - Add tests for SF_FORMAT_PVF. - - * doc/index.html - Add PVF to the compatibility matrix. - - * src/pcm.c src/alaw.c src/ulaw.c src/float32.c src/double64.c - Previously, attempts to read beyond the end of a file would set psf->error - to SFE_SHORT_ERROR. This behaviour diverged from the behaviour of the POSIX - read() call but has now been fixed. - Attempts to read beyond the end of the file will return a short read count - but will not longer set any error. - -2002-12-09 Erik de Castro Lopo - - * src/sndfile.c - Add more sanity checking when opening a RAW file for read. When format is - not RAW, zero out all members of the SF_INFO struct. - - * tests/raw_test.c - Add bad_raw_test() to check for above problem. - - * tests/stdin_test.c examples/sndfile-info.c - Set the format field of the SF_INFO struct to zero before calling - sf_open(). - - * doc/api.html - Add information about the need to set the format field of the SF_INFO struct - to zero when opening non-RAW files for read. - - * configure.ac - Removed use of conversion script on Solaris. Not all Solaris versions - support it. - - * doc/lists.html - New file containg details of the mailing lists. - - * doc/index.html - Add a link to the above new file. - -2002-12-04 Erik de Castro Lopo - - * tests/dft_cmp.c - Fixed a SIGFPE on Alpha caused by a log10 (0.0). Thanks to Joshua Haberman - for providing the gdb traceback. - -2002-11-28 Erik de Castro Lopo - - * src/wav.c - Added more capabilities to 'smpl' chunk parser. - - * src/sndfile.c - Fixed some (not all) possible problems found with Flawfinder. - -2002-11-24 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_seek(). This bug could only occur when an attempt was - made to read beyond the end and then sf_seek() was called with a whence - parameter of SEEK_CUR. - - * src/file_io.c - Win32's _fstati64() does not work, it returns BS. Re-implemented - psf_get_filelen() in terms of psf_fseek(). - - * tests/write_read_test.tpl - Add a test to detect above bug. - - * src/float_cast.h - Modification to prevent compiler warnings on Mac OS X. - - * src/file_io.c - Fixes for windows (what a f**ked OS). - -2002-11-08 Erik de Castro Lopo - - * configure.ac - Disable use of native lrint()/lrintf() on Mac OSX. These functions exist on - Mac OSX 10.2 but not on 10.1. Forcing the use of the versions in - src/float_cast.h means that a library compiled on 10.2 will still work on - 10.1. - -2002-11-06 Erik de Castro Lopo - - * configure.in configure.ac - Renamed configure.in to configure.ac as expected by later versions of - autoconf. - Slight hacking of configure.ac to work with version 2.54 of autoconf. - Changed to using -dumpversion instead of --version for determining GCC - version numer as suggested by Anand Kumria. - - * src/G72x/Makefile.am - Slight hacking required for operation with automake 1.6.3. - -2002-11-05 Erik de Castro Lopo - - * src/common.c - In psf_binheader_readf() changed type parameter type "b" type from size_t - to int to prevent errors on IA64 CPU where sizeof (size_t) != sizeof (int). - Thanks to Enrique Robledo Arnuncio for debugging this. - -2002-11-04 Erik de Castro Lopo - - * test/command_test.tpl - Changed test value so test would pass on Solaris. - - * src/Version_script.in - Modified version numbering so that later versions of 1.0.X can replace - earlier versions without recompilation. - - * src/vox_adpcm.c - Fixed bug causing short reads. - -2002-11-03 Erik de Castro Lopo - - * test/floating_point_test.c - Code cleanup using functions from util.c. - Add test for IEEE replacement floats and doubles. - -2002-11-01 Erik de Castro Lopo - - * src/wav.c - Fixed a possible divide by zero error when read the 'smpl' chunk. Thanks to - Serg Repalov for the example file. - - * tests/pcm_test.tpl - Used sf_command (SFC_TEST_IEEE_FLOAT_REPLACE) to test IEEE replacement code. - Clean up pcm_double_test(). - - * src/float32.c src/double64.c - Force use of IEEE replacement code using psf->ieee_replace is TRUE, - Print message to log_buffer as well. - Rename all broken_read_* and broken_write* functions to replace_read_* and - replace_write_*. - - * tests/util.tpl - Added string_in_log_buffer(). - - * tests/pcm_test.tpl - Use string_in_log_buffer() to ensure that IEEE replacement code has been - used. - - * configure.in - Removed --enable-force-broken-float option. IEEE replacement code is now - always tested. - -2002-10-31 Erik de Castro Lopo - - * src/double64.c - Implement code for read/writing IEEE doubles on platforms where the native - double format is not IEEE. - - * src/float32.c src/common.h - Remove float32_read() and float32_write(). Replace with float32_le_read(), - float32_be_read(), float32_le_write() and float32_be_write() to match stuff - in src/double64.c. - - * src/common.c - Fix all usage of float32_write(). - - * src/sndfile.h.in - Added SFC_TEST_IEEE_FLOAT_REPLACE command (testing only). - - * src/common.h - Added SF_PRIVATE field ieee_replace. - - * src/sndfile.c - In sf_command() set/reset psf->ieee_replace. - -2002-10-26 Erik de Castro Lopo - - * tests/pcm_test.tpl - Fixed a problem when testing with --enable-force-broken-float. The test was - generating a value of negative zero and the broken float code is not able - to write negative zero. Removing the negative zero fixed the test. - -2002-10-25 Erik de Castro Lopo - - * src/file_io.c - Added fix for Cygwin (suggested by Maros Michalik). - -2002-10-23 Erik de Castro Lopo - - * src/file_io.c - Improved error detection and handling. - - * src/file_io.c src/common.h - Removed functions psf_ferror() and psf_clearerr() which were redundant - after above improvements. - - * src/aiff.c src/svx.c src/w64.c src/wav.c - Removed all use of psf_ferror() and psf_clearerr(). - - * src/sndfile.c - Removed #include of , , and which - are no longer needed. - - * tests/misc_test.c - Added test to make sure the correct error message is returned with an - existing read-only file is openned for write. - -2002-10-21 Erik de Castro Lopo - - * doc/index.html doc/api.html - Updated for OKI Dialogic ADPCM files. - - * src/command.c - Added VOX ADPCM to sub_fomats. - -2002-10-20 Erik de Castro Lopo - - * src/vox_adpcm.c src/Makefile.am - New file for handling OKI Dialogic ADPCM files. - - * src/sndfile.h - Add new subtype SF_FORMAT_VOX_ADPCM. - - * src/sndfile.c - Renamed function is_au_snd_file () to format_from_extenstion () and expanded - its functionality to detect headerless VOX files. - - * src/raw.c - Added hooks for SF_FORMAT_VOX_ADPCM. - - * examples/sndfile-info.c - Print out file duration (suggested by Conrad Parker). - - * libsndfile.spec.in - Force installation of sndfile.pc file (found by John Thompson). - - * tests/Makefile.am tests/lossy_comp_test.c tests/floating_point_test.c - Add tests for SF_FORMAT_VOX_ADPCM. - -2002-10-18 Erik de Castro Lopo - - * tests/misc_test.c - Add test which attempts to write to /dev/full (on Linux anyway) to check - for correct handling of writing to a full filesystem. - - * src/sndfile.c - Return correct error message if the header cannot be written because the - filesystem is full. - - * tests/util.tpl - Corrected printing of file mode in error reporting. - - * src/mat5.c - Fixed a bug where a MAT5 file written by libsndfile could not be opened by - Octave 2.1.36. - -2002-10-13 Erik de Castro Lopo - - * src/common.h src/file_io.c - All low level file I/O have been modified to be better able to report - system errors resulting from calling system level open/read/write etc. - - * src/*.c - Updated for compatibility with above changes. - - * examples/cooledit-fixer.c - New example program which fixes badly broken file created by Syntrillium's - Cooledit which are marked as containing PCM samples but actually contain - floating point data. - - * examples/Makefile.am - Hooked cooledit-fixer into the build system. - -2002-10-10 Erik de Castro Lopo - - * doc/command.html - Document SFC_GET_FORMAT_INFO. - -2002-10-09 Erik de Castro Lopo - - * examples/wav32_aiff24.c examples/sndfile2oct.c examples/sfhexdump.c - examples/sfdump.c - Removed these files because they weren't interesting. - - * examples/sfconvert.c examples/sndfile-convert.c - Renamed the first to the latter. - - * examples/Makefile.am - Added sndfile-convert to the bin_PROGRAMS, so it is installed when the lib - is installed. - Removed old programs wav32_aiff24 and sndfile2oct. - - * man/sndfile-convert.1 - New man page. - - * examples/sndfile-convert.c - Added some gloss now that sndfile-convert.c is an installed program. - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.h - Added command SFC_GET_FORMAT_INFO. - - * tests/command_test.c - Added tests form SFC_GET_FORMAT_INFO. - -2002-10-08 Erik de Castro Lopo - - * src/sndfile.c - In sf_format_check() return error if samplerate < 0. - -2002-10-07 Erik de Castro Lopo - - * src/aiff.c - Fixed bug in handling of COMM chunks with a 4 byte encoding byte but no - encoding string. - -2002-10-06 Erik de Castro Lopo - - * src/sndfile.c - Fixed repeated word in an error message. - -2002-10-05 Erik de Castro Lopo - - * doc/index.html - Improved advertising in Features section. - -2002-10-04 Erik de Castro Lopo - - * src/wav.c - Added decoding of 'labl' chunks within 'LIST' chunks. - - * src/common.h - Added (experimental only) SF_FORMAT_OGG and SF_FORMAT_VORBIS and definition - of ogg_open(). This is nowhere near working yet. - - * src/sndfile.c - Added detection of 'OggS' file marker and added call to ogg_open() to - switch statement. - - * src/ogg.c - New file. Very early start of Ogg Vorbis support. - - * src/wav.c - Added handling of brain-damaged and broken Cooledit "32 bit 24.0 float - type 1" files. These files are marked as being 24 bit WAVE_FORMAT_PCM with - a block alignment of 4 times the numbers of channels but are in fact 32 bit - floating point. - -2002-10-02 Erik de Castro Lopo - - * configure.in - Modified option --enable-experimental to set ENABLE_EXPERIMENTAL_CODE in - config.h to either 0 or 1. - - * src/sndfile.c - Modify sf_command (SFC_GET_LIB_VERSION) to append "-exp" to the version - string if experimental code has been enabled. - -2002-10-01 Erik de Castro Lopo - - * src/Makefile.am - Added -lm to libsndfile_la_LIBADD. This means that -lm is not longer needed - in the link line when linking something to libsndfile. - - * tests/Makefile.am examples/Makefile.am - Removed -lm from all link lines. - - * sndfile.pc.in - Removed -lm from Libs line. - -2002-09-24 Erik de Castro Lopo - - * src/file_io.c - Removed all perror() calls. - - * src/nist.c - Removed calls to exit() function. - Added check to detect NIST files dammaged from Unix CR -> Win32 CRLF - conversion process. - -2002-09-24 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - New function sf_strerror() which will eventually replace functions - sf_perror() and sf_error_str(). - Function sf_error_number() has also been changed, but this was documented - as being for testing only. - - * doc/api.html - Documented above changes. - - * tests/*.c examples/*.c - Changed to new error functions. - -2002-09-22 Erik de Castro Lopo - - * configure.in - Detect GCC version, and print a warning message about writeable strings - it GCC major version number is less than 3. - -2002-09-21 Erik de Castro Lopo - - * src/sndfile.h.in doc/api.html - Documentation fixes. - -2002-09-19 Erik de Castro Lopo - - * src/Version_script.in src/Makefile.am configure.in - Use the version script to prevent the exporting of all non public symbols. - This currently only works with Linux. Will test on Solaris as well. - - * src/float_cast.h - Added #ifndef to prevent the #warning directives killing the SGI MIPSpro - compiler. - - * src/au_g72x.c src/double64.c src/float32.c src/gsm610.c src/ima_adpcm.c - src/ms_adpcm.c - Fix benign compiler warnings arising from previously added compiler - flags. - -2002-09-18 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_error_str() where errnum was used as the index instead - of k. Found by Tim Hockin. - - * examples/sndfile-play.c - Fixed a compiler warning resulting from a variable shadowing a previously - defined local. - -2002-09-17 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - Added command SFC_SET_RAW_START_OFFSET. - - * doc/command.html - Document SFC_SET_RAW_START_OFFSET. - - * tests/raw_test.c tests/Makefile.am - Add new file for for testing SF_FORMAT_RAW specific functionality. - - * tests/dwvw_test.c - Updates. - -2002-09-16 Erik de Castro Lopo - - * src/wav.c - Modified reading of 'smpl' chunk to take account of the sampler data field. - - * tests/utils.tpl tests/utils.h - Added function print_test_name(). - - * tests/misc_test.c tests/write_read_test.tpl tests/lossy_comp_test.c - tests/pcm_test.tpl tests/command_test.tpl tests/floating_point_test.c - Convert to use function print_test_name(). - -2002-09-15 Erik de Castro Lopo - - * doc/octave.html - Added a link to some other Octave scripts for reading and writing sound - files. - - * src/paf.c - Change type of dummy data field to int. This should fix a benign compiler - warning on some CPUs. - Removed superfluous casts resulting from the above change. - - * src/rx2.c - More hacking. - -2002-09-14 Erik de Castro Lopo - - * src/mat5.c src/common.c - Changed usage of snprintf() to LSF_SNPRINTF(). - - * Win32/Makefile.msvc - Updated to include new files and add new tests. - - * Win32/config.h Win32/sndfile.h - Updated. - - * doc/api.html - Added note about the possibility of "missing" features actually being - implemented as an sf_command(). - -2002-09-13 Erik de Castro Lopo - - * tests/misc_test.c - Added previously missing update_header_test and zero_data_tests for PAF, - MAT4 and MAT5 formats. - - * src/paf.c src/mat4.c src/mat5.c - Fixed bugs uncovered by new tests above. - - * src/mat5.c - Generalised parsing of name fields of MAT5 files. - - * src/mat5.c src/sndfile.c - Added support for unsigned 8 bit PCM MAT5 files. - - * tests/write_read_test.tpl - Added test for unsigned 8 bit PCM MAT5 files. - - * doc/index.html - Added unsigned 8 bit PCM MAT5 to capabilities matrix. - -2002-09-12 Erik de Castro Lopo - - * test/update_header_test.c tests/misc_test.c - Renamed update_header_test.c to misc_test.c. - Added zero_data_test() to check for case where file is opened for write and - closed immediately. The resulting file can be left in a state where - libsndfile cannot open it. Problem reported by Werner Schweer, the author - of Muse. - - * src/aiff.c - Removed superfluous cast. - - * src/wav.c src/svx.c - Fixed case of file generated with no data. - Removed superfluous cast. - - * src/sndfile.c - Fixed error on IA64 platform caused by incorrect termination of - SndfileErrors struct array. This problem was found in the Debian buildd - logs (http://buildd.debian.org/). - - * configure.in - Added Octave directory. - - * Octave/Makefile.ma - New Makfile.am for Octave directory. - - * Octave/sndfile_load.m Octave/sndfile_save.m Octave/sndfile_play.m - New files for working with Octave. - - * doc/octave.html - Document explaining the use of the above three Octave scripts. - -2002-09-10 Erik de Castro Lopo - - * src/sndfile.c - Fixed bug in RDWR mode. - -2002-09-09 Erik de Castro Lopo - - * src/common.c - Fixed psf_get_date_str() for systems which don't have gmtime_r() or - gmtime(). - - * src/file_io.c - Added #include for Win32. Reported by Koen Tanghe. - -2002-09-08 Erik de Castro Lopo - - * src/common.c - Added 'S' format specifier for psf_binheader_writef() which writes a C - string, including single null terminator to the header. - Added 'j' format specifier to allow jumping forwards or backwards in the - header. - Added function psf_get_date_str(). - - * src/mat5.c - Complete read and write support. - - * doc/index.html - Added entries for MAT4 and MAT5 in capabilities matrix. - -2002-09-06 Erik de Castro Lopo - - * src/mat4.c - Completed read and write support. - - * src/common.h src/sndfile.c - Added MAT4 and MAT5 specific error messages. - - * tests/write_read_test.tpl tests/Makefile.am - Added tests for MAT4 and MAT5 files. - - * tests/stdio_test.c tests/stdout_test.c tests/stdin_test.c - Added tests for MAT4 and MAT5 files. - -2002-09-05 Erik de Castro Lopo - - * src/command.c - Added elements for SF_FORMAT_MAT4 and SF_FORMAT_MAT5 to major_formats - array. - - * examples/sfconvert.c - Added mat4 and mat5 output targets. - -2002-09-04 Erik de Castro Lopo - - * src/sndfile.c - Added check to prevent errors openning read only formats for read/write. - - * src/interleave.c - New file for interleaving non-interleaved data. Non-interleaved data is - only supported on read. - - * src/Makefile.am - Added src/interleave.c to build. - -2002-09-03 Erik de Castro Lopo - - * src/double64.c src/common.h - Added double64_be_read(), double64_le_read(), double64_be_write() and - double64_le_write() which replace double64_read() and double64_write(). - - * src/common.c - Cleanup of psf_binheader_readf() and add ability to read big and little - endian doubles (required by mat4.c and mat5.c). - Add ability for psf_binheader_writef() to write doubles to sound file - headers. - -2002-09-01 Erik de Castro Lopo - - * src/mat5.c - New file for reading Matlab (tm) version 5 data files. This is also the - native binary file format for version 2.1.X of GNU Octave which will be - used for testing. - Not complete yet. - - * src/mat4.c - New file for reading Matlab (tm) version 4.2 data files. This is also the - native binary file format for version 2.0.X of GNU Octave which will be - used for testing. - Not complete yet. - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am - Mods to add Matlab files. - - * src/common.[ch] - Added readf_endian field to SF_PRIVATE struct allowing endianness to - remembered across calls to sf_binheader_readf(). - Fixed bug in width_specifier behaviour for printing hex values. - -2002-08-31 Erik de Castro Lopo - - * src/file_io.c - Check return value of close() call in psf_fclose(). - -2002-08-24 Erik de Castro Lopo - - * src/ms_adpcm.c - Commented out some code where 0x10000 was being subtracted from a short - and the result assigned to a short again. Andrew Zaja found this. - -2002-08-23 Erik de Castro Lopo - - * doc/command.html - Fixed typo found by Tommi Ilmonen. - - * src/ima_adpcm.c - Changed type of diff from short to int to prevent errors which can occur - during very rare circumstances. Thanks to FUWAFUWA. - -2002-08-16 Erik de Castro Lopo - - * tests/floating_point_test.c - Disable testing on machines without lrintf(). - - * Win32/Makefile.msvc - Added dwd.c and wve.c to build. - - * configure.in - Bumped version to 1.0.0. - -2002-08-15 Erik de Castro Lopo - - * src/file_io.c - Add a #include for Mac OS 9. Thanks to Stephane Letz. - - * src/wav.c - Changed an snprintf to LSF_SNPRINTF. - - * doc/Makefile.am - Added version-1.html. - -2002-08-14 Erik de Castro Lopo - - * configure.in - Bumped version to 1.0.rc6. - - * src/*.c - Modified scaling of normalised floats and doubles to integers. Until now - this has been done by multiplying by 0x8000 for short output, 0x80000000 - for 32 bit ints and so on. Unfortunately this can cause an overflow and - wrap around in the target value. All thes values have therefore been - reduced to 0x7FFF, 0x7FFFFFFF and so on. The conversion from ints to - normalised floats and doubles remains unchanged. This does mean that for - repeated conversions normalised float -> pcm16 -> normalised float would - result in a decrease in amplitude of 0x7FFF/0x8000 on every round trip. - This is undesirable but less undesireable than the wrap around I am trying - to avoid. - - * tests/floating_point_test.c - Removed file hash checking because new float scaling procedure introduced - above prevented the ability to crate a has on both x86 and PowerPC systems. - -2002-08-13 Erik de Castro Lopo - - * src/txw.c - Completed reading of TXW files. Seek doesn't work yet. - - * src/file_io.c - Added a MacOS 9 replacement for ftruncate(). - - * MacOS/sndfile.h - Added MacOS 9 header file. This should be copied into src/ to compile - libsndfile for MacOS9. - -2002-08-12 Erik de Castro Lopo - - * src/sndfile.c - Fixed commands SF_SET_NORM_DOUBLE and SFC_SET_NORM_FLOAT to return their - values after being set. Reported by Jussi Laako. - - * configure.in - If autogen is not found, touch all .c and .h files in tests/. - - * src/common.c - Added format width specifier to psf_log_printf() for %u, %d, %D and %X. - - * src/dwd.c - Completed implementation of read only access to these files. - - * src/common.h src/*.c src/pcm.c - Removed redundant field chars from SF_PRIVATE struct and modified - pcm_init() to do without it. - -2002-08-11 Erik de Castro Lopo - - * src/wve.c - New file implementing read of Psion Alaw files. This will be a read only - format. Implementation complete. - - * src/dwd/c - Started implementation of DiamondWare Digitized files. Also read only, not - complete. - - * src/wav.c - Add parsing of 'smpl' chunk. - - * src/paf.c - Fixed reading on un-normalized doubles and floats from 24 bit PAF files. - This brings it into line with the reading of 8 bit files into - un-normalized doubles which returns values in the range [-128, 127]. - - * src/common.c - Modified psf_log_printf() to accept the %% conversion specifier to allow - printing of a single '%'. - - * src/sds.c - Read only of 16 bit samples is working. Need to build a test harness for - this and other read only formats. - -2002-08-10 Erik de Castro Lopo - - * configure.in - Added --enable-experimental configure option. - Removed pkg-config message at the end of the configure process. - - * src/sds.c src/txw.c src/rx2.c src/sd2.c - Moved all the code in these files inside #if ENABLE_EXPERIMENTAL_CODE - blocks and added new *_open() function for the case where experimental is - not enabled. These new functions just return SFE_UNIMPLMENTED. - - * Win32/sndfile.h src/sndfile.h.in src/common.h - Removed un-necessary #pragma pack commands. - - * src/file_io.c - Implemented psf_ftruncate() and much other hacking for Win32. - - * Win32/Makefile.msvc - Updated. - - * doc/win32.html - Updated to include the copying of the sndfile.h file from the Win32/ - directory to the src/ directory. - - * Make.bat - Batch file to make compiling on Wi32 a little easier. Implements "make" and - "make check". - -2002-08-09 Erik de Castro Lopo - - * src/file_io.c - Add place holder for ftruncate() on Win32 which doesn't have ftruncate(). - This will need to be fixed later. - - * src/sndfile.h.in - New file (copy of sndfile.h) with sets up @TYPEOF_SF_COUNT_T@ which will be - replaced by the correct type during configure. - - * configure.in - Modified to find a good type for TYPEOF_SF_COUNT_T. - - * src/aiff.c - Fixed a bug when reading malformed headers. - - * src/common.c - Set read values to zero before performing read. - -2002-08-08 Erik de Castro Lopo - - * doc/command.html - Fixed some HTML tags which were not allowing jumps to links within the - page. - - * src/sds.c - Massive hacking on this. - - * src/wav.c - Added recognition of 'clm ' tag. - -2002-08-07 Erik de Castro Lopo - - * doc/index.html - Added beginning of a capabilities list beyond simple file formats which - can be read/written. - - * src/aiff.c - Added parsing of INST and MARK chunks of AIFF files. At the moment this - data is simply recorded in the log buffer. Later it will be possible to - read this data from an application using sf_command(). - - * src/wav.c - Added parsing of 'cue ' chunk which contains loop information in WAV files. - - * exampes/sndfile-info.c - Changed reporting of Samples to Frames. - - * src/wav.c src/w64.c src/aiff.c src/wav_w64.h - Moved from a samples to a frames nomenclature to avoid confusion. - - * doc/FAQ.html - What's the best format for storing temporary files? - - * src/sds.c - New file for reading/writing Midi Sample Dump Standard files. - - * src/Makefile.am src/sndfile.c src/common.[ch] - Added hooks for sds.c. - - * examples/sndfile-info.c - Changed from using sf_perror() to using sf_error_str(). - -2002-08-06 Erik de Castro Lopo - - * doc/api.html - Added explanation of mode parameter for sf_open(). - Added explanation of usage of SFM_* values in sf_seek(). - - * src/sndfile.[ch] src/command.c src/file_io.c src/common.h - Implemented SFC_FILE_TRUNCATE to allow a file to be truncated. File - truncation was suggested by James McCartney. - - * src/command.html - Documented SFC_FILE_TRUNCATE. - - * tests/command_test.c - Add tests for SFC_FILE_TRUNCATE. - - * src/sndfile.c - Added a thrid parameter to the VALIDATE_SNDFILE_AND_ASSIGN_PSF macro to - make resetting the error number optional. All uses of the macro other than - in error reporting functions were changed to reset the error number. - - * src/pcm.c - Fixed a bug were sf_read_* was logging an SFE_SHORT_READ even when no error - occurred. - - * tests/write_read_test.tpl - Added tests of internal error state. - -2002-08-05 Erik de Castro Lopo - - * src/GSM610/private.h src/GSM610/*.c src/GSM610/Makefile.am - Renamed private.h to gsm610_priv.h to prevent clash with other headers - named private.h in other directories. (Probably only a problem on MacOS 9). - - * src/G72x/private.h src/G72x/*.c src/G72x/Makefile.am - Renamed private.h to g72x_priv.h to prevent clash with other headers - named private.h in other directories. (Probably only a problem on MacOS 9). - - * MacOS/config.h - Changed values of HAVE_LRINT and HAVE_LRINTF to force use of code in - float_cash.h. - - * src/sndfile.h - Changes the name of samples field of the SF_INFO to frames. The old name - had caused too much confusion and it simply had to be changed. There will - be at least one more pre-release. - -2002-08-04 Erik de Castro Lopo - - * doc/index.html - Updated formats matrix to include RAW (header-less) GSM 6.10. - Fix specificaltion of table and spelling mistakes. - - * src/sndfile.c src/command.c - Fixed bug in SFC_CALC_MAX_SIGNAL family and psf_calc_signal_max (). - - * tests/command.c - Removed cruft. - Added test for SFC_CALC_MAX_SIGNAL and SFC_CALC_NORM_MAX_SIGNAL. - - * configure.in - Update version to 1.0.0rc5. - - * sfendian.h - Removed inclusion of un-necessary header. - -2002-08-03 Erik de Castro Lopo - - * src/aiff.c - Minor fixes of info written to log buffer. - - * src/float_cast.h - Add definition of HAVE_LRINT_REPLACEMENT. - - * tests/floating_point_test.c - Fix file hash check on systems without lrint/lrintf. - - * tests/dft_cmp.c - Limit SNR to less than -500.0dB. - - * examples/sndfile2oct.c - Fixed compiler warnings. - - * doc/api.html - Fixed error where last parameter of sf_error_str() was sf_count_t instead - of size_t. - -2002-08-02 Erik de Castro Lopo - - * doc/FAQ.html - Why doesn't libsndfile do interleaving/de-interleaving. - - * tests/pcm_test.tpl - On Win32 do not perform hash check on files containing doubles. - -2002-08-01 Erik de Castro Lopo - - * src/common.h - Defined SF_COUNT_MAX_POSITIVE() macro, a portable way of setting variables - of type sf_count_t to their maximum positive value. - - * src/dwvw.c src/w64.c - Used SF_COUNT_MAX_POSITIVE(). - -2002-07-31 Erik de Castro Lopo - - * src/paf.c - Fixed bug in reading/writing of 24 bit PCM PAF files on big endian systems. - - * tests/floating_point_tests.c - Fixed hash values for 24 bit PCM PAF files. - Disabled file has check if lrintf() function is not available and added - warning. - Decreased level of signal from a peak of 1.0 to a value of 0.95 to prevent - problems on platforms without lrintf() ie Solaris. - -2002-07-30 Erik de Castro Lopo - - * src/wav.c - Fixed a problem with two different kinds of mal-formed WAV file header. The - first had the 'fact' chunk before the 'fmt ' chunk, the other had an - incomplete 'INFO' chunk at the end of the file. - - * src/w64.c - Added fix to allow differentiation between W64 files and ACID files. - - * src/au_g72x.c src/common.h src/sndfile.c - Added error for G72x encoded files with more than one channel. - - * tests/pcm_test.tpl tests/utils.tpl - Moved function check_file_hash_or_die() to utils.tpl. Function was then - modified to calculate the has of the whole file. - - * src/wav.c - Fixed problem writing the 'fact' chunk on big endian systems. - - * tests/sfconvert.c - Fixed bug where .paf files were being written as Sphere NIST. - -2002-07-29 Erik de Castro Lopo - - * src/voc.c - Fix for reading headers generated using SFC_UPDATE_HEADER_NOW. - - * doc/command.html - Add docs for SFC_UPDATE_HEADER_NOW and SFC_SET_UPDATE_HEADER_AUTO. - -2002-07-28 Erik de Castro Lopo - - * man/sndfile-info.1 man/sndfile-play.1 - Added manpages supplied by Joshua Haberman the Debian maintainer for - libsndfile. Additional tweaks by me. - - * configure.in man/Makefile.am - Hooked manpages into autoconf/automake system. - - * src/sndfile.c - Added hooks for SFC_SET_UPDATE_HEADER_AUTO. - - * tests/update_header_test.c - Improved rigor of testing. - - * src/*.c - Fixed problem with *_write_header() functions. - -2002-07-27 Erik de Castro Lopo - - * doc/*.html - Updates to documentation to fix problems found by wdg-html-validator. - - * src/common.h src/command.c - Added normalize parameter to calls to psf_calc_signal_max() and - psf_calc_max_all_channels(). - - * src/sndfile.c - Added handling for commands SFC_CALC_NORM_SIGNAL_MAX and - SFC_CALC_NORM_MAX_ALL_CHANNELS. - - * doc/command.html - Added entry for SFC_CALC_NORM_SIGNAL_MAX and SFC_CALC_NORM_MAX_ALL_CHANNELS. - -2002-07-26 Erik de Castro Lopo - - * examples/sndfile-play.c Win32/Makefile.msvc - Get sndfile-play program working on Win32. The Win32 PCM sample I/O API - sucks. The sndfile-play program now works on Linux, MacOSX, Solaris and - Win32. - -2002-07-25 Erik de Castro Lopo - - * doc/FAQ.html - New file for frequently asked questsions. - -2002-07-22 Erik de Castro Lopo - - * doc/api.html - Documentation fixes. - - * src/au.[ch] src/au_g72x.c src/G72x/g72x.h - Add support of 40kbps G723 ADPCM encoding. - - * tests/lossy_comp_test.c tests/floating_point_test.c - Add tests for 40kbps G723 ADPCM encoding. - - * doc/index.html - Update support matrix. - -2002-07-21 Erik de Castro Lopo - - * doc/command.html - Documented SFC_GET_SIMPLE_FORMAT_COUNT, SFC_GET_SIMPLE_FORMAT, - SFC_GET_FORMAT_* and SFC_SET_ADD_PEAK_CHUNK. - - * src/sndfile.c src/pcm.c - Add ability to turn on and off the addition of a PEAK chunk for floating - point WAV and AIFF files. - - * src/sndfile.[ch] src/common.h src/command.c - Added sf_command SFC_CALC_MAX_ALL_CHANNELS. Implemented by Maurizio Umberto - Puxeddu. - - * doc/command.html - Docs for SFC_CALC_MAX_ALL_CHANNELS (assisted by Maurizio Umberto Puxeddu). - -2002-07-18 Erik de Castro Lopo - - * src/sndfile.c src/gsm610.c - Finalised support for GSM 6.10 AIFF files and added support for GSM 6.10 - encoded RAW (header-less) files. - - * src/wav.c - Add support for IBM_FORMAT_MULAW and IBM_FORMAT_ALAW encodings. - - * src/api.html - Fixed more documentation bugs. - -2002-07-17 Erik de Castro Lopo - - * src/sndfile.h src/common.h - Moved some yet-to-be-implelmented values for SF_FORMAT_* from the public - header file sndfile.h to the private header file common.h to avoid - confusion about the actual capabilities of libsndfile. - -2002-07-16 Erik de Castro Lopo - - * src/aiff.c src/wav.c - Fixed file parsing for WAV and AIFF files containing non-audio data after - the data chunk. - - * src/aiff.c src/sndfile.c - Add support for GSM 6.10 encoded AIFF files. - - * tests/lossy_comp_test.c tests/Makefile.am - Add tests for GSM 6.10 encoded AIFF files. - - * src/*.c - Fix compiler warnings. - -2002-07-15 Erik de Castro Lopo - - * tests/command_test.c - For SFC_SET_NORM_* tests, change the file format from SF_FORMAT_WAV to - SF_FORMAT_RAW. - - * src/sndfile.c - Added sf_command(SFC_TEST_ADD_TRAILING_DATA) to allow testing of reading - from AIFF and WAV files with non-audio data after the audio chunk. - - * src/common.h - Add test commands SFC_TEST_WAV_ADD_INFO_CHUNK and - SFC_TEST_AIFF_ADD_INST_CHUNK. When these commands are working, they will be - moved to src/sndfile.h - - * src/aiff.c src/wav.c - Begin implementation of XXXX_command() hook for sf_command(). - - * tests/write_read_test.tpl - Added sf_command (SFC_TEST_ADD_TRAILING_DATA) to ensure above new code was - working. - -2002-07-13 Erik de Castro Lopo - - * tests/update_header_test.c - Allow read sample count == write sample count - 1 to fix problems with VOC - files. - - * tests/write_read_test.tpl tests/pcm_test.tpl - Fixed some problems in the test suite discovered by using Valgrind. - -2002-07-12 Erik de Castro Lopo - - * tests/utils.[ch] tests/*.c - Renamed check_log_buffer() to check_log_buffer_or_die(). - - * src/sndfile.c - SFC_UPDATE_HEADER_NOW and SFC_SETUPDATE_HEADER_AUTO almost finished. Works - for all file formats other than VOC. - -2002-07-11 Erik de Castro Lopo - - * src/sndfile.[ch] src/common.h - Started adding functionality to allow the file header to be updated before - the file is closed on files open for SFM_WRITE. This was requested by - Maurizio Umberto Puxeddu who is using libsndfile for file I/O in iCSound. - - * tests/update_header_test.c - New test program to test that the above functionality is working correctly. - - * tests/peak_chunk_test.c tests/floating_point_test.c - Cleanups. - -2002-07-10 Erik de Castro Lopo - - * src/sfendian.[ch] - Changed length count parameters for all endswap_XXX() functions from - sf_count_t (which can be 64 bit even on 32 bit architectures) to int. These - functions are only called frin inside the library, are always called with - integer parameters and doing the actual calculation on 64 bit values is - slow in comparision to doing it on ints. - - * examples/sndfile-play.c - More playback hacking for Win32. - -2002-07-09 Erik de Castro Lopo - - * src/common.c - In psf_log_printf(), changed %D format conversion specifier to %M (marker) and - added %D specifier for printing the sf_count_t type. - - * src/*.c - Changed all usage of psf_log_printf() with %D format conversion specifiers - to use %M conversion instead. - - * tests/pcm_test.tpl tests/pcm_test.def - New files to autogen pcm_test.c. - - * src/pcm.c - Fixed bug in scaling floats and doubles to 24 bit PCM and vice versa. - -2002-07-08 Erik de Castro Lopo - - * configure.in - Fix setup of $ac_cv_sys_largefile_CFLAGS so that sndfile.pc gets valid - values for CFLAGS. - - * examples/sndfile-play.c - Start adding playback support for Win32. - -2002-07-07 Erik de Castro Lopo - - * src/*.c - Worked to removed compiler warnings. - Extensive refactoring. - - * src/common.[ch] - Added function psf_memset() which works like the standard C function memset - but takes and sf_count_t as the length parameter. - - * src/sndfile.c - Replaced calls to memset(0 with calls to psf_memset() as required. - -2002-07-06 Erik de Castro Lopo - - * src/sndfile.c - Added "libsndfile : " to the start of all error messages. This was suggested - by Conrad Parker author of Sweep ( http://sweep.sourceforge.net/ ). - - * src/sfendian.[ch] - Added endswap_XXXX_copy() functions. - - * src/pcm.c src/float32.c src/double64.c - Use endswap_XXXX_copy() functions and removed dead code. - Cleanups and optimisations. - -2002-07-05 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h - Gave values to all the SFC_* enum values to allow better control of the - interface as commands are added and removed. - Added new command SFC_SET_ADD_PEAK_CHUNK. - - * src/wav.c src/aiff.c - Modified wav_write_header and aiff_write_header to make addition of a PEAK - chunk optional, even on floating point files. - - * tests/benchmark.tpl - Added call to sf_command(SFC_SET_ADD_PEAK_CHUNK) to turn off addition of a - PEAK chunk for the benchmark where we are trying to miximize speed. - - * src.pcm.c - Changed tribyte typedef to something more sensible. - Further conversion speed ups. - -2002-07-03 Erik de Castro Lopo - - * src/command.c - In major_formats rename "Sphere NIST" to "NIST Sphere". - - * src/common.c src/sfendian.c - Moved all endswap_XXX_array() functions to sfendian.c. These functions will - be tweaked to provide maximum performance. Since maximum performance on one - platform does not guarantee maximum performance on another, a small set of - functions will be written and the optimal one chosen at compile time. - - * src/common.h src/sfendian.h - Declarations of all endswap_XXX_array() functions moved to sfendian.h. - - * src/Makefile.am - Add sfendian.c to build targets. - -2002-07-01 Erik de Castro Lopo - - * src/pcm.c src/sfendian.h - Re-coded PCM encoders and decoders to match or better the speed of - libsndfile version 0.0.28. - -2002-06-30 Erik de Castro Lopo - - * src/wav.c - Add checking for WAVPACK data in standard PCM WAV file. Return error if - found. This WAVPACK is *WAY* broken. It uses the same PCM WAV file header - and then stores non-PCM data. - - * tests/benchmark.tpl - Added more tests. - -2002-06-29 Erik de Castro Lopo - - * tests/benchmark.tpl - Added conditional definition of M_PI. - For Win32, set WRITE_PERMS to 0777. - - * Win32/Makefile.msvc - Added target to make generate program on Win32. - - * src/samplitude.c - Removed handler for Samplitude RAP file format. This file type seems rarer - than hens teeth and is completely undocumented. - - * src/common.h src/sndfile.c src/Makefile.am Win32/Makefile.msvc - Removed references to sampltiude RAP format. - - * tests/benchmark.tpl - Benchmark program now prints the libsndfile version number when run. This - program was also backported to version 0 to compare results. Version - 1.0.0rc2 is faster than version 0.0.28 on most conversions but slower on - some. The slow ones need to be fixed before final release. - -2002-06-28 Erik de Castro Lopo - - * tests/benchmark.def tests/benchmark.tpl - New files which generate tests/benchmark.c using Autogen. Added int -> - SF_FORMAT_PCM_24 test. - - * tests/benchmark.c - Now and Autogen output file. - - * tests/Makefile.am - Updated for above changes. - -2002-06-27 Erik de Castro Lopo - - * tests/benchmark.c - Basic benchmark program complete. Need to convert it to Autogen. - - * Win32/Makefile.msvc - Added benchmark.exe target. - -2002-06-26 Erik de Castro Lopo - - * examples/generate.c - New program to generate a number of different output file formats from a - single input file. This allows testing of the created files. - - * tests/benchmark.c - New test program to benchmark libsndfile. Nowhere near complete yet. - - * examples/Makefile.am tests/Makefile.am - New make rules for the two new programs. - -2002-06-25 Erik de Castro Lopo - - * Win32/libsndfile.def - Removed definition for sf_signal_max(). - - * src/sndfile.c - Removed cruft. - - * doc/index.html - A number of documentation bugs were fixed. Thanks to Anand Kumria. - - * doc/version-1.html - Minor doc updates. - - * configure.in - Bumped version to 1.0.0rc2. - - * src/sf_command.h src/Makefile.am - Removed the header file as it was no longer being used. Thanks to Anand - Kunria for spotting this. - - * doc/index.html - A number of documentation bugs were fixed. Thanks to Anand Kumria. - -2002-06-24 Erik de Castro Lopo - - * src/common.h - Test for Win32 before testing SIZEOF_OFF_T so that it works correctly - on Win32.. - - * src/file_io.c - Win32 fixes to ensure O_BINARY is used for file open. - - * doc/win32.html - New file documenting the building libsndfile on Win32. - - * doc/*.html - Updating of documentation. - -2002-06-23 Erik de Castro Lopo - - * tests/pcm_test.c - Minor changes to allow easier determination of test file name. - - * src/sndfile.[ch] - Removed function sf_signal_max(). - - * examples/sndfile-play.c - Changed call to sf_signal_max() to a call to sf_command(). - -2002-06-22 Erik de Castro Lopo - - * src/format.c src/command.c - Renamed format.c to command.c which will now include code for sf_command() - calls to perform operations other than format commands. - - * src/sndfile.c src/sndfile.h - Removed function sf_get_signal_max() which is replaced by commands passed - to sf_command(). - - * src/command.c - Implement commands SFC_CALC_SIGNAL_MAX. - - * doc/command.html - Documented SFC_CALC_SIGNAL_MAX. - -2002-06-21 Erik de Castro Lopo - - * examples/sndfile-play.c - Mods to make sndfile-play work on Solaris. The program sndfile-play now - runs on Linux, MaxOSX and Solaris. Win32 to come. - - * src/format.c - Added SF_FORMAT_DWVW_* to subtype_formats array. - - * src/nist.c - Added support for 8 bit NIST Sphere files. Example file supplied by Anand - Kumria. - -2002-06-20 Erik de Castro Lopo - - * examples/sndfile-info.c - Tidy up of output format. - - * examnples/sndfile-play.c - Mods to make sndfile-play work on MacOSX using Apple's CoreAudio API. - - * configure.in - Add new variables OS_SPECIFIC_INCLUDES and OS_SPECIFIC_LINKS which were - required to supply extra include paths and link parameters to get - sndfile-play working on MacOSX. - - * examples/Makefile.am - Use OS_SPOECIFIC_INCLUDES and OS_SPECIFIC_LINKS to build commands for - sndfile-play. - -2002-06-19 Erik de Castro Lopo - - * src/nist.c - Added ability to read/write new NIST Sphere file types (A-law, u-law). - Header parser was re-written from scratch. Example files supplied by Anand - Kumria. - - * src/sndfile.c - Support for A-law and u-law NIST files. - - * tests/Makefile.am tests/lossy_comp_test.c - Tests for A-law and u-law NIST files. - -2002-06-18 Erik de Castro Lopo - - * tests/utils.c - Fixed an error in error string. - -2002-06-17 Erik de Castro Lopo - - * acinclude.m4 - Removed exit command to allow cross-compiling. - - * Win32/unistd.h src/file_io.c - Moved contents of first file into the second file (enclosed in #ifdef). - Win32/unistd.h is now an empty file but still must be there for libsndfile - to compile on Win32. - - * src/sd2.c, src/sndfile.c: - Fixes for Sound Designer II files on big endian systems. - -2002-06-16 Erik de Castro Lopo - - * configure.in - Modified to work around problems with crappy MacOSX version of sed. - Added sanity check for proper values for CFLAGS. - -2002-06-14 Erik de Castro Lopo - - * src/sndfile.c - Code clean up in sf_open (). - - * Win32/Makefile.msvc - Michael Fink's contributed MSVC++ makefile was hacked to bits and put back - together in a new improved form. - - * src/file_io.c - Fixes for Win32; _lseeki64() returns an invalid argument for calls like - _lseeki64(fd, 0, SEEK_CUR) so need to use _telli64 (fd) instead. - - * src/common.h src/sndfile.c src/wav.c src/aiff.c - Added SFE_LOG_OVERRUN error. - Added termination for potential infinite loop when parsing file headers. - - * src/wav.c src/w64.c - Fixed bug casuing incorrect header generation when opening file read/write. - -2002-06-12 Erik de Castro Lopo - - * doc/api.html - Improved the documentation to make it clearer that the file read method - and the underlying file format are completely disconnected. Suggested - by Josh Green. - - * doc/command.html - Started correcting docs to take into account changes made to the - operations of the sf_command () function. Not complete yet. - - * src/sndfile.c - Reverted some changes which had broken the partially working SDII header - parsing. Now have access to an iBook with OS X so reading and writing SDII - files on all platforms should be a reality in the near future. On Mac this - will involve reading the resource fork via the standard MacOS API. To move - a file from Mac to another OS, the resource and data forks will need to be - combined before transfer. The combined file will be read on both Mac and - other OSes like any other file. - -2002-06-08 Erik de Castro Lopo - - * ltmain.sh - Applied a patch from http://fink.sourceforge.net/doc/porting/libtool.php - which allows libsndfile to compile on MacOSX 10.1. This patch should not - interfere with compiling on other OSes. - - * src/GSM610/private.h - Changes to fix compile problems on MacOSX (see src/GSM610/ChangeLog). - - * src/float_cast.h - Added MacOSX replacements for lrint() and lrintf(). - -2002-06-05 Erik de Castro Lopo - - * src/sndfile.c - Replaced the code to print the filename to the log buffer when a file is - opened. This code seems to have been left out during the merge of - sf_open_read() and sf_open_write() to make a single functions sf_open(). - -2002-06-01 Erik de Castro Lopo - - * src/wav.c - Fixed a bug where the WAV header parser was going into an infinite loop - on a badly formed LIST chunk. File supplied by David Viens. - -2002-05-25 Erik de Castro Lopo - - * configure.in - Added a message at the end of the configuration process to warn about the - need for the use of pkg-config when linking programs against version 1 of - libsndfile. - - * doc/pkg-config.html - New documentation file containing details of how to use pkg-config to - retrieve settings for CFLAGS and library locations for linking files - against version 1 of libsndfile. - -2002-05-17 Erik de Castro Lopo - - * src/wav.c - Fixed minor bug in handling of so-called ACIDized WAV files. - -2002-05-16 Erik de Castro Lopo - - * Win32/libsndfile.def Win32/Makefile.msvc - Two new files contributed by Michael Fink (from the winLAME project) - which allows libsndfile to be built on windows in a MSDOS box by doing - "nmake -f Makefile.msvc". Way cool! - -2002-05-15 Erik de Castro Lopo - - * configure.in - MacOSX is SSSOOOOOOO screwed up!!! I can't believe how hard it is to - generate a tarball which will configure and compile on that platform. - Joined the libtool mailing list to try and get some answers. - -2002-05-13 Erik de Castro Lopo - - * configure.in - Changed to autoconf version 2.50. MacOSX uses autoconf version 2.53 which - is incompatible with with version 2.13 which had been using until now. - The AC_SYS_LARGE_FILE macro distributed withe autoconf 2.50 is missing a - few features so AC_SYS_EXTRA_LARGE file was defined to replace it. - - * configure.in - Changed to automake version 1.5 to try and make a tarball which will - work on MacOSX. - -2002-05-12 Erik de Castro Lopo - - * src/wav_gsm610.c - Changed name to gsm610.c. Added reading/writing of headerless files. - - * src/sndfile.c src/raw.c - Added ability to read/write headerless (SF_FORMAT_RAW) GSM 6.10 files. - -2002-05-11 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Clean up in preparation for Autogen-ing this file. - - * src/GSM610/*.[ch] - Code cleanup and prepartion forgetting file seek working. Details in - src/GSM610/ChangeLog. - - * sndfile.pc.in - Testing complete. Is sndfile.m4 still needed? - -2002-05-09 Erik de Castro Lopo - - * tests/write_read_test.tpl tests/rdwr_test.tpl - Merged tests from these two programs into write_read_test.tpl and deleted - rdwr_test.tpl. - -2002-05-08 Erik de Castro Lopo - - * src/w64.c src/svx.c src/paf.c - Fixed bugs in read/write mode. - -2002-05-07 Erik de Castro Lopo - - * examples/Makefile.am - Renamed sfplay.c to sndfile-play.c and sndfile_info.c to sndfile-info.c for - consistency when these programs become part of the Debian package - sndfile-programs. - - * sndfile.pc.in - New file to replace sndfile-config.in. Libsndfile now uses the pkg-config - model for providing installation parameters to dependant programs. - - * src/sndfile.c - Cleanup of code in sf_open(). - -2002-05-06 Erik de Castro Lopo - - * tests/utils.tpl tests/write_read_test.tpl - More conversion to Autogen fixes and enchancements. - - * src/*.c - Read/write mode is now working for 16, 24 and 32 bit PCM as well as 32 - bit float and 64 bit double data. More tests still required. - - * src/Makefile.am - Added DISTCLEANFILES target to remove config.status and config.last. - - * Win32/Makefile.am MacOS/Makefile.am - Added DISTCLEANFILES target to remove Makefile. - -2002-05-05 Erik de Castro Lopo - - * src/*.[ch] tests/rdwr_test.c - More verifying workings of read/write mode. Fixing bugs found. - - * tests/utils.[ch] - Made these files Autogen generated files. - - * tests/util.tpl tests/util.def - New Autogen files to generate utils.[ch]. Moved some generic test functions - into this file. Autogen is such a great tool! - -2002-05-03 Erik de Castro Lopo - - * src/pcm.c src/float_cast.h Win32/config.h - Fixed a couple of Win32 specific bugs pointed out by Michael Fink - (maintainer of WinLAME) and David Viens. - - * tests/check_log_buffer.[ch] tests/utils.[ch] - Moved check_log_buffer() to utils.[ch] and deleted old file. - -2002-05-02 Erik de Castro Lopo - - * src/common.[ch] src/sndfile.c - New function psf_default_seek() which will be the default seek function - for things like PCM and floating point data. This default is set for - both read and write in sf_open() but can be over-ridden by any codec - during it's initialisation. - -2002-05-01 Erik de Castro Lopo - - * src/au.c - AU files use a data size value of -1 to mean unknown. Fixed au_open_read() - to allow opening files like this. - - * tests/rdwr_test .c - Added more tests. - - * src/sndfile.c - Fixed bugs in read/write mode found due to improvements in the test - program. - -2002-04-30 Erik de Castro Lopo - - * tests/rdwr_test .c - New file for testing read/write mode. - -2002-04-29 Erik de Castro Lopo - - * m4/* - Removed all m4 macros from this directory as they get concatenated to form - the file aclocal.m4 anyway. - - * sndfile.m4 - Moved this from the m4 directory to the root directory asn this is part of - the distribution and is installed during "make install". - -2002-04-29 Erik de Castro Lopo - - * src/float32.c - Removed logging of peaks for all file formats other than AIFF and WAV. - - * tests/write_read_test.tpl tests/write_read_test.def - New files which autogen uses to generate write_read_test.c. Doing it this - way makes write_read_test.c far easier to maintain. Other test programs - will be converted to autogen in the near future. - - * src/*.c - Fixed a few bugs found when testing on Sparc (bug endian) Solaris. - -2002-04-28 Erik de Castro Lopo - - * doc/*.html - Fixed documention versioning. - - * configure.in - Fixed a bug in the routines which search for Large File Support on systems - which have large file support by defualt. - -2002-04-27 Erik de Castro Lopo - - * src/*.[ch] - Found and fixed an issue which can cause a bug in other software (I was - porting Conrad Parker's Sweep program from version 0 of the library to - version 1). When opening a file for write, the libsndfile code would - set the sfinfo.samples field to a maximum value. - - * tests/write_read_test.c - Added tests to detect the above problem. - -2002-04-25 Erik de Castro Lopo - - * src/*.[ch] - Finished base implementation of read/write mode. Much more testing still - needed. - - * m4/largefile.m4 - Macro for detecting Large File Standard capabilities. This macro was ripped - out of the aclocal.m4 file of GNU tar-1.13. - - * configure.in - Added detection of large file support. Files larger than 2 Gigabytes should - now be supported on 64 bit platforms and many 32 bit platforms including - Linux (2.4 kernel, glibc-2.2), *BSD, MacOS, Win32. - - * libsndfile_convert_version.py - A Python script which attempts to autoconvert code written to use version 0 - to version 1. - -2002-04-24 Erik de Castro Lopo - - * src/*.[ch] - Finished base implementation of read/write mode. Much more testing still - needed. - - * tests/write_read_test.c - Preliminary tests for read/write mode added. More needed. - -2002-04-20 Erik de Castro Lopo - - * src/sndfile.[ch] - Removed sf_open_read() and sf_open_write() functions,replacting them with - sf_open() which takes an extra mode parameter (SF_OPEN_READ, SF_OPEN_WRITE, - or SF_OPEN_RDWR). This new function sf_open can now be modified to allow - opening a file formodification (RDWR). - -2002-04-19 Erik de Castro Lopo - - * src/*.c - Completed merging of separate xxx_open_read() and xxx_open_write() - functions. All tests pass. - -2002-04-18 Erik de Castro Lopo - - * src/au.c - Massive refactoring required to merge au_open_read() with au_open_write() - to create au_open(). - -2002-04-17 Erik de Castro Lopo - - * src/*.c - Started changes required to allow a sound file to be opened in read/write - mode, with separate file pointers for read and write. This involves merging - of encoder/decoder functions like pcm_read_init() and pcm_write_init() - int a new function pcm_init() as well as doing something similar for all - the file type specific functions ie aiff_open_read() and aiff_open_write() - were merged to make the function aiff_open(). - -2002-04-15 Erik de Castro Lopo - - * src/file_io.c - New file containing psf_fopen(), psf_fread(), psf_fwrite(), psf_fseek() and - psf_ftell() functions. These function will replace use of fopen/fread/fwrite - etc and allow access to files larger than 2 gigabytes on a number of 32 bit - OSes (Linux on x86, 32 bit Solaris user space apps, Win32 and MacOS). - - * src/*.c - Replaced all instances of fopen with psf_open, fread with psd_read, fwrite - with psf_write and so on. - -2002-03-11 Erik de Castro Lopo - - * src/dwvw.c - Finally fixed all known problems with 12, 16 and 24 bit DWVW encoding. - - * tests/floating_point_test.c - Added tests for 12, 16 and 24 bit DWVW encoding. - -2002-03-03 Erik de Castro Lopo - - * m4/endian.m4 - Defines a new m4 macro AC_C_FIND_ENDIAN, for determining the endian-ness of - the target CPU. It first checks for the definition of BYTE_ORDER in - , then in and . If none of these work - and the C compiler is not a cross compiler it compiles and runs a program - to test for endian-ness. If the compiler is a cross compiler it makes a - guess based on $target_cpu. - - * configure.in - Modified to use AC_C_FIND_ENDIAN. - - * src/sfendian.h - Simplified. - -2002-02-23 Erik de Castro Lopo - - * tests/floating_point_test.c - Tests completely rewritten using the dft_cmp function. Now able to - calculate a quick guesstimate of the Signal to Noise Ratio of the encoder. - -2002-02-15 Erik de Castro Lopo - - * tests/dft_cmp.[ch] - New files containing functions for comparing pre and post lossily - compressed data using a quickly hacked DFT. - - * tests/utils.[ch] - New files containing functions for saving pre and post encoded data in a - file readable by the GNU Octave package. - -2002-02-13 Erik de Castro Lopo - - * m4/lrint.m4 m4/lrintf.m4 - Fixed m4 macros to define HAVE_LRINT and HAVE_LRINTF even when the test - is cached. - -2002-02-12 Erik de Castro Lopo - - * tests/floating_point_test.c - Fixed improper use of strncat (). - -2002-02-11 Erik de Castro Lopo - - * tests/headerless_test.c - New test program to test the ability to open and read a known file type as a - RAW header-less file. - -2002-02-07 Erik de Castro Lopo - - * tests/losy_comp_test.c - Added a test to ensure that the data read from a file is not all zeros. - - * examples/sfconvert.c - Added "-gsm610" encoding types. - -2002-01-29 Erik de Castro Lopo - - * examples/sfconvert.c - Added "-dwvw12", "-dwvw16" and "-dwvw24" encoding types. - - * tests/dwvw_test.c - New file for testing DWVW encoder/decoder. - -2002-01-28 Erik de Castro Lopo - - * src/dwvw.c - Implemented writing of DWVW. 12 bit seems to work, 16 and 24 bit still broken. - - * src/aiff.c - Improved reporting of encoding types. - - * src/voc.c - Clean up. - -2002-01-27 Erik de Castro Lopo - - * src/dwvw.c - New file implementing lossless Delta Word Variable Width (DWVW) encoding. - Reading 12 bit DWVW is now working. - - * src/aiff.c common.h sndfile.c - Added hooks for DWVW encoded AIFF and RAW files. - -2002-01-15 Erik de Castro Lopo - - * src/w64.c - Robustify header parsing. - - * src/wav_w64.h - Header file wav.h was renamed to wav_w64.h to signify sharing of - definitions across the two file types. - - * src/wav.c src/w64.c src/wav_w64.c - Refactoring. - Modified and moved functions with a high degree of similarity between - wav.c and w64.c to wav_w64.c. - -2002-01-14 Erik de Castro Lopo - - * src/w64.c - Completed work on getting read and write working. - - * examples/sfplay.c - Added code to scale floating point data so it plays at a reasonable volume. - - * tests/Makefile.am tests/write_read_test.c - Added tests for W64 files. - -2002-01-13 Erik de Castro Lopo - - * src/*.c - Modded all code in file header writing routines to use - psf_new_binheader_writef(). - Removed psf_binheader_writef() from src/common.c. - Globally replaced psf_new_binheader_writef with psf_binheader_writef. - -2002-01-12 Erik de Castro Lopo - - * src/*.c - Modded all code in file parsing routines to use psf_new_binheader_readf(). - Removed psf_binheader_readf() from src/common.c. - Globally replaced psf_new_binheader_readf with psf_binheader_readf. - - * src/common.[ch] - Added new function psf_new_binheader_writef () which will soon replace - psf_binheader_writef (). The new function has basically the same function - as the original but has a more flexible and capable interface. It also - allows the writing of 64 bit integer values for files contains 64 bit file - offsets. - -2002-01-11 Erik de Castro Lopo - - * src/formats.c src/sndfile.c src/sndfile.h - Added code allowing full enumeration of supported file formats via the - sf_command () interface. - This feature will allow applications to avoid needing recompilation when - support for new file formats are added to libsndfile. - - * tests/command_test.c - Added test code for the above feature. - - * examples/list_formats.c - New file. An example of the use of the supported file enumeration - interface. This program lists all the major formats and for each major - format the supported subformats. - -2002-01-10 Erik de Castro Lopo - - * src/*.[ch] tests/*.c - Changed command parameter of sf_command () function from a test string to - an int. The valid values for the command parameter begin with SFC_ and are - listed in src/sndfile.h. - -2001-12-20 Erik de Castro Lopo - - * src/formats.c src/sndfile.c - Added an way of enumerating a set of common file formats using the - sf_command () interface. This interface was suggested by Dominic Mazzoni, - one of the main authors of Audacity (http://audacity.sourceforge.net/). - -2001-12-26 Erik de Castro Lopo - - * src/sndfile.c - Added checking of filename parameter in sf_open_read (). Previousy, if a - NULL pointer was passed the library would segfault. - -2001-12-18 Erik de Castro Lopo - - * src/common.c src/common.h - Changed the len parameter of the endswap_*_array () functions from type - int to type long. - - * src/pcm.c - Fixed a problem which - -2001-12-15 Erik de Castro Lopo - - * src/sndfile.c - Added conditional #include for EMX/gcc on OS/2. Thanks to - Paul Hartman for pointing this out. - - * tests/lossy_comp_test.c tests/floating_point_test.c - Added definitions for M_PI for when it isn't defined in . - -2001-11-30 Erik de Castro Lopo - - * src/ircam.c - Re-implemented the header reader. Old version was making incorrect - assumptions about the endian-ness of the file from the magic number at the - start of the file. The new code looks at the integer which holds the - number of channels and determines the endian-ness from that. - -2001-11-30 Erik de Castro Lopo - - * src/aiff.c - Added support for other AIFC types ('raw ', 'in32', '23ni'). - Further work on IMA ADPCM encoding. - -2001-11-29 Erik de Castro Lopo - - * src/ima_adpcm.c - Renamed from wav_ima_adpcm.c. This file will soon handle IMA ADPCM - encodings for both WAV and AIFF files. - - * src/aiff.c - Started adding IMA ADPCM support. - -2001-11-28 Erik de Castro Lopo - - * src/double.c - New file for handling double precision floating point (SF_FORMAT_DOUBLE) - data. - - * src/wav.c src/aiff.c src/au.c src/raw.c - Added support for SF_FORMAT_DOUBLE data. - - * src/common.[ch] - Addition of endswap_long_array () for endian swapping 64 bit integers. This - function will work correctly on processors with 32 bit and 64 bit longs. - Optimised endswap_short_array () and endswap_int_array (). - - * tests/pcm_test.c - Added and extra check. After the first file of each type is written to disk - a checksum is performed of the first 64 bytes and checked against a pre- - calculated value. This will work whatever the endian-ness of the host - machine. - -2001-11-27 Erik de Castro Lopo - - * src/aiff.c - Added handling of u-law, A-law encoded AIFF files. Thanks to Tom Erbe for - supplying example files. - - * tests/lossy_comp_test.c - Added tests for above. - - * src/common.h src/*.c - Removed function typedefs from common.h and function pointer casting in all - the other files. This allows the compiler to perform proper type checking. - Hopefully this will prevernt problems like the sf_seek bug for OpenBSD, - BeOS etc. - - * src/common.[ch] - Added new function psf_new_binheader_readf () which will eventually replace - psf_binheader_readf (). The new function has basically the same function as - the original but has a more flexible and capable interface. It also allows - the reading of 64 bit integer values for files contains 64 bit file - offsets. - -2001-11-26 Erik de Castro Lopo - - * src/voc.c - Completed implementation of VOC file handling. Can now handle 8 and 16 bit - PCM, u-law and A-law files with one or two channels. - - * src/write_read_test.c tests/lossy_comp_test.c - Added tests for VOC files. - -2001-11-22 Erik de Castro Lopo - - * src/float_cast.h - Added inline asm version of lrint/lrintf for MacOS. Solution provided by - Stephane Letz. - - * src/voc.c - More work on this braindamaged format. The VOC files produced by SoX also - have a number of inconsistencies. - -2001-11-19 Erik de Castro Lopo - - * src/paf.c - Added support for 8 bit PCM PAF files. - - * tests/write_read_test.c - Added tests for 8 bit PAF files. - -2001-11-18 Erik de Castro Lopo - - * tests/pcm_test.c - New test program to test for correct scaling of integer values between - different sized integer containers (ie short -> int). - The new specs for libsndfile state that when the source and destination - containers are of a different size, the most significant bit of the source - value becomes the most significant bit of the destination container. - - * src/pcm.c src/paf.c - Modified to pass the above test program. - - * tests/write_read_test.c tests/lossy_comp_test.c - Modified to work with the new scaling rules. - -2001-11-17 Erik de Castro Lopo - - * src/raw.c tests/write_read_test.c tests/write_read_test.c - Added ability to do raw reads/writes of float, u-law and A-law files. - - * src/*.[ch] examples/*.[ch] tests/*.[ch] - Removed dependance on pcmbitwidth field of SF_INFO struct and moved to new - SF_FORMAT_* types and use of SF_ENDIAN_BIG/LITTLE/CPU. - -2001-11-12 Erik de Castro Lopo - - * src/*.[ch] - Started implmentation of major changes documented in doc/version1.html. - - Removed all usage of off_t which is not part of the ISO C standard. All - places which were using it are now using type long which is the type of - the offset parameter for the fseek function. - This should fix problems on BeOS, MacOS and *BSD like systems which were - failing "make check" because sizeof (long) != sizeof (off_t). - --------------------------------------------------------------------------------- -This is the boundary between version 1 of the library above and version 0 below. --------------------------------------------------------------------------------- - -2001-11-11 Erik de Castro Lopo - - * examples/sfplay_beos.cpp - Added BeOS version of sfplay.c. This needs to be compiled using a C++ - compiler so is therefore not built by default. Thanks to Marcus Overhagen - for providing this. - -2001-11-10 Erik de Castro Lopo - - * examples/sfplay.c - New example file showing how libsndfile can be used to read and play a - sound file. - At the moment on Linux is supported. Others will follow in the near future. - -2001-11-09 Erik de Castro Lopo - - * src/pcm.c - Fixed problem with normalisation code where a value of 1.0 could map to - a value greater than MAX_SHORT or MAX_INT. Thanks to Roger Dannenberg for - pointing this out. - -2001-11-08 Erik de Castro Lopo - - * src/pcm.c - Fixed scaling issue when reading/writing 8 bit files using - sf_read/sf_write_short (). - On read, values are scaled so that the most significant bit in the char - ends up in the most significant bit of the short. On write, values are - scaled so that most significant bit in the short ends up as the most - significant bit in the char. - -2001-11-07 Erik de Castro Lopo - - * src/au.c src/sndfile.c - Added support for 32 bit float data in big and little endian AU files. - - * tests/write_read_test.c - Added tests for 32 bit float data in AU files. - -2001-11-06 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Finalised testing of stereo files where possible. - -2001-11-05 Erik de Castro Lopo - - * src/wav_ms_adpcm.c - Fixed bug in writing stereo MS ADPCM WAV files. Thanks to Xu Xin for - pointing out this problem. - -2001-10-24 Erik de Castro Lopo - - * src/wav_ms_adpcm.c - Modified function srate2blocksize () to handle 44k1Hz stereo files. - -2001-10-21 Erik de Castro Lopo - - * src/w64.c - Added support for Sonic Foundry 64 bit WAV format. As Linux (my main - development platform) does not yet support 64 bit file offsets by default, - current handling of this file format treats everything as 32 bit and fails - openning the file, if it finds anything that goes beyond 32 bit values. - - * src/sndfile.[hc] src/common.h src/Makefile.am - Added hooks for W64 support. - -2001-10-21 Erik de Castro Lopo - - * configure.in - Added more warnings options to CFLAGS when the gcc compiler is detected. - - * src/*.[ch] tests/*.c examples/*.c - Started fixing the warning messages due to the new CFLASG. - - * src/voc.c - More work on VOC file read/writing. - - * src/paf.c - Found that PAF files were not checking the normalisation flag when reading - or writing floats and doubles. Fixed it. - - * tests/floating_point_test.c - Added specific test for the above problem. - - * src/float_cast.h src/pcm.c - Added a section for Win32 to define lrint () and lrintf () in the header - and implement it in the pcm.c - -2001-10-20 Erik de Castro Lopo - - * sndfile-config.in m4/sndfile.m4 - These files were donated by Conrad Parker who also provided instructions - on how to install them using autoconf/automake. - - * src/float_cast.h - Fiddled around with this file some more. On Linux and other gcc supported - OSes use the C99 functions lrintf() and lrint() for casting from floating - point to int without incurring the huge perfromance penalty (particularly - on the i386 family) caused by the regular C cast from float to int. - These new C99 functions replace the FLOAT_TO_* and DOUBLE_TO_* macros which - I had been playing with. - - * configure.in m4/lrint.m4 m4/lrintf.m4 - Add detection of these functions. - -2001-10-17 Erik de Castro Lopo - - * src/voc.c - Completed code for reading VOC files containing a single audio data - segment. - Started implementing code to handle files with multiple VOC_SOUND_DATA - segments but couldn't be bothered finishing it. Multiple segment files can - have different sample rates for different sections and other nasties like - silence and repeat segments. - -2001-10-16 Erik de Castro Lopo - - * src/common.h src/*.c - Removed SF_PRIVATE struct field fdata and replaced it with extra_data. - - * src/voc.c - Further development of the read part of this woefult file format. - -2001-10-04 Erik de Castro Lopo - - * src/float_cast.h - Implemented gcc and i386 floating point to int cast macros. Standard cast - will be used when not on gcc for i385. - - * src/pcm.c - Modified all uses of FLOAT/DOUBLE_TO_INT and FLOAT/DOUBLE_TO_SHORT casts to - comply with macros in float_cast.h. - -2001-10-04 Erik de Castro Lopo - - * src/voc.c - Changed the TYPE_xxx enum names to VOC_TYPE_xxx to prevent name clashes - on MacOS with CodeWarrior 6.0. - - * MacOS/MacOS-readme.txt - Updated the compile instructions. Probably still need work as I don't have - access to a Mac. - -2001-10-01 Erik de Castro Lopo - - * src/wav.c src/aiff.c common.c - Changed all references to snprintf to LSF_SNPRINTF and all vsnprintf to - LSF_VSNPRINTF. LSF_VSNPRINTF and LSF_VSNPRINTF are defined in common.h. - - * src/common.h - Added checking of HAVE_SNPRINTF and HAVE_VSNPRINTF and defining - LSF_VSNPRINTF and LSF_VSNPRINTF to appropriate values. - - * src/missing.c - New file containing a minimal implementation of snprintf and vsnprintf - functions named missing_snprintf and missing_vsnprintf respectively. These - are only compliled into the binary if snprintf and/or vsnprintf are not - available. - -2001-09-29 Erik de Castro Lopo - - * src/ircam.c - New file to handle Berkeley/IRCAM/CARL files. - - * src/sndfile.c src/common.h - Modified for IRCAM handling. - - * tests/*.c - Added tests for IRCAM files. - -2001-09-27 Erik de Castro Lopo - - * src/wav.c - Apparently microsoft windows (tm) doesn't like ulaw and Alaw WAV files with - 20 byte format chunks (contrary to ms's own documentation). Fixed the WAV - header writing code to generate smaller ms compliant ulaw and Alaw WAV - files. - -2001-09-17 Erik de Castro Lopo - - * tests/stdio_test.sh tests/stdio_test.c - Shell script was rewritten as a C program due to incompatibilities of the - sh shell on Linux and Solaris. - -2001-09-16 Erik de Castro Lopo - - * tests/stdio_test.sh tests/stdout_test.c tests/stdin_test.c - New test programs to verify the correct operation of reading from stdin and - writing to stdout. - - * src/sndfile.c wav.c au.c nist.c paf.c - Fixed a bugs uncovered by the new test programs above. - -2001-09-15 Erik de Castro Lopo - - * src/sndfile.c wav.c - Fixed a bug preventing reading a file from stdin. Found by T. Narita. - -2001-09-12 Erik de Castro Lopo - - * src/common.h - Fixed a problem on OpenBSD 2.9 which was causing sf_seek() to fail on IMA - WAV files. Root cause was the declaration of the func_seek typedef not - matching the functions it was actually being used to point to. In OpenBSD - sizeof (off_t) != sizeof (int). Thanks to Heikki Korpela for allowing me - to log into his OpenBSD machine to debug this problem. - -2001-09-03 Erik de Castro Lopo - - * src/sndfile.c - Implemented sf_command ("norm float"). - - * src/*.c - Implemented handling of sf_command ("set-norm-float"). Float normalization - can now be turned on and off. - - * tests/double_test.c - Renamed to floating_point_test.c. Modified to include tests for all scaled - reads and writes of floats and doubles. - - * src/au_g72x.c - Fixed bug in normalization code found with improved floating_point_test - program. - - * src/wav.c - Added code for parsing 'INFO' and 'LIST' chunks. Will be used for extract - text annotations from WAV files. - - * src/aiff.c - Added code for parsing '(c) ' and 'ANNO' chunks. Will be used for extract - text annotations from WAV files. - -2001-09-02 Erik de Castro Lopo - - * examples/sf_info.c example/Makefile.am - Renamed to sndfile_info.c. The program sndfile_info will now be installed - when the library is installed. - - * src/float_cast.h - New file defining floating point to short and int casts. These casts will - eventually replace all flot and double casts to short and int. See comments - at the top of the file for the reasoning. - - * src/*.c - Changed all default float and double casts to short or int with macros - defined in floatcast.h. At the moment these casts do nothing. They will be - replaced with faster float to int cast operations in the near future. - -2001-08-31 Erik de Castro Lopo - - * tests/command_test.c - New file for testing sf_command () functionality. - - * src/sndfile.c - Revisiting of error return values of some functions. - Started implementing sf_command () a new function will allow on-the-fly - modification of library behaviour, or instance, sample value scaling. - - * src/common.h - Added hook for format specific sf_command () calls to SNDFILE struct. - - * doc/api.html - Updated and errors corrected. - - * doc/command.html - New documentation file explaining new sf_command () function. - -2001-08-11 Erik de Castro Lopo - - * src/sndfile.c - Fixed error return values from sf_read*() and sf_write*(). There were - numerous instances of -1 being returned through size_t. These now all set - error int the SF_PRIVATE struct and return 0. Thanks to David Viens for - spotting this. - -2001-08-01 Erik de Castro Lopo - - * src/common.c - Fixed use of va_arg() calls that were causing warning messages with the - latest version of gcc (thanks Maurizio Umberto Puxeddu). - -2001-07-25 Erik de Castro Lopo - - * src/*.c src/sfendian.h - Moved definition of MAKE_MARKER macro to sfendian.h - -2001-07-23 Erik de Castro Lopo - - * src/sndfile.c - Modified sf_get_lib_version () so that version string will be visible using - the Unix strings command. - - * examples/Makefile.am examples/sfinfo.c - Renamed sfinfo program and source code to sf_info. This prevents a name - clash with the program included with libaudiofile. - -2001-07-22 Erik de Castro Lopo - - * tests/read_seek_test.c tests/lossy_comp_test.c - Added tests for sf_read_float () and sf_readf_float (). - - * src/voc.c - New files for handling Creative Voice files (not complete). - - * src/samplitude.c - New files for handling Samplitude files (not complete). - -2001-07-21 Erik de Castro Lopo - - * src/aiff.c src/au.c src/paf.c src/svx.c src/wav.c - Converted these files to using psf_binheader_readf() function. Will soon be - ready to attempt to make reading writing from pipes work reliably. - - * src/*.[ch] - Added code for sf_read_float () and sf_readf_float () methods of accessing - file data. - -2001-07-20 Erik de Castro Lopo - - * src/paf.c src/wav_gsm610.c - Removed two printf()s which had escaped notice for some time (thanks - Sigbjørn Skjæret). - -2001-07-19 Erik de Castro Lopo - - * src/wav_gsm610.c - Fixed a bug which prevented GSM 6.10 encoded WAV files generated by - libsndfile from being played in Windoze (thanks klay). - -2001-07-18 Erik de Castro Lopo - - * src/common.[ch] - Implemented psf_binheader_readf() which will do for file header reading what - psf_binheader_writef() did for writing headers. Will eventually allow - libsndfile to read and write from pipes, including named pipes. - -2001-07-16 Erik de Castro Lopo - - * MacOS/config.h Win32/config.h - Attempted to bring these two files uptodate with src/config.h. As I don't - have access to either of these systems support for them may be completely - broken. - -2001-06-18 Erik de Castro Lopo - - * src/float32.c - Fixed bug for big endian processors that can't read 32 bit IEEE floats. Now - tested on Intel x86 and UltraSparc processors. - -2001-06-13 Erik de Castro Lopo - - * src/aiff.c - Modified to allow REX files (from Propellorhead's Recycle and Reason - programs) to be read. - REX files are basically an AIFF file with slightly unusual sequence of - chunks (AIFF files are supposed to allow any sequence) and some extra - application specific information. - Not yet able to write a REX file as the details of the application specific - data is unknown. - -2001-06-12 Erik de Castro Lopo - - * src/wav.c - Fixed endian bug when reading PEAK chunk on big endian machines. - - * src/common.c - Fixed endian bug when reading PEAK chunk on big endian machines with - --enable-force-broken-float configure option. - Fix psf_binheader_writef for (FORCE_BROKEN_FLOAT ||______) - -2001-06-07 Erik de Castro Lopo - - * configure.in src/config.h.in - Removed old CAN_READ_WRITE_x86_IEEE configure variable now that float - capabilities are detected at run time. - Added FORCE_BROKEN_FLOAT to allow testing of broken float code on machines - where the processor can in fact handle floats correctly. - - * src/float32.c - Rejigged code reading and writing of floats on broken processors. - - * m4/ - Removed this directory and all its files as they are no longer needed. - -2001-06-05 Erik de Castro Lopo - - * tests/peak_chunk_test.c - New test to validate reading and writing of peak chunk. - - * examples/sfconvert - Added -float32 option. - - * src/*.c - Changed all error return values to negative values (ie the negative of what - they were). - - * src/sndfile.c tests/error_test.c - Modified to take account of the previous change. - -2001-06-04 Erik de Castro Lopo - - * src/float32.c - File renamed from wav_float.c and renamed function to something more - general. - Added runtime detection of floating point capabilities. - Added recording of peaks during write for generation of PEAK chunk. - - * src/wav.c src/aiff.c - Added handing for PEAK chunk for floating point files. PEAK is read when the - file headers are read and generated when the file is closed. Logic is in - place for adding PEAK chunk to end of file when writing to a pipe (reading - and writing from/to pipe to be implemented soon). - - * src/sndfile.c - Modified sf_signal_max () to use PEAK values if present. - -2001-06-03 Erik de Castro Lopo - - * src/*.c - Added pcm_read_init () and pcm_write_init () to src/pcm.c and removed all - other calls to functions in this file from the filetype specific files. - - * src/*.c - Added alaw_read_init (), alaw_write_int (), ulaw_read_init () and - ulaw_write_init () and removed all other calls to functions in alaw.c and - ulaw.c from the filetype specific files. - - * tests/write_read_test.c - Added tests to validate sf_seek () on all file types. - - * src/raw.c - Implemented raw_seek () function to fix a bug where - sf_seek (file, 0, SEEK_SET) on a RAW file failed. - - * src/paf.c - Fixed a bug in paf24_seek () found due to added seeks tests in - tests/write_read_test.c - -2001-06-01 Erik de Castro Lopo - - * tests/read_seek_test.c - Fixed a couple of broken binary files. - - * src/aiff.c src/wav.c - Added handling of PEAK chunks on file read. - -2001-05-31 Erik de Castro Lopo - - * check_libsndfile.py - New file for the regression testing of libsndfile. - check_libsndfile.py is a Python script which reads in a file containing - filenames of audio files. Each file is checked by running the examples/sfinfo - program on them and checking for error or warning messages in the libsndfile - log buffer. - - * check_libsndfile.list - This is an example list of audio files for use with check_libsndfile.py - - * tests/lossy_comp_test.c - Changed the defined value of M_PI for math header files which don't have it. - This fixed validation test failures on MetroWerks compilers. Thanks to Lord - Praetor Satanus of Acheron for bringing this to my attention. - -2001-05-30 Erik de Castro Lopo - - * src/common.[ch] - Removed psf_header_setf () which was no longer required after refactoring - and simplification of header writing. - Added 'z' format specifier to psf_binheader_writef () for zero filling header - with N bytes. Used by paf.c and nist.c - - * tests/check_log_buffer.c - New file implementing check_log_buffer () which reads the log buffer of a - SNDFILE* object and searches for error and warning messages. Calls exit () - if any are found. - - * tests/*.c - Added calls to check_log_buffer () after each call to sf_open_XXX (). - -2001-05-29 Erik de Castro Lopo - - * src/wav.c src/wav_ms_adpcm.c src/wav_gsm610.c - Major rehack of header writing using psf_binheader_writef (). - -2001-05-28 Erik de Castro Lopo - - * src/wav.c src/wav_ima_adpcm.c - Major rehack of header writing using psf_binheader_writef (). - -2001-05-27 Erik de Castro Lopo - - * src/wav.c - Changed return type of get_encoding_str () to prevent compiler warnings on - Mac OSX. - - * src/aiff.c src/au.c - Major rehack of header writing using psf_binheader_writef (). - -2001-05-25 Erik de Castro Lopo - - * src/common.h src/common.c - Added comments. - Name of log buffer changed from strbuffer to logbuffer. - Name of log buffer index variable changed from strindex to logindex. - - * src/*.[ch] - Changed name of internal logging function from psf_sprintf () to - psf_log_printf (). - Changed name of internal header generation functions from - psf_[ab]h_printf () to psf_asciiheader_printf () and - psf_binheader_writef (). - Changed name of internal header manipulation function psf_hsetf () to - psf_header_setf (). - -2001-05-24 Erik de Castro Lopo - - * src/nist.c - Fixed reading and writing of sample_byte_format header. "01" means little - endian and "10" means big endian regardless of bit width. - - * configure.in - Detect Mac OSX and disable -Wall and -pedantic gcc options. Mac OSX is - way screwed up and spews out buckets of warning messages from the system - headers. - Added --disable-gcc-opt configure option (sets gcc optimisation to -O0 ) for - easier debugging. - Made decision to harmonise source code version number and .so library - version number. Future releases will stick to this rule. - - * doc/new_file_type.HOWTO - New file to document the addition of new file types to libsndfile. - -2001-05-23 Erik de Castro Lopo - - * src/nist.c - New file for reading/writing Sphere NIST audio file format. - Originally requested by Elis Pomales in 1999. - Retrieved from unstable (and untouched for 18 months) branch of libsndfile. - Some vital information gleaned from the source code to Bill Schottstaedt's - sndlib library : ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz - Currently reading and writing 16, 24 and 32 bit, big-endian and little - endian, stereo and mono files. - - * src/common.h src/common.c - Added psf_ah_printf () function to help construction of ASCII headers (ie NIST). - - * configure.in - Added test for vsnprintf () required by psf_ah_printf (). - - * tests/write_read_test.c - Added tests for supported NIST files. - -2001-05-22 Erik de Castro Lopo - - * tests/write_read_test.c - Added tests for little endian AIFC files. - - * src/aiff.c - Minor re-working of aiff_open_write (). - Added write support for little endian PCM encoded AIFC files. - -2001-05-13 Erik de Castro Lopo - - * src/aiff.c - Minor re-working of aiff_open_read (). - Added read support for little endian PCM encoded AIFC files from the Mac - OSX CD ripper program. Guillaume Lessard provided a couple of sample files - and a working patch. - The patch was not used as is but gave a good guide as to what to do. - -2001-05-11 Erik de Castro Lopo - - * src/sndfile.h - Fixed comments about endian-ness of WAV and AIFF files. Guillaume Lessard - pointed out the error. - -2001-04-23 Erik de Castro Lopo - - * examples/make_sine.c - Re-write of this example using sample rate and required frequency in Hz. - -2001-02-11 Erik de Castro Lopo - - * src/sndfile.c - Fixed bug that prevented known file types from being read as RAW PCM data. - -2000-12-16 Erik de Castro Lopo - - * src/aiff.c - Added handing of COMT chunk. - -2000-11-16 Erik de Castro Lopo - - * examples/sfconvert.c - Fixed bug in normalisatio code. Pointed out by Johnny Wu. - -2000-11-08 Erik de Castro Lopo - - * Win32/config.h - Fixed the incorrect setting of HAVE_ENDIAN_H parameter. Win32 only issue. - -2000-10-27 Erik de Castro Lopo - - * tests/Makefile.am - Added -lm for write_read_test_LDADD. - -2000-10-16 Erik de Castro Lopo - - * src/sndfile.c src/au.c - Fixed bug which prevented writing of G723 24kbps AU files. - - * tests/lossy_comp_test.c - Corrrection to options for G723 tests. - - * configure.in - Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which - doesn't allow gcc -pipe option. - -2000-09-03 Erik de Castro Lopo - - * src/ulaw.c src/alaw.c src/wav_imaadpcm.c src/msadpcm.c src/wav_gsm610.c - Fixed normailsation bugs shown up by new double_test program. - -2000-08-31 Erik de Castro Lopo - - * src/pcm.c - Fixed bug in normalisation code (spotted by Steve Lhomme). - - * tests/double_test.c - New file to test scaled and unscaled sf_read_double() and sf_write_double() - functions. - -2000-08-28 Erik de Castro Lopo - - * COPYING - Changed to the LGPL COPYING file (spotted by H. S. Teoh). - -2000-08-21 Erik de Castro Lopo - - * src/sndfile.h - Removed prototype of unimplemented function sf_get_info(). Added prototype - for sf_error_number() Thanks to Sigbjørn Skjæret for spotting these. - -2000-08-18 Erik de Castro Lopo - - * src/newpcm.h - New file to contain a complete rewrite of the PCM data handling. - -2000-08-15 Erik de Castro Lopo - - * src/sndfile.c - Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbjørn - Skjæret for spotting this one. - -2000-08-13 Erik de Castro Lopo - - * src/au_g72x.c src/G72x/g72x.c - Added G723 encoded AU file support. - - * tests/lossy_comp_test.c - Added tests for G721 and G723 encoded AU files. - -2000-08-06 Erik de Castro Lopo - - * all files - Changed the license to LGPL. Albert Faber who had copyright on - Win32/unistd.h gave his permission to change the license on that file. All - other files were either copyright erikd AT mega-nerd DOT com or copyright - under a GPL/LGPL compatible license. - -2000-08-06 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Fixed incorrect error message. - - * src/au_g72x.c src/G72x/* - G721 encoded AU files now working. - - * Win32/README-Win32.txt - Replaced this file with a new one which gives a full explanation - of how to build libsndfile under Win32. Thanks to Mike Ricos. - -2000-08-05 Erik de Castro Lopo - - * src/*.[ch] - Removed double leading underscores from the start of all variable and - function names. Identifiers with a leading underscores are reserved - for use by the compiler. - - * src/au_g72x.c src/G72x/* - Continued work on G721 encoded AU files. - -2000-07-12 Erik de Castro Lopo - - * src/G72x/* - New files for reading/writing G721 and G723 ADPCM audio. These files - are from a Sun Microsystems reference implementation released under a - free software licence. - Extensive changes to this code to make it fit in with libsndfile. - See the ChangeLog in this directory for details. - - * src/au_g72x.c - New file for G721 encoded AU files. - -2000-07-08 Erik de Castro Lopo - - * libsndfile.spec.in - Added a spec file for making RPMs. Thanks to Josh Green for supplying this. - -2000-06-28 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h - Add checking for and handling of header-less u-law encoded AU/SND files. - Any file with a ".au" or ".snd" file extension and without the normal - AU file header is treated as an 8kHz, u-law encoded file. - - * src/au.h - New function for opening a headerless u-law encoded file for read. - -2000-06-04 Erik de Castro Lopo - - * src/paf.c - Add checking for files shorter than minimal PAF file header length. - -2000-06-02 Erik de Castro Lopo - - * tests/write_read_test.c - Added extra sf_perror() calls when sf_write_XXXX fails. - -2000-05-29 Erik de Castro Lopo - - * src/common.c - Modified usage of va_arg() macro to work correctly on PowerPC - Linux. Thanks to Kyle Wheeler for giving me ssh access to his - machine while I was trying to track this down. - - * configure.in src/*.[ch] - Sorted out some endian-ness issues brought up by PowerPC Linux. - - * tests/read_seek_test.c - Added extra debugging for when tests fail. - -2000-05-18 Erik de Castro Lopo - - * src/wav.c - Fixed bug in GSM 6.10 handling for big-endian machines. Thanks - to Sigbjørn Skjæret for reporting this. - -2000-04-25 Erik de Castro Lopo - - * src/sndfile.c src/wav.c src/wav_gsm610.c - Finallised writing of GSM 6.10 WAV files. - - * tests/lossy_comp_test.c - Wrote new test code for GSM 6.10 files. - - * examples/sfinfo.c - Fixed incorrect format in printf() statement. - -2000-04-06 Erik de Castro Lopo - - * src/sndfile.h.in - Fixed comments about sf_perror () and sf_error_str (). - -2000-03-14 Erik de Castro Lopo - - * configure.in - Fixed --enable-justsrc option. - -2000-03-07 Erik de Castro Lopo - - * wav.c - Fixed checking of bytespersec field of header. Still some weirdness - with some files. - -2000-03-05 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Added option to test PCM WAV files (sanity check). - Fixed bug in sf_seek() tests. - -2000-02-29 Erik de Castro Lopo - - * src/sndfile.c src/wav.c - Minor changes to allow writing of GSM 6.10 WAV files. - -2000-02-28 Erik de Castro Lopo - - * configure.in Makefile.am src/Makefile.am - Finally got around to figuring out how to build a single library from - multiple source directories. - Reading GSM 6.10 files now seems to work. - -2000-01-03 Erik de Castro Lopo - - * src/wav.c - Added more error reporting in read_fmt_chunk(). - -1999-12-21 Erik de Castro Lopo - - * examples/sfinfo.c - Modified program to accept multiple filenames from the command line. - -1999-11-27 Erik de Castro Lopo - - * src/wav_ima_adpcm.c - Moved code around in preparation to adding ability to read/write IMA ADPCM - encoded AIFF files. - -1999-11-16 Erik de Castro Lopo - - * src/common.c - Fixed put_int() and put_short() macros used by _psf_hprintf() which were - causing seg. faults on Sparc Solaris. - -1999-11-15 Erik de Castro Lopo - - * src/common.c - Added string.h to includes. Thanks to Sigbjxrn Skjfret. - - * src/svx.c - Fixed __svx_close() function to ensure FORM and BODY chunks are correctly - set. - -1999-10-01 Erik de Castro Lopo - - * src/au.c - Fixed handling of incorrect size field in AU header on read. Thanks to - Christoph Lauer for finding this problem. - -1999-09-28 Erik de Castro Lopo - - * src/aiff.c - Fixed a bug with incorrect SSND chunk length being written. This also lead - to finding an minor error in AIFF header parsing. Thanks to Dan Timis for - pointing this out. - -1999-09-24 Erik de Castro Lopo - - * src/paf.c - Fixed a bug with reading and writing 24 bit stereo PAF files. This problem - came to light when implementing tests for the new functions which operate - in terms of frames rather than items. - -1999-09-23 Erik de Castro Lopo - - * src/sndfile.c - Modified file type detection to use first 12 bytes of file rather than - file name extension. Required this because NIST files use the same - filename extension as Microsoft WAV files. - - * src/sndfile.c src/sndfile.h - Added short, int and double read/write functions which work in frames - rather than items. This was originally suggested by Maurizio Umberto - Puxeddu. - -1999-09-22 Erik de Castro Lopo - - * src/svx.c - Finished off implementation of write using __psf_hprintf(). - -1999-09-21 Erik de Castro Lopo - - * src/common.h - Added a buffer to SF_PRIVATE for writing the header. This is required - to make generating headers for IFF/SVX files easier as well as making - it easier to do re-write the headers which will be required when - sf_rewrite_header() is implemented. - - * src/common.c - Implemented __psf_hprintf() function. This is an internal function - which is documented briefly just above the code. - -1999-09-05 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_write_raw() where it was returning incorrect values - (thanks to Richard Dobson for finding this one). Must put in a test - routine for sf_read_raw and sf_write_raw. - - * src/aiff.c - Fixed default FORMsize in __aiff_open_write (). - - * src/sndfile.c - Added copy of filename to internal data structure. IFF/SVX files - contain a NAME header chunk. Both sf_open_read() and sf_open_write() - copy the file name (less the leading path information) to the - filename field. - - * src/svx.c - Started implementing writing of files. - -1999-08-04 Erik de Castro Lopo - - * src/svx.c - New file for reading/writing 8SVX and 16SVX files. - - * src/sndfile.[ch] src/common.h - Changes for SVX files. - - * src/aiff.c - Fixed header parsing when unknown chunk is found. - -1999-08-01 Erik de Castro Lopo - - * src/paf.c - New file for reading/writing Ensoniq PARIS audio file format. - - * src/sndfile.[ch] src/common.h - Changes for PAF files. - - * src/sndfile.[ch] - Added stuff for sf_get_lib_version() function. - - -1999-07-31 Erik de Castro Lopo - - * src/sndfile.h MacOS/config.h - Fixed minor MacOS configuration issues. - -1999-07-30 Erik de Castro Lopo - - * MacOS/ - Added a new directory for the MacOS config.h file and the - readme file. - - * src/aiff.c - Fixed calculation of datalength when reading SSND chunk. Thanks to - Sigbjørn Skjæret for pointing out this error. - -1999-07-29 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h src/raw.c - Further fixing of #includes for MacOS. - -1999-07-25 Erik de Castro Lopo - - * src/wav.c src/aiff.c - Added call to ferror () in main header parsing loop of __XXX_open_read - functions. This should fix problems on platforms (MacOS, AmigaOS) where - fseek()ing or fread()ing beyond the end of the file puts the FILE* - stream in an error state until clearerr() is called. - - * tests/write_read_test.c - Added tests for RAW header-less PCM files. - - * src/common.h - Moved definition of struct tribyte to pcm.c which is the only place - which needs it. - - * src/pcm.c - Modified all code which assumed sizeof (struct tribyte) == 3. This code - did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out. - - * src/au.c - Removed from list of #includes (not being used). - - * src/sndfile.c - Added MacOS specific #ifdef to replace . - - * src/sndfile.h - Added MacOS specific #ifdef to replace . - - * src/sndfile.h - Added MacOS specific typedef for off_t. - - * MacOS-readme.txt - New file with instructions for building libsndfile under MacOS. Thanks - to Ben "Jacobs" for supplying these instructions. - -1999-07-24 Erik de Castro Lopo - - * configure.in - Removed sndfile.h from generated file list as there were no longer - any autoconf substitutions being made. - - * src/raw.c - New file for handling raw header-less PCM files. In order to open these - for read, the user must specify format, pcmbitwidth and channels in the - SF_INFO struct when calling sf_open_read (). - - * src/sndfile.c - Added support for raw header-less PCM files. - -1999-07-22 Erik de Castro Lopo - - * examples/sfinfo.c - Removed options so the sfinfo program always prints out all the information. - -1999-07-19 Erik de Castro Lopo - - * src/alaw.c - New file for A-law encoding (similar to u-law). - - * tests/alaw_test.c - New test program to test the A-law encode/decode lookup tables. - - * tests/lossy_comp_test.c - Added tests for a-law encoded WAV, AU and AULE files. - -1999-07-18 Erik de Castro Lopo - - * src/sndfile.c src/au.c - Removed second "#include ". Thanks to Ben "Jacobs" for pointing - this out. - -1999-07-18 Erik de Castro Lopo - - * tests/ulaw_test.c - New test program to test the u-law encode/decode lookup tables. - -1999-07-16 Erik de Castro Lopo - - * src/sndfile.h - Made corrections to comments on the return values from sf_seek (). - - * src/sndfile.c - Fixed boundary condition checking bug and accounting bug in sf_read_raw (). - -1999-07-15 Erik de Castro Lopo - - * src/au.c src/ulaw.c - Finished implementation of u-law encoded AU files. - - * src/wav.c - Implemented reading and writing of u-law encoded WAV files. - - * tests/ - Changed name of adpcm_test.c to lossy_comp_test.c. This test program - will now be used to test Ulaw and Alaw encoding as well as APDCM. - Added tests for Ulaw encoded WAV files. - -1999-07-14 Erik de Castro Lopo - - * tests/adpcm_test.c - Initialised amp variable in gen_signal() to remove compiler warning. - -1999-07-12 Erik de Castro Lopo - - * src/aiff.c - In __aiff_open_read () prevented fseek()ing beyond end of file which - was causing trouble on MacOS with the MetroWerks compiler. Thanks to - Ben "Jacobs" for pointing this out. - - *src/wav.c - Fixed as above in __wav_open_read (). - -1999-07-01 Erik de Castro Lopo - - * src/wav_ms_adpcm.c - Implemented MS ADPCM encoding. Code cleanup of decoder. - - * tests/adpcm_test.c - Added tests for MS ADPCM WAV files. - - * src/wav_ima_adpcm.c - Fixed incorrect parameter in call to srate2blocksize () from - __ima_writer_init (). - -1999-06-23 Erik de Castro Lopo - - * tests/read_seek_test.c - Added test for 8 bit AIFF files. - -1999-06-18 Erik de Castro Lopo - - * tests/write_read_test.c - Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c - - * configure.in - Added -Wconversion to CFLAGS. - - * src/*.c tests/*.c examples/*.c - Fixed all warnings resulting from use of -Wconversion. - -1999-06-17 Erik de Castro Lopo - - * src/wav.c - Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM - WAV files. - - * src/wav_ima.c - Changed block alignment to be dependant on sample rate. This should make - WAV files created with libsndfile compatible with the MS Windows media - players. - - * tests/adpcm_test.c - Reimplemented adpcm_test_short and implemented adpcm_test_int and - adpcm_test_double. - Now have full testing of IMA ADPCM WAV file read, write and seek. - -1999-06-15 Erik de Castro Lopo - - * src/wav_float.c - Fixed function prototype for x86f2d_array () which was causing ocassional - seg. faults on Sparc Solaris machines. - -1999-06-14 Erik de Castro Lopo - - * src/aiff.c - Fixed bug in __aiff_close where the length fields in the header were - not being correctly calculated before writing. - - * tests/write_read_test.c - Modified to detect the above bug in WAV, AIFF and AU files. - -1999-06-12 Erik de Castro Lopo - - * Win32/* - Added a contribution from Albert Faber to allow libsndfile to compile - under Win32 systems. libsndfile will now be used as part of LAME the - the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/). - -1999-06-11 Erik de Castro Lopo - - * configure.in - Changed to reflect previous changes. - - * src/wav_ima_adpcm.c - Fixed incorrect calculation of bytespersec header field (IMA ADPCM only). - - Fixed bug when writing from int or double data to IMA ADPCM file. Will need - to write test code for this. - - Fixed bug in __ima_write () whereby the length of the current block was - calculated incorrectly. Thanks to Jongcheon Park for pointing this out. - -1999-03-27 Erik de Castro Lopo - - * src/*.c - Changed all read/write/lseek function calls to fread/fwrite/ - fseek/ftell and added error checking of return values from - fread and fwrite in critical areas of the code. - - * src/au.c - Fixed incorrect datasize element in AU header on write. - - * tests/error_test.c - Add new test to check all error values have an associated error - string. This will avoid embarrassing real world core dumps. - -1999-03-23 Erik de Castro Lopo - - * src/wav.c src/aiff.c - Added handling for unknown chunk markers in the file. - -1999-03-22 Erik de Castro Lopo - - * src/sndfile.c - Filled in missing error strings in SndfileErrors array. Missing entries - can cause core dumps when calling sf_error-str (). Thanks to Sam - for finding this problem. - -1999-03-21 Erik de Castro Lopo - - * src/wav_ima_adpcm.c - Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading - stereo files. Caused by not adjusting offset into buffer of decoded - samples for 2 channels. A similar bug existed in __ima_write (). - Need a test for stereo ADPCM files. - - * src/wav_ms_adpcm.c - Decoder working correctly. - -1999-03-18 Erik de Castro Lopo - - * configure.in Makefile.am - Added --enable-justsrc configuration variable sent by Sam - . - - * src/wav_ima_adpcm.c - Fixed bug when reading beyond end of data section due to not - checking pima->blockcount. - This uncovered __ima_seek () bug due to pima->blockcount being set - before calling __ima_init_block (). - -1999-03-17 Erik de Castro Lopo - - * src/wav.c - Started implementing MS ADPCM decoder. - If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this - encoder seems to add an extra byte. Why not just give an even data - length? - -1999-03-16 Erik de Castro Lopo - - * src/wav.c - Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c. - This will make it easier to add and debug other kinds of WAV files - in future. - -1999-03-14 Erik de Castro Lopo - - * tests/ - Added adpcm_test.c which implements test functions for - IMA ADPCM reading/writing/seeking etc. - - * src/wav.c - Fixed many bugs in IMA ADPCM encoder and decoder. - -1999-03-11 Erik de Castro Lopo - - * src/wav.c - Finished implementing IMA ADPCM encoder and decoder (what a bitch!). - -1999-03-03 Erik de Castro Lopo - - * src/wav.c - Started implementing IMA ADPCM decoder. - -1999-03-02 Erik de Castro Lopo - - * src/sndfile.c - Fixed bug where the sf_read_XXX functions were returning a - incorrect read count when reading past end of file. - Fixed bug in sf_seek () when seeking backwards from end of file. - - * tests/read_seek_test.c - Added multiple read test to short_test(), int_test () and - double_test (). - Added extra chunk to all test WAV files to test that reading - stops at end of 'data' chunk. - -1999-02-21 Erik de Castro Lopo - - * tests/write_read_test.c - Added tests for little DEC endian AU files. - - * src/au.c - Add handling for DEC format little endian AU files. - -1999-02-20 Erik de Castro Lopo - - * src/aiff.c src/au.c src/wav.c - Add __psf_sprintf calls during header parsing. - - * src/sndfile.c src/common.c - Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c). - - * tests/write_read_test.c - Added tests for 8 bit PCM files (WAV, AIFF and AU). - - * src/au.c src/aiff.c - Add handling of 8 bit PCM data format. - - * src/aiff.c - On write, set blocksize in SSND chunk to zero like everybody else. - -1999-02-16 Erik de Castro Lopo - - * src/pcm.c: - Fixed bug in let2s_array (cptr was not being initialised). - - * src/sndfile.c: - Fixed bug in sf_read_raw and sf_write_raw. sf_seek should - now work when using these functions. - -1999-02-15 Erik de Castro Lopo - - * tests/write_read_test.c: - Force test_buffer array to be double aligned. Sparc Solaris - requires this. - -1999-02-14 Erik de Castro Lopo - - * src/pcm.c: - Fixed a bug which was causing errors in the reading - and writing of 24 bit PCM files. - - * doc/api.html - Finished of preliminary documentaion. - -1999-02-13 Erik de Castro Lopo - - * src/aiff.c: - Changed reading of 'COMM' chunk to avoid reading an int - which overlaps an int (4 byte) boundary. - diff --git a/Libraries/SndFile/Files/INSTALL b/Libraries/SndFile/Files/INSTALL deleted file mode 100644 index b42a17ac4..000000000 --- a/Libraries/SndFile/Files/INSTALL +++ /dev/null @@ -1,182 +0,0 @@ -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need `configure.in' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not supports the `VPATH' -variable, you have to compile the package for one architecture at a time -in the source code directory. After you have installed the package for -one architecture, use `make distclean' before reconfiguring for another -architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: - CPU-COMPANY-SYSTEM - -See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the host type. - - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Operation Controls -================== - - `configure' recognizes the following options to control how it -operates. - -`--cache-file=FILE' - Use and save the results of the tests in FILE instead of - `./config.cache'. Set FILE to `/dev/null' to disable caching, for - debugging `configure'. - -`--help' - Print a summary of the options to `configure', and exit. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`configure' also accepts some other, not widely useful, options. diff --git a/Libraries/SndFile/Files/NEWS b/Libraries/SndFile/Files/NEWS deleted file mode 100644 index a62f5de79..000000000 --- a/Libraries/SndFile/Files/NEWS +++ /dev/null @@ -1,98 +0,0 @@ -Version 1.0.11 (2004-11-15) - * Add support for SD2 files. - * Add read support for loop info in WAV and AIFF files. - * Add more tests. - * Improve type safety. - * Minor optimisations and bug fixes. - -Version 1.0.10 (2004-06-15) - * Fix AIFF read/write mode bugs. - * Add support for compiling Win32 DLLS using MinGW. - * Fix problems resulting in failed compiles with gcc-2.95. - * Improve test suite. - * Minor bug fixes. - -Version 1.0.9 (2004-03-30) - * Add handling of AVR (Audio Visual Research) files. - * Improve handling of WAVEFORMATEXTENSIBLE WAV files. - * Fix for using pipes on Win32. - -Version 1.0.8 (2004-03-14) - * Correct peak chunk handing for files with > 16 tracks. - * Fix for WAV files with huge number of CUE chunks. - -Version 1.0.7 (2004-02-25) - * Fix clip mode detection on ia64, MIPS and other CPUs. - * Fix two MacOSX build problems. - -Version 1.0.6 (2004-02-08) - * Added support for native Win32 file access API (Ross Bencina). - * New mode to add clippling then a converting from float/double to integer - would otherwise wrap around. - * Fixed a bug in reading/writing files > 2Gig on Linux, Solaris and others. - * Many minor bug fixes. - * Other random fixes for Win32. - -Version 1.0.5 (2003-05-03) - * Added support for HTK files. - * Added new function sf_open_fd() to allow for secure opening of temporary - files as well as reading/writing sound files embedded within larger - container files. - * Added string support for AIFF files. - * Minor bug fixes and code cleanups. - -Version 1.0.4 (2003-02-02) - * Added suport of PVF and XI files. - * Added functionality for setting and retreiving strings from sound files. - * Minor code cleanups and bug fixes. - -Version 1.0.3 (2002-12-09) - * Minor bug fixes. - -Version 1.0.2 (2002-11-24) - * Added support for VOX ADPCM. - * Improved error reporting. - * Added version scripting on Linux and Solaris. - * Minor bug fixes. - -Version 1.0.1 (2002-09-14) - * Added MAT and MAT5 file formats. - * Minor bug fixes. - -Version 1.0.0 (2002-08-16) - * Final release for 1.0.0. - -Version 1.0.0rc6 (2002-08-14) - * Release candidate 6 for the 1.0.0 series. - * MacOS9 fixes. - -Version 1.0.0rc5 (2002-08-10) - * Release candidate 5 for the 1.0.0 series. - * Changed the definition of sf_count_t which was causing problems when - libsndfile was compiled with other libraries (ie WxWindows). - * Minor bug fixes. - * Documentation cleanup. - -Version 1.0.0rc4 (2002-08-03) - * Release candidate 4 for the 1.0.0 series. - * Minor bug fixes. - * Fix broken Win32 "make check". - -Version 1.0.0rc3 (2002-08-02) - * Release candidate 3 for the 1.0.0 series. - * Fix bug where libsndfile was reading beyond the end of the data chunk. - * Added on-the-fly header updates on write. - * Fix a couple of documentation issues. - -Version 1.0.0rc2 (2002-06-24) - * Release candidate 2 for the 1.0.0 series. - * Fix compile problem for Win32. - -Version 1.0.0rc1 (2002-06-24) - * Release candidate 1 for the 1.0.0 series. - -Version 0.0.28 (2002-04-27) - * Last offical release of 0.0.X series of the library. - -Version 0.0.8 (1999-02-16) - * First offical release. diff --git a/Libraries/SndFile/Files/README b/Libraries/SndFile/Files/README deleted file mode 100644 index 830f17ee5..000000000 --- a/Libraries/SndFile/Files/README +++ /dev/null @@ -1,74 +0,0 @@ -This is libsndfile, 1.0.11 - -libsndfile is a library of C routines for reading and writing -files containing sampled audio data. - -The src/ directory contains the source code for library itself. - -The doc/ directory contains the libsndfile documentation. - -The examples/ directory contains examples of how to write code using -libsndfile. 'wav32_aiff24' converts a WAV file containing 32 bit floating -point data into a 24 bit PCM AIFF file. 'sndfile2oct' dumps the audio -data of a file in a human readable format. 'sfconvert' is the beginnings -of a audio file format conversion utility. 'make_sine' generates a WAV -file containing one cycle of a sine wave with 4096 sample points in -32 bit floating point format. 'sfinfo' opens a sound file and prints -out information about that file. - -The tests/ directory contains programs which link against libsndfile -and test its functionality. - -The Win32/ directory contains files and documentation to allow libsndfile -to compile under Win32 with the Microsoft Visual C++ compiler. - -The MacOS/ directory contains files and documentation to allow libsndfile -to compile under MacOS with the Metrowerks compiler. - -The src/GSM610 directory contains code written by Jutta Degener and Carsten -Bormann. Their original code can be found at : - http://kbs.cs.tu-berlin.de/~jutta/toast.html - -The src/G72x directory contains code written and released by Sun Microsystems -under a suitably free license. - - -Win32 ------ -There are detailed instructions for building libsndfile on Win32 in the file - - doc/win32.html - - -MacOSX ------- -Building on MacOSX should be the same as building it on any other Unix. - - -OTHER PLATFORMS ---------------- -To compile libsndfile on platforms which have a Bourne Shell compatible -shell, an ANSI C compiler and a make utility should require no more that -the following three commands : - ./configure - make - make install - -For platforms without the required shell, it is usually sufficient to -create an approriate config.h file in the src/ directory with correct -values for the following #defines (this would work for AmigaOS) : - -#define HAVE_ENDIAN_H 0 -#define GUESS_BIG_ENDIAN 1 -#define GUESS_LITTLE_ENDIAN 0 -#define FORCE_BROKEN_FLOAT 0 - - -CONTACTS --------- - -libsndfile was written by Erik de Castro Lopo (erikd AT mega-nerd DOT com). -The libsndfile home page is at : - - http://www.mega-nerd.com/libsndfile/ - diff --git a/Libraries/SndFile/Files/TODO b/Libraries/SndFile/Files/TODO deleted file mode 100644 index f6da6dff6..000000000 --- a/Libraries/SndFile/Files/TODO +++ /dev/null @@ -1,42 +0,0 @@ -Here's a list of what I (erikd AT mega-nerd DOT com) think needs to be -done. The list is by no means exhaustive and people are encouraged to -email me with suggestions. - - o Add pipe in/out capabilities. libsndfile should be able to read - its input from a pipe and write its output to a pipe. - - o Add checks of the error state after fseek???? Use ferror (). - - o Modify tests/lossy_comp_test.c to add tests for stereo files. - - o Testing compilation and correctness on more platforms. - - o Improve testing routines. Must test all combinations of inputs - and outputs. - - o Test sf_seek function on write??? - - o Add more sound file formats. People should contact me with their - requirements. - - o Add support for accessing sound formats with multiple audio - data sections (ie samples within tracker files, Soundfont II and - multi-sample sampler formats). - - o Add an interface to allow reading and writing of sample loop points - and other info within AIFF and other file formats. This must be a - general solution. - - o Improve documentation. Is HTML documentation good enough? - - o Look into the possibility of optional sample rate convert on file - read. - -As I am the person who knows libsndfile best, I can probably implement -any new features faster than anybody else (and you can spend your time -writing applications with libsndfile). All I need is some -documentation and some sample files. Please contact me before emailing -me documentation and sample files. I would much rather pull them off -the web than have them clogging up my email inbox. - - diff --git a/Libraries/SndFile/Files/src/G72x/ChangeLog b/Libraries/SndFile/Files/src/G72x/ChangeLog deleted file mode 100644 index aa108dff7..000000000 --- a/Libraries/SndFile/Files/src/G72x/ChangeLog +++ /dev/null @@ -1,50 +0,0 @@ -2001-06-05 Erik de Castro Lopo - - * g72x.c - Added {} in function update () to prevent 'ambiguous else' warning messages. - -2000-07-14 Erik de Castro Lopo - - * g72x.c - Modified g72x_init_state () to fit in with the new structure of the code. - Implemented g72x_encode_block () and g72x_decode_block (). - -2000-07-12 Erik de Castro Lopo - - * g72x.h - Moved nearly all definitions and function prototypes from this file have been - moved to private.h. - Added an enum defining the 4 different G72x ADPCM codecs. - Added new function prototypes to define a cleaner interface to the encoder - and decoder. This new interface also allows samples to be processed in blocks - rather than on a sample by sample basis like the original code. - - * private.h - Added prototypes moved from g72x.h. - Changed struct g72x_state to a typedef struct { .. } G72x_PRIVATE. - Added fields to G72x_PRIVATE required for working on blocks of samples. - -2000-06-07 Erik de Castro Lopo - - * g72x.c - Fixed all compiler warnings. - Removed functions tandem_adjust() which is not required by libsndfile. - - * g721.c - Fixed all compiler warnings. - Removed functions tandem_adjust_alaw() and tandem_adjust_ulaw () which are not - required by libsndfile. - Removed second parameter to g721_encoder () which is not required. - - * g72x.h - Removed in_coding and out_coding parameters from all functions. These allowed - g72x encoding/decoding to/from A-law or u-law and are not required by libsndfile. - Removed unneeded defines for A-law, u-law and linear encoding. - - * g723_16.c - Removed second parameter (in_coding) for g723_16_encoder(). - Removed second parameter (out_coding) for g723_16_decoder(). - - * private.h - New file containing prototypes and tyepdefs private to G72x code. - diff --git a/Libraries/SndFile/Files/src/G72x/Makefile b/Libraries/SndFile/Files/src/G72x/Makefile deleted file mode 100644 index 4b8345d92..000000000 --- a/Libraries/SndFile/Files/src/G72x/Makefile +++ /dev/null @@ -1,483 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# src/G72x/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -srcdir = . -top_srcdir = ../.. - -pkgdatadir = $(datadir)/libsndfile -pkglibdir = $(libdir)/libsndfile -pkgincludedir = $(includedir)/libsndfile -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = /usr/bin/install -c -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = powerpc-apple-darwin8.6.0 -host_triplet = powerpc-apple-darwin8.6.0 -target_triplet = powerpc-apple-darwin8.6.0 -noinst_PROGRAMS = g72x_test$(EXEEXT) -subdir = src/G72x -DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in ChangeLog -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/src/config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libg72x_la_LIBADD = -am__objects_1 = g72x.lo g721.lo g723_16.lo g723_24.lo g723_40.lo -am__objects_2 = -am_libg72x_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libg72x_la_OBJECTS = $(am_libg72x_la_OBJECTS) -PROGRAMS = $(noinst_PROGRAMS) -am_g72x_test_OBJECTS = g72x_test.$(OBJEXT) -g72x_test_OBJECTS = $(am_g72x_test_OBJECTS) -g72x_test_DEPENDENCIES = ./libg72x.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libg72x_la_SOURCES) $(g72x_test_SOURCES) -DIST_SOURCES = $(libg72x_la_SOURCES) $(g72x_test_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run aclocal-1.9 -ALSA_LIBS = -AMDEP_FALSE = # -AMDEP_TRUE = -AMTAR = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run tar -AR = ar -AUTOCONF = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run autoconf - -# Disable autoheader. -AUTOHEADER = echo -AUTOMAKE = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run automake-1.9 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -std=gnu99 -W -Wall -Wdeclaration-after-statement -Wstrict-prototypes -Wmissing-prototypes -Wcast-align -Wcast-qual -Wnested-externs -Wbad-function-cast -Wwrite-strings -pipe -fpascal-strings -I/Developer/Headers/FlatCarbon -COMPILER_IS_GCC = -CPP = gcc -E -CPPFLAGS = -CXX = g++ -CXXCPP = g++ -E -CXXDEPMODE = depmode=gcc3 -CXXFLAGS = -g -O2 -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -ECHO = echo -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = grep -E -ENABLE_EXPERIMENTAL_CODE = -EXEEXT = -F77 = -FFLAGS = -FLAC_LIBS = -GCC_MAJOR_VERSION = 4 -GETCONF = -HTML_BGCOLOUR = black -HTML_FGCOLOUR = white -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s -LDFLAGS = -LIBOBJS = -LIBS = -lm -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBTOOL_DEPS = ./ltmain.sh -LN_S = ln -s -LTLIBOBJS = -MAKEINFO = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run makeinfo -OBJEXT = o -OS_SPECIFIC_CFLAGS = -fpascal-strings -I/Developer/Headers/FlatCarbon -OS_SPECIFIC_LINKS = -framework CoreAudio -PACKAGE = libsndfile -PACKAGE_BUGREPORT = erikd@mega-nerd.com -PACKAGE_NAME = libsndfile -PACKAGE_STRING = libsndfile 1.0.15 -PACKAGE_TARNAME = libsndfile -PACKAGE_VERSION = 1.0.15 -PATH_SEPARATOR = : -PKG_CONFIG = /sw/bin/pkg-config -RANLIB = ranlib -SET_MAKE = -SF_COUNT_MAX = 0x7FFFFFFFFFFFFFFFLL -SHARED_VERSION_INFO = 1:15:0 -SHELL = /bin/sh -SHLIB_VERSION_ARG = -Wl,-exported_symbols_list -Wl,$(srcdir)/Symbols.darwin -SIZEOF_SF_COUNT_T = 8 -SQLITE3_CFLAGS = -SQLITE3_LIBS = -STRIP = strip -TYPEOF_SF_COUNT_T = off_t -VERSION = 1.0.15 -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_CXX = g++ -ac_ct_F77 = -ac_ct_GETCONF = -ac_ct_RANLIB = ranlib -ac_ct_STRIP = strip -ac_pt_PKG_CONFIG = /sw/bin/pkg-config -am__fastdepCC_FALSE = # -am__fastdepCC_TRUE = -am__fastdepCXX_FALSE = # -am__fastdepCXX_TRUE = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -autogen = no -bindir = ${exec_prefix}/bin -build = powerpc-apple-darwin8.6.0 -build_alias = -build_cpu = powerpc -build_os = darwin8.6.0 -build_vendor = apple -datadir = ${prefix}/share -exec_prefix = ${prefix} -host = powerpc-apple-darwin8.6.0 -host_alias = -host_cpu = powerpc -host_os = darwin8.6.0 -host_vendor = apple -htmldocdir = /usr/local/share/doc/libsndfile1-dev/html -includedir = ${prefix}/include -infodir = ${prefix}/info -install_sh = /Users/xugg/Desktop/libsndfile-1.0.15/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localstatedir = ${prefix}/var -mandir = ${prefix}/man -mkdir_p = $(mkinstalldirs) -oldincludedir = /usr/include -prefix = /usr/local -program_transform_name = s,x,x, -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -sysconfdir = ${prefix}/etc -target = powerpc-apple-darwin8.6.0 -target_alias = -target_cpu = powerpc -target_os = darwin8.6.0 -target_vendor = apple -EXTRA_DIST = README README.original ChangeLog -noinst_HEADERS = g72x.h g72x_priv.h -noinst_LTLIBRARIES = libg72x.la -CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c -libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS) -g72x_test_SOURCES = g72x_test.c -g72x_test_LDADD = ./libg72x.la -lm -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/G72x/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/G72x/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libg72x.la: $(libg72x_la_OBJECTS) $(libg72x_la_DEPENDENCIES) - $(LINK) $(libg72x_la_LDFLAGS) $(libg72x_la_OBJECTS) $(libg72x_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -g72x_test$(EXEEXT): $(g72x_test_OBJECTS) $(g72x_test_DEPENDENCIES) - @rm -f g72x_test$(EXEEXT) - $(LINK) $(g72x_test_LDFLAGS) $(g72x_test_OBJECTS) $(g72x_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/g721.Plo -include ./$(DEPDIR)/g723_16.Plo -include ./$(DEPDIR)/g723_24.Plo -include ./$(DEPDIR)/g723_40.Plo -include ./$(DEPDIR)/g72x.Plo -include ./$(DEPDIR)/g72x_test.Po - -.c.o: - if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c $< - -.c.obj: - if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: - if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ - ctags distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am - - -check: g72x_test - ./g72x_test all -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Libraries/SndFile/Files/src/G72x/Makefile.am b/Libraries/SndFile/Files/src/G72x/Makefile.am deleted file mode 100644 index f05ce05a6..000000000 --- a/Libraries/SndFile/Files/src/G72x/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -## Process this file with automake to produce Makefile.in - -EXTRA_DIST = README README.original ChangeLog - -noinst_HEADERS = g72x.h g72x_priv.h -noinst_LTLIBRARIES = libg72x.la - -noinst_PROGRAMS = g72x_test - -CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c - -libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS) - -g72x_test_SOURCES = g72x_test.c -g72x_test_LDADD = ./libg72x.la -lm - -check: g72x_test - ./g72x_test all - -# Disable autoheader. -AUTOHEADER=echo - -## Do not edit or modify anything in this comment block. -## The arch-tag line is a file identity tag for the GNU Arch -## revision control system. -## -## arch-tag: d417a8e8-da7f-423d-884d-f03c93379348 - diff --git a/Libraries/SndFile/Files/src/G72x/Makefile.in b/Libraries/SndFile/Files/src/G72x/Makefile.in deleted file mode 100644 index ecb5a4202..000000000 --- a/Libraries/SndFile/Files/src/G72x/Makefile.in +++ /dev/null @@ -1,483 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -noinst_PROGRAMS = g72x_test$(EXEEXT) -subdir = src/G72x -DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in ChangeLog -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/src/config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libg72x_la_LIBADD = -am__objects_1 = g72x.lo g721.lo g723_16.lo g723_24.lo g723_40.lo -am__objects_2 = -am_libg72x_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libg72x_la_OBJECTS = $(am_libg72x_la_OBJECTS) -PROGRAMS = $(noinst_PROGRAMS) -am_g72x_test_OBJECTS = g72x_test.$(OBJEXT) -g72x_test_OBJECTS = $(am_g72x_test_OBJECTS) -g72x_test_DEPENDENCIES = ./libg72x.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libg72x_la_SOURCES) $(g72x_test_SOURCES) -DIST_SOURCES = $(libg72x_la_SOURCES) $(g72x_test_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ - -# Disable autoheader. -AUTOHEADER = echo -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -COMPILER_IS_GCC = @COMPILER_IS_GCC@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_EXPERIMENTAL_CODE = @ENABLE_EXPERIMENTAL_CODE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FLAC_LIBS = @FLAC_LIBS@ -GCC_MAJOR_VERSION = @GCC_MAJOR_VERSION@ -GETCONF = @GETCONF@ -HTML_BGCOLOUR = @HTML_BGCOLOUR@ -HTML_FGCOLOUR = @HTML_FGCOLOUR@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBTOOL_DEPS = @LIBTOOL_DEPS@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@ -OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SF_COUNT_MAX = @SF_COUNT_MAX@ -SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ -SHELL = @SHELL@ -SHLIB_VERSION_ARG = @SHLIB_VERSION_ARG@ -SIZEOF_SF_COUNT_T = @SIZEOF_SF_COUNT_T@ -SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ -SQLITE3_LIBS = @SQLITE3_LIBS@ -STRIP = @STRIP@ -TYPEOF_SF_COUNT_T = @TYPEOF_SF_COUNT_T@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_GETCONF = @ac_ct_GETCONF@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -autogen = @autogen@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldocdir = @htmldocdir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = README README.original ChangeLog -noinst_HEADERS = g72x.h g72x_priv.h -noinst_LTLIBRARIES = libg72x.la -CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c -libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS) -g72x_test_SOURCES = g72x_test.c -g72x_test_LDADD = ./libg72x.la -lm -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/G72x/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/G72x/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libg72x.la: $(libg72x_la_OBJECTS) $(libg72x_la_DEPENDENCIES) - $(LINK) $(libg72x_la_LDFLAGS) $(libg72x_la_OBJECTS) $(libg72x_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -g72x_test$(EXEEXT): $(g72x_test_OBJECTS) $(g72x_test_DEPENDENCIES) - @rm -f g72x_test$(EXEEXT) - $(LINK) $(g72x_test_LDFLAGS) $(g72x_test_OBJECTS) $(g72x_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g721.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g723_16.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g723_24.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g723_40.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g72x.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g72x_test.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ - ctags distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am - - -check: g72x_test - ./g72x_test all -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Libraries/SndFile/Files/src/G72x/README b/Libraries/SndFile/Files/src/G72x/README deleted file mode 100644 index e69de29bb..000000000 diff --git a/Libraries/SndFile/Files/src/G72x/README.original b/Libraries/SndFile/Files/src/G72x/README.original deleted file mode 100644 index 23b0e7dd5..000000000 --- a/Libraries/SndFile/Files/src/G72x/README.original +++ /dev/null @@ -1,94 +0,0 @@ -The files in this directory comprise ANSI-C language reference implementations -of the CCITT (International Telegraph and Telephone Consultative Committee) -G.711, G.721 and G.723 voice compressions. They have been tested on Sun -SPARCstations and passed 82 out of 84 test vectors published by CCITT -(Dec. 20, 1988) for G.721 and G.723. [The two remaining test vectors, -which the G.721 decoder implementation for u-law samples did not pass, -may be in error because they are identical to two other vectors for G.723_40.] - -This source code is released by Sun Microsystems, Inc. to the public domain. -Please give your acknowledgement in product literature if this code is used -in your product implementation. - -Sun Microsystems supports some CCITT audio formats in Solaris 2.0 system -software. However, Sun's implementations have been optimized for higher -performance on SPARCstations. - - -The source files for CCITT conversion routines in this directory are: - - g72x.h header file for g721.c, g723_24.c and g723_40.c - g711.c CCITT G.711 u-law and A-law compression - g72x.c common denominator of G.721 and G.723 ADPCM codes - g721.c CCITT G.721 32Kbps ADPCM coder (with g72x.c) - g723_24.c CCITT G.723 24Kbps ADPCM coder (with g72x.c) - g723_40.c CCITT G.723 40Kbps ADPCM coder (with g72x.c) - - -Simple conversions between u-law, A-law, and 16-bit linear PCM are invoked -as follows: - - unsigned char ucode, acode; - short pcm_val; - - ucode = linear2ulaw(pcm_val); - ucode = alaw2ulaw(acode); - - acode = linear2alaw(pcm_val); - acode = ulaw2alaw(ucode); - - pcm_val = ulaw2linear(ucode); - pcm_val = alaw2linear(acode); - - -The other CCITT compression routines are invoked as follows: - - #include "g72x.h" - - struct g72x_state state; - int sample, code; - - g72x_init_state(&state); - code = {g721,g723_24,g723_40}_encoder(sample, coding, &state); - sample = {g721,g723_24,g723_40}_decoder(code, coding, &state); - -where - coding = AUDIO_ENCODING_ULAW for 8-bit u-law samples - AUDIO_ENCODING_ALAW for 8-bit A-law samples - AUDIO_ENCODING_LINEAR for 16-bit linear PCM samples - - - -This directory also includes the following sample programs: - - encode.c CCITT ADPCM encoder - decode.c CCITT ADPCM decoder - Makefile makefile for the sample programs - - -The sample programs contain examples of how to call the various compression -routines and pack/unpack the bits. The sample programs read byte streams from -stdin and write to stdout. The input/output data is raw data (no file header -or other identifying information is embedded). The sample programs are -invoked as follows: - - encode [-3|4|5] [-a|u|l] outfile - decode [-3|4|5] [-a|u|l] outfile -where: - -3 encode to (decode from) G.723 24kbps (3-bit) data - -4 encode to (decode from) G.721 32kbps (4-bit) data [the default] - -5 encode to (decode from) G.723 40kbps (5-bit) data - -a encode from (decode to) A-law data - -u encode from (decode to) u-law data [the default] - -l encode from (decode to) 16-bit linear data - -Examples: - # Read 16-bit linear and output G.721 - encode -4 -l g721file - - # Read 40Kbps G.723 and output A-law - decode -5 -a alawfile - - # Compress and then decompress u-law data using 24Kbps G.723 - encode -3 ulawout - diff --git a/Libraries/SndFile/Files/src/G72x/g721.c b/Libraries/SndFile/Files/src/G72x/g721.c deleted file mode 100644 index 4f51bb197..000000000 --- a/Libraries/SndFile/Files/src/G72x/g721.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * This source code is a product of Sun Microsystems, Inc. and is provided - * for unrestricted use. Users may copy or modify this source code without - * charge. - * - * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING - * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun source code is provided with no support and without any obligation on - * the part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ - -/* - * g721.c - * - * Description: - * - * g721_encoder(), g721_decoder() - * - * These routines comprise an implementation of the CCITT G.721 ADPCM - * coding algorithm. Essentially, this implementation is identical to - * the bit level description except for a few deviations which - * take advantage of work station attributes, such as hardware 2's - * complement arithmetic and large memory. Specifically, certain time - * consuming operations such as multiplications are replaced - * with lookup tables and software 2's complement operations are - * replaced with hardware 2's complement. - * - * The deviation from the bit level specification (lookup tables) - * preserves the bit level performance specifications. - * - * As outlined in the G.721 Recommendation, the algorithm is broken - * down into modules. Each section of code below is preceded by - * the name of the module which it is implementing. - * - */ - -#include "g72x.h" -#include "g72x_priv.h" - -static short qtab_721[7] = {-124, 80, 178, 246, 300, 349, 400}; -/* - * Maps G.721 code word to reconstructed scale factor normalized log - * magnitude values. - */ -static short _dqlntab[16] = {-2048, 4, 135, 213, 273, 323, 373, 425, - 425, 373, 323, 273, 213, 135, 4, -2048}; - -/* Maps G.721 code word to log of scale factor multiplier. */ -static short _witab[16] = {-12, 18, 41, 64, 112, 198, 355, 1122, - 1122, 355, 198, 112, 64, 41, 18, -12}; -/* - * Maps G.721 code words to a set of values whose long and short - * term averages are computed and then compared to give an indication - * how stationary (steady state) the signal is. - */ -static short _fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00, - 0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0}; - -/* - * g721_encoder() - * - * Encodes the input vale of linear PCM, A-law or u-law data sl and returns - * the resulting code. -1 is returned for unknown input coding value. - */ -int -g721_encoder( - int sl, - G72x_STATE *state_ptr) -{ - short sezi, se, sez; /* ACCUM */ - short d; /* SUBTA */ - short sr; /* ADDB */ - short y; /* MIX */ - short dqsez; /* ADDC */ - short dq, i; - - /* linearize input sample to 14-bit PCM */ - sl >>= 2; /* 14-bit dynamic range */ - - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - se = (sezi + predictor_pole(state_ptr)) >> 1; /* estimated signal */ - - d = sl - se; /* estimation difference */ - - /* quantize the prediction difference */ - y = step_size(state_ptr); /* quantizer step size */ - i = quantize(d, y, qtab_721, 7); /* i = ADPCM code */ - - dq = reconstruct(i & 8, _dqlntab[i], y); /* quantized est diff */ - - sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconst. signal */ - - dqsez = sr + sez - se; /* pole prediction diff. */ - - update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr); - - return (i); -} - -/* - * g721_decoder() - * - * Description: - * - * Decodes a 4-bit code of G.721 encoded data of i and - * returns the resulting linear PCM, A-law or u-law value. - * return -1 for unknown out_coding value. - */ -int -g721_decoder( - int i, - G72x_STATE *state_ptr) -{ - short sezi, sei, sez, se; /* ACCUM */ - short y; /* MIX */ - short sr; /* ADDB */ - short dq; - short dqsez; - - i &= 0x0f; /* mask to get proper bits */ - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - y = step_size(state_ptr); /* dynamic quantizer step size */ - - dq = reconstruct(i & 0x08, _dqlntab[i], y); /* quantized diff. */ - - sr = (dq < 0) ? (se - (dq & 0x3FFF)) : se + dq; /* reconst. signal */ - - dqsez = sr - se + sez; /* pole prediction diff. */ - - update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr); - - /* sr was 14-bit dynamic range */ - return (sr << 2); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 101b6e25-457d-490a-99ae-e2e74a26ea24 -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g723_16.c b/Libraries/SndFile/Files/src/G72x/g723_16.c deleted file mode 100644 index 0c3174501..000000000 --- a/Libraries/SndFile/Files/src/G72x/g723_16.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This source code is a product of Sun Microsystems, Inc. and is provided - * for unrestricted use. Users may copy or modify this source code without - * charge. - * - * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING - * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun source code is provided with no support and without any obligation on - * the part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ -/* 16kbps version created, used 24kbps code and changing as little as possible. - * G.726 specs are available from ITU's gopher or WWW site (http://www.itu.ch) - * If any errors are found, please contact me at mrand@tamu.edu - * -Marc Randolph - */ - -/* - * g723_16.c - * - * Description: - * - * g723_16_encoder(), g723_16_decoder() - * - * These routines comprise an implementation of the CCITT G.726 16 Kbps - * ADPCM coding algorithm. Essentially, this implementation is identical to - * the bit level description except for a few deviations which take advantage - * of workstation attributes, such as hardware 2's complement arithmetic. - * - */ - -#include "g72x.h" -#include "g72x_priv.h" - -/* - * Maps G.723_16 code word to reconstructed scale factor normalized log - * magnitude values. Comes from Table 11/G.726 - */ -static short _dqlntab[4] = { 116, 365, 365, 116}; - -/* Maps G.723_16 code word to log of scale factor multiplier. - * - * _witab[4] is actually {-22 , 439, 439, -22}, but FILTD wants it - * as WI << 5 (multiplied by 32), so we'll do that here - */ -static short _witab[4] = {-704, 14048, 14048, -704}; - -/* - * Maps G.723_16 code words to a set of values whose long and short - * term averages are computed and then compared to give an indication - * how stationary (steady state) the signal is. - */ - -/* Comes from FUNCTF */ -static short _fitab[4] = {0, 0xE00, 0xE00, 0}; - -/* Comes from quantizer decision level tables (Table 7/G.726) - */ -static short qtab_723_16[1] = {261}; - - -/* - * g723_16_encoder() - * - * Encodes a linear PCM, A-law or u-law input sample and returns its 2-bit code. - * Returns -1 if invalid input coding value. - */ -int -g723_16_encoder( - int sl, - G72x_STATE *state_ptr) -{ - short sei, sezi, se, sez; /* ACCUM */ - short d; /* SUBTA */ - short y; /* MIX */ - short sr; /* ADDB */ - short dqsez; /* ADDC */ - short dq, i; - - /* linearize input sample to 14-bit PCM */ - sl >>= 2; /* sl of 14-bit dynamic range */ - - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - d = sl - se; /* d = estimation diff. */ - - /* quantize prediction difference d */ - y = step_size(state_ptr); /* quantizer step size */ - i = quantize(d, y, qtab_723_16, 1); /* i = ADPCM code */ - - /* Since quantize() only produces a three level output - * (1, 2, or 3), we must create the fourth one on our own - */ - if (i == 3) /* i code for the zero region */ - if ((d & 0x8000) == 0) /* If d > 0, i=3 isn't right... */ - i = 0; - - dq = reconstruct(i & 2, _dqlntab[i], y); /* quantized diff. */ - - sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */ - - dqsez = sr + sez - se; /* pole prediction diff. */ - - update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); - - return (i); -} - -/* - * g723_16_decoder() - * - * Decodes a 2-bit CCITT G.723_16 ADPCM code and returns - * the resulting 16-bit linear PCM, A-law or u-law sample value. - * -1 is returned if the output coding is unknown. - */ -int -g723_16_decoder( - int i, - G72x_STATE *state_ptr) -{ - short sezi, sei, sez, se; /* ACCUM */ - short y; /* MIX */ - short sr; /* ADDB */ - short dq; - short dqsez; - - i &= 0x03; /* mask to get proper bits */ - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - y = step_size(state_ptr); /* adaptive quantizer step size */ - dq = reconstruct(i & 0x02, _dqlntab[i], y); /* unquantize pred diff */ - - sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */ - - dqsez = sr - se + sez; /* pole prediction diff. */ - - update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); - - /* sr was of 14-bit dynamic range */ - return (sr << 2); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: ae265466-c3fc-4f83-bb32-edae488a5ca5 -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g723_24.c b/Libraries/SndFile/Files/src/G72x/g723_24.c deleted file mode 100644 index 8748459ac..000000000 --- a/Libraries/SndFile/Files/src/G72x/g723_24.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This source code is a product of Sun Microsystems, Inc. and is provided - * for unrestricted use. Users may copy or modify this source code without - * charge. - * - * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING - * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun source code is provided with no support and without any obligation on - * the part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ - -/* - * g723_24.c - * - * Description: - * - * g723_24_encoder(), g723_24_decoder() - * - * These routines comprise an implementation of the CCITT G.723 24 Kbps - * ADPCM coding algorithm. Essentially, this implementation is identical to - * the bit level description except for a few deviations which take advantage - * of workstation attributes, such as hardware 2's complement arithmetic. - * - */ - -#include "g72x.h" -#include "g72x_priv.h" - -/* - * Maps G.723_24 code word to reconstructed scale factor normalized log - * magnitude values. - */ -static short _dqlntab[8] = {-2048, 135, 273, 373, 373, 273, 135, -2048}; - -/* Maps G.723_24 code word to log of scale factor multiplier. */ -static short _witab[8] = {-128, 960, 4384, 18624, 18624, 4384, 960, -128}; - -/* - * Maps G.723_24 code words to a set of values whose long and short - * term averages are computed and then compared to give an indication - * how stationary (steady state) the signal is. - */ -static short _fitab[8] = {0, 0x200, 0x400, 0xE00, 0xE00, 0x400, 0x200, 0}; - -static short qtab_723_24[3] = {8, 218, 331}; - -/* - * g723_24_encoder() - * - * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code. - * Returns -1 if invalid input coding value. - */ -int -g723_24_encoder( - int sl, - G72x_STATE *state_ptr) -{ - short sei, sezi, se, sez; /* ACCUM */ - short d; /* SUBTA */ - short y; /* MIX */ - short sr; /* ADDB */ - short dqsez; /* ADDC */ - short dq, i; - - /* linearize input sample to 14-bit PCM */ - sl >>= 2; /* sl of 14-bit dynamic range */ - - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - d = sl - se; /* d = estimation diff. */ - - /* quantize prediction difference d */ - y = step_size(state_ptr); /* quantizer step size */ - i = quantize(d, y, qtab_723_24, 3); /* i = ADPCM code */ - dq = reconstruct(i & 4, _dqlntab[i], y); /* quantized diff. */ - - sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */ - - dqsez = sr + sez - se; /* pole prediction diff. */ - - update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); - - return (i); -} - -/* - * g723_24_decoder() - * - * Decodes a 3-bit CCITT G.723_24 ADPCM code and returns - * the resulting 16-bit linear PCM, A-law or u-law sample value. - * -1 is returned if the output coding is unknown. - */ -int -g723_24_decoder( - int i, - G72x_STATE *state_ptr) -{ - short sezi, sei, sez, se; /* ACCUM */ - short y; /* MIX */ - short sr; /* ADDB */ - short dq; - short dqsez; - - i &= 0x07; /* mask to get proper bits */ - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - y = step_size(state_ptr); /* adaptive quantizer step size */ - dq = reconstruct(i & 0x04, _dqlntab[i], y); /* unquantize pred diff */ - - sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */ - - dqsez = sr - se + sez; /* pole prediction diff. */ - - update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); - - return (sr << 2); /* sr was of 14-bit dynamic range */ -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 75389236-650b-4427-98f3-0df6e8fb24bc -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g723_40.c b/Libraries/SndFile/Files/src/G72x/g723_40.c deleted file mode 100644 index 6ddb577df..000000000 --- a/Libraries/SndFile/Files/src/G72x/g723_40.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * This source code is a product of Sun Microsystems, Inc. and is provided - * for unrestricted use. Users may copy or modify this source code without - * charge. - * - * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING - * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun source code is provided with no support and without any obligation on - * the part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ - -/* - * g723_40.c - * - * Description: - * - * g723_40_encoder(), g723_40_decoder() - * - * These routines comprise an implementation of the CCITT G.723 40Kbps - * ADPCM coding algorithm. Essentially, this implementation is identical to - * the bit level description except for a few deviations which - * take advantage of workstation attributes, such as hardware 2's - * complement arithmetic. - * - * The deviation from the bit level specification (lookup tables), - * preserves the bit level performance specifications. - * - * As outlined in the G.723 Recommendation, the algorithm is broken - * down into modules. Each section of code below is preceded by - * the name of the module which it is implementing. - * - */ - -#include "g72x.h" -#include "g72x_priv.h" - -/* - * Maps G.723_40 code word to ructeconstructed scale factor normalized log - * magnitude values. - */ -static short _dqlntab[32] = {-2048, -66, 28, 104, 169, 224, 274, 318, - 358, 395, 429, 459, 488, 514, 539, 566, - 566, 539, 514, 488, 459, 429, 395, 358, - 318, 274, 224, 169, 104, 28, -66, -2048}; - -/* Maps G.723_40 code word to log of scale factor multiplier. */ -static short _witab[32] = {448, 448, 768, 1248, 1280, 1312, 1856, 3200, - 4512, 5728, 7008, 8960, 11456, 14080, 16928, 22272, - 22272, 16928, 14080, 11456, 8960, 7008, 5728, 4512, - 3200, 1856, 1312, 1280, 1248, 768, 448, 448}; - -/* - * Maps G.723_40 code words to a set of values whose long and short - * term averages are computed and then compared to give an indication - * how stationary (steady state) the signal is. - */ -static short _fitab[32] = {0, 0, 0, 0, 0, 0x200, 0x200, 0x200, - 0x200, 0x200, 0x400, 0x600, 0x800, 0xA00, 0xC00, 0xC00, - 0xC00, 0xC00, 0xA00, 0x800, 0x600, 0x400, 0x200, 0x200, - 0x200, 0x200, 0x200, 0, 0, 0, 0, 0}; - -static short qtab_723_40[15] = {-122, -16, 68, 139, 198, 250, 298, 339, - 378, 413, 445, 475, 502, 528, 553}; - -/* - * g723_40_encoder() - * - * Encodes a 16-bit linear PCM, A-law or u-law input sample and retuens - * the resulting 5-bit CCITT G.723 40Kbps code. - * Returns -1 if the input coding value is invalid. - */ -int g723_40_encoder (int sl, G72x_STATE *state_ptr) -{ - short sei, sezi, se, sez; /* ACCUM */ - short d; /* SUBTA */ - short y; /* MIX */ - short sr; /* ADDB */ - short dqsez; /* ADDC */ - short dq, i; - - /* linearize input sample to 14-bit PCM */ - sl >>= 2; /* sl of 14-bit dynamic range */ - - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - d = sl - se; /* d = estimation difference */ - - /* quantize prediction difference */ - y = step_size(state_ptr); /* adaptive quantizer step size */ - i = quantize(d, y, qtab_723_40, 15); /* i = ADPCM code */ - - dq = reconstruct(i & 0x10, _dqlntab[i], y); /* quantized diff */ - - sr = (dq < 0) ? se - (dq & 0x7FFF) : se + dq; /* reconstructed signal */ - - dqsez = sr + sez - se; /* dqsez = pole prediction diff. */ - - update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); - - return (i); -} - -/* - * g723_40_decoder() - * - * Decodes a 5-bit CCITT G.723 40Kbps code and returns - * the resulting 16-bit linear PCM, A-law or u-law sample value. - * -1 is returned if the output coding is unknown. - */ -int g723_40_decoder (int i, G72x_STATE *state_ptr) -{ - short sezi, sei, sez, se; /* ACCUM */ - short y ; /* MIX */ - short sr; /* ADDB */ - short dq; - short dqsez; - - i &= 0x1f; /* mask to get proper bits */ - sezi = predictor_zero(state_ptr); - sez = sezi >> 1; - sei = sezi + predictor_pole(state_ptr); - se = sei >> 1; /* se = estimated signal */ - - y = step_size(state_ptr); /* adaptive quantizer step size */ - dq = reconstruct(i & 0x10, _dqlntab[i], y); /* estimation diff. */ - - sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq); /* reconst. signal */ - - dqsez = sr - se + sez; /* pole prediction diff. */ - - update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr); - - return (sr << 2); /* sr was of 14-bit dynamic range */ -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: eb8d9a00-32bf-4dd2-b287-01b0336d72bf -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g72x.c b/Libraries/SndFile/Files/src/G72x/g72x.c deleted file mode 100644 index ea01d793d..000000000 --- a/Libraries/SndFile/Files/src/G72x/g72x.c +++ /dev/null @@ -1,652 +0,0 @@ -/* - * This source code is a product of Sun Microsystems, Inc. and is provided - * for unrestricted use. Users may copy or modify this source code without - * charge. - * - * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING - * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun source code is provided with no support and without any obligation on - * the part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ - -/* - * g72x.c - * - * Common routines for G.721 and G.723 conversions. - */ - -#include -#include -#include - -#include "g72x.h" -#include "g72x_priv.h" - -static G72x_STATE * g72x_state_new (void) ; -static int unpack_bytes (int bits, int blocksize, const unsigned char * block, short * samples) ; -static int pack_bytes (int bits, const short * samples, unsigned char * block) ; - -static -short power2 [15] = -{ 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, - 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000 -} ; - -/* - * quan() - * - * quantizes the input val against the table of size short integers. - * It returns i if table[i - 1] <= val < table[i]. - * - * Using linear search for simple coding. - */ -static -int quan (int val, short *table, int size) -{ - int i; - - for (i = 0; i < size; i++) - if (val < *table++) - break; - return (i); -} - -/* - * fmult() - * - * returns the integer product of the 14-bit integer "an" and - * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn". - */ -static -int fmult (int an, int srn) -{ - short anmag, anexp, anmant; - short wanexp, wanmant; - short retval; - - anmag = (an > 0) ? an : ((-an) & 0x1FFF); - anexp = quan(anmag, power2, 15) - 6; - anmant = (anmag == 0) ? 32 : - (anexp >= 0) ? anmag >> anexp : anmag << -anexp; - wanexp = anexp + ((srn >> 6) & 0xF) - 13; - - /* - ** The original was : - ** wanmant = (anmant * (srn & 0x37) + 0x30) >> 4 ; - ** but could see no valid reason for the + 0x30. - ** Removed it and it improved the SNR of the codec. - */ - - wanmant = (anmant * (srn & 0x37)) >> 4 ; - - retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) : - (wanmant >> -wanexp); - - return (((an ^ srn) < 0) ? -retval : retval); -} - -static G72x_STATE * g72x_state_new (void) -{ return calloc (1, sizeof (G72x_STATE)) ; -} - -/* - * private_init_state() - * - * This routine initializes and/or resets the G72x_PRIVATE structure - * pointed to by 'state_ptr'. - * All the initial state values are specified in the CCITT G.721 document. - */ -void private_init_state (G72x_STATE *state_ptr) -{ - int cnta; - - state_ptr->yl = 34816; - state_ptr->yu = 544; - state_ptr->dms = 0; - state_ptr->dml = 0; - state_ptr->ap = 0; - for (cnta = 0; cnta < 2; cnta++) { - state_ptr->a[cnta] = 0; - state_ptr->pk[cnta] = 0; - state_ptr->sr[cnta] = 32; - } - for (cnta = 0; cnta < 6; cnta++) { - state_ptr->b[cnta] = 0; - state_ptr->dq[cnta] = 32; - } - state_ptr->td = 0; -} /* private_init_state */ - -struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock) -{ G72x_STATE *pstate ; - - if ((pstate = g72x_state_new ()) == NULL) - return NULL ; - - private_init_state (pstate) ; - - pstate->encoder = NULL ; - - switch (codec) - { case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */ - pstate->decoder = g723_16_decoder ; - *blocksize = G723_16_BYTES_PER_BLOCK ; - *samplesperblock = G723_16_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 2 ; - pstate->blocksize = G723_16_BYTES_PER_BLOCK ; - pstate->samplesperblock = G723_16_SAMPLES_PER_BLOCK ; - break ; - - case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */ - pstate->decoder = g723_24_decoder ; - *blocksize = G723_24_BYTES_PER_BLOCK ; - *samplesperblock = G723_24_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 3 ; - pstate->blocksize = G723_24_BYTES_PER_BLOCK ; - pstate->samplesperblock = G723_24_SAMPLES_PER_BLOCK ; - break ; - - case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */ - pstate->decoder = g721_decoder ; - *blocksize = G721_32_BYTES_PER_BLOCK ; - *samplesperblock = G721_32_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 4 ; - pstate->blocksize = G721_32_BYTES_PER_BLOCK ; - pstate->samplesperblock = G721_32_SAMPLES_PER_BLOCK ; - break ; - - case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */ - pstate->decoder = g723_40_decoder ; - *blocksize = G721_40_BYTES_PER_BLOCK ; - *samplesperblock = G721_40_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 5 ; - pstate->blocksize = G721_40_BYTES_PER_BLOCK ; - pstate->samplesperblock = G721_40_SAMPLES_PER_BLOCK ; - break ; - - default : - free (pstate) ; - return NULL ; - } ; - - return pstate ; -} /* g72x_reader_init */ - -struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock) -{ G72x_STATE *pstate ; - - if ((pstate = g72x_state_new ()) == NULL) - return NULL ; - - private_init_state (pstate) ; - pstate->decoder = NULL ; - - switch (codec) - { case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */ - pstate->encoder = g723_16_encoder ; - *blocksize = G723_16_BYTES_PER_BLOCK ; - *samplesperblock = G723_16_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 2 ; - pstate->blocksize = G723_16_BYTES_PER_BLOCK ; - pstate->samplesperblock = G723_16_SAMPLES_PER_BLOCK ; - break ; - - case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */ - pstate->encoder = g723_24_encoder ; - *blocksize = G723_24_BYTES_PER_BLOCK ; - *samplesperblock = G723_24_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 3 ; - pstate->blocksize = G723_24_BYTES_PER_BLOCK ; - pstate->samplesperblock = G723_24_SAMPLES_PER_BLOCK ; - break ; - - case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */ - pstate->encoder = g721_encoder ; - *blocksize = G721_32_BYTES_PER_BLOCK ; - *samplesperblock = G721_32_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 4 ; - pstate->blocksize = G721_32_BYTES_PER_BLOCK ; - pstate->samplesperblock = G721_32_SAMPLES_PER_BLOCK ; - break ; - - case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */ - pstate->encoder = g723_40_encoder ; - *blocksize = G721_40_BYTES_PER_BLOCK ; - *samplesperblock = G721_40_SAMPLES_PER_BLOCK ; - pstate->codec_bits = 5 ; - pstate->blocksize = G721_40_BYTES_PER_BLOCK ; - pstate->samplesperblock = G721_40_SAMPLES_PER_BLOCK ; - break ; - - default : - free (pstate) ; - return NULL ; - } ; - - return pstate ; -} /* g72x_writer_init */ - -int g72x_decode_block (G72x_STATE *pstate, const unsigned char *block, short *samples) -{ int k, count ; - - count = unpack_bytes (pstate->codec_bits, pstate->blocksize, block, samples) ; - - for (k = 0 ; k < count ; k++) - samples [k] = pstate->decoder (samples [k], pstate) ; - - return 0 ; -} /* g72x_decode_block */ - -int g72x_encode_block (G72x_STATE *pstate, short *samples, unsigned char *block) -{ int k, count ; - - for (k = 0 ; k < pstate->samplesperblock ; k++) - samples [k] = pstate->encoder (samples [k], pstate) ; - - count = pack_bytes (pstate->codec_bits, samples, block) ; - - return count ; -} /* g72x_encode_block */ - -/* - * predictor_zero() - * - * computes the estimated signal from 6-zero predictor. - * - */ -int predictor_zero (G72x_STATE *state_ptr) -{ - int i; - int sezi; - - sezi = fmult(state_ptr->b[0] >> 2, state_ptr->dq[0]); - for (i = 1; i < 6; i++) /* ACCUM */ - sezi += fmult(state_ptr->b[i] >> 2, state_ptr->dq[i]); - return (sezi); -} -/* - * predictor_pole() - * - * computes the estimated signal from 2-pole predictor. - * - */ -int predictor_pole(G72x_STATE *state_ptr) -{ - return (fmult(state_ptr->a[1] >> 2, state_ptr->sr[1]) + - fmult(state_ptr->a[0] >> 2, state_ptr->sr[0])); -} -/* - * step_size() - * - * computes the quantization step size of the adaptive quantizer. - * - */ -int step_size (G72x_STATE *state_ptr) -{ - int y; - int dif; - int al; - - if (state_ptr->ap >= 256) - return (state_ptr->yu); - else { - y = state_ptr->yl >> 6; - dif = state_ptr->yu - y; - al = state_ptr->ap >> 2; - if (dif > 0) - y += (dif * al) >> 6; - else if (dif < 0) - y += (dif * al + 0x3F) >> 6; - return (y); - } -} - -/* - * quantize() - * - * Given a raw sample, 'd', of the difference signal and a - * quantization step size scale factor, 'y', this routine returns the - * ADPCM codeword to which that sample gets quantized. The step - * size scale factor division operation is done in the log base 2 domain - * as a subtraction. - */ -int quantize( - int d, /* Raw difference signal sample */ - int y, /* Step size multiplier */ - short *table, /* quantization table */ - int size) /* table size of short integers */ -{ - short dqm; /* Magnitude of 'd' */ - short expon; /* Integer part of base 2 log of 'd' */ - short mant; /* Fractional part of base 2 log */ - short dl; /* Log of magnitude of 'd' */ - short dln; /* Step size scale factor normalized log */ - int i; - - /* - * LOG - * - * Compute base 2 log of 'd', and store in 'dl'. - */ - dqm = abs(d); - expon = quan(dqm >> 1, power2, 15); - mant = ((dqm << 7) >> expon) & 0x7F; /* Fractional portion. */ - dl = (expon << 7) + mant; - - /* - * SUBTB - * - * "Divide" by step size multiplier. - */ - dln = dl - (y >> 2); - - /* - * QUAN - * - * Obtain codword i for 'd'. - */ - i = quan(dln, table, size); - if (d < 0) /* take 1's complement of i */ - return ((size << 1) + 1 - i); - else if (i == 0) /* take 1's complement of 0 */ - return ((size << 1) + 1); /* new in 1988 */ - else - return (i); -} -/* - * reconstruct() - * - * Returns reconstructed difference signal 'dq' obtained from - * codeword 'i' and quantization step size scale factor 'y'. - * Multiplication is performed in log base 2 domain as addition. - */ -int -reconstruct( - int sign, /* 0 for non-negative value */ - int dqln, /* G.72x codeword */ - int y) /* Step size multiplier */ -{ - short dql; /* Log of 'dq' magnitude */ - short dex; /* Integer part of log */ - short dqt; - short dq; /* Reconstructed difference signal sample */ - - dql = dqln + (y >> 2); /* ADDA */ - - if (dql < 0) { - return ((sign) ? -0x8000 : 0); - } else { /* ANTILOG */ - dex = (dql >> 7) & 15; - dqt = 128 + (dql & 127); - dq = (dqt << 7) >> (14 - dex); - return ((sign) ? (dq - 0x8000) : dq); - } -} - - -/* - * update() - * - * updates the state variables for each output code - */ -void -update( - int code_size, /* distinguish 723_40 with others */ - int y, /* quantizer step size */ - int wi, /* scale factor multiplier */ - int fi, /* for long/short term energies */ - int dq, /* quantized prediction difference */ - int sr, /* reconstructed signal */ - int dqsez, /* difference from 2-pole predictor */ - G72x_STATE *state_ptr) /* coder state pointer */ -{ - int cnt; - short mag, expon; /* Adaptive predictor, FLOAT A */ - short a2p = 0; /* LIMC */ - short a1ul; /* UPA1 */ - short pks1; /* UPA2 */ - short fa1; - char tr; /* tone/transition detector */ - short ylint, thr2, dqthr; - short ylfrac, thr1; - short pk0; - - pk0 = (dqsez < 0) ? 1 : 0; /* needed in updating predictor poles */ - - mag = dq & 0x7FFF; /* prediction difference magnitude */ - /* TRANS */ - ylint = state_ptr->yl >> 15; /* exponent part of yl */ - ylfrac = (state_ptr->yl >> 10) & 0x1F; /* fractional part of yl */ - thr1 = (32 + ylfrac) << ylint; /* threshold */ - thr2 = (ylint > 9) ? 31 << 10 : thr1; /* limit thr2 to 31 << 10 */ - dqthr = (thr2 + (thr2 >> 1)) >> 1; /* dqthr = 0.75 * thr2 */ - if (state_ptr->td == 0) /* signal supposed voice */ - tr = 0; - else if (mag <= dqthr) /* supposed data, but small mag */ - tr = 0; /* treated as voice */ - else /* signal is data (modem) */ - tr = 1; - - /* - * Quantizer scale factor adaptation. - */ - - /* FUNCTW & FILTD & DELAY */ - /* update non-steady state step size multiplier */ - state_ptr->yu = y + ((wi - y) >> 5); - - /* LIMB */ - if (state_ptr->yu < 544) /* 544 <= yu <= 5120 */ - state_ptr->yu = 544; - else if (state_ptr->yu > 5120) - state_ptr->yu = 5120; - - /* FILTE & DELAY */ - /* update steady state step size multiplier */ - state_ptr->yl += state_ptr->yu + ((-state_ptr->yl) >> 6); - - /* - * Adaptive predictor coefficients. - */ - if (tr == 1) { /* reset a's and b's for modem signal */ - state_ptr->a[0] = 0; - state_ptr->a[1] = 0; - state_ptr->b[0] = 0; - state_ptr->b[1] = 0; - state_ptr->b[2] = 0; - state_ptr->b[3] = 0; - state_ptr->b[4] = 0; - state_ptr->b[5] = 0; - } else { /* update a's and b's */ - pks1 = pk0 ^ state_ptr->pk[0]; /* UPA2 */ - - /* update predictor pole a[1] */ - a2p = state_ptr->a[1] - (state_ptr->a[1] >> 7); - if (dqsez != 0) { - fa1 = (pks1) ? state_ptr->a[0] : -state_ptr->a[0]; - if (fa1 < -8191) /* a2p = function of fa1 */ - a2p -= 0x100; - else if (fa1 > 8191) - a2p += 0xFF; - else - a2p += fa1 >> 5; - - if (pk0 ^ state_ptr->pk[1]) - { /* LIMC */ - if (a2p <= -12160) - a2p = -12288; - else if (a2p >= 12416) - a2p = 12288; - else - a2p -= 0x80; - } - else if (a2p <= -12416) - a2p = -12288; - else if (a2p >= 12160) - a2p = 12288; - else - a2p += 0x80; - } - - /* TRIGB & DELAY */ - state_ptr->a[1] = a2p; - - /* UPA1 */ - /* update predictor pole a[0] */ - state_ptr->a[0] -= state_ptr->a[0] >> 8; - if (dqsez != 0) - { if (pks1 == 0) - state_ptr->a[0] += 192; - else - state_ptr->a[0] -= 192; - } ; - - /* LIMD */ - a1ul = 15360 - a2p; - if (state_ptr->a[0] < -a1ul) - state_ptr->a[0] = -a1ul; - else if (state_ptr->a[0] > a1ul) - state_ptr->a[0] = a1ul; - - /* UPB : update predictor zeros b[6] */ - for (cnt = 0; cnt < 6; cnt++) { - if (code_size == 5) /* for 40Kbps G.723 */ - state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9; - else /* for G.721 and 24Kbps G.723 */ - state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8; - if (dq & 0x7FFF) { /* XOR */ - if ((dq ^ state_ptr->dq[cnt]) >= 0) - state_ptr->b[cnt] += 128; - else - state_ptr->b[cnt] -= 128; - } - } - } - - for (cnt = 5; cnt > 0; cnt--) - state_ptr->dq[cnt] = state_ptr->dq[cnt-1]; - /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */ - if (mag == 0) { - state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20; - } else { - expon = quan(mag, power2, 15); - state_ptr->dq[0] = (dq >= 0) ? - (expon << 6) + ((mag << 6) >> expon) : - (expon << 6) + ((mag << 6) >> expon) - 0x400; - } - - state_ptr->sr[1] = state_ptr->sr[0]; - /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */ - if (sr == 0) { - state_ptr->sr[0] = 0x20; - } else if (sr > 0) { - expon = quan(sr, power2, 15); - state_ptr->sr[0] = (expon << 6) + ((sr << 6) >> expon); - } else if (sr > -32768) { - mag = -sr; - expon = quan(mag, power2, 15); - state_ptr->sr[0] = (expon << 6) + ((mag << 6) >> expon) - 0x400; - } else - state_ptr->sr[0] = (short) 0xFC20; - - /* DELAY A */ - state_ptr->pk[1] = state_ptr->pk[0]; - state_ptr->pk[0] = pk0; - - /* TONE */ - if (tr == 1) /* this sample has been treated as data */ - state_ptr->td = 0; /* next one will be treated as voice */ - else if (a2p < -11776) /* small sample-to-sample correlation */ - state_ptr->td = 1; /* signal may be data */ - else /* signal is voice */ - state_ptr->td = 0; - - /* - * Adaptation speed control. - */ - state_ptr->dms += (fi - state_ptr->dms) >> 5; /* FILTA */ - state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7); /* FILTB */ - - if (tr == 1) - state_ptr->ap = 256; - else if (y < 1536) /* SUBTC */ - state_ptr->ap += (0x200 - state_ptr->ap) >> 4; - else if (state_ptr->td == 1) - state_ptr->ap += (0x200 - state_ptr->ap) >> 4; - else if (abs((state_ptr->dms << 2) - state_ptr->dml) >= - (state_ptr->dml >> 3)) - state_ptr->ap += (0x200 - state_ptr->ap) >> 4; - else - state_ptr->ap += (-state_ptr->ap) >> 4; - - return ; -} /* update */ - -/*------------------------------------------------------------------------------ -*/ - -static int -unpack_bytes (int bits, int blocksize, const unsigned char * block, short * samples) -{ unsigned int in_buffer = 0 ; - unsigned char in_byte ; - int k, in_bits = 0, bindex = 0 ; - - for (k = 0 ; bindex <= blocksize && k < G72x_BLOCK_SIZE ; k++) - { if (in_bits < bits) - { in_byte = block [bindex++] ; - - in_buffer |= (in_byte << in_bits); - in_bits += 8; - } - samples [k] = in_buffer & ((1 << bits) - 1); - in_buffer >>= bits; - in_bits -= bits; - } ; - - return k ; -} /* unpack_bytes */ - -static int -pack_bytes (int bits, const short * samples, unsigned char * block) -{ - unsigned int out_buffer = 0 ; - int k, bindex = 0, out_bits = 0 ; - unsigned char out_byte ; - - for (k = 0 ; k < G72x_BLOCK_SIZE ; k++) - { out_buffer |= (samples [k] << out_bits) ; - out_bits += bits ; - if (out_bits >= 8) - { out_byte = out_buffer & 0xFF ; - out_bits -= 8 ; - out_buffer >>= 8 ; - block [bindex++] = out_byte ; - } - } ; - - return bindex ; -} /* pack_bytes */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 6298dc75-fd0f-4062-9b90-f73ed69f22d4 -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g72x.h b/Libraries/SndFile/Files/src/G72x/g72x.h deleted file mode 100644 index e6319e624..000000000 --- a/Libraries/SndFile/Files/src/G72x/g72x.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** This file is not the same as the original file from Sun Microsystems. Nearly -** all the original definitions and function prototypes that were in the file -** of this name have been moved to g72x_priv.h. -*/ - -#ifndef G72X_HEADER_FILE -#define G72X_HEADER_FILE - -/* -** Number of samples per block to process. -** Must be a common multiple of possible bits per sample : 2, 3, 4, 5 and 8. -*/ -#define G72x_BLOCK_SIZE (3 * 5 * 8) - -/* -** Identifiers for the differing kinds of G72x ADPCM codecs. -** The identifiers also define the number of encoded bits per sample. -*/ - -enum -{ G723_16_BITS_PER_SAMPLE = 2, - G723_24_BITS_PER_SAMPLE = 3, - G723_40_BITS_PER_SAMPLE = 5, - - G721_32_BITS_PER_SAMPLE = 4, - G721_40_BITS_PER_SAMPLE = 5, - - G723_16_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE, - G723_24_SAMPLES_PER_BLOCK = G723_24_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_24_BITS_PER_SAMPLE), - G723_40_SAMPLES_PER_BLOCK = G723_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_40_BITS_PER_SAMPLE), - - G721_32_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE, - G721_40_SAMPLES_PER_BLOCK = G721_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G721_40_BITS_PER_SAMPLE), - - G723_16_BYTES_PER_BLOCK = (G723_16_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8, - G723_24_BYTES_PER_BLOCK = (G723_24_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8, - G723_40_BYTES_PER_BLOCK = (G723_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8, - - G721_32_BYTES_PER_BLOCK = (G721_32_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8, - G721_40_BYTES_PER_BLOCK = (G721_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8 -} ; - -/* Forward declaration of of g72x_state. */ - -struct g72x_state ; - -/* External function definitions. */ - -struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock) ; -struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock) ; -/* -** Initialize the ADPCM state table for the given codec. -** Return 0 on success, 1 on fail. -*/ - -int g72x_decode_block (struct g72x_state *pstate, const unsigned char *block, short *samples) ; -/* -** The caller fills data->block with data->bytes bytes before calling the -** function. The value data->bytes must be an integer multiple of -** data->blocksize and be <= data->max_bytes. -** When it returns, the caller can read out data->samples samples. -*/ - -int g72x_encode_block (struct g72x_state *pstate, short *samples, unsigned char *block) ; -/* -** The caller fills state->samples some integer multiple data->samples_per_block -** (up to G72x_BLOCK_SIZE) samples before calling the function. -** When it returns, the caller can read out bytes encoded bytes. -*/ - -#endif /* !G72X_HEADER_FILE */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 6ca84e5f-f932-4ba1-87ee-37056d921621 -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g72x_priv.h b/Libraries/SndFile/Files/src/G72x/g72x_priv.h deleted file mode 100644 index a88e96d0d..000000000 --- a/Libraries/SndFile/Files/src/G72x/g72x_priv.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This source code is a product of Sun Microsystems, Inc. and is provided - * for unrestricted use. Users may copy or modify this source code without - * charge. - * - * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING - * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun source code is provided with no support and without any obligation on - * the part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ - -#ifndef G72X_PRIVATE_H -#define G72X_PRIVATE_H - -#ifdef __cplusplus -#error "This code is not designed to be compiled with a C++ compiler." -#endif - -/* -** The following is the definition of the state structure used by the -** G.721/G.723 encoder and decoder to preserve their internal state -** between successive calls. The meanings of the majority of the state -** structure fields are explained in detail in the CCITT Recommendation -** G.721. The field names are essentially identical to variable names -** in the bit level description of the coding algorithm included in this -** Recommendation. -*/ - -struct g72x_state -{ long yl; /* Locked or steady state step size multiplier. */ - short yu; /* Unlocked or non-steady state step size multiplier. */ - short dms; /* Short term energy estimate. */ - short dml; /* Long term energy estimate. */ - short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */ - - short a[2]; /* Coefficients of pole portion of prediction filter. */ - short b[6]; /* Coefficients of zero portion of prediction filter. */ - short pk[2]; /* - ** Signs of previous two samples of a partially - ** reconstructed signal. - **/ - short dq[6]; /* - ** Previous 6 samples of the quantized difference - ** signal represented in an internal floating point - ** format. - **/ - short sr[2]; /* - ** Previous 2 samples of the quantized difference - ** signal represented in an internal floating point - ** format. - */ - char td; /* delayed tone detect, new in 1988 version */ - - /* The following struct members were added for libsndfile. The original - ** code worked by calling a set of functions on a sample by sample basis - ** which is slow on architectures like Intel x86. For libsndfile, this - ** was changed so that the encoding and decoding routines could work on - ** a block of samples at a time to reduce the function call overhead. - */ - int (*encoder) (int, struct g72x_state* state) ; - int (*decoder) (int, struct g72x_state* state) ; - - int codec_bits, blocksize, samplesperblock ; -} ; - -typedef struct g72x_state G72x_STATE ; - -int predictor_zero (G72x_STATE *state_ptr); - -int predictor_pole (G72x_STATE *state_ptr); - -int step_size (G72x_STATE *state_ptr); - -int quantize (int d, int y, short *table, int size); - -int reconstruct (int sign, int dqln, int y); - -void update (int code_size, int y, int wi, int fi, int dq, int sr, int dqsez, G72x_STATE *state_ptr); - -int g721_encoder (int sample, G72x_STATE *state_ptr); -int g721_decoder (int code, G72x_STATE *state_ptr); - -int g723_16_encoder (int sample, G72x_STATE *state_ptr); -int g723_16_decoder (int code, G72x_STATE *state_ptr); - -int g723_24_encoder (int sample, G72x_STATE *state_ptr); -int g723_24_decoder (int code, G72x_STATE *state_ptr); - -int g723_40_encoder (int sample, G72x_STATE *state_ptr); -int g723_40_decoder (int code, G72x_STATE *state_ptr); - -void private_init_state (G72x_STATE *state_ptr) ; - -#endif /* G72X_PRIVATE_H */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: d9ad4da7-0fa3-471d-8020-720b5cfb5e5b -*/ - diff --git a/Libraries/SndFile/Files/src/G72x/g72x_test.c b/Libraries/SndFile/Files/src/G72x/g72x_test.c deleted file mode 100644 index caf58467b..000000000 --- a/Libraries/SndFile/Files/src/G72x/g72x_test.c +++ /dev/null @@ -1,222 +0,0 @@ -/* -** Copyright (C) 1999-2004 Erik de Castro Lopo -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. -** -** This program 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 General Public License for more details. -** -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include -#include -#include - -#include "g72x.h" -#include "g72x_priv.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846264338 -#endif - -#define BUFFER_SIZE (1<<14) /* Should be (1<<14) */ -#define SAMPLE_RATE 11025 - - -static void g721_test (void) ; -static void g723_test (double margin) ; - -static void gen_signal_double (double *data, double scale, int datalen) ; -static int error_function (double data, double orig, double margin) ; - -static int oct_save_short (short *a, short *b, int len) ; - -int -main (int argc, char *argv []) -{ int bDoAll = 0 ; - int nTests = 0 ; - - if (argc != 2) - { printf ("Usage : %s \n", argv [0]) ; - printf (" Where is one of the following:\n") ; - printf (" g721 - test G721 encoder and decoder\n") ; - printf (" g723 - test G721 encoder and decoder\n") ; - printf (" all - perform all tests\n") ; - exit (1) ; - } ; - - bDoAll=!strcmp (argv [1], "all"); - - if (bDoAll || ! strcmp (argv [1], "g721")) - { g721_test () ; - nTests++ ; - } ; - - if (bDoAll || ! strcmp (argv [1], "g723")) - { g723_test (0.53) ; - nTests++ ; - } ; - - if (nTests == 0) - { printf ("Mono : ************************************\n") ; - printf ("Mono : * No '%s' test defined.\n", argv [1]) ; - printf ("Mono : ************************************\n") ; - return 1 ; - } ; - - return 0 ; -} /* main */ - -static void -g721_test (void) -{ - return ; -} /* g721_test */ - -static void -g723_test (double margin) -{ static double orig_buffer [BUFFER_SIZE] ; - static short orig [BUFFER_SIZE] ; - static short data [BUFFER_SIZE] ; - - G72x_STATE encoder_state, decoder_state ; - - long k ; - int code, position, max_err ; - - private_init_state (&encoder_state) ; - encoder_state.encoder = g723_24_encoder ; - encoder_state.codec_bits = 3 ; - - private_init_state (&decoder_state) ; - decoder_state.decoder = g723_24_decoder ; - decoder_state.codec_bits = 3 ; - - memset (data, 0, BUFFER_SIZE * sizeof (short)) ; - memset (orig, 0, BUFFER_SIZE * sizeof (short)) ; - - printf (" g723_test : ") ; - fflush (stdout) ; - - gen_signal_double (orig_buffer, 32000.0, BUFFER_SIZE) ; - for (k = 0 ; k < BUFFER_SIZE ; k++) - orig [k] = (short) orig_buffer [k] ; - - /* Write and read data here. */ - position = 0 ; - max_err = 0 ; - for (k = 0 ; k < BUFFER_SIZE ; k++) - { code = encoder_state.encoder (orig [k], &encoder_state) ; - data [k] = decoder_state.decoder (code, &decoder_state) ; - if (abs (orig [k] - data [k]) > max_err) - { position = k ; - max_err = abs (orig [k] - data [k]) ; - } ; - } ; - - printf ("\n\nMax error of %d at postion %d.\n", max_err, position) ; - - for (k = 0 ; k < BUFFER_SIZE ; k++) - { if (error_function (data [k], orig [k], margin)) - { printf ("Line %d: Incorrect sample A (#%ld : %d should be %d).\n", __LINE__, k, data [k], orig [k]) ; - oct_save_short (orig, data, BUFFER_SIZE) ; - exit (1) ; - } ; - } ; - - - printf ("ok\n") ; - - return ; -} /* g723_test */ - - -#define SIGNAL_MAXVAL 30000.0 -#define DECAY_COUNT 1000 - -static void -gen_signal_double (double *gendata, double scale, int gendatalen) -{ int k, ramplen ; - double amp = 0.0 ; - - ramplen = DECAY_COUNT ; - - for (k = 0 ; k < gendatalen ; k++) - { if (k <= ramplen) - amp = scale * k / ((double) ramplen) ; - else if (k > gendatalen - ramplen) - amp = scale * (gendatalen - k) / ((double) ramplen) ; - - gendata [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE)) - + 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ; - } ; - - return ; -} /* gen_signal_double */ - -static int -error_function (double data, double orig, double margin) -{ double error ; - - if (fabs (orig) <= 500.0) - error = fabs (fabs (data) - fabs(orig)) / 2000.0 ; - else if (fabs (orig) <= 1000.0) - error = fabs (data - orig) / 3000.0 ; - else - error = fabs (data - orig) / fabs (orig) ; - - if (error > margin) - { printf ("\n\n*******************\nError : %f\n", error) ; - return 1 ; - } ; - return 0 ; -} /* error_function */ - -static int -oct_save_short (short *a, short *b, int len) -{ FILE *file ; - int k ; - - if (! (file = fopen ("error.dat", "w"))) - return 1 ; - - fprintf (file, "# Not created by Octave\n") ; - - fprintf (file, "# name: a\n") ; - fprintf (file, "# type: matrix\n") ; - fprintf (file, "# rows: %d\n", len) ; - fprintf (file, "# columns: 1\n") ; - - for (k = 0 ; k < len ; k++) - fprintf (file, "% d\n", a [k]) ; - - fprintf (file, "# name: b\n") ; - fprintf (file, "# type: matrix\n") ; - fprintf (file, "# rows: %d\n", len) ; - fprintf (file, "# columns: 1\n") ; - - for (k = 0 ; k < len ; k++) - fprintf (file, "% d\n", b [k]) ; - - fclose (file) ; - return 0 ; -} /* oct_save_short */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 0597b442-a5b0-4abf-92a4-92f6c24e85a6 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/COPYRIGHT b/Libraries/SndFile/Files/src/GSM610/COPYRIGHT deleted file mode 100644 index eba0e523b..000000000 --- a/Libraries/SndFile/Files/src/GSM610/COPYRIGHT +++ /dev/null @@ -1,16 +0,0 @@ -Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, -Technische Universitaet Berlin - -Any use of this software is permitted provided that this notice is not -removed and that neither the authors nor the Technische Universitaet Berlin -are deemed to have made any representations as to the suitability of this -software for any purpose nor are held responsible for any defects of -this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - -As a matter of courtesy, the authors request to be informed about uses -this software has found, about bugs in this software, and about any -improvements that may be of general interest. - -Berlin, 28.11.1994 -Jutta Degener -Carsten Bormann diff --git a/Libraries/SndFile/Files/src/GSM610/ChangeLog b/Libraries/SndFile/Files/src/GSM610/ChangeLog deleted file mode 100644 index 24f524882..000000000 --- a/Libraries/SndFile/Files/src/GSM610/ChangeLog +++ /dev/null @@ -1,56 +0,0 @@ -2004-05-12 Erik de Castro Lopo - - * gsm610_priv.h - Replace ugly macros with inline functions. - - * *.c - Remove temporary variables used by macros and other minor fixes required by - above change. - -2003-06-02 Erik de Castro Lopo - - * rpe.c - Renamed variables "exp" to "expon" to avoid shadowed parameter warnigns. - -2002-06-08 Erik de Castro Lopo - - * long_term.c - Changes tp removed compiler warnings about shadowed parameters. - -2002-06-08 Erik de Castro Lopo - - * private.h - Made declarations of gsm_A, gsm_B, gsm_MIC etc extern. This fixed a compile - problem on MacOSX. - -2002-05-10 Erik de Castro Lopo - - * *.[ch] - Removed all pre-ANSI prototype kludges. Removed proto.h and unproto.h. - Started work on making GSM 6.10 files seekable. Currently they are not. - - * code.c private.h - Function Gsm_Coder () used a statically defined array. This was obviously - not re-entrant so moved it to struct gsm_state. - -2001-09-16 Erik de Castro Lopo - - * code.c - Added #includes for string.h and stdlib.h. - -2000-10-27 Erik de Castro Lopo - - * config.h - Removed some commented out #defines (ie //*efine) which were causing problems on - the Sun cc compiler. - -2000-02-29 Erik de Castro Lopo - - * private.h - Added #defines to emulate normal compile time options. - -2000-02-28 Erik de Castro Lopo - - * everthing - Created this directory and copied files from libgsm. - http://kbs.cs.tu-berlin.de/~jutta/toast.html diff --git a/Libraries/SndFile/Files/src/GSM610/Makefile b/Libraries/SndFile/Files/src/GSM610/Makefile deleted file mode 100644 index aba5e049d..000000000 --- a/Libraries/SndFile/Files/src/GSM610/Makefile +++ /dev/null @@ -1,474 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# src/GSM610/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - -srcdir = . -top_srcdir = ../.. - -pkgdatadir = $(datadir)/libsndfile -pkglibdir = $(libdir)/libsndfile -pkgincludedir = $(includedir)/libsndfile -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = /usr/bin/install -c -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = powerpc-apple-darwin8.6.0 -host_triplet = powerpc-apple-darwin8.6.0 -target_triplet = powerpc-apple-darwin8.6.0 -subdir = src/GSM610 -DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in ChangeLog -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/src/config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libgsm_la_LIBADD = -am__objects_1 = add.lo decode.lo gsm_decode.lo gsm_encode.lo \ - long_term.lo preprocess.lo short_term.lo code.lo gsm_create.lo \ - gsm_destroy.lo gsm_option.lo lpc.lo rpe.lo table.lo -am__objects_2 = -am_libgsm_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libgsm_la_OBJECTS = $(am_libgsm_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libgsm_la_SOURCES) -DIST_SOURCES = $(libgsm_la_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run aclocal-1.9 -ALSA_LIBS = -AMDEP_FALSE = # -AMDEP_TRUE = -AMTAR = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run tar -AR = ar -AUTOCONF = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run autoconf - -# Disable autoheader. -AUTOHEADER = echo -AUTOMAKE = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run automake-1.9 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -std=gnu99 -W -Wall -Wdeclaration-after-statement -Wstrict-prototypes -Wmissing-prototypes -Wcast-align -Wcast-qual -Wnested-externs -Wbad-function-cast -Wwrite-strings -pipe -fpascal-strings -I/Developer/Headers/FlatCarbon -COMPILER_IS_GCC = -CPP = gcc -E -CPPFLAGS = -CXX = g++ -CXXCPP = g++ -E -CXXDEPMODE = depmode=gcc3 -CXXFLAGS = -g -O2 -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -ECHO = echo -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = grep -E -ENABLE_EXPERIMENTAL_CODE = -EXEEXT = -F77 = -FFLAGS = -FLAC_LIBS = -GCC_MAJOR_VERSION = 4 -GETCONF = -HTML_BGCOLOUR = black -HTML_FGCOLOUR = white -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s -LDFLAGS = -LIBOBJS = -LIBS = -lm -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBTOOL_DEPS = ./ltmain.sh -LN_S = ln -s -LTLIBOBJS = -MAKEINFO = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run makeinfo -OBJEXT = o -OS_SPECIFIC_CFLAGS = -fpascal-strings -I/Developer/Headers/FlatCarbon -OS_SPECIFIC_LINKS = -framework CoreAudio -PACKAGE = libsndfile -PACKAGE_BUGREPORT = erikd@mega-nerd.com -PACKAGE_NAME = libsndfile -PACKAGE_STRING = libsndfile 1.0.15 -PACKAGE_TARNAME = libsndfile -PACKAGE_VERSION = 1.0.15 -PATH_SEPARATOR = : -PKG_CONFIG = /sw/bin/pkg-config -RANLIB = ranlib -SET_MAKE = -SF_COUNT_MAX = 0x7FFFFFFFFFFFFFFFLL -SHARED_VERSION_INFO = 1:15:0 -SHELL = /bin/sh -SHLIB_VERSION_ARG = -Wl,-exported_symbols_list -Wl,$(srcdir)/Symbols.darwin -SIZEOF_SF_COUNT_T = 8 -SQLITE3_CFLAGS = -SQLITE3_LIBS = -STRIP = strip -TYPEOF_SF_COUNT_T = off_t -VERSION = 1.0.15 -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_CXX = g++ -ac_ct_F77 = -ac_ct_GETCONF = -ac_ct_RANLIB = ranlib -ac_ct_STRIP = strip -ac_pt_PKG_CONFIG = /sw/bin/pkg-config -am__fastdepCC_FALSE = # -am__fastdepCC_TRUE = -am__fastdepCXX_FALSE = # -am__fastdepCXX_TRUE = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -autogen = no -bindir = ${exec_prefix}/bin -build = powerpc-apple-darwin8.6.0 -build_alias = -build_cpu = powerpc -build_os = darwin8.6.0 -build_vendor = apple -datadir = ${prefix}/share -exec_prefix = ${prefix} -host = powerpc-apple-darwin8.6.0 -host_alias = -host_cpu = powerpc -host_os = darwin8.6.0 -host_vendor = apple -htmldocdir = /usr/local/share/doc/libsndfile1-dev/html -includedir = ${prefix}/include -infodir = ${prefix}/info -install_sh = /Users/xugg/Desktop/libsndfile-1.0.15/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localstatedir = ${prefix}/var -mandir = ${prefix}/man -mkdir_p = $(mkinstalldirs) -oldincludedir = /usr/include -prefix = /usr/local -program_transform_name = s,x,x, -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -sysconfdir = ${prefix}/etc -target = powerpc-apple-darwin8.6.0 -target_alias = -target_cpu = powerpc -target_os = darwin8.6.0 -target_vendor = apple -EXTRA_DIST = README COPYRIGHT ChangeLog -noinst_HEADERS = gsm.h config.h gsm610_priv.h -noinst_LTLIBRARIES = libgsm.la -CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \ - short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c - -libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/GSM610/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/GSM610/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libgsm.la: $(libgsm_la_OBJECTS) $(libgsm_la_DEPENDENCIES) - $(LINK) $(libgsm_la_LDFLAGS) $(libgsm_la_OBJECTS) $(libgsm_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/add.Plo -include ./$(DEPDIR)/code.Plo -include ./$(DEPDIR)/decode.Plo -include ./$(DEPDIR)/gsm_create.Plo -include ./$(DEPDIR)/gsm_decode.Plo -include ./$(DEPDIR)/gsm_destroy.Plo -include ./$(DEPDIR)/gsm_encode.Plo -include ./$(DEPDIR)/gsm_option.Plo -include ./$(DEPDIR)/long_term.Plo -include ./$(DEPDIR)/lpc.Plo -include ./$(DEPDIR)/preprocess.Plo -include ./$(DEPDIR)/rpe.Plo -include ./$(DEPDIR)/short_term.Plo -include ./$(DEPDIR)/table.Plo - -.c.o: - if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c $< - -.c.obj: - if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: - if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Libraries/SndFile/Files/src/GSM610/Makefile.am b/Libraries/SndFile/Files/src/GSM610/Makefile.am deleted file mode 100644 index e754ba98e..000000000 --- a/Libraries/SndFile/Files/src/GSM610/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -## Process this file with automake to produce Makefile.in - -EXTRA_DIST = README COPYRIGHT ChangeLog - -noinst_HEADERS = gsm.h config.h gsm610_priv.h -noinst_LTLIBRARIES = libgsm.la - -CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \ - short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c - -libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS) - -# Disable autoheader. -AUTOHEADER=echo - -## Do not edit or modify anything in this comment block. -## The arch-tag line is a file identity tag for the GNU Arch -## revision control system. -## -## arch-tag: ba91ffbe-9d1d-4044-a1de-e8ee2f890560 - diff --git a/Libraries/SndFile/Files/src/GSM610/Makefile.in b/Libraries/SndFile/Files/src/GSM610/Makefile.in deleted file mode 100644 index 7c43984b8..000000000 --- a/Libraries/SndFile/Files/src/GSM610/Makefile.in +++ /dev/null @@ -1,474 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = src/GSM610 -DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in ChangeLog -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/src/config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libgsm_la_LIBADD = -am__objects_1 = add.lo decode.lo gsm_decode.lo gsm_encode.lo \ - long_term.lo preprocess.lo short_term.lo code.lo gsm_create.lo \ - gsm_destroy.lo gsm_option.lo lpc.lo rpe.lo table.lo -am__objects_2 = -am_libgsm_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libgsm_la_OBJECTS = $(am_libgsm_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libgsm_la_SOURCES) -DIST_SOURCES = $(libgsm_la_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ - -# Disable autoheader. -AUTOHEADER = echo -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -COMPILER_IS_GCC = @COMPILER_IS_GCC@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_EXPERIMENTAL_CODE = @ENABLE_EXPERIMENTAL_CODE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FLAC_LIBS = @FLAC_LIBS@ -GCC_MAJOR_VERSION = @GCC_MAJOR_VERSION@ -GETCONF = @GETCONF@ -HTML_BGCOLOUR = @HTML_BGCOLOUR@ -HTML_FGCOLOUR = @HTML_FGCOLOUR@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBTOOL_DEPS = @LIBTOOL_DEPS@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@ -OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SF_COUNT_MAX = @SF_COUNT_MAX@ -SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ -SHELL = @SHELL@ -SHLIB_VERSION_ARG = @SHLIB_VERSION_ARG@ -SIZEOF_SF_COUNT_T = @SIZEOF_SF_COUNT_T@ -SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ -SQLITE3_LIBS = @SQLITE3_LIBS@ -STRIP = @STRIP@ -TYPEOF_SF_COUNT_T = @TYPEOF_SF_COUNT_T@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_GETCONF = @ac_ct_GETCONF@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -autogen = @autogen@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldocdir = @htmldocdir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = README COPYRIGHT ChangeLog -noinst_HEADERS = gsm.h config.h gsm610_priv.h -noinst_LTLIBRARIES = libgsm.la -CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \ - short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c - -libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/GSM610/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/GSM610/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libgsm.la: $(libgsm_la_OBJECTS) $(libgsm_la_DEPENDENCIES) - $(LINK) $(libgsm_la_LDFLAGS) $(libgsm_la_OBJECTS) $(libgsm_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/code.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_create.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_decode.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_destroy.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_encode.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_option.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long_term.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lpc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preprocess.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpe.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_term.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Libraries/SndFile/Files/src/GSM610/README b/Libraries/SndFile/Files/src/GSM610/README deleted file mode 100644 index b57132b05..000000000 --- a/Libraries/SndFile/Files/src/GSM610/README +++ /dev/null @@ -1,36 +0,0 @@ -GSM 06.10 13 kbit/s RPE/LTP speech codec ----------------------------------------- - -All the file in this directory were written by Jutta Degener -and Carsten Borman for The Communications and Operating Systems -Research Group (KBS) at the Technische Universitaet Berlin. - -Their work was released under the following license which is -assumed to be compatible with The GNU Lesser General Public License. - ----------------------------------------------------------------------------- - -Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, -Technische Universitaet Berlin - -Any use of this software is permitted provided that this notice is not -removed and that neither the authors nor the Technische Universitaet Berlin -are deemed to have made any representations as to the suitability of this -software for any purpose nor are held responsible for any defects of -this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - -As a matter of courtesy, the authors request to be informed about uses -this software has found, about bugs in this software, and about any -improvements that may be of general interest. - -Berlin, 28.11.1994 -Jutta Degener (jutta@cs.tu-berlin.de) -Carsten Bormann (cabo@cs.tu-berlin.de) - ----------------------------------------------------------------------------- - -Jutta Degener and Carsten Bormann's work can be found on their homepage -at: - - http://kbs.cs.tu-berlin.de/~jutta/toast.html - diff --git a/Libraries/SndFile/Files/src/GSM610/add.c b/Libraries/SndFile/Files/src/GSM610/add.c deleted file mode 100644 index fbf7cf147..000000000 --- a/Libraries/SndFile/Files/src/GSM610/add.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -/* - * See private.h for the more commonly used macro versions. - */ - -#include -#include - -#include "gsm610_priv.h" -#include "gsm.h" - -#define saturate(x) \ - ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) - -word gsm_add ( word a, word b) -{ - longword sum = (longword)a + (longword)b; - return saturate(sum); -} - -word gsm_sub ( word a, word b) -{ - longword diff = (longword)a - (longword)b; - return saturate(diff); -} - -word gsm_mult ( word a, word b) -{ - if (a == MIN_WORD && b == MIN_WORD) - return MAX_WORD; - - return SASR_L( (longword)a * (longword)b, 15 ); -} - -word gsm_mult_r ( word a, word b) -{ - if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD; - else { - longword prod = (longword)a * (longword)b + 16384; - prod >>= 15; - return prod & 0xFFFF; - } -} - -word gsm_abs (word a) -{ - return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a; -} - -longword gsm_L_mult (word a, word b) -{ - assert( a != MIN_WORD || b != MIN_WORD ); - return ((longword)a * (longword)b) << 1; -} - -longword gsm_L_add ( longword a, longword b) -{ - if (a < 0) { - if (b >= 0) return a + b; - else { - ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1); - return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2; - } - } - else if (b <= 0) return a + b; - else { - ulongword A = (ulongword)a + (ulongword)b; - return A > MAX_LONGWORD ? MAX_LONGWORD : A; - } -} - -longword gsm_L_sub ( longword a, longword b) -{ - if (a >= 0) { - if (b >= 0) return a - b; - else { - /* a>=0, b<0 */ - - ulongword A = (ulongword)a + -(b + 1); - return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1); - } - } - else if (b <= 0) return a - b; - else { - /* a<0, b>0 */ - - ulongword A = (ulongword)-(a + 1) + b; - return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1; - } -} - -static unsigned char const bitoff[ 256 ] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -word gsm_norm (longword a ) -/* - * the number of left shifts needed to normalize the 32 bit - * variable L_var1 for positive values on the interval - * - * with minimum of - * minimum of 1073741824 (01000000000000000000000000000000) and - * maximum of 2147483647 (01111111111111111111111111111111) - * - * - * and for negative values on the interval with - * minimum of -2147483648 (-10000000000000000000000000000000) and - * maximum of -1073741824 ( -1000000000000000000000000000000). - * - * in order to normalize the result, the following - * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); - * - * (That's 'ffs', only from the left, not the right..) - */ -{ - assert(a != 0); - - if (a < 0) { - if (a <= -1073741824) return 0; - a = ~a; - } - - return a & 0xffff0000 - ? ( a & 0xff000000 - ? -1 + bitoff[ 0xFF & (a >> 24) ] - : 7 + bitoff[ 0xFF & (a >> 16) ] ) - : ( a & 0xff00 - ? 15 + bitoff[ 0xFF & (a >> 8) ] - : 23 + bitoff[ 0xFF & a ] ); -} - -longword gsm_L_asl (longword a, int n) -{ - if (n >= 32) return 0; - if (n <= -32) return -(a < 0); - if (n < 0) return gsm_L_asr(a, -n); - return a << n; -} - -word gsm_asr (word a, int n) -{ - if (n >= 16) return -(a < 0); - if (n <= -16) return 0; - if (n < 0) return a << -n; - - return SASR_W (a, (word) n); -} - -word gsm_asl (word a, int n) -{ - if (n >= 16) return 0; - if (n <= -16) return -(a < 0); - if (n < 0) return gsm_asr(a, -n); - return a << n; -} - -longword gsm_L_asr (longword a, int n) -{ - if (n >= 32) return -(a < 0); - if (n <= -32) return 0; - if (n < 0) return a << -n; - - return SASR_L (a, (word) n); -} - -/* -** word gsm_asr (word a, int n) -** { -** if (n >= 16) return -(a < 0); -** if (n <= -16) return 0; -** if (n < 0) return a << -n; -** -** # ifdef SASR_W -** return a >> n; -** # else -** if (a >= 0) return a >> n; -** else return -(word)( -(uword)a >> n ); -** # endif -** } -** -*/ -/* - * (From p. 46, end of section 4.2.5) - * - * NOTE: The following lines gives [sic] one correct implementation - * of the div(num, denum) arithmetic operation. Compute div - * which is the integer division of num by denum: with denum - * >= num > 0 - */ - -word gsm_div (word num, word denum) -{ - longword L_num = num; - longword L_denum = denum; - word div = 0; - int k = 15; - - /* The parameter num sometimes becomes zero. - * Although this is explicitly guarded against in 4.2.5, - * we assume that the result should then be zero as well. - */ - - /* assert(num != 0); */ - - assert(num >= 0 && denum >= num); - if (num == 0) - return 0; - - while (k--) { - div <<= 1; - L_num <<= 1; - - if (L_num >= L_denum) { - L_num -= L_denum; - div++; - } - } - - return div; -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: a7398579-e2e1-4733-aa2d-4c6efc0c58ff -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/code.c b/Libraries/SndFile/Files/src/GSM610/code.c deleted file mode 100644 index 02ec75bf1..000000000 --- a/Libraries/SndFile/Files/src/GSM610/code.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - - -#include -#include - -#include "config.h" - -#include "gsm610_priv.h" -#include "gsm.h" - -/* - * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER - */ - -void Gsm_Coder ( - - struct gsm_state * State, - - word * s, /* [0..159] samples IN */ - -/* - * The RPE-LTD coder works on a frame by frame basis. The length of - * the frame is equal to 160 samples. Some computations are done - * once per frame to produce at the output of the coder the - * LARc[1..8] parameters which are the coded LAR coefficients and - * also to realize the inverse filtering operation for the entire - * frame (160 samples of signal d[0..159]). These parts produce at - * the output of the coder: - */ - - word * LARc, /* [0..7] LAR coefficients OUT */ - -/* - * Procedure 4.2.11 to 4.2.18 are to be executed four times per - * frame. That means once for each sub-segment RPE-LTP analysis of - * 40 samples. These parts produce at the output of the coder: - */ - - word * Nc, /* [0..3] LTP lag OUT */ - word * bc, /* [0..3] coded LTP gain OUT */ - word * Mc, /* [0..3] RPE grid selection OUT */ - word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ - word * xMc /* [13*4] normalized RPE samples OUT */ -) -{ - int k; - word * dp = State->dp0 + 120; /* [ -120...-1 ] */ - word * dpp = dp; /* [ 0...39 ] */ - - word so[160]; - - Gsm_Preprocess (State, s, so); - Gsm_LPC_Analysis (State, so, LARc); - Gsm_Short_Term_Analysis_Filter (State, LARc, so); - - for (k = 0; k <= 3; k++, xMc += 13) { - - Gsm_Long_Term_Predictor ( State, - so+k*40, /* d [0..39] IN */ - dp, /* dp [-120..-1] IN */ - State->e + 5, /* e [0..39] OUT */ - dpp, /* dpp [0..39] OUT */ - Nc++, - bc++); - - Gsm_RPE_Encoding ( /*-S,-*/ - State->e + 5, /* e ][0..39][ IN/OUT */ - xmaxc++, Mc++, xMc ); - /* - * Gsm_Update_of_reconstructed_short_time_residual_signal - * ( dpp, e + 5, dp ); - */ - - { register int i; - for (i = 0; i <= 39; i++) - dp[ i ] = GSM_ADD( State->e[5 + i], dpp[i] ); - } - dp += 40; - dpp += 40; - - } - (void)memcpy( (char *)State->dp0, (char *)(State->dp0 + 160), - 120 * sizeof(*State->dp0) ); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: ae8ef1b2-5a1e-4263-94cd-42b15dca81a3 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/config.h b/Libraries/SndFile/Files/src/GSM610/config.h deleted file mode 100644 index 23ac5ad08..000000000 --- a/Libraries/SndFile/Files/src/GSM610/config.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#ifndef CONFIG_H -#define CONFIG_H - -#define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */ -#define HAS_FCNTL_H 1 /* /usr/include/fcntl.h */ - -#define HAS_FSTAT 1 /* fstat syscall */ -#define HAS_FCHMOD 1 /* fchmod syscall */ -#define HAS_CHMOD 1 /* chmod syscall */ -#define HAS_FCHOWN 1 /* fchown syscall */ -#define HAS_CHOWN 1 /* chown syscall */ - -#define HAS_STRING_H 1 /* /usr/include/string.h */ - -#define HAS_UNISTD_H 1 /* /usr/include/unistd.h */ -#define HAS_UTIME 1 /* POSIX utime(path, times) */ -#define HAS_UTIME_H 1 /* UTIME header file */ - -#endif /* CONFIG_H */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 5338dfef-8e59-4f51-af47-627c9ea85353 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/decode.c b/Libraries/SndFile/Files/src/GSM610/decode.c deleted file mode 100644 index 46db31825..000000000 --- a/Libraries/SndFile/Files/src/GSM610/decode.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include - -#include "gsm610_priv.h" -#include "gsm.h" - -/* - * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER - */ - -static void Postprocessing ( - struct gsm_state * S, - register word * s) -{ - register int k; - register word msr = S->msr; - register word tmp; - - for (k = 160; k--; s++) { - tmp = GSM_MULT_R( msr, 28180 ); - msr = GSM_ADD(*s, tmp); /* Deemphasis */ - *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */ - } - S->msr = msr; -} - -void Gsm_Decoder ( - struct gsm_state * S, - - word * LARcr, /* [0..7] IN */ - - word * Ncr, /* [0..3] IN */ - word * bcr, /* [0..3] IN */ - word * Mcr, /* [0..3] IN */ - word * xmaxcr, /* [0..3] IN */ - word * xMcr, /* [0..13*4] IN */ - - word * s) /* [0..159] OUT */ -{ - int j, k; - word erp[40], wt[160]; - word * drp = S->dp0 + 120; - - for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { - - Gsm_RPE_Decoding( /*-S,-*/ *xmaxcr, *Mcr, xMcr, erp ); - Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); - - for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ]; - } - - Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); - Postprocessing(S, s); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 11ae5b90-2e8b-400b-ac64-a69a1fc6cc41 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm.h b/Libraries/SndFile/Files/src/GSM610/gsm.h deleted file mode 100644 index a13a60614..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#ifndef GSM_H -#define GSM_H - -#include /* for FILE * */ - -/* - * Interface - */ - -typedef struct gsm_state * gsm; -typedef short gsm_signal; /* signed 16 bit */ -typedef unsigned char gsm_byte; -typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ - -#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ - -#define GSM_PATCHLEVEL 10 -#define GSM_MINOR 0 -#define GSM_MAJOR 1 - -#define GSM_OPT_VERBOSE 1 -#define GSM_OPT_FAST 2 -#define GSM_OPT_LTP_CUT 3 -#define GSM_OPT_WAV49 4 -#define GSM_OPT_FRAME_INDEX 5 -#define GSM_OPT_FRAME_CHAIN 6 - -gsm gsm_create (void); - -/* Added for libsndfile : May 6, 2002 */ -void gsm_init (gsm); - -void gsm_destroy (gsm); - -int gsm_print (FILE *, gsm, gsm_byte *); -int gsm_option (gsm, int, int *); - -void gsm_encode (gsm, gsm_signal *, gsm_byte *); -int gsm_decode (gsm, gsm_byte *, gsm_signal *); - -int gsm_explode (gsm, gsm_byte *, gsm_signal *); -void gsm_implode (gsm, gsm_signal *, gsm_byte *); - -#endif /* GSM_H */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 8cfc7698-5433-4b6f-aeca-967c6fda4dec -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm610_priv.h b/Libraries/SndFile/Files/src/GSM610/gsm610_priv.h deleted file mode 100644 index c9ab3f25e..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm610_priv.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#ifndef PRIVATE_H -#define PRIVATE_H - -/* Added by Erik de Castro Lopo */ -#define USE_FLOAT_MUL -#define FAST -#define WAV49 - -#ifdef __cplusplus -#error "This code is not designed to be compiled with a C++ compiler." -#endif -/* Added by Erik de Castro Lopo */ - - - -typedef short word; /* 16 bit signed int */ -typedef int longword; /* 32 bit signed int */ - -typedef unsigned short uword; /* unsigned word */ -typedef unsigned int ulongword; /* unsigned longword */ - -struct gsm_state -{ word dp0[ 280 ] ; - - word z1; /* preprocessing.c, Offset_com. */ - longword L_z2; /* Offset_com. */ - int mp; /* Preemphasis */ - - word u[8] ; /* short_term_aly_filter.c */ - word LARpp[2][8] ; /* */ - word j; /* */ - - word ltp_cut; /* long_term.c, LTP crosscorr. */ - word nrp; /* 40 */ /* long_term.c, synthesis */ - word v[9] ; /* short_term.c, synthesis */ - word msr; /* decoder.c, Postprocessing */ - - char verbose; /* only used if !NDEBUG */ - char fast; /* only used if FAST */ - - char wav_fmt; /* only used if WAV49 defined */ - unsigned char frame_index; /* odd/even chaining */ - unsigned char frame_chain; /* half-byte to carry forward */ - - /* Moved here from code.c where it was defined as static */ - word e[50] ; -} ; - -typedef struct gsm_state GSM_STATE ; - -#define MIN_WORD (-32767 - 1) -#define MAX_WORD 32767 - -#define MIN_LONGWORD (-2147483647 - 1) -#define MAX_LONGWORD 2147483647 - -/* Signed arithmetic shift right. */ -static inline word -SASR_W (word x, word by) -{ return (x >> by) ; -} /* SASR */ - -static inline longword -SASR_L (longword x, word by) -{ return (x >> by) ; -} /* SASR */ - -/* - * Prototypes from add.c - */ -word gsm_mult (word a, word b) ; -longword gsm_L_mult (word a, word b) ; -word gsm_mult_r (word a, word b) ; - -word gsm_div (word num, word denum) ; - -word gsm_add (word a, word b ) ; -longword gsm_L_add (longword a, longword b ) ; - -word gsm_sub (word a, word b) ; -longword gsm_L_sub (longword a, longword b) ; - -word gsm_abs (word a) ; - -word gsm_norm (longword a ) ; - -longword gsm_L_asl (longword a, int n) ; -word gsm_asl (word a, int n) ; - -longword gsm_L_asr (longword a, int n) ; -word gsm_asr (word a, int n) ; - -/* - * Inlined functions from add.h - */ - -static inline longword -GSM_MULT_R (word a, word b) -{ return (((longword) (a)) * ((longword) (b)) + 16384) >> 15 ; -} /* GSM_MULT_R */ - -static inline longword -GSM_MULT (word a, word b) -{ return (((longword) (a)) * ((longword) (b))) >> 15 ; -} /* GSM_MULT */ - -static inline longword -GSM_L_MULT (word a, word b) -{ return ((longword) (a)) * ((longword) (b)) << 1 ; -} /* GSM_L_MULT */ - -static inline longword -GSM_L_ADD (longword a, longword b) -{ ulongword utmp ; - - if (a < 0 && b < 0) - { utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1) ; - return (utmp >= (ulongword) MAX_LONGWORD) ? MIN_LONGWORD : -(longword)utmp-2 ; - } ; - - if (a > 0 && b > 0) - { utmp = (ulongword) a + (ulongword) b ; - return (utmp >= (ulongword) MAX_LONGWORD) ? MAX_LONGWORD : utmp ; - } ; - - return a + b ; -} /* GSM_L_ADD */ - -static inline longword -GSM_ADD (word a, word b) -{ longword ltmp ; - - ltmp = ((longword) a) + ((longword) b) ; - - if (ltmp >= MAX_WORD) - return MAX_WORD ; - if (ltmp <= MIN_WORD) - return MIN_WORD ; - - return ltmp ; -} /* GSM_ADD */ - -static inline longword -GSM_SUB (word a, word b) -{ longword ltmp ; - - ltmp = ((longword) a) - ((longword) b) ; - - if (ltmp >= MAX_WORD) - ltmp = MAX_WORD ; - else if (ltmp <= MIN_WORD) - ltmp = MIN_WORD ; - - return ltmp ; -} /* GSM_SUB */ - -static inline word -GSM_ABS (word a) -{ - if (a > 0) - return a ; - if (a == MIN_WORD) - return MAX_WORD ; - return -a ; -} /* GSM_ADD */ - - -/* - * More prototypes from implementations.. - */ -void Gsm_Coder ( - struct gsm_state * S, - word * s, /* [0..159] samples IN */ - word * LARc, /* [0..7] LAR coefficients OUT */ - word * Nc, /* [0..3] LTP lag OUT */ - word * bc, /* [0..3] coded LTP gain OUT */ - word * Mc, /* [0..3] RPE grid selection OUT */ - word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ - word * xMc) ;/* [13*4] normalized RPE samples OUT */ - -void Gsm_Long_Term_Predictor ( /* 4x for 160 samples */ - struct gsm_state * S, - word * d, /* [0..39] residual signal IN */ - word * dp, /* [-120..-1] d' IN */ - word * e, /* [0..40] OUT */ - word * dpp, /* [0..40] OUT */ - word * Nc, /* correlation lag OUT */ - word * bc) ; /* gain factor OUT */ - -void Gsm_LPC_Analysis ( - struct gsm_state * S, - word * s, /* 0..159 signals IN/OUT */ - word * LARc) ; /* 0..7 LARc's OUT */ - -void Gsm_Preprocess ( - struct gsm_state * S, - word * s, word * so) ; - -void Gsm_Encoding ( - struct gsm_state * S, - word * e, - word * ep, - word * xmaxc, - word * Mc, - word * xMc) ; - -void Gsm_Short_Term_Analysis_Filter ( - struct gsm_state * S, - word * LARc, /* coded log area ratio [0..7] IN */ - word * d) ; /* st res. signal [0..159] IN/OUT */ - -void Gsm_Decoder ( - struct gsm_state * S, - word * LARcr, /* [0..7] IN */ - word * Ncr, /* [0..3] IN */ - word * bcr, /* [0..3] IN */ - word * Mcr, /* [0..3] IN */ - word * xmaxcr, /* [0..3] IN */ - word * xMcr, /* [0..13*4] IN */ - word * s) ; /* [0..159] OUT */ - -void Gsm_Decoding ( - struct gsm_state * S, - word xmaxcr, - word Mcr, - word * xMcr, /* [0..12] IN */ - word * erp) ; /* [0..39] OUT */ - -void Gsm_Long_Term_Synthesis_Filtering ( - struct gsm_state* S, - word Ncr, - word bcr, - word * erp, /* [0..39] IN */ - word * drp) ; /* [-120..-1] IN, [0..40] OUT */ - -void Gsm_RPE_Decoding ( - /*-struct gsm_state *S,-*/ - word xmaxcr, - word Mcr, - word * xMcr, /* [0..12], 3 bits IN */ - word * erp) ; /* [0..39] OUT */ - -void Gsm_RPE_Encoding ( - /*-struct gsm_state * S,-*/ - word * e, /* -5..-1][0..39][40..44 IN/OUT */ - word * xmaxc, /* OUT */ - word * Mc, /* OUT */ - word * xMc) ; /* [0..12] OUT */ - -void Gsm_Short_Term_Synthesis_Filter ( - struct gsm_state * S, - word * LARcr, /* log area ratios [0..7] IN */ - word * drp, /* received d [0...39] IN */ - word * s) ; /* signal s [0..159] OUT */ - -void Gsm_Update_of_reconstructed_short_time_residual_signal ( - word * dpp, /* [0...39] IN */ - word * ep, /* [0...39] IN */ - word * dp) ; /* [-120...-1] IN/OUT */ - -/* - * Tables from table.c - */ -#ifndef GSM_TABLE_C - -extern word gsm_A [8], gsm_B [8], gsm_MIC [8], gsm_MAC [8] ; -extern word gsm_INVA [8] ; -extern word gsm_DLB [4], gsm_QLB [4] ; -extern word gsm_H [11] ; -extern word gsm_NRFAC [8] ; -extern word gsm_FAC [8] ; - -#endif /* GSM_TABLE_C */ - -/* - * Debugging - */ -#ifdef NDEBUG - -# define gsm_debug_words(a, b, c, d) /* nil */ -# define gsm_debug_longwords(a, b, c, d) /* nil */ -# define gsm_debug_word(a, b) /* nil */ -# define gsm_debug_longword(a, b) /* nil */ - -#else /* !NDEBUG => DEBUG */ - - void gsm_debug_words (char * name, int, int, word *) ; - void gsm_debug_longwords (char * name, int, int, longword *) ; - void gsm_debug_longword (char * name, longword) ; - void gsm_debug_word (char * name, word) ; - -#endif /* !NDEBUG */ - -#endif /* PRIVATE_H */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 8bc5fdf2-e8c8-4686-9bd7-a30b512bef0c -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm_create.c b/Libraries/SndFile/Files/src/GSM610/gsm_create.c deleted file mode 100644 index 94e8d7d70..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm_create.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include "config.h" - -#include -#include -#include - - - -#include "gsm.h" -#include "gsm610_priv.h" - -gsm gsm_create (void) -{ - gsm r; - - r = malloc (sizeof(struct gsm_state)); - if (!r) return r; - - memset((char *)r, 0, sizeof (struct gsm_state)); - r->nrp = 40; - - return r; -} - -/* Added for libsndfile : May 6, 2002. Not sure if it works. */ -void gsm_init (gsm state) -{ - memset (state, 0, sizeof (struct gsm_state)) ; - state->nrp = 40 ; -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 9fedb6b3-ed99-40c2-aac1-484c536261fe -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm_decode.c b/Libraries/SndFile/Files/src/GSM610/gsm_decode.c deleted file mode 100644 index e6425587c..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm_decode.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include "gsm610_priv.h" - -#include "gsm.h" - -int gsm_decode (gsm s, gsm_byte * c, gsm_signal * target) -{ - word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; - -#ifdef WAV49 - if (s->wav_fmt) { - - uword sr = 0; - - s->frame_index = !s->frame_index; - if (s->frame_index) { - - sr = *c++; - LARc[0] = sr & 0x3f; sr >>= 6; - sr |= (uword)*c++ << 2; - LARc[1] = sr & 0x3f; sr >>= 6; - sr |= (uword)*c++ << 4; - LARc[2] = sr & 0x1f; sr >>= 5; - LARc[3] = sr & 0x1f; sr >>= 5; - sr |= (uword)*c++ << 2; - LARc[4] = sr & 0xf; sr >>= 4; - LARc[5] = sr & 0xf; sr >>= 4; - sr |= (uword)*c++ << 2; /* 5 */ - LARc[6] = sr & 0x7; sr >>= 3; - LARc[7] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 4; - Nc[0] = sr & 0x7f; sr >>= 7; - bc[0] = sr & 0x3; sr >>= 2; - Mc[0] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 1; - xmaxc[0] = sr & 0x3f; sr >>= 6; - xmc[0] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[1] = sr & 0x7; sr >>= 3; - xmc[2] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[3] = sr & 0x7; sr >>= 3; - xmc[4] = sr & 0x7; sr >>= 3; - xmc[5] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; /* 10 */ - xmc[6] = sr & 0x7; sr >>= 3; - xmc[7] = sr & 0x7; sr >>= 3; - xmc[8] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[9] = sr & 0x7; sr >>= 3; - xmc[10] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[11] = sr & 0x7; sr >>= 3; - xmc[12] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 4; - Nc[1] = sr & 0x7f; sr >>= 7; - bc[1] = sr & 0x3; sr >>= 2; - Mc[1] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 1; - xmaxc[1] = sr & 0x3f; sr >>= 6; - xmc[13] = sr & 0x7; sr >>= 3; - sr = *c++; /* 15 */ - xmc[14] = sr & 0x7; sr >>= 3; - xmc[15] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[16] = sr & 0x7; sr >>= 3; - xmc[17] = sr & 0x7; sr >>= 3; - xmc[18] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[19] = sr & 0x7; sr >>= 3; - xmc[20] = sr & 0x7; sr >>= 3; - xmc[21] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[22] = sr & 0x7; sr >>= 3; - xmc[23] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[24] = sr & 0x7; sr >>= 3; - xmc[25] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 4; /* 20 */ - Nc[2] = sr & 0x7f; sr >>= 7; - bc[2] = sr & 0x3; sr >>= 2; - Mc[2] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 1; - xmaxc[2] = sr & 0x3f; sr >>= 6; - xmc[26] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[27] = sr & 0x7; sr >>= 3; - xmc[28] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[29] = sr & 0x7; sr >>= 3; - xmc[30] = sr & 0x7; sr >>= 3; - xmc[31] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[32] = sr & 0x7; sr >>= 3; - xmc[33] = sr & 0x7; sr >>= 3; - xmc[34] = sr & 0x7; sr >>= 3; - sr = *c++; /* 25 */ - xmc[35] = sr & 0x7; sr >>= 3; - xmc[36] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[37] = sr & 0x7; sr >>= 3; - xmc[38] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 4; - Nc[3] = sr & 0x7f; sr >>= 7; - bc[3] = sr & 0x3; sr >>= 2; - Mc[3] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 1; - xmaxc[3] = sr & 0x3f; sr >>= 6; - xmc[39] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[40] = sr & 0x7; sr >>= 3; - xmc[41] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; /* 30 */ - xmc[42] = sr & 0x7; sr >>= 3; - xmc[43] = sr & 0x7; sr >>= 3; - xmc[44] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[45] = sr & 0x7; sr >>= 3; - xmc[46] = sr & 0x7; sr >>= 3; - xmc[47] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[48] = sr & 0x7; sr >>= 3; - xmc[49] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[50] = sr & 0x7; sr >>= 3; - xmc[51] = sr & 0x7; sr >>= 3; - - s->frame_chain = sr & 0xf; - } - else { - sr = s->frame_chain; - sr |= (uword)*c++ << 4; /* 1 */ - LARc[0] = sr & 0x3f; sr >>= 6; - LARc[1] = sr & 0x3f; sr >>= 6; - sr = *c++; - LARc[2] = sr & 0x1f; sr >>= 5; - sr |= (uword)*c++ << 3; - LARc[3] = sr & 0x1f; sr >>= 5; - LARc[4] = sr & 0xf; sr >>= 4; - sr |= (uword)*c++ << 2; - LARc[5] = sr & 0xf; sr >>= 4; - LARc[6] = sr & 0x7; sr >>= 3; - LARc[7] = sr & 0x7; sr >>= 3; - sr = *c++; /* 5 */ - Nc[0] = sr & 0x7f; sr >>= 7; - sr |= (uword)*c++ << 1; - bc[0] = sr & 0x3; sr >>= 2; - Mc[0] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 5; - xmaxc[0] = sr & 0x3f; sr >>= 6; - xmc[0] = sr & 0x7; sr >>= 3; - xmc[1] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[2] = sr & 0x7; sr >>= 3; - xmc[3] = sr & 0x7; sr >>= 3; - xmc[4] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[5] = sr & 0x7; sr >>= 3; - xmc[6] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; /* 10 */ - xmc[7] = sr & 0x7; sr >>= 3; - xmc[8] = sr & 0x7; sr >>= 3; - xmc[9] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[10] = sr & 0x7; sr >>= 3; - xmc[11] = sr & 0x7; sr >>= 3; - xmc[12] = sr & 0x7; sr >>= 3; - sr = *c++; - Nc[1] = sr & 0x7f; sr >>= 7; - sr |= (uword)*c++ << 1; - bc[1] = sr & 0x3; sr >>= 2; - Mc[1] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 5; - xmaxc[1] = sr & 0x3f; sr >>= 6; - xmc[13] = sr & 0x7; sr >>= 3; - xmc[14] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; /* 15 */ - xmc[15] = sr & 0x7; sr >>= 3; - xmc[16] = sr & 0x7; sr >>= 3; - xmc[17] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[18] = sr & 0x7; sr >>= 3; - xmc[19] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[20] = sr & 0x7; sr >>= 3; - xmc[21] = sr & 0x7; sr >>= 3; - xmc[22] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[23] = sr & 0x7; sr >>= 3; - xmc[24] = sr & 0x7; sr >>= 3; - xmc[25] = sr & 0x7; sr >>= 3; - sr = *c++; - Nc[2] = sr & 0x7f; sr >>= 7; - sr |= (uword)*c++ << 1; /* 20 */ - bc[2] = sr & 0x3; sr >>= 2; - Mc[2] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 5; - xmaxc[2] = sr & 0x3f; sr >>= 6; - xmc[26] = sr & 0x7; sr >>= 3; - xmc[27] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[28] = sr & 0x7; sr >>= 3; - xmc[29] = sr & 0x7; sr >>= 3; - xmc[30] = sr & 0x7; sr >>= 3; - sr = *c++; - xmc[31] = sr & 0x7; sr >>= 3; - xmc[32] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[33] = sr & 0x7; sr >>= 3; - xmc[34] = sr & 0x7; sr >>= 3; - xmc[35] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; /* 25 */ - xmc[36] = sr & 0x7; sr >>= 3; - xmc[37] = sr & 0x7; sr >>= 3; - xmc[38] = sr & 0x7; sr >>= 3; - sr = *c++; - Nc[3] = sr & 0x7f; sr >>= 7; - sr |= (uword)*c++ << 1; - bc[3] = sr & 0x3; sr >>= 2; - Mc[3] = sr & 0x3; sr >>= 2; - sr |= (uword)*c++ << 5; - xmaxc[3] = sr & 0x3f; sr >>= 6; - xmc[39] = sr & 0x7; sr >>= 3; - xmc[40] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[41] = sr & 0x7; sr >>= 3; - xmc[42] = sr & 0x7; sr >>= 3; - xmc[43] = sr & 0x7; sr >>= 3; - sr = *c++; /* 30 */ - xmc[44] = sr & 0x7; sr >>= 3; - xmc[45] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 2; - xmc[46] = sr & 0x7; sr >>= 3; - xmc[47] = sr & 0x7; sr >>= 3; - xmc[48] = sr & 0x7; sr >>= 3; - sr |= (uword)*c++ << 1; - xmc[49] = sr & 0x7; sr >>= 3; - xmc[50] = sr & 0x7; sr >>= 3; - xmc[51] = sr & 0x7; sr >>= 3; - } - } - else -#endif - { - /* GSM_MAGIC = (*c >> 4) & 0xF; */ - - if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; - - LARc[0] = (*c++ & 0xF) << 2; /* 1 */ - LARc[0] |= (*c >> 6) & 0x3; - LARc[1] = *c++ & 0x3F; - LARc[2] = (*c >> 3) & 0x1F; - LARc[3] = (*c++ & 0x7) << 2; - LARc[3] |= (*c >> 6) & 0x3; - LARc[4] = (*c >> 2) & 0xF; - LARc[5] = (*c++ & 0x3) << 2; - LARc[5] |= (*c >> 6) & 0x3; - LARc[6] = (*c >> 3) & 0x7; - LARc[7] = *c++ & 0x7; - Nc[0] = (*c >> 1) & 0x7F; - bc[0] = (*c++ & 0x1) << 1; - bc[0] |= (*c >> 7) & 0x1; - Mc[0] = (*c >> 5) & 0x3; - xmaxc[0] = (*c++ & 0x1F) << 1; - xmaxc[0] |= (*c >> 7) & 0x1; - xmc[0] = (*c >> 4) & 0x7; - xmc[1] = (*c >> 1) & 0x7; - xmc[2] = (*c++ & 0x1) << 2; - xmc[2] |= (*c >> 6) & 0x3; - xmc[3] = (*c >> 3) & 0x7; - xmc[4] = *c++ & 0x7; - xmc[5] = (*c >> 5) & 0x7; - xmc[6] = (*c >> 2) & 0x7; - xmc[7] = (*c++ & 0x3) << 1; /* 10 */ - xmc[7] |= (*c >> 7) & 0x1; - xmc[8] = (*c >> 4) & 0x7; - xmc[9] = (*c >> 1) & 0x7; - xmc[10] = (*c++ & 0x1) << 2; - xmc[10] |= (*c >> 6) & 0x3; - xmc[11] = (*c >> 3) & 0x7; - xmc[12] = *c++ & 0x7; - Nc[1] = (*c >> 1) & 0x7F; - bc[1] = (*c++ & 0x1) << 1; - bc[1] |= (*c >> 7) & 0x1; - Mc[1] = (*c >> 5) & 0x3; - xmaxc[1] = (*c++ & 0x1F) << 1; - xmaxc[1] |= (*c >> 7) & 0x1; - xmc[13] = (*c >> 4) & 0x7; - xmc[14] = (*c >> 1) & 0x7; - xmc[15] = (*c++ & 0x1) << 2; - xmc[15] |= (*c >> 6) & 0x3; - xmc[16] = (*c >> 3) & 0x7; - xmc[17] = *c++ & 0x7; - xmc[18] = (*c >> 5) & 0x7; - xmc[19] = (*c >> 2) & 0x7; - xmc[20] = (*c++ & 0x3) << 1; - xmc[20] |= (*c >> 7) & 0x1; - xmc[21] = (*c >> 4) & 0x7; - xmc[22] = (*c >> 1) & 0x7; - xmc[23] = (*c++ & 0x1) << 2; - xmc[23] |= (*c >> 6) & 0x3; - xmc[24] = (*c >> 3) & 0x7; - xmc[25] = *c++ & 0x7; - Nc[2] = (*c >> 1) & 0x7F; - bc[2] = (*c++ & 0x1) << 1; /* 20 */ - bc[2] |= (*c >> 7) & 0x1; - Mc[2] = (*c >> 5) & 0x3; - xmaxc[2] = (*c++ & 0x1F) << 1; - xmaxc[2] |= (*c >> 7) & 0x1; - xmc[26] = (*c >> 4) & 0x7; - xmc[27] = (*c >> 1) & 0x7; - xmc[28] = (*c++ & 0x1) << 2; - xmc[28] |= (*c >> 6) & 0x3; - xmc[29] = (*c >> 3) & 0x7; - xmc[30] = *c++ & 0x7; - xmc[31] = (*c >> 5) & 0x7; - xmc[32] = (*c >> 2) & 0x7; - xmc[33] = (*c++ & 0x3) << 1; - xmc[33] |= (*c >> 7) & 0x1; - xmc[34] = (*c >> 4) & 0x7; - xmc[35] = (*c >> 1) & 0x7; - xmc[36] = (*c++ & 0x1) << 2; - xmc[36] |= (*c >> 6) & 0x3; - xmc[37] = (*c >> 3) & 0x7; - xmc[38] = *c++ & 0x7; - Nc[3] = (*c >> 1) & 0x7F; - bc[3] = (*c++ & 0x1) << 1; - bc[3] |= (*c >> 7) & 0x1; - Mc[3] = (*c >> 5) & 0x3; - xmaxc[3] = (*c++ & 0x1F) << 1; - xmaxc[3] |= (*c >> 7) & 0x1; - xmc[39] = (*c >> 4) & 0x7; - xmc[40] = (*c >> 1) & 0x7; - xmc[41] = (*c++ & 0x1) << 2; - xmc[41] |= (*c >> 6) & 0x3; - xmc[42] = (*c >> 3) & 0x7; - xmc[43] = *c++ & 0x7; /* 30 */ - xmc[44] = (*c >> 5) & 0x7; - xmc[45] = (*c >> 2) & 0x7; - xmc[46] = (*c++ & 0x3) << 1; - xmc[46] |= (*c >> 7) & 0x1; - xmc[47] = (*c >> 4) & 0x7; - xmc[48] = (*c >> 1) & 0x7; - xmc[49] = (*c++ & 0x1) << 2; - xmc[49] |= (*c >> 6) & 0x3; - xmc[50] = (*c >> 3) & 0x7; - xmc[51] = *c & 0x7; /* 33 */ - } - - Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target); - - return 0; -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 6a9b6628-821c-4a96-84c1-485ebd35f170 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm_destroy.c b/Libraries/SndFile/Files/src/GSM610/gsm_destroy.c deleted file mode 100644 index 9e2d6a49b..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm_destroy.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include "gsm.h" -#include "config.h" - -#ifdef HAS_STDLIB_H -# include -#else -# ifdef HAS_MALLOC_H -# include -# else - extern void free(); -# endif -#endif - -void gsm_destroy (gsm S) -{ - if (S) free((char *)S); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: f423d09b-6ccc-47e0-9b18-ee1cf7a8e473 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm_encode.c b/Libraries/SndFile/Files/src/GSM610/gsm_encode.c deleted file mode 100644 index 02af4ba28..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm_encode.c +++ /dev/null @@ -1,456 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include "gsm610_priv.h" -#include "gsm.h" - -void gsm_encode (gsm s, gsm_signal * source, gsm_byte * c) -{ - word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; - - Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); - - - /* variable size - - GSM_MAGIC 4 - - LARc[0] 6 - LARc[1] 6 - LARc[2] 5 - LARc[3] 5 - LARc[4] 4 - LARc[5] 4 - LARc[6] 3 - LARc[7] 3 - - Nc[0] 7 - bc[0] 2 - Mc[0] 2 - xmaxc[0] 6 - xmc[0] 3 - xmc[1] 3 - xmc[2] 3 - xmc[3] 3 - xmc[4] 3 - xmc[5] 3 - xmc[6] 3 - xmc[7] 3 - xmc[8] 3 - xmc[9] 3 - xmc[10] 3 - xmc[11] 3 - xmc[12] 3 - - Nc[1] 7 - bc[1] 2 - Mc[1] 2 - xmaxc[1] 6 - xmc[13] 3 - xmc[14] 3 - xmc[15] 3 - xmc[16] 3 - xmc[17] 3 - xmc[18] 3 - xmc[19] 3 - xmc[20] 3 - xmc[21] 3 - xmc[22] 3 - xmc[23] 3 - xmc[24] 3 - xmc[25] 3 - - Nc[2] 7 - bc[2] 2 - Mc[2] 2 - xmaxc[2] 6 - xmc[26] 3 - xmc[27] 3 - xmc[28] 3 - xmc[29] 3 - xmc[30] 3 - xmc[31] 3 - xmc[32] 3 - xmc[33] 3 - xmc[34] 3 - xmc[35] 3 - xmc[36] 3 - xmc[37] 3 - xmc[38] 3 - - Nc[3] 7 - bc[3] 2 - Mc[3] 2 - xmaxc[3] 6 - xmc[39] 3 - xmc[40] 3 - xmc[41] 3 - xmc[42] 3 - xmc[43] 3 - xmc[44] 3 - xmc[45] 3 - xmc[46] 3 - xmc[47] 3 - xmc[48] 3 - xmc[49] 3 - xmc[50] 3 - xmc[51] 3 - */ - -#ifdef WAV49 - - if (s->wav_fmt) { - s->frame_index = !s->frame_index; - if (s->frame_index) { - - uword sr; - - sr = 0; - sr = sr >> 6 | LARc[0] << 10; - sr = sr >> 6 | LARc[1] << 10; - *c++ = sr >> 4; - sr = sr >> 5 | LARc[2] << 11; - *c++ = sr >> 7; - sr = sr >> 5 | LARc[3] << 11; - sr = sr >> 4 | LARc[4] << 12; - *c++ = sr >> 6; - sr = sr >> 4 | LARc[5] << 12; - sr = sr >> 3 | LARc[6] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | LARc[7] << 13; - sr = sr >> 7 | Nc[0] << 9; - *c++ = sr >> 5; - sr = sr >> 2 | bc[0] << 14; - sr = sr >> 2 | Mc[0] << 14; - sr = sr >> 6 | xmaxc[0] << 10; - *c++ = sr >> 3; - sr = sr >> 3 | xmc[0] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[1] << 13; - sr = sr >> 3 | xmc[2] << 13; - sr = sr >> 3 | xmc[3] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[4] << 13; - sr = sr >> 3 | xmc[5] << 13; - sr = sr >> 3 | xmc[6] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[7] << 13; - sr = sr >> 3 | xmc[8] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[9] << 13; - sr = sr >> 3 | xmc[10] << 13; - sr = sr >> 3 | xmc[11] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[12] << 13; - sr = sr >> 7 | Nc[1] << 9; - *c++ = sr >> 5; - sr = sr >> 2 | bc[1] << 14; - sr = sr >> 2 | Mc[1] << 14; - sr = sr >> 6 | xmaxc[1] << 10; - *c++ = sr >> 3; - sr = sr >> 3 | xmc[13] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[14] << 13; - sr = sr >> 3 | xmc[15] << 13; - sr = sr >> 3 | xmc[16] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[17] << 13; - sr = sr >> 3 | xmc[18] << 13; - sr = sr >> 3 | xmc[19] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[20] << 13; - sr = sr >> 3 | xmc[21] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[22] << 13; - sr = sr >> 3 | xmc[23] << 13; - sr = sr >> 3 | xmc[24] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[25] << 13; - sr = sr >> 7 | Nc[2] << 9; - *c++ = sr >> 5; - sr = sr >> 2 | bc[2] << 14; - sr = sr >> 2 | Mc[2] << 14; - sr = sr >> 6 | xmaxc[2] << 10; - *c++ = sr >> 3; - sr = sr >> 3 | xmc[26] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[27] << 13; - sr = sr >> 3 | xmc[28] << 13; - sr = sr >> 3 | xmc[29] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[30] << 13; - sr = sr >> 3 | xmc[31] << 13; - sr = sr >> 3 | xmc[32] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[33] << 13; - sr = sr >> 3 | xmc[34] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[35] << 13; - sr = sr >> 3 | xmc[36] << 13; - sr = sr >> 3 | xmc[37] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[38] << 13; - sr = sr >> 7 | Nc[3] << 9; - *c++ = sr >> 5; - sr = sr >> 2 | bc[3] << 14; - sr = sr >> 2 | Mc[3] << 14; - sr = sr >> 6 | xmaxc[3] << 10; - *c++ = sr >> 3; - sr = sr >> 3 | xmc[39] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[40] << 13; - sr = sr >> 3 | xmc[41] << 13; - sr = sr >> 3 | xmc[42] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[43] << 13; - sr = sr >> 3 | xmc[44] << 13; - sr = sr >> 3 | xmc[45] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[46] << 13; - sr = sr >> 3 | xmc[47] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[48] << 13; - sr = sr >> 3 | xmc[49] << 13; - sr = sr >> 3 | xmc[50] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[51] << 13; - sr = sr >> 4; - *c = sr >> 8; - s->frame_chain = *c; - } - else { - uword sr; - - sr = 0; - sr = sr >> 4 | s->frame_chain << 12; - sr = sr >> 6 | LARc[0] << 10; - *c++ = sr >> 6; - sr = sr >> 6 | LARc[1] << 10; - *c++ = sr >> 8; - sr = sr >> 5 | LARc[2] << 11; - sr = sr >> 5 | LARc[3] << 11; - *c++ = sr >> 6; - sr = sr >> 4 | LARc[4] << 12; - sr = sr >> 4 | LARc[5] << 12; - *c++ = sr >> 6; - sr = sr >> 3 | LARc[6] << 13; - sr = sr >> 3 | LARc[7] << 13; - *c++ = sr >> 8; - sr = sr >> 7 | Nc[0] << 9; - sr = sr >> 2 | bc[0] << 14; - *c++ = sr >> 7; - sr = sr >> 2 | Mc[0] << 14; - sr = sr >> 6 | xmaxc[0] << 10; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[0] << 13; - sr = sr >> 3 | xmc[1] << 13; - sr = sr >> 3 | xmc[2] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[3] << 13; - sr = sr >> 3 | xmc[4] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[5] << 13; - sr = sr >> 3 | xmc[6] << 13; - sr = sr >> 3 | xmc[7] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[8] << 13; - sr = sr >> 3 | xmc[9] << 13; - sr = sr >> 3 | xmc[10] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[11] << 13; - sr = sr >> 3 | xmc[12] << 13; - *c++ = sr >> 8; - sr = sr >> 7 | Nc[1] << 9; - sr = sr >> 2 | bc[1] << 14; - *c++ = sr >> 7; - sr = sr >> 2 | Mc[1] << 14; - sr = sr >> 6 | xmaxc[1] << 10; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[13] << 13; - sr = sr >> 3 | xmc[14] << 13; - sr = sr >> 3 | xmc[15] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[16] << 13; - sr = sr >> 3 | xmc[17] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[18] << 13; - sr = sr >> 3 | xmc[19] << 13; - sr = sr >> 3 | xmc[20] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[21] << 13; - sr = sr >> 3 | xmc[22] << 13; - sr = sr >> 3 | xmc[23] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[24] << 13; - sr = sr >> 3 | xmc[25] << 13; - *c++ = sr >> 8; - sr = sr >> 7 | Nc[2] << 9; - sr = sr >> 2 | bc[2] << 14; - *c++ = sr >> 7; - sr = sr >> 2 | Mc[2] << 14; - sr = sr >> 6 | xmaxc[2] << 10; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[26] << 13; - sr = sr >> 3 | xmc[27] << 13; - sr = sr >> 3 | xmc[28] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[29] << 13; - sr = sr >> 3 | xmc[30] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[31] << 13; - sr = sr >> 3 | xmc[32] << 13; - sr = sr >> 3 | xmc[33] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[34] << 13; - sr = sr >> 3 | xmc[35] << 13; - sr = sr >> 3 | xmc[36] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[37] << 13; - sr = sr >> 3 | xmc[38] << 13; - *c++ = sr >> 8; - sr = sr >> 7 | Nc[3] << 9; - sr = sr >> 2 | bc[3] << 14; - *c++ = sr >> 7; - sr = sr >> 2 | Mc[3] << 14; - sr = sr >> 6 | xmaxc[3] << 10; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[39] << 13; - sr = sr >> 3 | xmc[40] << 13; - sr = sr >> 3 | xmc[41] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[42] << 13; - sr = sr >> 3 | xmc[43] << 13; - *c++ = sr >> 8; - sr = sr >> 3 | xmc[44] << 13; - sr = sr >> 3 | xmc[45] << 13; - sr = sr >> 3 | xmc[46] << 13; - *c++ = sr >> 7; - sr = sr >> 3 | xmc[47] << 13; - sr = sr >> 3 | xmc[48] << 13; - sr = sr >> 3 | xmc[49] << 13; - *c++ = sr >> 6; - sr = sr >> 3 | xmc[50] << 13; - sr = sr >> 3 | xmc[51] << 13; - *c++ = sr >> 8; - } - } - - else - -#endif /* WAV49 */ - { - - *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ - | ((LARc[0] >> 2) & 0xF); - *c++ = ((LARc[0] & 0x3) << 6) - | (LARc[1] & 0x3F); - *c++ = ((LARc[2] & 0x1F) << 3) - | ((LARc[3] >> 2) & 0x7); - *c++ = ((LARc[3] & 0x3) << 6) - | ((LARc[4] & 0xF) << 2) - | ((LARc[5] >> 2) & 0x3); - *c++ = ((LARc[5] & 0x3) << 6) - | ((LARc[6] & 0x7) << 3) - | (LARc[7] & 0x7); - *c++ = ((Nc[0] & 0x7F) << 1) - | ((bc[0] >> 1) & 0x1); - *c++ = ((bc[0] & 0x1) << 7) - | ((Mc[0] & 0x3) << 5) - | ((xmaxc[0] >> 1) & 0x1F); - *c++ = ((xmaxc[0] & 0x1) << 7) - | ((xmc[0] & 0x7) << 4) - | ((xmc[1] & 0x7) << 1) - | ((xmc[2] >> 2) & 0x1); - *c++ = ((xmc[2] & 0x3) << 6) - | ((xmc[3] & 0x7) << 3) - | (xmc[4] & 0x7); - *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ - | ((xmc[6] & 0x7) << 2) - | ((xmc[7] >> 1) & 0x3); - *c++ = ((xmc[7] & 0x1) << 7) - | ((xmc[8] & 0x7) << 4) - | ((xmc[9] & 0x7) << 1) - | ((xmc[10] >> 2) & 0x1); - *c++ = ((xmc[10] & 0x3) << 6) - | ((xmc[11] & 0x7) << 3) - | (xmc[12] & 0x7); - *c++ = ((Nc[1] & 0x7F) << 1) - | ((bc[1] >> 1) & 0x1); - *c++ = ((bc[1] & 0x1) << 7) - | ((Mc[1] & 0x3) << 5) - | ((xmaxc[1] >> 1) & 0x1F); - *c++ = ((xmaxc[1] & 0x1) << 7) - | ((xmc[13] & 0x7) << 4) - | ((xmc[14] & 0x7) << 1) - | ((xmc[15] >> 2) & 0x1); - *c++ = ((xmc[15] & 0x3) << 6) - | ((xmc[16] & 0x7) << 3) - | (xmc[17] & 0x7); - *c++ = ((xmc[18] & 0x7) << 5) - | ((xmc[19] & 0x7) << 2) - | ((xmc[20] >> 1) & 0x3); - *c++ = ((xmc[20] & 0x1) << 7) - | ((xmc[21] & 0x7) << 4) - | ((xmc[22] & 0x7) << 1) - | ((xmc[23] >> 2) & 0x1); - *c++ = ((xmc[23] & 0x3) << 6) - | ((xmc[24] & 0x7) << 3) - | (xmc[25] & 0x7); - *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ - | ((bc[2] >> 1) & 0x1); - *c++ = ((bc[2] & 0x1) << 7) - | ((Mc[2] & 0x3) << 5) - | ((xmaxc[2] >> 1) & 0x1F); - *c++ = ((xmaxc[2] & 0x1) << 7) - | ((xmc[26] & 0x7) << 4) - | ((xmc[27] & 0x7) << 1) - | ((xmc[28] >> 2) & 0x1); - *c++ = ((xmc[28] & 0x3) << 6) - | ((xmc[29] & 0x7) << 3) - | (xmc[30] & 0x7); - *c++ = ((xmc[31] & 0x7) << 5) - | ((xmc[32] & 0x7) << 2) - | ((xmc[33] >> 1) & 0x3); - *c++ = ((xmc[33] & 0x1) << 7) - | ((xmc[34] & 0x7) << 4) - | ((xmc[35] & 0x7) << 1) - | ((xmc[36] >> 2) & 0x1); - *c++ = ((xmc[36] & 0x3) << 6) - | ((xmc[37] & 0x7) << 3) - | (xmc[38] & 0x7); - *c++ = ((Nc[3] & 0x7F) << 1) - | ((bc[3] >> 1) & 0x1); - *c++ = ((bc[3] & 0x1) << 7) - | ((Mc[3] & 0x3) << 5) - | ((xmaxc[3] >> 1) & 0x1F); - *c++ = ((xmaxc[3] & 0x1) << 7) - | ((xmc[39] & 0x7) << 4) - | ((xmc[40] & 0x7) << 1) - | ((xmc[41] >> 2) & 0x1); - *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ - | ((xmc[42] & 0x7) << 3) - | (xmc[43] & 0x7); - *c++ = ((xmc[44] & 0x7) << 5) - | ((xmc[45] & 0x7) << 2) - | ((xmc[46] >> 1) & 0x3); - *c++ = ((xmc[46] & 0x1) << 7) - | ((xmc[47] & 0x7) << 4) - | ((xmc[48] & 0x7) << 1) - | ((xmc[49] >> 2) & 0x1); - *c++ = ((xmc[49] & 0x3) << 6) - | ((xmc[50] & 0x7) << 3) - | (xmc[51] & 0x7); - - } -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: cfe9c43d-d97c-4216-b5e5-ccd6a25b582b -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/gsm_option.c b/Libraries/SndFile/Files/src/GSM610/gsm_option.c deleted file mode 100644 index 5c56d78df..000000000 --- a/Libraries/SndFile/Files/src/GSM610/gsm_option.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include "gsm610_priv.h" - -#include "gsm.h" - -int gsm_option (gsm r, int opt, int * val) -{ - int result = -1; - - switch (opt) { - case GSM_OPT_LTP_CUT: -#ifdef LTP_CUT - result = r->ltp_cut; - if (val) r->ltp_cut = *val; -#endif - break; - - case GSM_OPT_VERBOSE: -#ifndef NDEBUG - result = r->verbose; - if (val) r->verbose = *val; -#endif - break; - - case GSM_OPT_FAST: - -#if defined(FAST) && defined(USE_FLOAT_MUL) - result = r->fast; - if (val) r->fast = !!*val; -#endif - break; - - case GSM_OPT_FRAME_CHAIN: - -#ifdef WAV49 - result = r->frame_chain; - if (val) r->frame_chain = *val; -#endif - break; - - case GSM_OPT_FRAME_INDEX: - -#ifdef WAV49 - result = r->frame_index; - if (val) r->frame_index = *val; -#endif - break; - - case GSM_OPT_WAV49: - -#ifdef WAV49 - result = r->wav_fmt; - if (val) r->wav_fmt = !!*val; -#endif - break; - - default: - break; - } - return result; -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 963ff156-506f-4359-9145-371e9060b030 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/long_term.c b/Libraries/SndFile/Files/src/GSM610/long_term.c deleted file mode 100644 index 5179d1d09..000000000 --- a/Libraries/SndFile/Files/src/GSM610/long_term.c +++ /dev/null @@ -1,951 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include -#include - -#include "gsm610_priv.h" - -#include "gsm.h" - -/* - * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION - */ - - -/* - * This module computes the LTP gain (bc) and the LTP lag (Nc) - * for the long term analysis filter. This is done by calculating a - * maximum of the cross-correlation function between the current - * sub-segment short term residual signal d[0..39] (output of - * the short term analysis filter; for simplification the index - * of this array begins at 0 and ends at 39 for each sub-segment of the - * RPE-LTP analysis) and the previous reconstructed short term - * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be - * performed to avoid overflow. - */ - - /* The next procedure exists in six versions. First two integer - * version (if USE_FLOAT_MUL is not defined); then four floating - * point versions, twice with proper scaling (USE_FLOAT_MUL defined), - * once without (USE_FLOAT_MUL and FAST defined, and fast run-time - * option used). Every pair has first a Cut version (see the -C - * option to toast or the LTP_CUT option to gsm_option()), then the - * uncut one. (For a detailed explanation of why this is altogether - * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered - * Harmful''.) - */ - -#ifndef USE_FLOAT_MUL - -#ifdef LTP_CUT - -static void Cut_Calculation_of_the_LTP_parameters ( - - struct gsm_state * st, - - register word * d, /* [0..39] IN */ - register word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ -) -{ - register int k, lambda; - word Nc, bc; - word wt[40]; - - longword L_result; - longword L_max, L_power; - word R, S, dmax, scal, best_k; - word ltp_cut; - - register word temp, wt_k; - - /* Search of the optimum scaling of d[0..39]. - */ - dmax = 0; - for (k = 0; k <= 39; k++) { - temp = d[k]; - temp = GSM_ABS( temp ); - if (temp > dmax) { - dmax = temp; - best_k = k; - } - } - temp = 0; - if (dmax == 0) scal = 0; - else { - assert(dmax > 0); - temp = gsm_norm( (longword)dmax << 16 ); - } - if (temp > 6) scal = 0; - else scal = 6 - temp; - assert(scal >= 0); - - /* Search for the maximum cross-correlation and coding of the LTP lag - */ - L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ - wt_k = SASR_W(d[best_k], scal); - - for (lambda = 40; lambda <= 120; lambda++) { - L_result = (longword)wt_k * dp[best_k - lambda]; - if (L_result > L_max) { - Nc = lambda; - L_max = L_result; - } - } - *Nc_out = Nc; - L_max <<= 1; - - /* Rescaling of L_max - */ - assert(scal <= 100 && scal >= -100); - L_max = L_max >> (6 - scal); /* sub(6, scal) */ - - assert( Nc <= 120 && Nc >= 40); - - /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ - L_power = 0; - for (k = 0; k <= 39; k++) { - - register longword L_temp; - - L_temp = SASR_W( dp[k - Nc], 3 ); - L_power += L_temp * L_temp; - } - L_power <<= 1; /* from L_MULT */ - - /* Normalization of L_max and L_power - */ - - if (L_max <= 0) { - *bc_out = 0; - return; - } - if (L_max >= L_power) { - *bc_out = 3; - return; - } - - temp = gsm_norm( L_power ); - - R = SASR( L_max << temp, 16 ); - S = SASR( L_power << temp, 16 ); - - /* Coding of the LTP gain - */ - - /* Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; - *bc_out = bc; -} - -#endif /* LTP_CUT */ - -static void Calculation_of_the_LTP_parameters ( - register word * d, /* [0..39] IN */ - register word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ -) -{ - register int k, lambda; - word Nc, bc; - word wt[40]; - - longword L_max, L_power; - word R, S, dmax, scal; - register word temp; - - /* Search of the optimum scaling of d[0..39]. - */ - dmax = 0; - - for (k = 0; k <= 39; k++) { - temp = d[k]; - temp = GSM_ABS( temp ); - if (temp > dmax) dmax = temp; - } - - temp = 0; - if (dmax == 0) scal = 0; - else { - assert(dmax > 0); - temp = gsm_norm( (longword)dmax << 16 ); - } - - if (temp > 6) scal = 0; - else scal = 6 - temp; - - assert(scal >= 0); - - /* Initialization of a working array wt - */ - - for (k = 0; k <= 39; k++) wt[k] = SASR_W( d[k], scal ); - - /* Search for the maximum cross-correlation and coding of the LTP lag - */ - L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ - - for (lambda = 40; lambda <= 120; lambda++) { - -# undef STEP -# define STEP(k) (longword)wt[k] * dp[k - lambda] - - register longword L_result; - - L_result = STEP(0) ; L_result += STEP(1) ; - L_result += STEP(2) ; L_result += STEP(3) ; - L_result += STEP(4) ; L_result += STEP(5) ; - L_result += STEP(6) ; L_result += STEP(7) ; - L_result += STEP(8) ; L_result += STEP(9) ; - L_result += STEP(10) ; L_result += STEP(11) ; - L_result += STEP(12) ; L_result += STEP(13) ; - L_result += STEP(14) ; L_result += STEP(15) ; - L_result += STEP(16) ; L_result += STEP(17) ; - L_result += STEP(18) ; L_result += STEP(19) ; - L_result += STEP(20) ; L_result += STEP(21) ; - L_result += STEP(22) ; L_result += STEP(23) ; - L_result += STEP(24) ; L_result += STEP(25) ; - L_result += STEP(26) ; L_result += STEP(27) ; - L_result += STEP(28) ; L_result += STEP(29) ; - L_result += STEP(30) ; L_result += STEP(31) ; - L_result += STEP(32) ; L_result += STEP(33) ; - L_result += STEP(34) ; L_result += STEP(35) ; - L_result += STEP(36) ; L_result += STEP(37) ; - L_result += STEP(38) ; L_result += STEP(39) ; - - if (L_result > L_max) { - - Nc = lambda; - L_max = L_result; - } - } - - *Nc_out = Nc; - - L_max <<= 1; - - /* Rescaling of L_max - */ - assert(scal <= 100 && scal >= -100); - L_max = L_max >> (6 - scal); /* sub(6, scal) */ - - assert( Nc <= 120 && Nc >= 40); - - /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ - L_power = 0; - for (k = 0; k <= 39; k++) { - - register longword L_temp; - - L_temp = SASR_W( dp[k - Nc], 3 ); - L_power += L_temp * L_temp; - } - L_power <<= 1; /* from L_MULT */ - - /* Normalization of L_max and L_power - */ - - if (L_max <= 0) { - *bc_out = 0; - return; - } - if (L_max >= L_power) { - *bc_out = 3; - return; - } - - temp = gsm_norm( L_power ); - - R = SASR_L( L_max << temp, 16 ); - S = SASR_L( L_power << temp, 16 ); - - /* Coding of the LTP gain - */ - - /* Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; - *bc_out = bc; -} - -#else /* USE_FLOAT_MUL */ - -#ifdef LTP_CUT - -static void Cut_Calculation_of_the_LTP_parameters ( - struct gsm_state * st, /* IN */ - register word * d, /* [0..39] IN */ - register word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ -) -{ - register int k, lambda; - word Nc, bc; - word ltp_cut; - - float wt_float[40]; - float dp_float_base[120], * dp_float = dp_float_base + 120; - - longword L_max, L_power; - word R, S, dmax, scal; - register word temp; - - /* Search of the optimum scaling of d[0..39]. - */ - dmax = 0; - - for (k = 0; k <= 39; k++) { - temp = d[k]; - temp = GSM_ABS( temp ); - if (temp > dmax) dmax = temp; - } - - temp = 0; - if (dmax == 0) scal = 0; - else { - assert(dmax > 0); - temp = gsm_norm( (longword)dmax << 16 ); - } - - if (temp > 6) scal = 0; - else scal = 6 - temp; - - assert(scal >= 0); - ltp_cut = (longword)SASR_W(dmax, scal) * st->ltp_cut / 100; - - - /* Initialization of a working array wt - */ - - for (k = 0; k < 40; k++) { - register word w = SASR_W( d[k], scal ); - if (w < 0 ? w > -ltp_cut : w < ltp_cut) { - wt_float[k] = 0.0; - } - else { - wt_float[k] = w; - } - } - for (k = -120; k < 0; k++) dp_float[k] = dp[k]; - - /* Search for the maximum cross-correlation and coding of the LTP lag - */ - L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ - - for (lambda = 40; lambda <= 120; lambda += 9) { - - /* Calculate L_result for l = lambda .. lambda + 9. - */ - register float *lp = dp_float - lambda; - - register float W; - register float a = lp[-8], b = lp[-7], c = lp[-6], - d = lp[-5], e = lp[-4], f = lp[-3], - g = lp[-2], h = lp[-1]; - register float E; - register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, - S5 = 0, S6 = 0, S7 = 0, S8 = 0; - -# undef STEP -# define STEP(K, a, b, c, d, e, f, g, h) \ - if ((W = wt_float[K]) != 0.0) { \ - E = W * a; S8 += E; \ - E = W * b; S7 += E; \ - E = W * c; S6 += E; \ - E = W * d; S5 += E; \ - E = W * e; S4 += E; \ - E = W * f; S3 += E; \ - E = W * g; S2 += E; \ - E = W * h; S1 += E; \ - a = lp[K]; \ - E = W * a; S0 += E; } else (a = lp[K]) - -# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) -# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) -# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) -# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) -# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) -# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) -# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) -# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) - - STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); - STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); - - STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); - STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); - - STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); - STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); - - STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); - STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); - - STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); - STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); - - if (S0 > L_max) { L_max = S0; Nc = lambda; } - if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } - if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } - if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } - if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } - if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } - if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } - if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } - if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } - - } - *Nc_out = Nc; - - L_max <<= 1; - - /* Rescaling of L_max - */ - assert(scal <= 100 && scal >= -100); - L_max = L_max >> (6 - scal); /* sub(6, scal) */ - - assert( Nc <= 120 && Nc >= 40); - - /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ - L_power = 0; - for (k = 0; k <= 39; k++) { - - register longword L_temp; - - L_temp = SASR_W( dp[k - Nc], 3 ); - L_power += L_temp * L_temp; - } - L_power <<= 1; /* from L_MULT */ - - /* Normalization of L_max and L_power - */ - - if (L_max <= 0) { - *bc_out = 0; - return; - } - if (L_max >= L_power) { - *bc_out = 3; - return; - } - - temp = gsm_norm( L_power ); - - R = SASR( L_max << temp, 16 ); - S = SASR( L_power << temp, 16 ); - - /* Coding of the LTP gain - */ - - /* Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; - *bc_out = bc; -} - -#endif /* LTP_CUT */ - -static void Calculation_of_the_LTP_parameters ( - register word * din, /* [0..39] IN */ - register word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ -) -{ - register int k, lambda; - word Nc, bc; - - float wt_float[40]; - float dp_float_base[120], * dp_float = dp_float_base + 120; - - longword L_max, L_power; - word R, S, dmax, scal; - register word temp; - - /* Search of the optimum scaling of d[0..39]. - */ - dmax = 0; - - for (k = 0; k <= 39; k++) { - temp = din [k] ; - temp = GSM_ABS (temp) ; - if (temp > dmax) dmax = temp; - } - - temp = 0; - if (dmax == 0) scal = 0; - else { - assert(dmax > 0); - temp = gsm_norm( (longword)dmax << 16 ); - } - - if (temp > 6) scal = 0; - else scal = 6 - temp; - - assert(scal >= 0); - - /* Initialization of a working array wt - */ - - for (k = 0; k < 40; k++) wt_float[k] = SASR_W (din [k], scal) ; - for (k = -120; k < 0; k++) dp_float[k] = dp[k]; - - /* Search for the maximum cross-correlation and coding of the LTP lag - */ - L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ - - for (lambda = 40; lambda <= 120; lambda += 9) { - - /* Calculate L_result for l = lambda .. lambda + 9. - */ - register float *lp = dp_float - lambda; - - register float W; - register float a = lp[-8], b = lp[-7], c = lp[-6], - d = lp[-5], e = lp[-4], f = lp[-3], - g = lp[-2], h = lp[-1]; - register float E; - register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, - S5 = 0, S6 = 0, S7 = 0, S8 = 0; - -# undef STEP -# define STEP(K, a, b, c, d, e, f, g, h) \ - W = wt_float[K]; \ - E = W * a; S8 += E; \ - E = W * b; S7 += E; \ - E = W * c; S6 += E; \ - E = W * d; S5 += E; \ - E = W * e; S4 += E; \ - E = W * f; S3 += E; \ - E = W * g; S2 += E; \ - E = W * h; S1 += E; \ - a = lp[K]; \ - E = W * a; S0 += E - -# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) -# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) -# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) -# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) -# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) -# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) -# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) -# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) - - STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); - STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); - - STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); - STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); - - STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); - STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); - - STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); - STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); - - STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); - STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); - - if (S0 > L_max) { L_max = S0; Nc = lambda; } - if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } - if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } - if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } - if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } - if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } - if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } - if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } - if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } - } - *Nc_out = Nc; - - L_max <<= 1; - - /* Rescaling of L_max - */ - assert(scal <= 100 && scal >= -100); - L_max = L_max >> (6 - scal); /* sub(6, scal) */ - - assert( Nc <= 120 && Nc >= 40); - - /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ - L_power = 0; - for (k = 0; k <= 39; k++) { - - register longword L_temp; - - L_temp = SASR_W( dp[k - Nc], 3 ); - L_power += L_temp * L_temp; - } - L_power <<= 1; /* from L_MULT */ - - /* Normalization of L_max and L_power - */ - - if (L_max <= 0) { - *bc_out = 0; - return; - } - if (L_max >= L_power) { - *bc_out = 3; - return; - } - - temp = gsm_norm( L_power ); - - R = SASR_L ( L_max << temp, 16 ); - S = SASR_L ( L_power << temp, 16 ); - - /* Coding of the LTP gain - */ - - /* Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; - *bc_out = bc; -} - -#ifdef FAST -#ifdef LTP_CUT - -static void Cut_Fast_Calculation_of_the_LTP_parameters ( - struct gsm_state * st, /* IN */ - register word * d, /* [0..39] IN */ - register word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ -) -{ - register int k, lambda; - register float wt_float; - word Nc, bc; - word wt_max, best_k, ltp_cut; - - float dp_float_base[120], * dp_float = dp_float_base + 120; - - register float L_result, L_max, L_power; - - wt_max = 0; - - for (k = 0; k < 40; ++k) { - if ( d[k] > wt_max) wt_max = d[best_k = k]; - else if (-d[k] > wt_max) wt_max = -d[best_k = k]; - } - - assert(wt_max >= 0); - wt_float = (float)wt_max; - - for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; - - /* Search for the maximum cross-correlation and coding of the LTP lag - */ - L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ - - for (lambda = 40; lambda <= 120; lambda++) { - L_result = wt_float * dp_float[best_k - lambda]; - if (L_result > L_max) { - Nc = lambda; - L_max = L_result; - } - } - - *Nc_out = Nc; - if (L_max <= 0.) { - *bc_out = 0; - return; - } - - /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ - dp_float -= Nc; - L_power = 0; - for (k = 0; k < 40; ++k) { - register float f = dp_float[k]; - L_power += f * f; - } - - if (L_max >= L_power) { - *bc_out = 3; - return; - } - - /* Coding of the LTP gain - * Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - lambda = L_max / L_power * 32768.; - for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; - *bc_out = bc; -} - -#endif /* LTP_CUT */ - -static void Fast_Calculation_of_the_LTP_parameters ( - register word * din, /* [0..39] IN */ - register word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ -) -{ - register int k, lambda; - word Nc, bc; - - float wt_float[40]; - float dp_float_base[120], * dp_float = dp_float_base + 120; - - register float L_max, L_power; - - for (k = 0; k < 40; ++k) wt_float[k] = (float) din [k] ; - for (k = -120; k < 0; ++k) dp_float[k] = (float) dp [k] ; - - /* Search for the maximum cross-correlation and coding of the LTP lag - */ - L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ - - for (lambda = 40; lambda <= 120; lambda += 9) { - - /* Calculate L_result for l = lambda .. lambda + 9. - */ - register float *lp = dp_float - lambda; - - register float W; - register float a = lp[-8], b = lp[-7], c = lp[-6], - d = lp[-5], e = lp[-4], f = lp[-3], - g = lp[-2], h = lp[-1]; - register float E; - register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, - S5 = 0, S6 = 0, S7 = 0, S8 = 0; - -# undef STEP -# define STEP(K, a, b, c, d, e, f, g, h) \ - W = wt_float[K]; \ - E = W * a; S8 += E; \ - E = W * b; S7 += E; \ - E = W * c; S6 += E; \ - E = W * d; S5 += E; \ - E = W * e; S4 += E; \ - E = W * f; S3 += E; \ - E = W * g; S2 += E; \ - E = W * h; S1 += E; \ - a = lp[K]; \ - E = W * a; S0 += E - -# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) -# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) -# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) -# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) -# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) -# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) -# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) -# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) - - STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); - STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); - - STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); - STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); - - STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); - STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); - - STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); - STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); - - STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); - STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); - - if (S0 > L_max) { L_max = S0; Nc = lambda; } - if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } - if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } - if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } - if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } - if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } - if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } - if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } - if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } - } - *Nc_out = Nc; - - if (L_max <= 0.) { - *bc_out = 0; - return; - } - - /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ - dp_float -= Nc; - L_power = 0; - for (k = 0; k < 40; ++k) { - register float f = dp_float[k]; - L_power += f * f; - } - - if (L_max >= L_power) { - *bc_out = 3; - return; - } - - /* Coding of the LTP gain - * Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - lambda = L_max / L_power * 32768.; - for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; - *bc_out = bc; -} - -#endif /* FAST */ -#endif /* USE_FLOAT_MUL */ - - -/* 4.2.12 */ - -static void Long_term_analysis_filtering ( - word bc, /* IN */ - word Nc, /* IN */ - register word * dp, /* previous d [-120..-1] IN */ - register word * d, /* d [0..39] IN */ - register word * dpp, /* estimate [0..39] OUT */ - register word * e /* long term res. signal [0..39] OUT */ -) -/* - * In this part, we have to decode the bc parameter to compute - * the samples of the estimate dpp[0..39]. The decoding of bc needs the - * use of table 4.3b. The long term residual signal e[0..39] - * is then calculated to be fed to the RPE encoding section. - */ -{ - register int k; - -# undef STEP -# define STEP(BP) \ - for (k = 0; k <= 39; k++) { \ - dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \ - e[k] = GSM_SUB( d[k], dpp[k] ); \ - } - - switch (bc) { - case 0: STEP( 3277 ); break; - case 1: STEP( 11469 ); break; - case 2: STEP( 21299 ); break; - case 3: STEP( 32767 ); break; - } -} - -void Gsm_Long_Term_Predictor ( /* 4x for 160 samples */ - - struct gsm_state * S, - - word * d, /* [0..39] residual signal IN */ - word * dp, /* [-120..-1] d' IN */ - - word * e, /* [0..39] OUT */ - word * dpp, /* [0..39] OUT */ - word * Nc, /* correlation lag OUT */ - word * bc /* gain factor OUT */ -) -{ - assert( d ); assert( dp ); assert( e ); - assert( dpp); assert( Nc ); assert( bc ); - -#if defined(FAST) && defined(USE_FLOAT_MUL) - if (S->fast) -#if defined (LTP_CUT) - if (S->ltp_cut) - Cut_Fast_Calculation_of_the_LTP_parameters(S, - d, dp, bc, Nc); - else -#endif /* LTP_CUT */ - Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc ); - else -#endif /* FAST & USE_FLOAT_MUL */ -#ifdef LTP_CUT - if (S->ltp_cut) - Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); - else -#endif - Calculation_of_the_LTP_parameters(d, dp, bc, Nc); - - Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e ); -} - -/* 4.3.2 */ -void Gsm_Long_Term_Synthesis_Filtering ( - struct gsm_state * S, - - word Ncr, - word bcr, - register word * erp, /* [0..39] IN */ - register word * drp /* [-120..-1] IN, [-120..40] OUT */ -) -/* - * This procedure uses the bcr and Ncr parameter to realize the - * long term synthesis filtering. The decoding of bcr needs - * table 4.3b. - */ -{ - register int k; - word brp, drpp, Nr; - - /* Check the limits of Nr. - */ - Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr; - S->nrp = Nr; - assert(Nr >= 40 && Nr <= 120); - - /* Decoding of the LTP gain bcr - */ - brp = gsm_QLB[ bcr ]; - - /* Computation of the reconstructed short term residual - * signal drp[0..39] - */ - assert(brp != MIN_WORD); - - for (k = 0; k <= 39; k++) { - drpp = GSM_MULT_R( brp, drp[ k - Nr ] ); - drp[k] = GSM_ADD( erp[k], drpp ); - } - - /* - * Update of the reconstructed short term residual signal - * drp[ -1..-120 ] - */ - - for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ]; -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: b369b90d-0284-42a0-87b0-99a25bbd93ac -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/lpc.c b/Libraries/SndFile/Files/src/GSM610/lpc.c deleted file mode 100644 index 0a879f354..000000000 --- a/Libraries/SndFile/Files/src/GSM610/lpc.c +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include -#include - -#include "gsm610_priv.h" - -#include "gsm.h" - -/* - * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION - */ - -/* 4.2.4 */ - - -static void Autocorrelation ( - word * s, /* [0..159] IN/OUT */ - longword * L_ACF) /* [0..8] OUT */ -/* - * The goal is to compute the array L_ACF[k]. The signal s[i] must - * be scaled in order to avoid an overflow situation. - */ -{ - register int k, i; - - word temp, smax, scalauto; - -#ifdef USE_FLOAT_MUL - float float_s[160]; -#endif - - /* Dynamic scaling of the array s[0..159] - */ - - /* Search for the maximum. - */ - smax = 0; - for (k = 0; k <= 159; k++) { - temp = GSM_ABS( s[k] ); - if (temp > smax) smax = temp; - } - - /* Computation of the scaling factor. - */ - if (smax == 0) scalauto = 0; - else { - assert(smax > 0); - scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */ - } - - /* Scaling of the array s[0...159] - */ - - if (scalauto > 0) { - -# ifdef USE_FLOAT_MUL -# define SCALE(n) \ - case n: for (k = 0; k <= 159; k++) \ - float_s[k] = (float) \ - (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\ - break; -# else -# define SCALE(n) \ - case n: for (k = 0; k <= 159; k++) \ - s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\ - break; -# endif /* USE_FLOAT_MUL */ - - switch (scalauto) { - SCALE(1) - SCALE(2) - SCALE(3) - SCALE(4) - } -# undef SCALE - } -# ifdef USE_FLOAT_MUL - else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k]; -# endif - - /* Compute the L_ACF[..]. - */ - { -# ifdef USE_FLOAT_MUL - register float * sp = float_s; - register float sl = *sp; - -# define STEP(k) L_ACF[k] += (longword)(sl * sp[ -(k) ]); -# else - word * sp = s; - word sl = *sp; - -# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]); -# endif - -# define NEXTI sl = *++sp - - - for (k = 9; k--; L_ACF[k] = 0) ; - - STEP (0); - NEXTI; - STEP(0); STEP(1); - NEXTI; - STEP(0); STEP(1); STEP(2); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); - - for (i = 8; i <= 159; i++) { - - NEXTI; - - STEP(0); - STEP(1); STEP(2); STEP(3); STEP(4); - STEP(5); STEP(6); STEP(7); STEP(8); - } - - for (k = 9; k--; L_ACF[k] <<= 1) ; - - } - /* Rescaling of the array s[0..159] - */ - if (scalauto > 0) { - assert(scalauto <= 4); - for (k = 160; k--; *s++ <<= scalauto) ; - } -} - -#if defined(USE_FLOAT_MUL) && defined(FAST) - -static void Fast_Autocorrelation ( - word * s, /* [0..159] IN/OUT */ - longword * L_ACF) /* [0..8] OUT */ -{ - register int k, i; - float f_L_ACF[9]; - float scale; - - float s_f[160]; - register float *sf = s_f; - - for (i = 0; i < 160; ++i) sf[i] = s[i]; - for (k = 0; k <= 8; k++) { - register float L_temp2 = 0; - register float *sfl = sf - k; - for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i]; - f_L_ACF[k] = L_temp2; - } - scale = MAX_LONGWORD / f_L_ACF[0]; - - for (k = 0; k <= 8; k++) { - L_ACF[k] = f_L_ACF[k] * scale; - } -} -#endif /* defined (USE_FLOAT_MUL) && defined (FAST) */ - -/* 4.2.5 */ - -static void Reflection_coefficients ( - longword * L_ACF, /* 0...8 IN */ - register word * r /* 0...7 OUT */ -) -{ - register int i, m, n; - register word temp; - word ACF[9]; /* 0..8 */ - word P[ 9]; /* 0..8 */ - word K[ 9]; /* 2..8 */ - - /* Schur recursion with 16 bits arithmetic. - */ - - if (L_ACF[0] == 0) { - for (i = 8; i--; *r++ = 0) ; - return; - } - - assert( L_ACF[0] != 0 ); - temp = gsm_norm( L_ACF[0] ); - - assert(temp >= 0 && temp < 32); - - /* ? overflow ? */ - for (i = 0; i <= 8; i++) ACF[i] = SASR_L( L_ACF[i] << temp, 16 ); - - /* Initialize array P[..] and K[..] for the recursion. - */ - - for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ]; - for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ]; - - /* Compute reflection coefficients - */ - for (n = 1; n <= 8; n++, r++) { - - temp = P[1]; - temp = GSM_ABS(temp); - if (P[0] < temp) { - for (i = n; i <= 8; i++) *r++ = 0; - return; - } - - *r = gsm_div( temp, P[0] ); - - assert(*r >= 0); - if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */ - assert (*r != MIN_WORD); - if (n == 8) return; - - /* Schur recursion - */ - temp = GSM_MULT_R( P[1], *r ); - P[0] = GSM_ADD( P[0], temp ); - - for (m = 1; m <= 8 - n; m++) { - temp = GSM_MULT_R( K[ m ], *r ); - P[m] = GSM_ADD( P[ m+1 ], temp ); - - temp = GSM_MULT_R( P[ m+1 ], *r ); - K[m] = GSM_ADD( K[ m ], temp ); - } - } -} - -/* 4.2.6 */ - -static void Transformation_to_Log_Area_Ratios ( - register word * r /* 0..7 IN/OUT */ -) -/* - * The following scaling for r[..] and LAR[..] has been used: - * - * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1. - * LAR[..] = integer( real_LAR[..] * 16384 ); - * with -1.625 <= real_LAR <= 1.625 - */ -{ - register word temp; - register int i; - - - /* Computation of the LAR[0..7] from the r[0..7] - */ - for (i = 1; i <= 8; i++, r++) { - - temp = *r; - temp = GSM_ABS(temp); - assert(temp >= 0); - - if (temp < 22118) { - temp >>= 1; - } else if (temp < 31130) { - assert( temp >= 11059 ); - temp -= 11059; - } else { - assert( temp >= 26112 ); - temp -= 26112; - temp <<= 2; - } - - *r = *r < 0 ? -temp : temp; - assert( *r != MIN_WORD ); - } -} - -/* 4.2.7 */ - -static void Quantization_and_coding ( - register word * LAR /* [0..7] IN/OUT */ -) -{ - register word temp; - - /* This procedure needs four tables; the following equations - * give the optimum scaling for the constants: - * - * A[0..7] = integer( real_A[0..7] * 1024 ) - * B[0..7] = integer( real_B[0..7] * 512 ) - * MAC[0..7] = maximum of the LARc[0..7] - * MIC[0..7] = minimum of the LARc[0..7] - */ - -# undef STEP -# define STEP( A, B, MAC, MIC ) \ - temp = GSM_MULT( A, *LAR ); \ - temp = GSM_ADD( temp, B ); \ - temp = GSM_ADD( temp, 256 ); \ - temp = SASR_W( temp, 9 ); \ - *LAR = temp>MAC ? MAC - MIC : (tempfast) Fast_Autocorrelation (s, L_ACF ); - else -#endif - Autocorrelation (s, L_ACF ); - Reflection_coefficients (L_ACF, LARc ); - Transformation_to_Log_Area_Ratios (LARc); - Quantization_and_coding (LARc); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 63146664-a002-4e1e-8b7b-f0cc8a6a53da -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/preprocess.c b/Libraries/SndFile/Files/src/GSM610/preprocess.c deleted file mode 100644 index d1b473d69..000000000 --- a/Libraries/SndFile/Files/src/GSM610/preprocess.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include -#include - -#include "gsm610_priv.h" - -#include "gsm.h" - -/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION - * - * After A-law to linear conversion (or directly from the - * Ato D converter) the following scaling is assumed for - * input to the RPE-LTP algorithm: - * - * in: 0.1.....................12 - * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.* - * - * Where S is the sign bit, v a valid bit, and * a "don't care" bit. - * The original signal is called sop[..] - * - * out: 0.1................... 12 - * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 - */ - - -void Gsm_Preprocess ( - struct gsm_state * S, - word * s, - word * so ) /* [0..159] IN/OUT */ -{ - - word z1 = S->z1; - longword L_z2 = S->L_z2; - word mp = S->mp; - - word s1; - longword L_s2; - - longword L_temp; - - word msp, lsp; - word SO; - - register int k = 160; - - while (k--) { - - /* 4.2.1 Downscaling of the input signal - */ - SO = SASR_W( *s, 3 ) << 2; - s++; - - assert (SO >= -0x4000); /* downscaled by */ - assert (SO <= 0x3FFC); /* previous routine. */ - - - /* 4.2.2 Offset compensation - * - * This part implements a high-pass filter and requires extended - * arithmetic precision for the recursive part of this filter. - * The input of this procedure is the array so[0...159] and the - * output the array sof[ 0...159 ]. - */ - /* Compute the non-recursive part - */ - - s1 = SO - z1; /* s1 = gsm_sub( *so, z1 ); */ - z1 = SO; - - assert(s1 != MIN_WORD); - - /* Compute the recursive part - */ - L_s2 = s1; - L_s2 <<= 15; - - /* Execution of a 31 bv 16 bits multiplication - */ - - msp = SASR_L( L_z2, 15 ); - lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */ - - L_s2 += GSM_MULT_R( lsp, 32735 ); - L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ - L_z2 = GSM_L_ADD( L_temp, L_s2 ); - - /* Compute sof[k] with rounding - */ - L_temp = GSM_L_ADD( L_z2, 16384 ); - - /* 4.2.3 Preemphasis - */ - - msp = GSM_MULT_R( mp, -28180 ); - mp = SASR_L( L_temp, 15 ); - *so++ = GSM_ADD( mp, msp ); - } - - S->z1 = z1; - S->L_z2 = L_z2; - S->mp = mp; -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: b760b0d9-3a05-4da3-9dc9-441ffb905d87 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/rpe.c b/Libraries/SndFile/Files/src/GSM610/rpe.c deleted file mode 100644 index 1d91f38be..000000000 --- a/Libraries/SndFile/Files/src/GSM610/rpe.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include -#include - -#include "gsm610_priv.h" - -#include "gsm.h" - -/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION - */ - -/* 4.2.13 */ - -static void Weighting_filter ( - register word * e, /* signal [-5..0.39.44] IN */ - word * x /* signal [0..39] OUT */ -) -/* - * The coefficients of the weighting filter are stored in a table - * (see table 4.4). The following scaling is used: - * - * H[0..10] = integer( real_H[ 0..10] * 8192 ); - */ -{ - /* word wt[ 50 ]; */ - - register longword L_result; - register int k /* , i */ ; - - /* Initialization of a temporary working array wt[0...49] - */ - - /* for (k = 0; k <= 4; k++) wt[k] = 0; - * for (k = 5; k <= 44; k++) wt[k] = *e++; - * for (k = 45; k <= 49; k++) wt[k] = 0; - * - * (e[-5..-1] and e[40..44] are allocated by the caller, - * are initially zero and are not written anywhere.) - */ - e -= 5; - - /* Compute the signal x[0..39] - */ - for (k = 0; k <= 39; k++) { - - L_result = 8192 >> 1; - - /* for (i = 0; i <= 10; i++) { - * L_temp = GSM_L_MULT( wt[k+i], gsm_H[i] ); - * L_result = GSM_L_ADD( L_result, L_temp ); - * } - */ - -#undef STEP -#define STEP( i, H ) (e[ k + i ] * (longword)H) - - /* Every one of these multiplications is done twice -- - * but I don't see an elegant way to optimize this. - * Do you? - */ - -#ifdef STUPID_COMPILER - L_result += STEP( 0, -134 ) ; - L_result += STEP( 1, -374 ) ; - /* + STEP( 2, 0 ) */ - L_result += STEP( 3, 2054 ) ; - L_result += STEP( 4, 5741 ) ; - L_result += STEP( 5, 8192 ) ; - L_result += STEP( 6, 5741 ) ; - L_result += STEP( 7, 2054 ) ; - /* + STEP( 8, 0 ) */ - L_result += STEP( 9, -374 ) ; - L_result += STEP( 10, -134 ) ; -#else - L_result += - STEP( 0, -134 ) - + STEP( 1, -374 ) - /* + STEP( 2, 0 ) */ - + STEP( 3, 2054 ) - + STEP( 4, 5741 ) - + STEP( 5, 8192 ) - + STEP( 6, 5741 ) - + STEP( 7, 2054 ) - /* + STEP( 8, 0 ) */ - + STEP( 9, -374 ) - + STEP(10, -134 ) - ; -#endif - - /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *) - * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) - * - * x[k] = SASR( L_result, 16 ); - */ - - /* 2 adds vs. >>16 => 14, minus one shift to compensate for - * those we lost when replacing L_MULT by '*'. - */ - - L_result = SASR_L( L_result, 13 ); - x[k] = ( L_result < MIN_WORD ? MIN_WORD - : (L_result > MAX_WORD ? MAX_WORD : L_result )); - } -} - -/* 4.2.14 */ - -static void RPE_grid_selection ( - word * x, /* [0..39] IN */ - word * xM, /* [0..12] OUT */ - word * Mc_out /* OUT */ -) -/* - * The signal x[0..39] is used to select the RPE grid which is - * represented by Mc. - */ -{ - /* register word temp1; */ - register int /* m, */ i; - register longword L_result, L_temp; - longword EM; /* xxx should be L_EM? */ - word Mc; - - longword L_common_0_3; - - EM = 0; - Mc = 0; - - /* for (m = 0; m <= 3; m++) { - * L_result = 0; - * - * - * for (i = 0; i <= 12; i++) { - * - * temp1 = SASR_W( x[m + 3*i], 2 ); - * - * assert(temp1 != MIN_WORD); - * - * L_temp = GSM_L_MULT( temp1, temp1 ); - * L_result = GSM_L_ADD( L_temp, L_result ); - * } - * - * if (L_result > EM) { - * Mc = m; - * EM = L_result; - * } - * } - */ - -#undef STEP -#define STEP( m, i ) L_temp = SASR_W( x[m + 3 * i], 2 ); \ - L_result += L_temp * L_temp; - - /* common part of 0 and 3 */ - - L_result = 0; - STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 ); - STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 ); - STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12); - L_common_0_3 = L_result; - - /* i = 0 */ - - STEP( 0, 0 ); - L_result <<= 1; /* implicit in L_MULT */ - EM = L_result; - - /* i = 1 */ - - L_result = 0; - STEP( 1, 0 ); - STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 ); - STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 ); - STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12); - L_result <<= 1; - if (L_result > EM) { - Mc = 1; - EM = L_result; - } - - /* i = 2 */ - - L_result = 0; - STEP( 2, 0 ); - STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 ); - STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 ); - STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12); - L_result <<= 1; - if (L_result > EM) { - Mc = 2; - EM = L_result; - } - - /* i = 3 */ - - L_result = L_common_0_3; - STEP( 3, 12 ); - L_result <<= 1; - if (L_result > EM) { - Mc = 3; - EM = L_result; - } - - /**/ - - /* Down-sampling by a factor 3 to get the selected xM[0..12] - * RPE sequence. - */ - for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i]; - *Mc_out = Mc; -} - -/* 4.12.15 */ - -static void APCM_quantization_xmaxc_to_exp_mant ( - word xmaxc, /* IN */ - word * expon_out, /* OUT */ - word * mant_out ) /* OUT */ -{ - word expon, mant; - - /* Compute expononent and mantissa of the decoded version of xmaxc - */ - - expon = 0; - if (xmaxc > 15) expon = SASR_W(xmaxc, 3) - 1; - mant = xmaxc - (expon << 3); - - if (mant == 0) { - expon = -4; - mant = 7; - } - else { - while (mant <= 7) { - mant = mant << 1 | 1; - expon--; - } - mant -= 8; - } - - assert( expon >= -4 && expon <= 6 ); - assert( mant >= 0 && mant <= 7 ); - - *expon_out = expon; - *mant_out = mant; -} - -static void APCM_quantization ( - word * xM, /* [0..12] IN */ - word * xMc, /* [0..12] OUT */ - word * mant_out, /* OUT */ - word * expon_out, /* OUT */ - word * xmaxc_out /* OUT */ -) -{ - int i, itest; - - word xmax, xmaxc, temp, temp1, temp2; - word expon, mant; - - - /* Find the maximum absolute value xmax of xM[0..12]. - */ - - xmax = 0; - for (i = 0; i <= 12; i++) { - temp = xM[i]; - temp = GSM_ABS(temp); - if (temp > xmax) xmax = temp; - } - - /* Qantizing and coding of xmax to get xmaxc. - */ - - expon = 0; - temp = SASR_W( xmax, 9 ); - itest = 0; - - for (i = 0; i <= 5; i++) { - - itest |= (temp <= 0); - temp = SASR_W( temp, 1 ); - - assert(expon <= 5); - if (itest == 0) expon++; /* expon = add (expon, 1) */ - } - - assert(expon <= 6 && expon >= 0); - temp = expon + 5; - - assert(temp <= 11 && temp >= 0); - xmaxc = gsm_add( SASR_W(xmax, temp), (word) (expon << 3) ); - - /* Quantizing and coding of the xM[0..12] RPE sequence - * to get the xMc[0..12] - */ - - APCM_quantization_xmaxc_to_exp_mant( xmaxc, &expon, &mant ); - - /* This computation uses the fact that the decoded version of xmaxc - * can be calculated by using the expononent and the mantissa part of - * xmaxc (logarithmic table). - * So, this method avoids any division and uses only a scaling - * of the RPE samples by a function of the expononent. A direct - * multiplication by the inverse of the mantissa (NRFAC[0..7] - * found in table 4.5) gives the 3 bit coded version xMc[0..12] - * of the RPE samples. - */ - - - /* Direct computation of xMc[0..12] using table 4.5 - */ - - assert( expon <= 4096 && expon >= -4096); - assert( mant >= 0 && mant <= 7 ); - - temp1 = 6 - expon; /* normalization by the expononent */ - temp2 = gsm_NRFAC[ mant ]; /* inverse mantissa */ - - for (i = 0; i <= 12; i++) { - - assert(temp1 >= 0 && temp1 < 16); - - temp = xM[i] << temp1; - temp = GSM_MULT( temp, temp2 ); - temp = SASR_W(temp, 12); - xMc[i] = temp + 4; /* see note below */ - } - - /* NOTE: This equation is used to make all the xMc[i] positive. - */ - - *mant_out = mant; - *expon_out = expon; - *xmaxc_out = xmaxc; -} - -/* 4.2.16 */ - -static void APCM_inverse_quantization ( - register word * xMc, /* [0..12] IN */ - word mant, - word expon, - register word * xMp) /* [0..12] OUT */ -/* - * This part is for decoding the RPE sequence of coded xMc[0..12] - * samples to obtain the xMp[0..12] array. Table 4.6 is used to get - * the mantissa of xmaxc (FAC[0..7]). - */ -{ - int i; - word temp, temp1, temp2, temp3; - - assert( mant >= 0 && mant <= 7 ); - - temp1 = gsm_FAC[ mant ]; /* see 4.2-15 for mant */ - temp2 = gsm_sub( 6, expon ); /* see 4.2-15 for exp */ - temp3 = gsm_asl( 1, gsm_sub( temp2, 1 )); - - for (i = 13; i--;) { - - assert( *xMc <= 7 && *xMc >= 0 ); /* 3 bit unsigned */ - - /* temp = gsm_sub( *xMc++ << 1, 7 ); */ - temp = (*xMc++ << 1) - 7; /* restore sign */ - assert( temp <= 7 && temp >= -7 ); /* 4 bit signed */ - - temp <<= 12; /* 16 bit signed */ - temp = GSM_MULT_R( temp1, temp ); - temp = GSM_ADD( temp, temp3 ); - *xMp++ = gsm_asr( temp, temp2 ); - } -} - -/* 4.2.17 */ - -static void RPE_grid_positioning ( - word Mc, /* grid position IN */ - register word * xMp, /* [0..12] IN */ - register word * ep /* [0..39] OUT */ -) -/* - * This procedure computes the reconstructed long term residual signal - * ep[0..39] for the LTP analysis filter. The inputs are the Mc - * which is the grid position selection and the xMp[0..12] decoded - * RPE samples which are upsampled by a factor of 3 by inserting zero - * values. - */ -{ - int i = 13; - - assert(0 <= Mc && Mc <= 3); - - switch (Mc) { - case 3: *ep++ = 0; - case 2: do { - *ep++ = 0; - case 1: *ep++ = 0; - case 0: *ep++ = *xMp++; - } while (--i); - } - while (++Mc < 4) *ep++ = 0; - - /* - - int i, k; - for (k = 0; k <= 39; k++) ep[k] = 0; - for (i = 0; i <= 12; i++) { - ep[ Mc + (3*i) ] = xMp[i]; - } - */ -} - -/* 4.2.18 */ - -/* This procedure adds the reconstructed long term residual signal - * ep[0..39] to the estimated signal dpp[0..39] from the long term - * analysis filter to compute the reconstructed short term residual - * signal dp[-40..-1]; also the reconstructed short term residual - * array dp[-120..-41] is updated. - */ - -#if 0 /* Has been inlined in code.c */ -void Gsm_Update_of_reconstructed_short_time_residual_signal ( - word * dpp, /* [0...39] IN */ - word * ep, /* [0...39] IN */ - word * dp) /* [-120...-1] IN/OUT */ -{ - int k; - - for (k = 0; k <= 79; k++) - dp[ -120 + k ] = dp[ -80 + k ]; - - for (k = 0; k <= 39; k++) - dp[ -40 + k ] = gsm_add( ep[k], dpp[k] ); -} -#endif /* Has been inlined in code.c */ - -void Gsm_RPE_Encoding ( - /*-struct gsm_state * S,-*/ - - word * e, /* -5..-1][0..39][40..44 IN/OUT */ - word * xmaxc, /* OUT */ - word * Mc, /* OUT */ - word * xMc) /* [0..12] OUT */ -{ - word x[40]; - word xM[13], xMp[13]; - word mant, expon; - - Weighting_filter(e, x); - RPE_grid_selection(x, xM, Mc); - - APCM_quantization( xM, xMc, &mant, &expon, xmaxc); - APCM_inverse_quantization( xMc, mant, expon, xMp); - - RPE_grid_positioning( *Mc, xMp, e ); - -} - -void Gsm_RPE_Decoding ( - /*-struct gsm_state * S,-*/ - - word xmaxcr, - word Mcr, - word * xMcr, /* [0..12], 3 bits IN */ - word * erp /* [0..39] OUT */ -) -{ - word expon, mant; - word xMp[ 13 ]; - - APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &expon, &mant ); - APCM_inverse_quantization( xMcr, mant, expon, xMp ); - RPE_grid_positioning( Mcr, xMp, erp ); - -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 82005b9e-1560-4e94-9ddb-00cb14867295 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/short_term.c b/Libraries/SndFile/Files/src/GSM610/short_term.c deleted file mode 100644 index 0174b0523..000000000 --- a/Libraries/SndFile/Files/src/GSM610/short_term.c +++ /dev/null @@ -1,427 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -#include -#include - -#include "gsm610_priv.h" - -#include "gsm.h" - -/* - * SHORT TERM ANALYSIS FILTERING SECTION - */ - -/* 4.2.8 */ - -static void Decoding_of_the_coded_Log_Area_Ratios ( - word * LARc, /* coded log area ratio [0..7] IN */ - word * LARpp) /* out: decoded .. */ -{ - register word temp1 /* , temp2 */; - - /* This procedure requires for efficient implementation - * two tables. - * - * INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) - * MIC[1..8] = minimum value of the LARc[1..8] - */ - - /* Compute the LARpp[1..8] - */ - - /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) { - * - * temp1 = GSM_ADD( *LARc, *MIC ) << 10; - * temp2 = *B << 1; - * temp1 = GSM_SUB( temp1, temp2 ); - * - * assert(*INVA != MIN_WORD); - * - * temp1 = GSM_MULT_R( *INVA, temp1 ); - * *LARpp = GSM_ADD( temp1, temp1 ); - * } - */ - -#undef STEP -#define STEP( B, MIC, INVA ) \ - temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ - temp1 = GSM_SUB( temp1, B << 1 ); \ - temp1 = GSM_MULT_R( INVA, temp1 ); \ - *LARpp++ = GSM_ADD( temp1, temp1 ); - - STEP( 0, -32, 13107 ); - STEP( 0, -32, 13107 ); - STEP( 2048, -16, 13107 ); - STEP( -2560, -16, 13107 ); - - STEP( 94, -8, 19223 ); - STEP( -1792, -8, 17476 ); - STEP( -341, -4, 31454 ); - STEP( -1144, -4, 29708 ); - - /* NOTE: the addition of *MIC is used to restore - * the sign of *LARc. - */ -} - -/* 4.2.9 */ -/* Computation of the quantized reflection coefficients - */ - -/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] - */ - -/* - * Within each frame of 160 analyzed speech samples the short term - * analysis and synthesis filters operate with four different sets of - * coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) - * and the actual set of decoded LARs (LARpp(j)) - * - * (Initial value: LARpp(j-1)[1..8] = 0.) - */ - -static void Coefficients_0_12 ( - register word * LARpp_j_1, - register word * LARpp_j, - register word * LARp) -{ - register int i; - - for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) { - *LARp = GSM_ADD( SASR_W( *LARpp_j_1, 2 ), SASR_W( *LARpp_j, 2 )); - *LARp = GSM_ADD( *LARp, SASR_W( *LARpp_j_1, 1)); - } -} - -static void Coefficients_13_26 ( - register word * LARpp_j_1, - register word * LARpp_j, - register word * LARp) -{ - register int i; - for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { - *LARp = GSM_ADD( SASR_W( *LARpp_j_1, 1), SASR_W( *LARpp_j, 1 )); - } -} - -static void Coefficients_27_39 ( - register word * LARpp_j_1, - register word * LARpp_j, - register word * LARp) -{ - register int i; - - for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { - *LARp = GSM_ADD( SASR_W( *LARpp_j_1, 2 ), SASR_W( *LARpp_j, 2 )); - *LARp = GSM_ADD( *LARp, SASR_W( *LARpp_j, 1 )); - } -} - - -static void Coefficients_40_159 ( - register word * LARpp_j, - register word * LARp) -{ - register int i; - - for (i = 1; i <= 8; i++, LARp++, LARpp_j++) - *LARp = *LARpp_j; -} - -/* 4.2.9.2 */ - -static void LARp_to_rp ( - register word * LARp) /* [0..7] IN/OUT */ -/* - * The input of this procedure is the interpolated LARp[0..7] array. - * The reflection coefficients, rp[i], are used in the analysis - * filter and in the synthesis filter. - */ -{ - register int i; - register word temp; - - for (i = 1; i <= 8; i++, LARp++) { - - /* temp = GSM_ABS( *LARp ); - * - * if (temp < 11059) temp <<= 1; - * else if (temp < 20070) temp += 11059; - * else temp = GSM_ADD( temp >> 2, 26112 ); - * - * *LARp = *LARp < 0 ? -temp : temp; - */ - - if (*LARp < 0) { - temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp); - *LARp = - ((temp < 11059) ? temp << 1 - : ((temp < 20070) ? temp + 11059 - : GSM_ADD( (word) (temp >> 2), (word) 26112 ))); - } else { - temp = *LARp; - *LARp = (temp < 11059) ? temp << 1 - : ((temp < 20070) ? temp + 11059 - : GSM_ADD( (word) (temp >> 2), (word) 26112 )); - } - } -} - - -/* 4.2.10 */ -static void Short_term_analysis_filtering ( - struct gsm_state * S, - register word * rp, /* [0..7] IN */ - register int k_n, /* k_end - k_start */ - register word * s /* [0..n-1] IN/OUT */ -) -/* - * This procedure computes the short term residual signal d[..] to be fed - * to the RPE-LTP loop from the s[..] signal and from the local rp[..] - * array (quantized reflection coefficients). As the call of this - * procedure can be done in many ways (see the interpolation of the LAR - * coefficient), it is assumed that the computation begins with index - * k_start (for arrays d[..] and s[..]) and stops with index k_end - * (k_start and k_end are defined in 4.2.9.1). This procedure also - * needs to keep the array u[0..7] in memory for each call. - */ -{ - register word * u = S->u; - register int i; - register word di, zzz, ui, sav, rpi; - - for (; k_n--; s++) { - - di = sav = *s; - - for (i = 0; i < 8; i++) { /* YYY */ - - ui = u[i]; - rpi = rp[i]; - u[i] = sav; - - zzz = GSM_MULT_R(rpi, di); - sav = GSM_ADD( ui, zzz); - - zzz = GSM_MULT_R(rpi, ui); - di = GSM_ADD( di, zzz ); - } - - *s = di; - } -} - -#if defined(USE_FLOAT_MUL) && defined(FAST) - -static void Fast_Short_term_analysis_filtering ( - struct gsm_state * S, - register word * rp, /* [0..7] IN */ - register int k_n, /* k_end - k_start */ - register word * s /* [0..n-1] IN/OUT */ -) -{ - register word * u = S->u; - register int i; - - float uf[8], - rpf[8]; - - register float scalef = 3.0517578125e-5; - register float sav, di, temp; - - for (i = 0; i < 8; ++i) { - uf[i] = u[i]; - rpf[i] = rp[i] * scalef; - } - for (; k_n--; s++) { - sav = di = *s; - for (i = 0; i < 8; ++i) { - register float rpfi = rpf[i]; - register float ufi = uf[i]; - - uf[i] = sav; - temp = rpfi * di + ufi; - di += rpfi * ufi; - sav = temp; - } - *s = di; - } - for (i = 0; i < 8; ++i) u[i] = uf[i]; -} -#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */ - -static void Short_term_synthesis_filtering ( - struct gsm_state * S, - register word * rrp, /* [0..7] IN */ - register int k, /* k_end - k_start */ - register word * wt, /* [0..k-1] IN */ - register word * sr /* [0..k-1] OUT */ -) -{ - register word * v = S->v; - register int i; - register word sri, tmp1, tmp2; - - while (k--) { - sri = *wt++; - for (i = 8; i--;) { - - /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) ); - */ - tmp1 = rrp[i]; - tmp2 = v[i]; - tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD - ? MAX_WORD - : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2 - + 16384) >> 15)) ; - - sri = GSM_SUB( sri, tmp2 ); - - /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) ); - */ - tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD - ? MAX_WORD - : 0x0FFFF & (( (longword)tmp1 * (longword)sri - + 16384) >> 15)) ; - - v[i+1] = GSM_ADD( v[i], tmp1); - } - *sr++ = v[0] = sri; - } -} - - -#if defined(FAST) && defined(USE_FLOAT_MUL) - -static void Fast_Short_term_synthesis_filtering ( - struct gsm_state * S, - register word * rrp, /* [0..7] IN */ - register int k, /* k_end - k_start */ - register word * wt, /* [0..k-1] IN */ - register word * sr /* [0..k-1] OUT */ -) -{ - register word * v = S->v; - register int i; - - float va[9], rrpa[8]; - register float scalef = 3.0517578125e-5, temp; - - for (i = 0; i < 8; ++i) { - va[i] = v[i]; - rrpa[i] = (float)rrp[i] * scalef; - } - while (k--) { - register float sri = *wt++; - for (i = 8; i--;) { - sri -= rrpa[i] * va[i]; - if (sri < -32768.) sri = -32768.; - else if (sri > 32767.) sri = 32767.; - - temp = va[i] + rrpa[i] * sri; - if (temp < -32768.) temp = -32768.; - else if (temp > 32767.) temp = 32767.; - va[i+1] = temp; - } - *sr++ = va[0] = sri; - } - for (i = 0; i < 9; ++i) v[i] = va[i]; -} - -#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */ - -void Gsm_Short_Term_Analysis_Filter ( - - struct gsm_state * S, - - word * LARc, /* coded log area ratio [0..7] IN */ - word * s /* signal [0..159] IN/OUT */ -) -{ - word * LARpp_j = S->LARpp[ S->j ]; - word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; - - word LARp[8]; - -#undef FILTER -#if defined(FAST) && defined(USE_FLOAT_MUL) -# define FILTER (* (S->fast \ - ? Fast_Short_term_analysis_filtering \ - : Short_term_analysis_filtering )) - -#else -# define FILTER Short_term_analysis_filtering -#endif - - Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j ); - - Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); - LARp_to_rp( LARp ); - FILTER( S, LARp, 13, s); - - Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); - LARp_to_rp( LARp ); - FILTER( S, LARp, 14, s + 13); - - Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); - LARp_to_rp( LARp ); - FILTER( S, LARp, 13, s + 27); - - Coefficients_40_159( LARpp_j, LARp); - LARp_to_rp( LARp ); - FILTER( S, LARp, 120, s + 40); -} - -void Gsm_Short_Term_Synthesis_Filter ( - struct gsm_state * S, - - word * LARcr, /* received log area ratios [0..7] IN */ - word * wt, /* received d [0..159] IN */ - - word * s /* signal s [0..159] OUT */ -) -{ - word * LARpp_j = S->LARpp[ S->j ]; - word * LARpp_j_1 = S->LARpp[ S->j ^=1 ]; - - word LARp[8]; - -#undef FILTER -#if defined(FAST) && defined(USE_FLOAT_MUL) - -# define FILTER (* (S->fast \ - ? Fast_Short_term_synthesis_filtering \ - : Short_term_synthesis_filtering )) -#else -# define FILTER Short_term_synthesis_filtering -#endif - - Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j ); - - Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); - LARp_to_rp( LARp ); - FILTER( S, LARp, 13, wt, s ); - - Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); - LARp_to_rp( LARp ); - FILTER( S, LARp, 14, wt + 13, s + 13 ); - - Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); - LARp_to_rp( LARp ); - FILTER( S, LARp, 13, wt + 27, s + 27 ); - - Coefficients_40_159( LARpp_j, LARp ); - LARp_to_rp( LARp ); - FILTER(S, LARp, 120, wt + 40, s + 40); -} -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 019ac7ba-c6dd-4540-abf0-8644b6c4a633 -*/ - diff --git a/Libraries/SndFile/Files/src/GSM610/table.c b/Libraries/SndFile/Files/src/GSM610/table.c deleted file mode 100644 index b5aa881ea..000000000 --- a/Libraries/SndFile/Files/src/GSM610/table.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ - -/* Most of these tables are inlined at their point of use. - */ - -/* 4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP - * CODER AND DECODER - * - * (Most of them inlined, so watch out.) - */ - -#define GSM_TABLE_C -#include "gsm610_priv.h" -#include "gsm.h" - -/* Table 4.1 Quantization of the Log.-Area Ratios - */ -/* i 1 2 3 4 5 6 7 8 */ -word gsm_A[8] = {20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036}; -word gsm_B[8] = { 0, 0, 2048, -2560, 94, -1792, -341, -1144}; -word gsm_MIC[8] = { -32, -32, -16, -16, -8, -8, -4, -4 }; -word gsm_MAC[8] = { 31, 31, 15, 15, 7, 7, 3, 3 }; - - -/* Table 4.2 Tabulation of 1/A[1..8] - */ -word gsm_INVA[8]={ 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708 }; - - -/* Table 4.3a Decision level of the LTP gain quantizer - */ -/* bc 0 1 2 3 */ -word gsm_DLB[4] = { 6554, 16384, 26214, 32767 }; - - -/* Table 4.3b Quantization levels of the LTP gain quantizer - */ -/* bc 0 1 2 3 */ -word gsm_QLB[4] = { 3277, 11469, 21299, 32767 }; - - -/* Table 4.4 Coefficients of the weighting filter - */ -/* i 0 1 2 3 4 5 6 7 8 9 10 */ -word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 }; - - -/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax - */ -/* i 0 1 2 3 4 5 6 7 */ -word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; - - -/* Table 4.6 Normalized direct mantissa used to compute xM/xmax - */ -/* i 0 1 2 3 4 5 6 7 */ -word gsm_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 8957c531-e6b0-4097-9202-da7ca42729ca -*/ - diff --git a/Libraries/SndFile/Files/src/Makefile b/Libraries/SndFile/Files/src/Makefile deleted file mode 100644 index 2c699b43f..000000000 --- a/Libraries/SndFile/Files/src/Makefile +++ /dev/null @@ -1,852 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# src/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -srcdir = . -top_srcdir = .. - -pkgdatadir = $(datadir)/libsndfile -pkglibdir = $(libdir)/libsndfile -pkgincludedir = $(includedir)/libsndfile -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = /usr/bin/install -c -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = powerpc-apple-darwin8.6.0 -host_triplet = powerpc-apple-darwin8.6.0 -target_triplet = powerpc-apple-darwin8.6.0 -noinst_PROGRAMS = test_endswap$(EXEEXT) test_file_io$(EXEEXT) \ - test_log_printf$(EXEEXT) -subdir = src -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/sndfile.h.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = sndfile.h -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" -libLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = -libsndfile_la_DEPENDENCIES = GSM610/libgsm.la G72x/libg72x.la \ - $(am__DEPENDENCIES_1) -am__objects_1 = sndfile.lo common.lo file_io.lo command.lo pcm.lo \ - ulaw.lo alaw.lo float32.lo double64.lo ima_adpcm.lo \ - ms_adpcm.lo gsm610.lo dwvw.lo vox_adpcm.lo interleave.lo \ - strings.lo dither.lo -am__objects_2 = aiff.lo au.lo g72x.lo avr.lo caf.lo ircam.lo \ - macbinary3.lo macos.lo mat4.lo mat5.lo nist.lo paf.lo pvf.lo \ - raw.lo svx.lo voc.lo htk.lo dwd.lo ogg.lo rx2.lo sd2.lo sds.lo \ - txw.lo wve.lo w64.lo wav_w64.lo wav.lo xi.lo flac.lo -am__objects_3 = -am_libsndfile_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) -nodist_libsndfile_la_OBJECTS = $(am__objects_3) -libsndfile_la_OBJECTS = $(am_libsndfile_la_OBJECTS) \ - $(nodist_libsndfile_la_OBJECTS) -PROGRAMS = $(noinst_PROGRAMS) -am_test_endswap_OBJECTS = test_endswap.$(OBJEXT) -test_endswap_OBJECTS = $(am_test_endswap_OBJECTS) -test_endswap_LDADD = $(LDADD) -am_test_file_io_OBJECTS = test_file_io-file_io.$(OBJEXT) \ - test_file_io-test_file_io.$(OBJEXT) -test_file_io_OBJECTS = $(am_test_file_io_OBJECTS) -test_file_io_LDADD = $(LDADD) -am_test_log_printf_OBJECTS = \ - test_log_printf-test_log_printf.$(OBJEXT) -test_log_printf_OBJECTS = $(am_test_log_printf_OBJECTS) -test_log_printf_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libsndfile_la_SOURCES) $(nodist_libsndfile_la_SOURCES) \ - $(test_endswap_SOURCES) $(test_file_io_SOURCES) \ - $(test_log_printf_SOURCES) -DIST_SOURCES = $(libsndfile_la_SOURCES) $(test_endswap_SOURCES) \ - $(test_file_io_SOURCES) $(test_log_printf_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -nodist_includeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(nodist_include_HEADERS) $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run aclocal-1.9 -ALSA_LIBS = -AMDEP_FALSE = # -AMDEP_TRUE = -AMTAR = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run tar -AR = ar -AUTOCONF = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run autoconf - -#====================================================================== -# Disable autoheader. -AUTOHEADER = echo -AUTOMAKE = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run automake-1.9 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -std=gnu99 -W -Wall -Wdeclaration-after-statement -Wstrict-prototypes -Wmissing-prototypes -Wcast-align -Wcast-qual -Wnested-externs -Wbad-function-cast -Wwrite-strings -pipe -fpascal-strings -I/Developer/Headers/FlatCarbon -COMPILER_IS_GCC = -CPP = gcc -E -CPPFLAGS = -CXX = g++ -CXXCPP = g++ -E -CXXDEPMODE = depmode=gcc3 -CXXFLAGS = -g -O2 -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -ECHO = echo -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = grep -E -ENABLE_EXPERIMENTAL_CODE = -EXEEXT = -F77 = -FFLAGS = -FLAC_LIBS = -GCC_MAJOR_VERSION = 4 -GETCONF = -HTML_BGCOLOUR = black -HTML_FGCOLOUR = white -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s -LDFLAGS = -LIBOBJS = -LIBS = -lm -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBTOOL_DEPS = ./ltmain.sh -LN_S = ln -s -LTLIBOBJS = -MAKEINFO = ${SHELL} /Users/xugg/Desktop/libsndfile-1.0.15/missing --run makeinfo -OBJEXT = o -OS_SPECIFIC_CFLAGS = -fpascal-strings -I/Developer/Headers/FlatCarbon -OS_SPECIFIC_LINKS = -framework CoreAudio -PACKAGE = libsndfile -PACKAGE_BUGREPORT = erikd@mega-nerd.com -PACKAGE_NAME = libsndfile -PACKAGE_STRING = libsndfile 1.0.15 -PACKAGE_TARNAME = libsndfile -PACKAGE_VERSION = 1.0.15 -PATH_SEPARATOR = : -PKG_CONFIG = /sw/bin/pkg-config -RANLIB = ranlib -SET_MAKE = -SF_COUNT_MAX = 0x7FFFFFFFFFFFFFFFLL -SHARED_VERSION_INFO = 1:15:0 -SHELL = /bin/sh -SHLIB_VERSION_ARG = -Wl,-exported_symbols_list -Wl,$(srcdir)/Symbols.darwin -SIZEOF_SF_COUNT_T = 8 -SQLITE3_CFLAGS = -SQLITE3_LIBS = -STRIP = strip -TYPEOF_SF_COUNT_T = off_t -VERSION = 1.0.15 -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_CXX = g++ -ac_ct_F77 = -ac_ct_GETCONF = -ac_ct_RANLIB = ranlib -ac_ct_STRIP = strip -ac_pt_PKG_CONFIG = /sw/bin/pkg-config -am__fastdepCC_FALSE = # -am__fastdepCC_TRUE = -am__fastdepCXX_FALSE = # -am__fastdepCXX_TRUE = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -autogen = no -bindir = ${exec_prefix}/bin -build = powerpc-apple-darwin8.6.0 -build_alias = -build_cpu = powerpc -build_os = darwin8.6.0 -build_vendor = apple -datadir = ${prefix}/share -exec_prefix = ${prefix} -host = powerpc-apple-darwin8.6.0 -host_alias = -host_cpu = powerpc -host_os = darwin8.6.0 -host_vendor = apple -htmldocdir = /usr/local/share/doc/libsndfile1-dev/html -includedir = ${prefix}/include -infodir = ${prefix}/info -install_sh = /Users/xugg/Desktop/libsndfile-1.0.15/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localstatedir = ${prefix}/var -mandir = ${prefix}/man -mkdir_p = $(mkinstalldirs) -oldincludedir = /usr/include -prefix = /usr/local -program_transform_name = s,x,x, -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -sysconfdir = ${prefix}/etc -target = powerpc-apple-darwin8.6.0 -target_alias = -target_cpu = powerpc -target_os = darwin8.6.0 -target_vendor = apple -SUBDIRS = GSM610 G72x -lib_LTLIBRARIES = libsndfile.la -nodist_include_HEADERS = sndfile.h -EXTRA_DIST = sndfile.h.in config.h.in test_endswap.tpl test_endswap.def \ - Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def \ - create_symbols_file.py - -noinst_HEADERS = common.h sfconfig.h sfendian.h float_cast.h wav_w64.h sf_unistd.h -COMMON = sndfile.c common.c file_io.c command.c pcm.c ulaw.c alaw.c float32.c \ - double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \ - interleave.c strings.c dither.c - -FILESPECIFIC = aiff.c au.c g72x.c avr.c caf.c ircam.c macbinary3.c macos.c \ - mat4.c mat5.c nist.c paf.c pvf.c raw.c svx.c voc.c htk.c dwd.c \ - ogg.c rx2.c sd2.c sds.c txw.c wve.c w64.c wav_w64.c wav.c xi.c \ - flac.c - - -# MinGW requires -no-undefined if a DLL is to be built. -libsndfile_la_LDFLAGS = -no-undefined -version-info 1:15:0 -Wl,-exported_symbols_list -Wl,$(srcdir)/Symbols.darwin -libsndfile_la_SOURCES = $(COMMON) $(FILESPECIFIC) $(noinst_HEADERS) -nodist_libsndfile_la_SOURCES = $(nodist_include_HEADERS) -libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la -lm $(FLAC_LIBS) -test_endswap_SOURCES = test_endswap.c -test_file_io_CFLAGS = $(AM_CFLAGS) -test_file_io_SOURCES = file_io.c test_file_io.c -test_log_printf_CFLAGS = $(AM_CFLAGS) -test_log_printf_SOURCES = test_log_printf.c -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h -$(srcdir)/config.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -sndfile.h: $(top_builddir)/config.status $(srcdir)/sndfile.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libsndfile.la: $(libsndfile_la_OBJECTS) $(libsndfile_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libsndfile_la_LDFLAGS) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -test_endswap$(EXEEXT): $(test_endswap_OBJECTS) $(test_endswap_DEPENDENCIES) - @rm -f test_endswap$(EXEEXT) - $(LINK) $(test_endswap_LDFLAGS) $(test_endswap_OBJECTS) $(test_endswap_LDADD) $(LIBS) -test_file_io$(EXEEXT): $(test_file_io_OBJECTS) $(test_file_io_DEPENDENCIES) - @rm -f test_file_io$(EXEEXT) - $(LINK) $(test_file_io_LDFLAGS) $(test_file_io_OBJECTS) $(test_file_io_LDADD) $(LIBS) -test_log_printf$(EXEEXT): $(test_log_printf_OBJECTS) $(test_log_printf_DEPENDENCIES) - @rm -f test_log_printf$(EXEEXT) - $(LINK) $(test_log_printf_LDFLAGS) $(test_log_printf_OBJECTS) $(test_log_printf_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/aiff.Plo -include ./$(DEPDIR)/alaw.Plo -include ./$(DEPDIR)/au.Plo -include ./$(DEPDIR)/avr.Plo -include ./$(DEPDIR)/caf.Plo -include ./$(DEPDIR)/command.Plo -include ./$(DEPDIR)/common.Plo -include ./$(DEPDIR)/dither.Plo -include ./$(DEPDIR)/double64.Plo -include ./$(DEPDIR)/dwd.Plo -include ./$(DEPDIR)/dwvw.Plo -include ./$(DEPDIR)/file_io.Plo -include ./$(DEPDIR)/flac.Plo -include ./$(DEPDIR)/float32.Plo -include ./$(DEPDIR)/g72x.Plo -include ./$(DEPDIR)/gsm610.Plo -include ./$(DEPDIR)/htk.Plo -include ./$(DEPDIR)/ima_adpcm.Plo -include ./$(DEPDIR)/interleave.Plo -include ./$(DEPDIR)/ircam.Plo -include ./$(DEPDIR)/macbinary3.Plo -include ./$(DEPDIR)/macos.Plo -include ./$(DEPDIR)/mat4.Plo -include ./$(DEPDIR)/mat5.Plo -include ./$(DEPDIR)/ms_adpcm.Plo -include ./$(DEPDIR)/nist.Plo -include ./$(DEPDIR)/ogg.Plo -include ./$(DEPDIR)/paf.Plo -include ./$(DEPDIR)/pcm.Plo -include ./$(DEPDIR)/pvf.Plo -include ./$(DEPDIR)/raw.Plo -include ./$(DEPDIR)/rx2.Plo -include ./$(DEPDIR)/sd2.Plo -include ./$(DEPDIR)/sds.Plo -include ./$(DEPDIR)/sndfile.Plo -include ./$(DEPDIR)/strings.Plo -include ./$(DEPDIR)/svx.Plo -include ./$(DEPDIR)/test_endswap.Po -include ./$(DEPDIR)/test_file_io-file_io.Po -include ./$(DEPDIR)/test_file_io-test_file_io.Po -include ./$(DEPDIR)/test_log_printf-test_log_printf.Po -include ./$(DEPDIR)/txw.Plo -include ./$(DEPDIR)/ulaw.Plo -include ./$(DEPDIR)/voc.Plo -include ./$(DEPDIR)/vox_adpcm.Plo -include ./$(DEPDIR)/w64.Plo -include ./$(DEPDIR)/wav.Plo -include ./$(DEPDIR)/wav_w64.Plo -include ./$(DEPDIR)/wve.Plo -include ./$(DEPDIR)/xi.Plo - -.c.o: - if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c $< - -.c.obj: - if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: - if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ - then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -# source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(LTCOMPILE) -c -o $@ $< - -test_file_io-file_io.o: file_io.c - if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-file_io.o -MD -MP -MF "$(DEPDIR)/test_file_io-file_io.Tpo" -c -o test_file_io-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c; \ - then mv -f "$(DEPDIR)/test_file_io-file_io.Tpo" "$(DEPDIR)/test_file_io-file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-file_io.Tpo"; exit 1; fi -# source='file_io.c' object='test_file_io-file_io.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c - -test_file_io-file_io.obj: file_io.c - if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-file_io.obj -MD -MP -MF "$(DEPDIR)/test_file_io-file_io.Tpo" -c -o test_file_io-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi`; \ - then mv -f "$(DEPDIR)/test_file_io-file_io.Tpo" "$(DEPDIR)/test_file_io-file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-file_io.Tpo"; exit 1; fi -# source='file_io.c' object='test_file_io-file_io.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi` - -test_file_io-test_file_io.o: test_file_io.c - if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-test_file_io.o -MD -MP -MF "$(DEPDIR)/test_file_io-test_file_io.Tpo" -c -o test_file_io-test_file_io.o `test -f 'test_file_io.c' || echo '$(srcdir)/'`test_file_io.c; \ - then mv -f "$(DEPDIR)/test_file_io-test_file_io.Tpo" "$(DEPDIR)/test_file_io-test_file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-test_file_io.Tpo"; exit 1; fi -# source='test_file_io.c' object='test_file_io-test_file_io.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-test_file_io.o `test -f 'test_file_io.c' || echo '$(srcdir)/'`test_file_io.c - -test_file_io-test_file_io.obj: test_file_io.c - if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-test_file_io.obj -MD -MP -MF "$(DEPDIR)/test_file_io-test_file_io.Tpo" -c -o test_file_io-test_file_io.obj `if test -f 'test_file_io.c'; then $(CYGPATH_W) 'test_file_io.c'; else $(CYGPATH_W) '$(srcdir)/test_file_io.c'; fi`; \ - then mv -f "$(DEPDIR)/test_file_io-test_file_io.Tpo" "$(DEPDIR)/test_file_io-test_file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-test_file_io.Tpo"; exit 1; fi -# source='test_file_io.c' object='test_file_io-test_file_io.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-test_file_io.obj `if test -f 'test_file_io.c'; then $(CYGPATH_W) 'test_file_io.c'; else $(CYGPATH_W) '$(srcdir)/test_file_io.c'; fi` - -test_log_printf-test_log_printf.o: test_log_printf.c - if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -MT test_log_printf-test_log_printf.o -MD -MP -MF "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" -c -o test_log_printf-test_log_printf.o `test -f 'test_log_printf.c' || echo '$(srcdir)/'`test_log_printf.c; \ - then mv -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" "$(DEPDIR)/test_log_printf-test_log_printf.Po"; else rm -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo"; exit 1; fi -# source='test_log_printf.c' object='test_log_printf-test_log_printf.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -c -o test_log_printf-test_log_printf.o `test -f 'test_log_printf.c' || echo '$(srcdir)/'`test_log_printf.c - -test_log_printf-test_log_printf.obj: test_log_printf.c - if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -MT test_log_printf-test_log_printf.obj -MD -MP -MF "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" -c -o test_log_printf-test_log_printf.obj `if test -f 'test_log_printf.c'; then $(CYGPATH_W) 'test_log_printf.c'; else $(CYGPATH_W) '$(srcdir)/test_log_printf.c'; fi`; \ - then mv -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" "$(DEPDIR)/test_log_printf-test_log_printf.Po"; else rm -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo"; exit 1; fi -# source='test_log_printf.c' object='test_log_printf-test_log_printf.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -c -o test_log_printf-test_log_printf.obj `if test -f 'test_log_printf.c'; then $(CYGPATH_W) 'test_log_printf.c'; else $(CYGPATH_W) '$(srcdir)/test_log_printf.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-nodist_includeHEADERS: $(nodist_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" - @list='$(nodist_include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(nodist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ - $(nodist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ - done - -uninstall-nodist_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_include_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ - rm -f "$(DESTDIR)$(includedir)/$$f"; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: install-nodist_includeHEADERS - -install-exec-am: install-libLTLIBRARIES - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-nodist_includeHEADERS - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-recursive distclean-tags distdir \ - dvi dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-nodist_includeHEADERS install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-nodist_includeHEADERS - - -test_endswap.c: test_endswap.def test_endswap.tpl - autogen --writable --source-time test_endswap.def - -genfiles : test_endswap.c Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def - -# Two test programs. -# It is not possible to place these in the tests/ directory because they -# need access to the internals of the SF_PRIVATE struct. - -check: test_endswap test_file_io test_log_printf - @echo - @echo - @echo - @echo "============================================================" - ./test_endswap - ./test_file_io - ./test_log_printf - @echo "============================================================" - @echo - @echo - @echo - -#====================================================================== -# Generate an OS specific Symbols files. This is done when the author -# builds the distribution tarball. There should be not need for the -# end user to create these files. - -Symbols.linux: create_symbols_file.py - ./create_symbols_file.py linux $(VERSION) > Symbols.linux - -Symbols.darwin: create_symbols_file.py - ./create_symbols_file.py darwin $(VERSION) > Symbols.darwin - -libsndfile.def: create_symbols_file.py - ./create_symbols_file.py win32 $(VERSION) > libsndfile.def - -cygsndfile.def: create_symbols_file.py - ./create_symbols_file.py cygwin $(VERSION) > cygsndfile.def - -# Fake dependancy to force the creation of these files. -sndfile.c : Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def - -# Dependancies. - -aiff.c au.c g72x.c ircam.c mat4.c mat5.c nist.c paf.c pvf.c : sndfile.h common.h -raw.c svx.c voc.c w64.c wav.c wav_w64.c htk.c sd2.c rx2.c txw.c : sndfile.h common.h -sds.c wve.c dwd.c ogg.c xi.c sndfile.c common.c file_io.c : sndfile.h common.h -command.c pcm.c ulaw.c alaw.c float32.c double64.c ima_adpcm.c : sndfile.h common.h -ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c interleave.c strings.c : sndfile.h common.h -dither.c : sndfile.h common.h -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Libraries/SndFile/Files/src/Makefile.am b/Libraries/SndFile/Files/src/Makefile.am deleted file mode 100644 index 5a40e112a..000000000 --- a/Libraries/SndFile/Files/src/Makefile.am +++ /dev/null @@ -1,102 +0,0 @@ -## Process this file with automake to produce Makefile.in - -SUBDIRS = GSM610 G72x - -lib_LTLIBRARIES = libsndfile.la -nodist_include_HEADERS = sndfile.h - -OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@ -OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@ - -EXTRA_DIST = sndfile.h.in config.h.in test_endswap.tpl test_endswap.def \ - Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def \ - create_symbols_file.py - -noinst_HEADERS = common.h sfconfig.h sfendian.h float_cast.h wav_w64.h sf_unistd.h - -noinst_PROGRAMS = test_endswap test_file_io test_log_printf - -COMMON = sndfile.c common.c file_io.c command.c pcm.c ulaw.c alaw.c float32.c \ - double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \ - interleave.c strings.c dither.c - -FILESPECIFIC = aiff.c au.c g72x.c avr.c caf.c ircam.c macbinary3.c macos.c \ - mat4.c mat5.c nist.c paf.c pvf.c raw.c svx.c voc.c htk.c dwd.c \ - ogg.c rx2.c sd2.c sds.c txw.c wve.c w64.c wav_w64.c wav.c xi.c \ - flac.c - -# MinGW requires -no-undefined if a DLL is to be built. -libsndfile_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @SHLIB_VERSION_ARG@ -libsndfile_la_SOURCES = $(COMMON) $(FILESPECIFIC) $(noinst_HEADERS) -nodist_libsndfile_la_SOURCES = $(nodist_include_HEADERS) -libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la -lm $(FLAC_LIBS) - -test_endswap_SOURCES = test_endswap.c - -test_file_io_CFLAGS = $(AM_CFLAGS) -test_file_io_SOURCES = file_io.c test_file_io.c - -test_log_printf_CFLAGS = $(AM_CFLAGS) -test_log_printf_SOURCES = test_log_printf.c - -test_endswap.c: test_endswap.def test_endswap.tpl - autogen --writable --source-time test_endswap.def - -genfiles : test_endswap.c Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def - -# Two test programs. -# It is not possible to place these in the tests/ directory because they -# need access to the internals of the SF_PRIVATE struct. - -check: test_endswap test_file_io test_log_printf - @echo - @echo - @echo - @echo "============================================================" - ./test_endswap - ./test_file_io - ./test_log_printf - @echo "============================================================" - @echo - @echo - @echo - -#====================================================================== -# Generate an OS specific Symbols files. This is done when the author -# builds the distribution tarball. There should be not need for the -# end user to create these files. - -Symbols.linux: create_symbols_file.py - ./create_symbols_file.py linux $(VERSION) > Symbols.linux - -Symbols.darwin: create_symbols_file.py - ./create_symbols_file.py darwin $(VERSION) > Symbols.darwin - -libsndfile.def: create_symbols_file.py - ./create_symbols_file.py win32 $(VERSION) > libsndfile.def - -cygsndfile.def: create_symbols_file.py - ./create_symbols_file.py cygwin $(VERSION) > cygsndfile.def - -# Fake dependancy to force the creation of these files. -sndfile.c : Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def - -#====================================================================== -# Disable autoheader. -AUTOHEADER=echo - -# Dependancies. - -aiff.c au.c g72x.c ircam.c mat4.c mat5.c nist.c paf.c pvf.c : sndfile.h common.h -raw.c svx.c voc.c w64.c wav.c wav_w64.c htk.c sd2.c rx2.c txw.c : sndfile.h common.h -sds.c wve.c dwd.c ogg.c xi.c sndfile.c common.c file_io.c : sndfile.h common.h -command.c pcm.c ulaw.c alaw.c float32.c double64.c ima_adpcm.c : sndfile.h common.h -ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c interleave.c strings.c : sndfile.h common.h -dither.c : sndfile.h common.h - -## Do not edit or modify anything in this comment block. -## The arch-tag line is a file identity tag for the GNU Arch -## revision control system. -## -## arch-tag: fc3511e6-4230-4bcb-9c86-f728d7a06fe7 - diff --git a/Libraries/SndFile/Files/src/Makefile.in b/Libraries/SndFile/Files/src/Makefile.in deleted file mode 100644 index 1ff715fc9..000000000 --- a/Libraries/SndFile/Files/src/Makefile.in +++ /dev/null @@ -1,852 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -noinst_PROGRAMS = test_endswap$(EXEEXT) test_file_io$(EXEEXT) \ - test_log_printf$(EXEEXT) -subdir = src -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/sndfile.h.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = sndfile.h -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" -libLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = -libsndfile_la_DEPENDENCIES = GSM610/libgsm.la G72x/libg72x.la \ - $(am__DEPENDENCIES_1) -am__objects_1 = sndfile.lo common.lo file_io.lo command.lo pcm.lo \ - ulaw.lo alaw.lo float32.lo double64.lo ima_adpcm.lo \ - ms_adpcm.lo gsm610.lo dwvw.lo vox_adpcm.lo interleave.lo \ - strings.lo dither.lo -am__objects_2 = aiff.lo au.lo g72x.lo avr.lo caf.lo ircam.lo \ - macbinary3.lo macos.lo mat4.lo mat5.lo nist.lo paf.lo pvf.lo \ - raw.lo svx.lo voc.lo htk.lo dwd.lo ogg.lo rx2.lo sd2.lo sds.lo \ - txw.lo wve.lo w64.lo wav_w64.lo wav.lo xi.lo flac.lo -am__objects_3 = -am_libsndfile_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) -nodist_libsndfile_la_OBJECTS = $(am__objects_3) -libsndfile_la_OBJECTS = $(am_libsndfile_la_OBJECTS) \ - $(nodist_libsndfile_la_OBJECTS) -PROGRAMS = $(noinst_PROGRAMS) -am_test_endswap_OBJECTS = test_endswap.$(OBJEXT) -test_endswap_OBJECTS = $(am_test_endswap_OBJECTS) -test_endswap_LDADD = $(LDADD) -am_test_file_io_OBJECTS = test_file_io-file_io.$(OBJEXT) \ - test_file_io-test_file_io.$(OBJEXT) -test_file_io_OBJECTS = $(am_test_file_io_OBJECTS) -test_file_io_LDADD = $(LDADD) -am_test_log_printf_OBJECTS = \ - test_log_printf-test_log_printf.$(OBJEXT) -test_log_printf_OBJECTS = $(am_test_log_printf_OBJECTS) -test_log_printf_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libsndfile_la_SOURCES) $(nodist_libsndfile_la_SOURCES) \ - $(test_endswap_SOURCES) $(test_file_io_SOURCES) \ - $(test_log_printf_SOURCES) -DIST_SOURCES = $(libsndfile_la_SOURCES) $(test_endswap_SOURCES) \ - $(test_file_io_SOURCES) $(test_log_printf_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -nodist_includeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(nodist_include_HEADERS) $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ - -#====================================================================== -# Disable autoheader. -AUTOHEADER = echo -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -COMPILER_IS_GCC = @COMPILER_IS_GCC@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_EXPERIMENTAL_CODE = @ENABLE_EXPERIMENTAL_CODE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FLAC_LIBS = @FLAC_LIBS@ -GCC_MAJOR_VERSION = @GCC_MAJOR_VERSION@ -GETCONF = @GETCONF@ -HTML_BGCOLOUR = @HTML_BGCOLOUR@ -HTML_FGCOLOUR = @HTML_FGCOLOUR@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBTOOL_DEPS = @LIBTOOL_DEPS@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@ -OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SF_COUNT_MAX = @SF_COUNT_MAX@ -SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ -SHELL = @SHELL@ -SHLIB_VERSION_ARG = @SHLIB_VERSION_ARG@ -SIZEOF_SF_COUNT_T = @SIZEOF_SF_COUNT_T@ -SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ -SQLITE3_LIBS = @SQLITE3_LIBS@ -STRIP = @STRIP@ -TYPEOF_SF_COUNT_T = @TYPEOF_SF_COUNT_T@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_GETCONF = @ac_ct_GETCONF@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -autogen = @autogen@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldocdir = @htmldocdir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -SUBDIRS = GSM610 G72x -lib_LTLIBRARIES = libsndfile.la -nodist_include_HEADERS = sndfile.h -EXTRA_DIST = sndfile.h.in config.h.in test_endswap.tpl test_endswap.def \ - Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def \ - create_symbols_file.py - -noinst_HEADERS = common.h sfconfig.h sfendian.h float_cast.h wav_w64.h sf_unistd.h -COMMON = sndfile.c common.c file_io.c command.c pcm.c ulaw.c alaw.c float32.c \ - double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \ - interleave.c strings.c dither.c - -FILESPECIFIC = aiff.c au.c g72x.c avr.c caf.c ircam.c macbinary3.c macos.c \ - mat4.c mat5.c nist.c paf.c pvf.c raw.c svx.c voc.c htk.c dwd.c \ - ogg.c rx2.c sd2.c sds.c txw.c wve.c w64.c wav_w64.c wav.c xi.c \ - flac.c - - -# MinGW requires -no-undefined if a DLL is to be built. -libsndfile_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @SHLIB_VERSION_ARG@ -libsndfile_la_SOURCES = $(COMMON) $(FILESPECIFIC) $(noinst_HEADERS) -nodist_libsndfile_la_SOURCES = $(nodist_include_HEADERS) -libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la -lm $(FLAC_LIBS) -test_endswap_SOURCES = test_endswap.c -test_file_io_CFLAGS = $(AM_CFLAGS) -test_file_io_SOURCES = file_io.c test_file_io.c -test_log_printf_CFLAGS = $(AM_CFLAGS) -test_log_printf_SOURCES = test_log_printf.c -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h -$(srcdir)/config.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -sndfile.h: $(top_builddir)/config.status $(srcdir)/sndfile.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libsndfile.la: $(libsndfile_la_OBJECTS) $(libsndfile_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libsndfile_la_LDFLAGS) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -test_endswap$(EXEEXT): $(test_endswap_OBJECTS) $(test_endswap_DEPENDENCIES) - @rm -f test_endswap$(EXEEXT) - $(LINK) $(test_endswap_LDFLAGS) $(test_endswap_OBJECTS) $(test_endswap_LDADD) $(LIBS) -test_file_io$(EXEEXT): $(test_file_io_OBJECTS) $(test_file_io_DEPENDENCIES) - @rm -f test_file_io$(EXEEXT) - $(LINK) $(test_file_io_LDFLAGS) $(test_file_io_OBJECTS) $(test_file_io_LDADD) $(LIBS) -test_log_printf$(EXEEXT): $(test_log_printf_OBJECTS) $(test_log_printf_DEPENDENCIES) - @rm -f test_log_printf$(EXEEXT) - $(LINK) $(test_log_printf_LDFLAGS) $(test_log_printf_OBJECTS) $(test_log_printf_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aiff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alaw.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/au.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dither.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/double64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwvw.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_io.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flac.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g72x.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm610.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htk.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ima_adpcm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interleave.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ircam.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macbinary3.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macos.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mat4.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mat5.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ms_adpcm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nist.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ogg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pvf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx2.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd2.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sds.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sndfile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strings.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_endswap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_file_io-file_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_file_io-test_file_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log_printf-test_log_printf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/txw.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ulaw.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vox_adpcm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wav.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wav_w64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wve.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xi.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -test_file_io-file_io.o: file_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-file_io.o -MD -MP -MF "$(DEPDIR)/test_file_io-file_io.Tpo" -c -o test_file_io-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test_file_io-file_io.Tpo" "$(DEPDIR)/test_file_io-file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-file_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='file_io.c' object='test_file_io-file_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c - -test_file_io-file_io.obj: file_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-file_io.obj -MD -MP -MF "$(DEPDIR)/test_file_io-file_io.Tpo" -c -o test_file_io-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test_file_io-file_io.Tpo" "$(DEPDIR)/test_file_io-file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-file_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='file_io.c' object='test_file_io-file_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi` - -test_file_io-test_file_io.o: test_file_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-test_file_io.o -MD -MP -MF "$(DEPDIR)/test_file_io-test_file_io.Tpo" -c -o test_file_io-test_file_io.o `test -f 'test_file_io.c' || echo '$(srcdir)/'`test_file_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test_file_io-test_file_io.Tpo" "$(DEPDIR)/test_file_io-test_file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-test_file_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test_file_io.c' object='test_file_io-test_file_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-test_file_io.o `test -f 'test_file_io.c' || echo '$(srcdir)/'`test_file_io.c - -test_file_io-test_file_io.obj: test_file_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -MT test_file_io-test_file_io.obj -MD -MP -MF "$(DEPDIR)/test_file_io-test_file_io.Tpo" -c -o test_file_io-test_file_io.obj `if test -f 'test_file_io.c'; then $(CYGPATH_W) 'test_file_io.c'; else $(CYGPATH_W) '$(srcdir)/test_file_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test_file_io-test_file_io.Tpo" "$(DEPDIR)/test_file_io-test_file_io.Po"; else rm -f "$(DEPDIR)/test_file_io-test_file_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test_file_io.c' object='test_file_io-test_file_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_file_io_CFLAGS) $(CFLAGS) -c -o test_file_io-test_file_io.obj `if test -f 'test_file_io.c'; then $(CYGPATH_W) 'test_file_io.c'; else $(CYGPATH_W) '$(srcdir)/test_file_io.c'; fi` - -test_log_printf-test_log_printf.o: test_log_printf.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -MT test_log_printf-test_log_printf.o -MD -MP -MF "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" -c -o test_log_printf-test_log_printf.o `test -f 'test_log_printf.c' || echo '$(srcdir)/'`test_log_printf.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" "$(DEPDIR)/test_log_printf-test_log_printf.Po"; else rm -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test_log_printf.c' object='test_log_printf-test_log_printf.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -c -o test_log_printf-test_log_printf.o `test -f 'test_log_printf.c' || echo '$(srcdir)/'`test_log_printf.c - -test_log_printf-test_log_printf.obj: test_log_printf.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -MT test_log_printf-test_log_printf.obj -MD -MP -MF "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" -c -o test_log_printf-test_log_printf.obj `if test -f 'test_log_printf.c'; then $(CYGPATH_W) 'test_log_printf.c'; else $(CYGPATH_W) '$(srcdir)/test_log_printf.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo" "$(DEPDIR)/test_log_printf-test_log_printf.Po"; else rm -f "$(DEPDIR)/test_log_printf-test_log_printf.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test_log_printf.c' object='test_log_printf-test_log_printf.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_log_printf_CFLAGS) $(CFLAGS) -c -o test_log_printf-test_log_printf.obj `if test -f 'test_log_printf.c'; then $(CYGPATH_W) 'test_log_printf.c'; else $(CYGPATH_W) '$(srcdir)/test_log_printf.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-nodist_includeHEADERS: $(nodist_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" - @list='$(nodist_include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(nodist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ - $(nodist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ - done - -uninstall-nodist_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_include_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ - rm -f "$(DESTDIR)$(includedir)/$$f"; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: install-nodist_includeHEADERS - -install-exec-am: install-libLTLIBRARIES - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-nodist_includeHEADERS - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-recursive distclean-tags distdir \ - dvi dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-nodist_includeHEADERS install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-nodist_includeHEADERS - - -test_endswap.c: test_endswap.def test_endswap.tpl - autogen --writable --source-time test_endswap.def - -genfiles : test_endswap.c Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def - -# Two test programs. -# It is not possible to place these in the tests/ directory because they -# need access to the internals of the SF_PRIVATE struct. - -check: test_endswap test_file_io test_log_printf - @echo - @echo - @echo - @echo "============================================================" - ./test_endswap - ./test_file_io - ./test_log_printf - @echo "============================================================" - @echo - @echo - @echo - -#====================================================================== -# Generate an OS specific Symbols files. This is done when the author -# builds the distribution tarball. There should be not need for the -# end user to create these files. - -Symbols.linux: create_symbols_file.py - ./create_symbols_file.py linux $(VERSION) > Symbols.linux - -Symbols.darwin: create_symbols_file.py - ./create_symbols_file.py darwin $(VERSION) > Symbols.darwin - -libsndfile.def: create_symbols_file.py - ./create_symbols_file.py win32 $(VERSION) > libsndfile.def - -cygsndfile.def: create_symbols_file.py - ./create_symbols_file.py cygwin $(VERSION) > cygsndfile.def - -# Fake dependancy to force the creation of these files. -sndfile.c : Symbols.linux Symbols.darwin libsndfile.def cygsndfile.def - -# Dependancies. - -aiff.c au.c g72x.c ircam.c mat4.c mat5.c nist.c paf.c pvf.c : sndfile.h common.h -raw.c svx.c voc.c w64.c wav.c wav_w64.c htk.c sd2.c rx2.c txw.c : sndfile.h common.h -sds.c wve.c dwd.c ogg.c xi.c sndfile.c common.c file_io.c : sndfile.h common.h -command.c pcm.c ulaw.c alaw.c float32.c double64.c ima_adpcm.c : sndfile.h common.h -ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c interleave.c strings.c : sndfile.h common.h -dither.c : sndfile.h common.h -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Libraries/SndFile/Files/src/Symbols.darwin b/Libraries/SndFile/Files/src/Symbols.darwin deleted file mode 100644 index 271e0b0c8..000000000 --- a/Libraries/SndFile/Files/src/Symbols.darwin +++ /dev/null @@ -1,36 +0,0 @@ -# Auto-generated by create_symbols_file.py - -_sf_command -_sf_open -_sf_close -_sf_seek -_sf_error -_sf_perror -_sf_error_str -_sf_error_number -_sf_format_check -_sf_read_raw -_sf_readf_short -_sf_readf_int -_sf_readf_float -_sf_readf_double -_sf_read_short -_sf_read_int -_sf_read_float -_sf_read_double -_sf_write_raw -_sf_writef_short -_sf_writef_int -_sf_writef_float -_sf_writef_double -_sf_write_short -_sf_write_int -_sf_write_float -_sf_write_double -_sf_strerror -_sf_get_string -_sf_set_string -_sf_open_fd -_sf_open_virtual -_sf_write_sync - diff --git a/Libraries/SndFile/Files/src/Symbols.linux b/Libraries/SndFile/Files/src/Symbols.linux deleted file mode 100644 index 163346f70..000000000 --- a/Libraries/SndFile/Files/src/Symbols.linux +++ /dev/null @@ -1,42 +0,0 @@ -# Auto-generated by create_symbols_file.py - -libsndfile.so.1.0 -{ - global: - sf_command ; - sf_open ; - sf_close ; - sf_seek ; - sf_error ; - sf_perror ; - sf_error_str ; - sf_error_number ; - sf_format_check ; - sf_read_raw ; - sf_readf_short ; - sf_readf_int ; - sf_readf_float ; - sf_readf_double ; - sf_read_short ; - sf_read_int ; - sf_read_float ; - sf_read_double ; - sf_write_raw ; - sf_writef_short ; - sf_writef_int ; - sf_writef_float ; - sf_writef_double ; - sf_write_short ; - sf_write_int ; - sf_write_float ; - sf_write_double ; - sf_strerror ; - sf_get_string ; - sf_set_string ; - sf_open_fd ; - sf_open_virtual ; - sf_write_sync ; - local: - * ; -} ; - diff --git a/Libraries/SndFile/Files/src/aiff.c b/Libraries/SndFile/Files/src/aiff.c deleted file mode 100644 index 24a6e318f..000000000 --- a/Libraries/SndFile/Files/src/aiff.c +++ /dev/null @@ -1,1479 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** Copyright (C) 2005 David Viens -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ - * Macros to handle big/little endian issues. - */ - -#define FORM_MARKER (MAKE_MARKER ('F', 'O', 'R', 'M')) -#define AIFF_MARKER (MAKE_MARKER ('A', 'I', 'F', 'F')) -#define AIFC_MARKER (MAKE_MARKER ('A', 'I', 'F', 'C')) -#define COMM_MARKER (MAKE_MARKER ('C', 'O', 'M', 'M')) -#define SSND_MARKER (MAKE_MARKER ('S', 'S', 'N', 'D')) -#define MARK_MARKER (MAKE_MARKER ('M', 'A', 'R', 'K')) -#define INST_MARKER (MAKE_MARKER ('I', 'N', 'S', 'T')) -#define APPL_MARKER (MAKE_MARKER ('A', 'P', 'P', 'L')) - -#define c_MARKER (MAKE_MARKER ('(', 'c', ')', ' ')) -#define NAME_MARKER (MAKE_MARKER ('N', 'A', 'M', 'E')) -#define AUTH_MARKER (MAKE_MARKER ('A', 'U', 'T', 'H')) -#define ANNO_MARKER (MAKE_MARKER ('A', 'N', 'N', 'O')) -#define COMT_MARKER (MAKE_MARKER ('C', 'O', 'M', 'T')) -#define FVER_MARKER (MAKE_MARKER ('F', 'V', 'E', 'R')) -#define SFX_MARKER (MAKE_MARKER ('S', 'F', 'X', '!')) - -#define PEAK_MARKER (MAKE_MARKER ('P', 'E', 'A', 'K')) -#define basc_MARKER (MAKE_MARKER ('b', 'a', 's', 'c')) - -/* Supported AIFC encodings.*/ -#define NONE_MARKER (MAKE_MARKER ('N', 'O', 'N', 'E')) -#define sowt_MARKER (MAKE_MARKER ('s', 'o', 'w', 't')) -#define twos_MARKER (MAKE_MARKER ('t', 'w', 'o', 's')) -#define raw_MARKER (MAKE_MARKER ('r', 'a', 'w', ' ')) -#define in32_MARKER (MAKE_MARKER ('i', 'n', '3', '2')) -#define ni32_MARKER (MAKE_MARKER ('2', '3', 'n', 'i')) - -#define fl32_MARKER (MAKE_MARKER ('f', 'l', '3', '2')) -#define FL32_MARKER (MAKE_MARKER ('F', 'L', '3', '2')) -#define fl64_MARKER (MAKE_MARKER ('f', 'l', '6', '4')) -#define FL64_MARKER (MAKE_MARKER ('F', 'L', '6', '4')) - -#define ulaw_MARKER (MAKE_MARKER ('u', 'l', 'a', 'w')) -#define ULAW_MARKER (MAKE_MARKER ('U', 'L', 'A', 'W')) -#define alaw_MARKER (MAKE_MARKER ('a', 'l', 'a', 'w')) -#define ALAW_MARKER (MAKE_MARKER ('A', 'L', 'A', 'W')) - -#define DWVW_MARKER (MAKE_MARKER ('D', 'W', 'V', 'W')) -#define GSM_MARKER (MAKE_MARKER ('G', 'S', 'M', ' ')) -#define ima4_MARKER (MAKE_MARKER ('i', 'm', 'a', '4')) - -/* Unsupported AIFC encodings.*/ - -#define MAC3_MARKER (MAKE_MARKER ('M', 'A', 'C', '3')) -#define MAC6_MARKER (MAKE_MARKER ('M', 'A', 'C', '6')) -#define ADP4_MARKER (MAKE_MARKER ('A', 'D', 'P', '4')) - -/* Predfined chunk sizes. */ -#define SIZEOF_AIFF_COMM 18 -#define SIZEOF_AIFC_COMM_MIN 22 -#define SIZEOF_AIFC_COMM 24 -#define SIZEOF_SSND_CHUNK 8 -#define SIZEOF_INST_CHUNK 20 - -/* Is it constant? */ - -/* AIFC/IMA4 defines. */ -#define AIFC_IMA4_BLOCK_LEN 34 -#define AIFC_IMA4_SAMPLES_PER_BLOCK 64 - -#define AIFF_PEAK_CHUNK_SIZE(ch) (2 * sizeof (int) + ch * (sizeof (float) + sizeof (int))) - -/*------------------------------------------------------------------------------ - * Typedefs for file chunks. - */ - -enum -{ HAVE_FORM = 0x01, - HAVE_AIFF = 0x02, - HAVE_COMM = 0x04, - HAVE_SSND = 0x08 -} ; - -typedef struct -{ unsigned int size ; - short numChannels ; - unsigned int numSampleFrames ; - short sampleSize ; - unsigned char sampleRate [10] ; - unsigned int encoding ; - char zero_bytes [2] ; -} COMM_CHUNK ; - -typedef struct -{ unsigned int offset ; - unsigned int blocksize ; -} SSND_CHUNK ; - -typedef struct -{ short playMode ; - unsigned short beginLoop ; - unsigned short endLoop ; -} INST_LOOP ; - -typedef struct -{ char baseNote ; /* all notes are MIDI note numbers */ - char detune ; /* cents off, only -50 to +50 are significant */ - char lowNote ; - char highNote ; - char lowVelocity ; /* 1 to 127 */ - char highVelocity ; /* 1 to 127 */ - short gain ; /* in dB, 0 is normal */ - INST_LOOP sustain_loop ; - INST_LOOP release_loop ; -} INST_CHUNK ; - - -enum -{ basc_SCALE_MINOR = 1, - basc_SCALE_MAJOR, - basc_SCALE_NEITHER, - basc_SCALE_BOTH -} ; - -enum -{ basc_TYPE_LOOP = 0, - basc_TYPE_ONE_SHOT -} ; - - -typedef struct -{ unsigned int version ; - unsigned int numBeats ; - unsigned short rootNote ; - unsigned short scaleType ; - unsigned short sigNumerator ; - unsigned short sigDenominator ; - unsigned short loopType ; -} basc_CHUNK ; - -typedef struct -{ unsigned short markerID ; - unsigned int position ; -} MARK_ID_POS ; - -/*------------------------------------------------------------------------------ - * Private static functions. - */ - -static int aiff_close (SF_PRIVATE *psf) ; - -static int tenbytefloat2int (unsigned char *bytes) ; -static void uint2tenbytefloat (unsigned int num, unsigned char *bytes) ; - -static int aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) ; - -static int aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) ; - -static int aiff_write_header (SF_PRIVATE *psf, int calc_length) ; -static int aiff_write_tailer (SF_PRIVATE *psf) ; -static void aiff_write_strings (SF_PRIVATE *psf, int location) ; - -static int aiff_command (SF_PRIVATE *psf, int command, void *data, int datasize) ; - -static const char *get_loop_mode_str (short mode) ; - -static short get_loop_mode (short mode) ; - -static int aiff_read_basc_chunk (SF_PRIVATE * psf, int) ; - -static unsigned int marker_to_position (const MARK_ID_POS *m, unsigned short n, int marksize) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -aiff_open (SF_PRIVATE *psf) -{ COMM_CHUNK comm_fmt ; - int error, subformat ; - - memset (&comm_fmt, 0, sizeof (comm_fmt)) ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = aiff_read_header (psf, &comm_fmt))) - return error ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AIFF) - return SFE_BAD_OPEN_FORMAT ; - - if (psf->mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)) - { if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL) - return SFE_MALLOC_FAILED ; - psf->peak_info->peak_loc = SF_PEAK_START ; - } ; - - if (psf->mode != SFM_RDWR || psf->filelength < 40) - { psf->filelength = 0 ; - psf->datalength = 0 ; - psf->dataoffset = 0 ; - psf->sf.frames = 0 ; - } ; - - psf->str_flags = SF_STR_ALLOW_START | SF_STR_ALLOW_END ; - - if ((error = aiff_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = aiff_write_header ; - } ; - - psf->container_close = aiff_close ; - psf->command = aiff_command ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_U8 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_S8 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - - case SF_FORMAT_DWVW_12 : - error = dwvw_init (psf, 12) ; - break ; - - case SF_FORMAT_DWVW_16 : - error = dwvw_init (psf, 16) ; - break ; - - case SF_FORMAT_DWVW_24 : - error = dwvw_init (psf, 24) ; - break ; - - case SF_FORMAT_DWVW_N : - if (psf->mode != SFM_READ) - { error = SFE_DWVW_BAD_BITWIDTH ; - break ; - } ; - if (comm_fmt.sampleSize >= 8 && comm_fmt.sampleSize < 24) - { error = dwvw_init (psf, comm_fmt.sampleSize) ; - psf->sf.frames = comm_fmt.numSampleFrames ; - break ; - } ; - psf_log_printf (psf, "AIFC/DWVW : Bad bitwidth %d\n", comm_fmt.sampleSize) ; - error = SFE_DWVW_BAD_BITWIDTH ; - break ; - - case SF_FORMAT_IMA_ADPCM : - /* - ** IMA ADPCM encoded AIFF files always have a block length - ** of 34 which decodes to 64 samples. - */ - error = aiff_ima_init (psf, AIFC_IMA4_BLOCK_LEN, AIFC_IMA4_SAMPLES_PER_BLOCK) ; - break ; - /* Lite remove end */ - - case SF_FORMAT_GSM610 : - error = gsm610_init (psf) ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - - return error ; -} /* aiff_open */ - -/*========================================================================================== -** Private functions. -*/ - -/* This function ought to check size */ -static unsigned int -marker_to_position (const MARK_ID_POS *m, unsigned short n, int marksize) -{ int i ; - - for (i = 0 ; i < marksize ; i++) - if (m [i].markerID == n) - return m [i].position ; - return 0 ; -} /* marker_to_position */ - -static int -aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) -{ SSND_CHUNK ssnd_fmt ; - MARK_ID_POS *markstr = NULL ; - unsigned marker, dword, FORMsize, SSNDsize, bytesread ; - int k, found_chunk = 0, done = 0, error = 0 ; - char *cptr, byte ; - int instr_found = 0, mark_found = 0, mark_count = 0 ; - - /* Set position to start of file to begin reading header. */ - psf_binheader_readf (psf, "p", 0) ; - - memset (comm_fmt, 0, sizeof (COMM_CHUNK)) ; - - /* Until recently AIF* file were all BIG endian. */ - psf->endian = SF_ENDIAN_BIG ; - - /* AIFF files can apparently have their chunks in any order. However, they - ** must have a FORM chunk. Approach here is to read all the chunks one by - ** one and then check for the mandatory chunks at the end. - */ - while (! done) - { psf_binheader_readf (psf, "m", &marker) ; - - if (psf->mode == SFM_RDWR && (found_chunk & HAVE_SSND)) - return SFE_AIFF_RW_SSND_NOT_LAST ; - - switch (marker) - { case FORM_MARKER : - if (found_chunk) - return SFE_AIFF_NO_FORM ; - - psf_binheader_readf (psf, "E4", &FORMsize) ; - - if (psf->fileoffset > 0 && psf->filelength > FORMsize + 8) - { /* Set file length. */ - psf->filelength = FORMsize + 8 ; - psf_log_printf (psf, "FORM : %u\n", FORMsize) ; - } - else if (FORMsize != psf->filelength - 2 * SIGNED_SIZEOF (dword)) - { dword = psf->filelength - 2 * sizeof (dword) ; - psf_log_printf (psf, "FORM : %u (should be %u)\n", FORMsize, dword) ; - FORMsize = dword ; - } - else - psf_log_printf (psf, "FORM : %u\n", FORMsize) ; - found_chunk |= HAVE_FORM ; - break ; - - case AIFC_MARKER : - case AIFF_MARKER : - if ((found_chunk & HAVE_FORM) == 0) - return SFE_AIFF_AIFF_NO_FORM ; - psf_log_printf (psf, " %M\n", marker) ; - found_chunk |= HAVE_AIFF ; - break ; - - case COMM_MARKER : - error = aiff_read_comm_chunk (psf, comm_fmt) ; - - psf->sf.samplerate = tenbytefloat2int (comm_fmt->sampleRate) ; - psf->sf.frames = comm_fmt->numSampleFrames ; - psf->sf.channels = comm_fmt->numChannels ; - psf->bytewidth = BITWIDTH2BYTES (comm_fmt->sampleSize) ; - - if (error) - return error ; - - found_chunk |= HAVE_COMM ; - break ; - - case PEAK_MARKER : - /* Must have COMM chunk before PEAK chunk. */ - if ((found_chunk & (HAVE_FORM | HAVE_AIFF | HAVE_COMM)) != (HAVE_FORM | HAVE_AIFF | HAVE_COMM)) - return SFE_AIFF_PEAK_B4_COMM ; - - psf_binheader_readf (psf, "E4", &dword) ; - - psf_log_printf (psf, "%M : %d\n", marker, dword) ; - if (dword != AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) - { psf_binheader_readf (psf, "j", dword) ; - psf_log_printf (psf, "*** File PEAK chunk too big.\n") ; - return SFE_WAV_BAD_PEAK ; - } ; - - if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL) - return SFE_MALLOC_FAILED ; - - /* read in rest of PEAK chunk. */ - psf_binheader_readf (psf, "E44", &(psf->peak_info->version), &(psf->peak_info->timestamp)) ; - - if (psf->peak_info->version != 1) - psf_log_printf (psf, " version : %d *** (should be version 1)\n", psf->peak_info->version) ; - else - psf_log_printf (psf, " version : %d\n", psf->peak_info->version) ; - - psf_log_printf (psf, " time stamp : %d\n", psf->peak_info->timestamp) ; - psf_log_printf (psf, " Ch Position Value\n") ; - - cptr = psf->u.cbuf ; - for (dword = 0 ; dword < (unsigned) psf->sf.channels ; dword++) - { float value ; - unsigned int position ; - - psf_binheader_readf (psf, "Ef4", &value, &position) ; - psf->peak_info->peaks [dword].value = value ; - psf->peak_info->peaks [dword].position = position ; - - LSF_SNPRINTF (cptr, sizeof (psf->u.scbuf), " %2d %-12ld %g\n", - dword, (long) psf->peak_info->peaks [dword].position, psf->peak_info->peaks [dword].value) ; - cptr [sizeof (psf->u.scbuf) - 1] = 0 ; - psf_log_printf (psf, cptr) ; - } ; - - break ; - - case SSND_MARKER : - psf_binheader_readf (psf, "E444", &SSNDsize, &(ssnd_fmt.offset), &(ssnd_fmt.blocksize)) ; - - psf->datalength = SSNDsize - sizeof (ssnd_fmt) ; - psf->dataoffset = psf_ftell (psf) ; - - if (psf->datalength > psf->filelength - psf->dataoffset || psf->datalength < 0) - { psf_log_printf (psf, " SSND : %u (should be %D)\n", SSNDsize, psf->filelength - psf->dataoffset + sizeof (SSND_CHUNK)) ; - psf->datalength = psf->filelength - psf->dataoffset ; - } - else - psf_log_printf (psf, " SSND : %u\n", SSNDsize) ; - - /* Only set dataend if there really is data at the end. */ - if (psf->datalength + psf->dataoffset < psf->filelength) - psf->dataend = psf->datalength + psf->dataoffset ; - - psf_log_printf (psf, " Offset : %u\n", ssnd_fmt.offset) ; - psf_log_printf (psf, " Block Size : %u\n", ssnd_fmt.blocksize) ; - - found_chunk |= HAVE_SSND ; - - if (! psf->sf.seekable) - break ; - - /* Seek to end of SSND chunk. */ - psf_fseek (psf, psf->dataoffset + psf->datalength + (SSNDsize & 1), SEEK_SET) ; - break ; - - case c_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - if (dword == 0) - break ; - if (dword > SIGNED_SIZEOF (psf->u.scbuf) - 1) - { psf_log_printf (psf, " %M : %d (too big)\n", marker, dword) ; - return SFE_INTERNAL ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword + (dword & 1)) ; - cptr [dword] = 0 ; - psf_log_printf (psf, " %M : %s\n", marker, cptr) ; - psf_store_string (psf, SF_STR_COPYRIGHT, cptr) ; - break ; - - case AUTH_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - if (dword == 0) - break ; - if (dword > SIGNED_SIZEOF (psf->u.scbuf) - 1) - { psf_log_printf (psf, " %M : %d (too big)\n", marker, dword) ; - return SFE_INTERNAL ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword + (dword & 1)) ; - cptr [dword] = 0 ; - psf_log_printf (psf, " %M : %s\n", marker, cptr) ; - psf_store_string (psf, SF_STR_ARTIST, cptr) ; - break ; - - case COMT_MARKER : - { unsigned short count, id, len ; - unsigned int timestamp ; - - psf_binheader_readf (psf, "E42", &dword, &count) ; - psf_log_printf (psf, " %M : %d\n count : %d\n", marker, dword, count) ; - dword += (dword & 1) ; - if (dword == 0) - break ; - dword -= 2 ; - - for (k = 0 ; k < count ; k++) - { dword -= psf_binheader_readf (psf, "E422", ×tamp, &id, &len) ; - psf_log_printf (psf, " time : 0x%x\n marker : %x\n length : %d\n", timestamp, id, len) ; - - if (len + 1 > SIGNED_SIZEOF (psf->u.scbuf)) - { psf_log_printf (psf, "\nError : string length (%d) too big.\n", len) ; - return SFE_INTERNAL ; - } ; - - cptr = psf->u.cbuf ; - dword -= psf_binheader_readf (psf, "b", cptr, len) ; - cptr [len] = 0 ; - psf_log_printf (psf, " string : %s\n", cptr) ; - } ; - - if (dword > 0) - psf_binheader_readf (psf, "j", dword) ; - } ; - break ; - - case APPL_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - if (dword == 0) - break ; - if (dword >= SIGNED_SIZEOF (psf->u.scbuf) - 1) - { psf_log_printf (psf, " %M : %d (too big, skipping)\n", marker, dword) ; - psf_binheader_readf (psf, "j", dword + (dword & 1)) ; - break ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword + (dword & 1)) ; - cptr [dword] = 0 ; - - for (k = 0 ; k < (int) dword ; k++) - if (! isprint (cptr [k])) - { cptr [k] = 0 ; - break ; - } ; - - psf_log_printf (psf, " %M : %s\n", marker, cptr) ; - psf_store_string (psf, SF_STR_SOFTWARE, cptr) ; - break ; - - case NAME_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - if (dword == 0) - break ; - if (dword > SIGNED_SIZEOF (psf->u.scbuf) - 2) - { psf_log_printf (psf, " %M : %d (too big)\n", marker, dword) ; - return SFE_INTERNAL ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword + (dword & 1)) ; - cptr [dword] = 0 ; - psf_log_printf (psf, " %M : %s\n", marker, cptr) ; - psf_store_string (psf, SF_STR_TITLE, cptr) ; - break ; - - case ANNO_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - if (dword == 0) - break ; - if (dword > SIGNED_SIZEOF (psf->u.scbuf) - 2) - { psf_log_printf (psf, " %M : %d (too big)\n", marker, dword) ; - return SFE_INTERNAL ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword + (dword & 1)) ; - cptr [dword] = 0 ; - psf_log_printf (psf, " %M : %s\n", marker, cptr) ; - psf_store_string (psf, SF_STR_COMMENT, cptr) ; - break ; - - case INST_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - if (dword != SIZEOF_INST_CHUNK) - { psf_log_printf (psf, " %M : %d (should be %d)\n", marker, dword, SIZEOF_INST_CHUNK) ; - psf_binheader_readf (psf, "j", dword) ; - break ; - } ; - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - { unsigned char bytes [6] ; - short gain ; - - if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL) - return SFE_MALLOC_FAILED ; - - psf_binheader_readf (psf, "b", bytes, 6) ; - psf_log_printf (psf, " Base Note : %u\n Detune : %u\n" - " Low Note : %u\n High Note : %u\n" - " Low Vel. : %u\n High Vel. : %u\n", - bytes [0], bytes [1], bytes [2], bytes [3], bytes [4], bytes [5]) ; - psf->instrument->basenote = bytes [0] ; - psf->instrument->detune = bytes [1] ; - psf->instrument->key_lo = bytes [2] ; - psf->instrument->key_hi = bytes [3] ; - psf->instrument->velocity_lo = bytes [4] ; - psf->instrument->velocity_hi = bytes [5] ; - psf_binheader_readf (psf, "E2", &gain) ; - psf->instrument->gain = gain ; - psf_log_printf (psf, " Gain (dB) : %d\n", gain) ; - } ; - { short mode ; /* 0 - no loop, 1 - forward looping, 2 - backward looping */ - const char *loop_mode ; - unsigned short begin, end ; - - psf_binheader_readf (psf, "E222", &mode, &begin, &end) ; - loop_mode = get_loop_mode_str (mode) ; - mode = get_loop_mode (mode) ; - if (mode == SF_LOOP_NONE) - { psf->instrument->loop_count = 0 ; - psf->instrument->loops [0].mode = SF_LOOP_NONE ; - } - else - { psf->instrument->loop_count = 1 ; - psf->instrument->loops [0].mode = SF_LOOP_FORWARD ; - psf->instrument->loops [0].start = begin ; - psf->instrument->loops [0].end = end ; - psf->instrument->loops [0].count = 0 ; - } ; - psf_log_printf (psf, " Sustain\n mode : %d => %s\n begin : %u\n end : %u\n", - mode, loop_mode, begin, end) ; - psf_binheader_readf (psf, "E222", &mode, &begin, &end) ; - loop_mode = get_loop_mode_str (mode) ; - mode = get_loop_mode (mode) ; - if (mode == SF_LOOP_NONE) - psf->instrument->loops [0].mode = SF_LOOP_NONE ; - else - { psf->instrument->loop_count += 1 ; - psf->instrument->loops [1].mode = SF_LOOP_FORWARD ; - psf->instrument->loops [1].start = begin ; - psf->instrument->loops [1].end = end ; - psf->instrument->loops [1].count = 0 ; - } ; - psf_log_printf (psf, " Release\n mode : %d => %s\n begin : %u\n end : %u\n", - mode, loop_mode, begin, end) ; - } ; - instr_found++ ; - break ; - - case basc_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - psf_log_printf (psf, " basc : %u\n", dword) ; - - if ((error = aiff_read_basc_chunk (psf, dword))) - return error ; - break ; - - case MARK_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - { unsigned short mark_id, n = 0 ; - unsigned char pstr_len ; - unsigned int position ; - - bytesread = psf_binheader_readf (psf, "E2", &n) ; - mark_count = n ; - markstr = calloc (mark_count, sizeof (MARK_ID_POS)) ; - psf_log_printf (psf, " Count : %d\n", mark_count) ; - - for (n = 0 ; n < mark_count && bytesread < dword ; n++) - { bytesread += psf_binheader_readf (psf, "E241", &mark_id, &position, &pstr_len) ; - psf_log_printf (psf, " Mark ID : %u\n Position : %u\n", mark_id, position) ; - - pstr_len += (pstr_len & 1) + 1 ; /* fudgy, fudgy, hack, hack */ - - bytesread += psf_binheader_readf (psf, "b", psf->u.scbuf, pstr_len) ; - psf_log_printf (psf, " Name : %s\n", psf->u.scbuf) ; - - markstr [n].markerID = mark_id ; - markstr [n].position = position ; - /* - ** TODO if psf->u.scbuf is equal to - ** either Beg_loop, Beg loop or beg loop and spam - ** if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL) - ** return SFE_MALLOC_FAILED ; - */ - } ; - } ; - mark_found++ ; - psf_binheader_readf (psf, "j", dword - bytesread) ; - break ; - - case FVER_MARKER : - case SFX_MARKER : - psf_binheader_readf (psf, "E4", &dword) ; - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - - psf_binheader_readf (psf, "j", dword) ; - break ; - - case NONE_MARKER : - /* Fix for broken AIFC files with incorrect COMM chunk length. */ - psf_binheader_readf (psf, "1", &byte) ; - dword = byte ; - psf_binheader_readf (psf, "j", dword) ; - break ; - - default : - if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF) - && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF)) - { psf_binheader_readf (psf, "E4", &dword) ; - psf_log_printf (psf, " %M : %d (unknown marker)\n", marker, dword) ; - - psf_binheader_readf (psf, "j", dword) ; - break ; - } ; - if ((dword = psf_ftell (psf)) & 0x03) - { psf_log_printf (psf, " Unknown chunk marker %X at position %d. Resyncing.\n", marker, dword - 4) ; - - psf_binheader_readf (psf, "j", -3) ; - break ; - } ; - psf_log_printf (psf, "*** Unknown chunk marker %X at position %D. Exiting parser.\n", marker, psf_ftell (psf)) ; - done = 1 ; - break ; - } ; /* switch (marker) */ - - if ((! psf->sf.seekable) && (found_chunk & HAVE_SSND)) - break ; - - if (psf_ftell (psf) >= psf->filelength - (2 * SIGNED_SIZEOF (dword))) - break ; - } ; /* while (1) */ - - if (instr_found && mark_found) - { int j ; - - for (j = 0 ; jinstrument->loop_count ; j ++) - { if (j < ARRAY_LEN (psf->instrument->loops)) - { psf->instrument->loops [j].start = marker_to_position (markstr, psf->instrument->loops [j].start, mark_count) ; - psf->instrument->loops [j].end = marker_to_position (markstr, psf->instrument->loops [j].end, mark_count) ; - psf->instrument->loops [j].mode = SF_LOOP_FORWARD ; - } ; - } ; - } ; - - if (markstr) - free (markstr) ; - - if (! (found_chunk & HAVE_FORM)) - return SFE_AIFF_NO_FORM ; - - if (! (found_chunk & HAVE_AIFF)) - return SFE_AIFF_COMM_NO_FORM ; - - if (! (found_chunk & HAVE_COMM)) - return SFE_AIFF_SSND_NO_COMM ; - - if (! psf->dataoffset) - return SFE_AIFF_NO_DATA ; - - return 0 ; -} /* aiff_read_header */ - -static int -aiff_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { aiff_write_tailer (psf) ; - - aiff_write_header (psf, SF_TRUE) ; - } ; - - return 0 ; -} /* aiff_close */ - -static int -aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) -{ int error = 0, bytesread, subformat ; - - psf->u.scbuf [0] = 0 ; - - bytesread = psf_binheader_readf (psf, "E4", &(comm_fmt->size)) ; - - /* The COMM chunk has an int aligned to an odd word boundary. Some - ** procesors are not able to deal with this (ie bus fault) so we have - ** to take special care. - */ - comm_fmt->size += comm_fmt->size & 1 ; - - bytesread += - psf_binheader_readf (psf, "E242b", &(comm_fmt->numChannels), &(comm_fmt->numSampleFrames), - &(comm_fmt->sampleSize), &(comm_fmt->sampleRate), SIGNED_SIZEOF (comm_fmt->sampleRate)) ; - - if (comm_fmt->size == SIZEOF_AIFF_COMM) - comm_fmt->encoding = NONE_MARKER ; - else if (comm_fmt->size == SIZEOF_AIFC_COMM_MIN) - bytesread += psf_binheader_readf (psf, "Em", &(comm_fmt->encoding)) ; - else if (comm_fmt->size >= SIZEOF_AIFC_COMM) - { unsigned char encoding_len ; - - bytesread += psf_binheader_readf (psf, "Em1", &(comm_fmt->encoding), &encoding_len) ; - - memset (psf->u.scbuf, 0, comm_fmt->size) ; - - bytesread += psf_binheader_readf (psf, "b", psf->u.scbuf, - comm_fmt->size - SIZEOF_AIFC_COMM + 1) ; - psf->u.scbuf [encoding_len] = 0 ; - } ; - - psf_log_printf (psf, " COMM : %d\n", comm_fmt->size) ; - psf_log_printf (psf, " Sample Rate : %d\n", tenbytefloat2int (comm_fmt->sampleRate)) ; - psf_log_printf (psf, " Frames : %u%s\n", comm_fmt->numSampleFrames, (comm_fmt->numSampleFrames == 0 && psf->filelength > 100) ? " (Should not be 0)" : "") ; - psf_log_printf (psf, " Channels : %d\n", comm_fmt->numChannels) ; - - /* Found some broken 'fl32' files with comm.samplesize == 16. Fix it here. */ - - if ((comm_fmt->encoding == fl32_MARKER || comm_fmt->encoding == FL32_MARKER) && comm_fmt->sampleSize != 32) - { psf_log_printf (psf, " Sample Size : %d (should be 32)\n", comm_fmt->sampleSize) ; - comm_fmt->sampleSize = 32 ; - } - else if ((comm_fmt->encoding == fl64_MARKER || comm_fmt->encoding == FL64_MARKER) && comm_fmt->sampleSize != 64) - { psf_log_printf (psf, " Sample Size : %d (should be 64)\n", comm_fmt->sampleSize) ; - comm_fmt->sampleSize = 64 ; - } - else - psf_log_printf (psf, " Sample Size : %d\n", comm_fmt->sampleSize) ; - - subformat = s_bitwidth_to_subformat (comm_fmt->sampleSize) ; - - psf->endian = SF_ENDIAN_BIG ; - - switch (comm_fmt->encoding) - { case NONE_MARKER : - psf->sf.format = (SF_FORMAT_AIFF | subformat) ; - break ; - - case twos_MARKER : - case in32_MARKER : - psf->sf.format = (SF_ENDIAN_BIG | SF_FORMAT_AIFF | subformat) ; - break ; - - case sowt_MARKER : - case ni32_MARKER : - psf->endian = SF_ENDIAN_LITTLE ; - psf->sf.format = (SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | subformat) ; - break ; - - case fl32_MARKER : - case FL32_MARKER : - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ; - break ; - - case ulaw_MARKER : - case ULAW_MARKER : - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_ULAW) ; - break ; - - case alaw_MARKER : - case ALAW_MARKER : - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_ALAW) ; - break ; - - case fl64_MARKER : - case FL64_MARKER : - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_DOUBLE) ; - break ; - - case raw_MARKER : - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ; - break ; - - case DWVW_MARKER : - psf->sf.format = SF_FORMAT_AIFF ; - switch (comm_fmt->sampleSize) - { case 12 : - psf->sf.format |= SF_FORMAT_DWVW_12 ; - break ; - case 16 : - psf->sf.format |= SF_FORMAT_DWVW_16 ; - break ; - case 24 : - psf->sf.format |= SF_FORMAT_DWVW_24 ; - break ; - - default : - psf->sf.format |= SF_FORMAT_DWVW_N ; - break ; - } ; - break ; - - case GSM_MARKER : - psf->sf.format = SF_FORMAT_AIFF ; - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_GSM610) ; - break ; - - - case ima4_MARKER : - psf->endian = SF_ENDIAN_BIG ; - psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM) ; - break ; - - default : - psf_log_printf (psf, "AIFC : Unimplemented format : %M\n", comm_fmt->encoding) ; - error = SFE_UNIMPLEMENTED ; - } ; - - if (! psf->u.scbuf [0]) - psf_log_printf (psf, " Encoding : %M\n", comm_fmt->encoding) ; - else - psf_log_printf (psf, " Encoding : %M => %s\n", comm_fmt->encoding, psf->u.scbuf) ; - - return error ; -} /* aiff_read_comm_chunk */ - - -static int -aiff_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - unsigned char comm_sample_rate [10], comm_zero_bytes [2] = { 0, 0 } ; - unsigned int comm_type, comm_size, comm_encoding, comm_frames ; - int k, endian ; - short bit_width ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->bytewidth > 0) - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - if (psf->mode == SFM_RDWR && psf->dataoffset > 0) - { /* Assuming here that the header has already been written and just - ** needs to be corrected for new data length. That means that we - ** only change the length fields of the FORM and SSND chunks ; - ** everything else can be skipped over. - */ - - /* First write new FORM chunk. */ - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ; - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - /* Now write frame count field of COMM chunk header. */ - psf->headindex = 0 ; - psf_fseek (psf, 22, SEEK_SET) ; - - psf_binheader_writef (psf, "Et8", psf->sf.frames) ; - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - /* Now write new SSND chunk header. */ - psf->headindex = 0 ; - psf_fseek (psf, psf->dataoffset - 16, SEEK_SET) ; - - psf_binheader_writef (psf, "Etm8", SSND_MARKER, psf->datalength + SIZEOF_SSND_CHUNK) ; - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (current < psf->dataoffset) - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - else if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return 0 ; - } ; - - endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (CPU_IS_LITTLE_ENDIAN && endian == SF_ENDIAN_CPU) - endian = SF_ENDIAN_LITTLE ; - - /* Standard value here. */ - bit_width = psf->bytewidth * 8 ; - comm_frames = (psf->sf.frames > 0xFFFFFFFF) ? 0xFFFFFFFF : psf->sf.frames ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - switch (endian) - { case SF_ENDIAN_BIG : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = twos_MARKER ; - break ; - - case SF_ENDIAN_LITTLE : - psf->endian = SF_ENDIAN_LITTLE ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = sowt_MARKER ; - break ; - - default : /* SF_ENDIAN_FILE */ - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFF_MARKER ; - comm_size = SIZEOF_AIFF_COMM ; - comm_encoding = 0 ; - break ; - } ; - break ; - - case SF_FORMAT_FLOAT : /* Big endian floating point. */ - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = FL32_MARKER ; /* Use 'FL32' because its easier to read. */ - break ; - - case SF_FORMAT_DOUBLE : /* Big endian double precision floating point. */ - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = FL64_MARKER ; /* Use 'FL64' because its easier to read. */ - break ; - - case SF_FORMAT_ULAW : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = ulaw_MARKER ; - break ; - - case SF_FORMAT_ALAW : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = alaw_MARKER ; - break ; - - case SF_FORMAT_PCM_U8 : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = raw_MARKER ; - break ; - - case SF_FORMAT_DWVW_12 : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = DWVW_MARKER ; - - /* Override standard value here.*/ - bit_width = 12 ; - break ; - - case SF_FORMAT_DWVW_16 : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = DWVW_MARKER ; - - /* Override standard value here.*/ - bit_width = 16 ; - break ; - - case SF_FORMAT_DWVW_24 : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = DWVW_MARKER ; - - /* Override standard value here.*/ - bit_width = 24 ; - break ; - - case SF_FORMAT_GSM610 : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = GSM_MARKER ; - - /* Override standard value here.*/ - bit_width = 16 ; - break ; - - case SF_FORMAT_IMA_ADPCM : - psf->endian = SF_ENDIAN_BIG ; - comm_type = AIFC_MARKER ; - comm_size = SIZEOF_AIFC_COMM ; - comm_encoding = ima4_MARKER ; - - /* Override standard value here.*/ - bit_width = 16 ; - comm_frames = psf->sf.frames / AIFC_IMA4_SAMPLES_PER_BLOCK ; - break ; - - default : return SFE_BAD_OPEN_FORMAT ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ; - - /* Write COMM chunk. */ - psf_binheader_writef (psf, "Emm4", comm_type, COMM_MARKER, comm_size) ; - - memset (comm_sample_rate, 0, sizeof (comm_sample_rate)) ; - uint2tenbytefloat (psf->sf.samplerate, comm_sample_rate) ; - - psf_binheader_writef (psf, "Et242", psf->sf.channels, comm_frames, bit_width) ; - psf_binheader_writef (psf, "b", comm_sample_rate, sizeof (comm_sample_rate)) ; - - /* AIFC chunks have some extra data. */ - if (comm_type == AIFC_MARKER) - psf_binheader_writef (psf, "mb", comm_encoding, comm_zero_bytes, sizeof (comm_zero_bytes)) ; - - if (psf->instrument != NULL) - { MARK_ID_POS m [4] ; - INST_CHUNK ch ; - unsigned short ct = 0 ; - - memset (m, 0, sizeof (m)) ; - - ch.baseNote = psf->instrument->basenote ; - ch.detune = psf->instrument->detune ; - ch.lowNote = psf->instrument->key_lo ; - ch.highNote = psf->instrument->key_hi ; - ch.lowVelocity = psf->instrument->velocity_lo ; - ch.highVelocity = psf->instrument->velocity_hi ; - ch.gain = psf->instrument->gain ; - if (psf->instrument->loops [0].mode != SF_LOOP_NONE) - { ch.sustain_loop.playMode = 1 ; - ch.sustain_loop.beginLoop = ct ; - m [0].markerID = ct++ ; - m [0].position = psf->instrument->loops [0].start ; - ch.sustain_loop.endLoop = ct ; - m [1].markerID = ct++ ; - m [1].position = psf->instrument->loops [0].end ; - } ; - if (psf->instrument->loops [1].mode != SF_LOOP_NONE) - { ch.release_loop.playMode = 1 ; - ch.release_loop.beginLoop = ct ; - m [2].markerID = ct++ ; - m [2].position = psf->instrument->loops [1].start ; - ch.release_loop.endLoop = ct ; - m [3].markerID = ct++ ; - m [3].position = psf->instrument->loops [1].end ; - } - else - { ch.release_loop.playMode = 0 ; - ch.release_loop.beginLoop = 0 ; - ch.release_loop.endLoop = 0 ; - } ; - psf_binheader_writef (psf, "Em4b", INST_MARKER, sizeof (INST_CHUNK), &ch.baseNote, make_size_t (6)) ; - psf_binheader_writef (psf, "2222222", ch.gain, ch.sustain_loop.playMode, - ch.sustain_loop.beginLoop, ch.sustain_loop.endLoop, ch.release_loop.playMode, - ch.release_loop.beginLoop, ch.release_loop.endLoop) ; - - if (ct == 2) - psf_binheader_writef (psf, "Em42241b241b", - MARK_MARKER, 2 * sizeof (MARK_ID_POS) + 16, 2, - m [0].markerID, m [0].position, 8, "beg loop", make_size_t (9), - m [1].markerID, m [1].position, 8, "end loop", make_size_t (9)) ; - else if (ct == 4) - psf_binheader_writef (psf, "Em42241b241b241b241b", - MARK_MARKER, 4 * sizeof (MARK_ID_POS) + 34, 4, - m [0].markerID, m [0].position, 8, "beg loop", make_size_t (9), - m [1].markerID, m [1].position, 8, "end loop", make_size_t (9), - m [2].markerID, m [2].position, 8, "beg loop", make_size_t (9), - m [3].markerID, m [3].position, 8, "end loop", make_size_t (9)) ; - } ; - - if (psf->str_flags & SF_STR_LOCATE_START) - aiff_write_strings (psf, SF_STR_LOCATE_START) ; - - if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START) - { psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ; - psf_binheader_writef (psf, "E44", 1, time (NULL)) ; - for (k = 0 ; k < psf->sf.channels ; k++) - psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ; - } ; - - /* Write SSND chunk. */ - psf_binheader_writef (psf, "Etm844", SSND_MARKER, psf->datalength + SIZEOF_SSND_CHUNK, 0, 0) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current < psf->dataoffset) - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - else if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* aiff_write_header */ - -static int -aiff_write_tailer (SF_PRIVATE *psf) -{ int k ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - psf->dataend = psf_fseek (psf, 0, SEEK_END) ; - - /* Make sure tailer data starts at even byte offset. Pad if necessary. */ - if (psf->dataend % 2 == 1) - { psf_fwrite (psf->header, 1, 1, psf) ; - psf->dataend ++ ; - } ; - - if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_END) - { psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ; - psf_binheader_writef (psf, "E44", 1, time (NULL)) ; - for (k = 0 ; k < psf->sf.channels ; k++) - psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ; - } ; - - if (psf->str_flags & SF_STR_LOCATE_END) - aiff_write_strings (psf, SF_STR_LOCATE_END) ; - - /* Write the tailer. */ - if (psf->headindex > 0) - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - return 0 ; -} /* aiff_write_tailer */ - -static void -aiff_write_strings (SF_PRIVATE *psf, int location) -{ int k ; - - for (k = 0 ; k < SF_MAX_STRINGS ; k++) - { if (psf->strings [k].type == 0) - break ; - - if (psf->strings [k].flags != location) - continue ; - - switch (psf->strings [k].type) - { case SF_STR_SOFTWARE : - psf_binheader_writef (psf, "EmS", APPL_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_TITLE : - psf_binheader_writef (psf, "EmS", NAME_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_COPYRIGHT : - psf_binheader_writef (psf, "EmS", c_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_ARTIST : - psf_binheader_writef (psf, "EmS", AUTH_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_COMMENT : - psf_binheader_writef (psf, "EmS", ANNO_MARKER, psf->strings [k].str) ; - break ; - - /* - case SF_STR_DATE : - psf_binheader_writef (psf, "Ems", ICRD_MARKER, psf->strings [k].str) ; - break ; - */ - } ; - } ; - - return ; -} /* aiff_write_strings */ - -static int -aiff_command (SF_PRIVATE *psf, int command, void *data, int datasize) -{ - /* Avoid compiler warnings. */ - psf = psf ; - data = data ; - datasize = datasize ; - - switch (command) - { default : break ; - } ; - - return 0 ; -} /* aiff_command */ - -static const char* -get_loop_mode_str (short mode) -{ switch (mode) - { case 0 : return "none" ; - case 1 : return "forward" ; - case 2 : return "backward" ; - } ; - - return "*** unknown" ; -} /* get_loop_mode_str */ - -static short -get_loop_mode (short mode) -{ switch (mode) - { case 0 : return SF_LOOP_NONE ; - case 1 : return SF_LOOP_FORWARD ; - case 2 : return SF_LOOP_BACKWARD ; - } ; - - return SF_LOOP_NONE ; -} /* get_loop_mode */ - -/*========================================================================================== -** Rough hack at converting from 80 bit IEEE float in AIFF header to an int and -** back again. It assumes that all sample rates are between 1 and 800MHz, which -** should be OK as other sound file formats use a 32 bit integer to store sample -** rate. -** There is another (probably better) version in the source code to the SoX but it -** has a copyright which probably prevents it from being allowable as GPL/LGPL. -*/ - -static int -tenbytefloat2int (unsigned char *bytes) -{ int val = 3 ; - - if (bytes [0] & 0x80) /* Negative number. */ - return 0 ; - - if (bytes [0] <= 0x3F) /* Less than 1. */ - return 1 ; - - if (bytes [0] > 0x40) /* Way too big. */ - return 0x4000000 ; - - if (bytes [0] == 0x40 && bytes [1] > 0x1C) /* Too big. */ - return 800000000 ; - - /* Ok, can handle it. */ - - val = (bytes [2] << 23) | (bytes [3] << 15) | (bytes [4] << 7) | (bytes [5] >> 1) ; - - val >>= (29 - bytes [1]) ; - - return val ; -} /* tenbytefloat2int */ - -static void -uint2tenbytefloat (unsigned int num, unsigned char *bytes) -{ unsigned int mask = 0x40000000 ; - int count ; - - if (num <= 1) - { bytes [0] = 0x3F ; - bytes [1] = 0xFF ; - bytes [2] = 0x80 ; - return ; - } ; - - bytes [0] = 0x40 ; - - if (num >= mask) - { bytes [1] = 0x1D ; - return ; - } ; - - for (count = 0 ; count <= 32 ; count ++) - { if (num & mask) - break ; - mask >>= 1 ; - } ; - - num <<= count + 1 ; - bytes [1] = 29 - count ; - bytes [2] = (num >> 24) & 0xFF ; - bytes [3] = (num >> 16) & 0xFF ; - bytes [4] = (num >> 8) & 0xFF ; - bytes [5] = num & 0xFF ; - -} /* uint2tenbytefloat */ - -static int -aiff_read_basc_chunk (SF_PRIVATE * psf, int datasize) -{ const char * type_str ; - basc_CHUNK bc ; - - psf_binheader_readf (psf, "E442", &bc.version, &bc.numBeats, &bc.rootNote) ; - psf_binheader_readf (psf, "E222", &bc.scaleType, &bc.sigNumerator, &bc.sigDenominator) ; - psf_binheader_readf (psf, "E2j", &bc.loopType, datasize - sizeof (bc)) ; - - psf_log_printf (psf, " Version ? : %u\n Num Beats : %u\n Root Note : 0x%x\n", - bc.version, bc.numBeats, bc.rootNote) ; - - switch (bc.scaleType) - { case basc_SCALE_MINOR : - type_str = "MINOR" ; - break ; - case basc_SCALE_MAJOR : - type_str = "MAJOR" ; - break ; - case basc_SCALE_NEITHER : - type_str = "NEITHER" ; - break ; - case basc_SCALE_BOTH : - type_str = "BOTH" ; - break ; - default : - type_str = "!!WRONG!!" ; - break ; - } ; - - psf_log_printf (psf, " ScaleType : 0x%x (%s)\n", bc.scaleType, type_str) ; - psf_log_printf (psf, " Time Sig : %d/%d\n", bc.sigNumerator, bc.sigDenominator) ; - - switch (bc.loopType) - { case basc_TYPE_ONE_SHOT : - type_str = "One Shot" ; - break ; - case basc_TYPE_LOOP : - type_str = "Loop" ; - break ; - default: - type_str = "!!WRONG!!" ; - break ; - } ; - - psf_log_printf (psf, " Loop Type : 0x%x (%s)\n", bc.loopType, type_str) ; - - if ((psf->loop_info = calloc (1, sizeof (SF_LOOP_INFO))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->loop_info->time_sig_num = bc.sigNumerator ; - psf->loop_info->time_sig_den = bc.sigDenominator ; - psf->loop_info->loop_mode = (bc.loopType == basc_TYPE_ONE_SHOT) ? SF_LOOP_NONE : SF_LOOP_FORWARD ; - psf->loop_info->num_beats = bc.numBeats ; - - /* Can always be recalculated from other known fields. */ - psf->loop_info->bpm = (1.0 / psf->sf.frames) * psf->sf.samplerate - * ((bc.numBeats * 4.0) / bc.sigDenominator) * 60.0 ; - psf->loop_info->root_key = bc.rootNote ; - - return 0 ; -} /* aiff_read_basc_chunk */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 7dec56ca-d6f2-48cf-863b-a72e7e17a5d9 -*/ diff --git a/Libraries/SndFile/Files/src/alaw.c b/Libraries/SndFile/Files/src/alaw.c deleted file mode 100644 index a2d27cb58..000000000 --- a/Libraries/SndFile/Files/src/alaw.c +++ /dev/null @@ -1,544 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sndfile.h" -#include "float_cast.h" -#include "common.h" - -static sf_count_t alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t alaw_write_s2alaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t alaw_write_i2alaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t alaw_write_f2alaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t alaw_write_d2alaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static void alaw2s_array (unsigned char *buffer, int count, short *ptr) ; -static void alaw2i_array (unsigned char *buffer, int count, int *ptr) ; -static void alaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact) ; -static void alaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact) ; - -static void s2alaw_array (const short *buffer, int count, unsigned char *ptr) ; -static void i2alaw_array (const int *buffer, int count, unsigned char *ptr) ; -static void f2alaw_array (const float *buffer, int count, unsigned char *ptr, float normfact) ; -static void d2alaw_array (const double *buffer, int count, unsigned char *ptr, double normfact) ; - - -int -alaw_init (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { psf->read_short = alaw_read_alaw2s ; - psf->read_int = alaw_read_alaw2i ; - psf->read_float = alaw_read_alaw2f ; - psf->read_double = alaw_read_alaw2d ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->write_short = alaw_write_s2alaw ; - psf->write_int = alaw_write_i2alaw ; - psf->write_float = alaw_write_f2alaw ; - psf->write_double = alaw_write_d2alaw ; - } ; - - psf->bytewidth = 1 ; - psf->blockwidth = psf->sf.channels ; - - if (psf->filelength > psf->dataoffset) - psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ; - else - psf->datalength = 0 ; - - psf->sf.frames = psf->datalength / psf->blockwidth ; - - return 0 ; -} /* alaw_init */ - -/*============================================================================== - * Private static functions and data. - */ - -static -short alaw_decode [256] = -{ -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736, - -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784, - -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368, - -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392, - -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944, - -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136, - -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472, - -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568, - -344, -328, -376, -360, -280, -264, -312, -296, - -472, -456, -504, -488, -408, -392, -440, -424, - -88, -72, -120, -104, -24, -8, -56, -40, - -216, -200, -248, -232, -152, -136, -184, -168, - -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184, - -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696, - -688, -656, -752, -720, -560, -528, -624, -592, - -944, -912, -1008, -976, -816, -784, -880, -848, - 5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736, - 7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784, - 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368, - 3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392, - 22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944, - 30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136, - 11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472, - 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568, - 344, 328, 376, 360, 280, 264, 312, 296, - 472, 456, 504, 488, 408, 392, 440, 424, - 88, 72, 120, 104, 24, 8, 56, 40, - 216, 200, 248, 232, 152, 136, 184, 168, - 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184, - 1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696, - 688, 656, 752, 720, 560, 528, 624, 592, - 944, 912, 1008, 976, 816, 784, 880, 848 -} ; /* alaw_decode */ - -static -unsigned char alaw_encode [2048 + 1] = -{ 0xd5, 0xd4, 0xd7, 0xd6, 0xd1, 0xd0, 0xd3, 0xd2, 0xdd, 0xdc, 0xdf, 0xde, - 0xd9, 0xd8, 0xdb, 0xda, 0xc5, 0xc4, 0xc7, 0xc6, 0xc1, 0xc0, 0xc3, 0xc2, - 0xcd, 0xcc, 0xcf, 0xce, 0xc9, 0xc8, 0xcb, 0xca, 0xf5, 0xf5, 0xf4, 0xf4, - 0xf7, 0xf7, 0xf6, 0xf6, 0xf1, 0xf1, 0xf0, 0xf0, 0xf3, 0xf3, 0xf2, 0xf2, - 0xfd, 0xfd, 0xfc, 0xfc, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xf9, 0xf8, 0xf8, - 0xfb, 0xfb, 0xfa, 0xfa, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, - 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe1, 0xe1, 0xe1, 0xe1, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2, - 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xef, 0xef, 0xef, 0xef, - 0xee, 0xee, 0xee, 0xee, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8, - 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb5, 0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, - 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, - 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, - 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, - 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb3, 0xb3, 0xb3, 0xb3, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, - 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, - 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc, 0xbc, 0xbc, 0xbc, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, - 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, - 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xb9, 0xb9, 0xb9, 0xb9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba, - 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, - 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, - 0xba, 0xba, 0xba, 0xba, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a -} ; /* alaw_encode */ - -static inline void -alaw2s_array (unsigned char *buffer, int count, short *ptr) -{ while (--count >= 0) - ptr [count] = alaw_decode [(int) buffer [count]] ; -} /* alaw2s_array */ - -static inline void -alaw2i_array (unsigned char *buffer, int count, int *ptr) -{ while (--count >= 0) - ptr [count] = alaw_decode [(int) buffer [count]] << 16 ; -} /* alaw2i_array */ - -static inline void -alaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact) -{ while (--count >= 0) - ptr [count] = normfact * alaw_decode [(int) buffer [count]] ; -} /* alaw2f_array */ - -static inline void -alaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact) -{ while (--count >= 0) - ptr [count] = normfact * alaw_decode [(int) buffer [count]] ; -} /* alaw2d_array */ - -static inline void -s2alaw_array (const short *ptr, int count, unsigned char *buffer) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = alaw_encode [ptr [count] / 16] ; - else - buffer [count] = 0x7F & alaw_encode [ptr [count] / -16] ; - } ; -} /* s2alaw_array */ - -static inline void -i2alaw_array (const int *ptr, int count, unsigned char *buffer) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ; - else - buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ; - } ; -} /* i2alaw_array */ - -static inline void -f2alaw_array (const float *ptr, int count, unsigned char *buffer, float normfact) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = alaw_encode [lrintf (normfact * ptr [count])] ; - else - buffer [count] = 0x7F & alaw_encode [- lrintf (normfact * ptr [count])] ; - } ; -} /* f2alaw_array */ - -static inline void -d2alaw_array (const double *ptr, int count, unsigned char *buffer, double normfact) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = alaw_encode [lrint (normfact * ptr [count])] ; - else - buffer [count] = 0x7F & alaw_encode [- lrint (normfact * ptr [count])] ; - } ; -} /* d2alaw_array */ - -/*============================================================================== -*/ - -static sf_count_t -alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - alaw2s_array (psf->u.ucbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* alaw_read_alaw2s */ - -static sf_count_t -alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - alaw2i_array (psf->u.ucbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* alaw_read_alaw2i */ - -static sf_count_t -alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - alaw2f_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* alaw_read_alaw2f */ - -static sf_count_t -alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ; - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - alaw2d_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* alaw_read_alaw2d */ - -/*============================================================================================= -*/ - -static sf_count_t -alaw_write_s2alaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2alaw_array (ptr + total, bufferlen, psf->u.ucbuf) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* alaw_write_s2alaw */ - -static sf_count_t -alaw_write_i2alaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2alaw_array (ptr + total, bufferlen, psf->u.ucbuf) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* alaw_write_i2alaw */ - -static sf_count_t -alaw_write_f2alaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - f2alaw_array (ptr + total, bufferlen, psf->u.ucbuf, normfact) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* alaw_write_f2alaw */ - -static sf_count_t -alaw_write_d2alaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - d2alaw_array (ptr + total, bufferlen, psf->u.ucbuf, normfact) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* alaw_write_d2alaw */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 289ccfc2-42a6-4f1f-a29f-4dcc9bfa8752 -*/ diff --git a/Libraries/SndFile/Files/src/au.c b/Libraries/SndFile/Files/src/au.c deleted file mode 100644 index 3a5f93bd9..000000000 --- a/Libraries/SndFile/Files/src/au.c +++ /dev/null @@ -1,453 +0,0 @@ -/* -** Copyright (C) 1999-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define DOTSND_MARKER (MAKE_MARKER ('.', 's', 'n', 'd')) -#define DNSDOT_MARKER (MAKE_MARKER ('d', 'n', 's', '.')) - -#define AU_DATA_OFFSET 24 - -/*------------------------------------------------------------------------------ -** Known AU file encoding types. -*/ - -enum -{ AU_ENCODING_ULAW_8 = 1, /* 8-bit u-law samples */ - AU_ENCODING_PCM_8 = 2, /* 8-bit linear samples */ - AU_ENCODING_PCM_16 = 3, /* 16-bit linear samples */ - AU_ENCODING_PCM_24 = 4, /* 24-bit linear samples */ - AU_ENCODING_PCM_32 = 5, /* 32-bit linear samples */ - - AU_ENCODING_FLOAT = 6, /* floating-point samples */ - AU_ENCODING_DOUBLE = 7, /* double-precision float samples */ - AU_ENCODING_INDIRECT = 8, /* fragmented sampled data */ - AU_ENCODING_NESTED = 9, /* ? */ - AU_ENCODING_DSP_CORE = 10, /* DSP program */ - AU_ENCODING_DSP_DATA_8 = 11, /* 8-bit fixed-point samples */ - AU_ENCODING_DSP_DATA_16 = 12, /* 16-bit fixed-point samples */ - AU_ENCODING_DSP_DATA_24 = 13, /* 24-bit fixed-point samples */ - AU_ENCODING_DSP_DATA_32 = 14, /* 32-bit fixed-point samples */ - - AU_ENCODING_DISPLAY = 16, /* non-audio display data */ - AU_ENCODING_MULAW_SQUELCH = 17, /* ? */ - AU_ENCODING_EMPHASIZED = 18, /* 16-bit linear with emphasis */ - AU_ENCODING_NEXT = 19, /* 16-bit linear with compression (NEXT) */ - AU_ENCODING_COMPRESSED_EMPHASIZED = 20, /* A combination of the two above */ - AU_ENCODING_DSP_COMMANDS = 21, /* Music Kit DSP commands */ - AU_ENCODING_DSP_COMMANDS_SAMPLES = 22, /* ? */ - - AU_ENCODING_ADPCM_G721_32 = 23, /* G721 32 kbs ADPCM - 4 bits per sample. */ - AU_ENCODING_ADPCM_G722 = 24, /* G722 64 kbs ADPCM */ - AU_ENCODING_ADPCM_G723_24 = 25, /* G723 24 kbs ADPCM - 3 bits per sample. */ - AU_ENCODING_ADPCM_G723_40 = 26, /* G723 40 kbs ADPCM - 5 bits per sample. */ - - AU_ENCODING_ALAW_8 = 27 -} ; - -/*------------------------------------------------------------------------------ -** Typedefs. -*/ - -typedef struct -{ int dataoffset ; - int datasize ; - int encoding ; - int samplerate ; - int channels ; -} AU_FMT ; - - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int au_close (SF_PRIVATE *psf) ; - -static int au_format_to_encoding (int format) ; - -static int au_write_header (SF_PRIVATE *psf, int calc_length) ; -static int au_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -au_open (SF_PRIVATE *psf) -{ int subformat ; - int error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = au_read_header (psf))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AU) - return SFE_BAD_OPEN_FORMAT ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU) - psf->endian = SF_ENDIAN_LITTLE ; - else if (psf->endian != SF_ENDIAN_LITTLE) - psf->endian = SF_ENDIAN_BIG ; - - if (au_write_header (psf, SF_FALSE)) - return psf->error ; - - psf->write_header = au_write_header ; - } ; - - psf->container_close = au_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_ULAW : /* 8-bit Ulaw encoding. */ - ulaw_init (psf) ; - break ; - - case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */ - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */ - case SF_FORMAT_PCM_24 : /* 24-bit linear PCM */ - case SF_FORMAT_PCM_32 : /* 32-bit linear PCM. */ - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ALAW : /* 8-bit Alaw encoding. */ - alaw_init (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_FLOAT : /* 32-bit floats. */ - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : /* 64-bit double precision floats. */ - error = double64_init (psf) ; - break ; - - case SF_FORMAT_G721_32 : - error = g72x_init (psf) ; - psf->sf.seekable = SF_FALSE ; - break ; - - case SF_FORMAT_G723_24 : - error = g72x_init (psf) ; - psf->sf.seekable = SF_FALSE ; - break ; - - case SF_FORMAT_G723_40 : - error = g72x_init (psf) ; - psf->sf.seekable = SF_FALSE ; - break ; - /* Lite remove end */ - - default : break ; - } ; - - return error ; -} /* au_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -au_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - au_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* au_close */ - -static int -au_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int encoding, datalength ; - - if (psf->pipeoffset > 0) - return 0 ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - encoding = au_format_to_encoding (psf->sf.format & SF_FORMAT_SUBMASK) ; - if (! encoding) - return (psf->error = SFE_BAD_OPEN_FORMAT) ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - /* - ** Only attempt to seek if we are not writng to a pipe. If we are - ** writing to a pipe we shouldn't be here anyway. - */ - if (psf->is_pipe == SF_FALSE) - psf_fseek (psf, 0, SEEK_SET) ; - - /* - ** AU format files allow a datalength value of -1 if the datalength - ** is not know at the time the header is written. - ** Also use this value of -1 if the datalength > 2 gigabytes. - */ - if (psf->datalength < 0 || psf->datalength > 0x7FFFFFFF) - datalength = -1 ; - else - datalength = (int) (psf->datalength & 0x7FFFFFFF) ; - - if (psf->endian == SF_ENDIAN_BIG) - { psf_binheader_writef (psf, "Em4", DOTSND_MARKER, AU_DATA_OFFSET) ; - psf_binheader_writef (psf, "E4444", datalength, encoding, psf->sf.samplerate, psf->sf.channels) ; - } - else if (psf->endian == SF_ENDIAN_LITTLE) - { psf_binheader_writef (psf, "em4", DNSDOT_MARKER, AU_DATA_OFFSET) ; - psf_binheader_writef (psf, "e4444", datalength, encoding, psf->sf.samplerate, psf->sf.channels) ; - } - else - return (psf->error = SFE_BAD_OPEN_FORMAT) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* au_write_header */ - -static int -au_format_to_encoding (int format) -{ - switch (format) - { case SF_FORMAT_PCM_S8 : return AU_ENCODING_PCM_8 ; - case SF_FORMAT_PCM_16 : return AU_ENCODING_PCM_16 ; - case SF_FORMAT_PCM_24 : return AU_ENCODING_PCM_24 ; - case SF_FORMAT_PCM_32 : return AU_ENCODING_PCM_32 ; - - case SF_FORMAT_FLOAT : return AU_ENCODING_FLOAT ; - case SF_FORMAT_DOUBLE : return AU_ENCODING_DOUBLE ; - - case SF_FORMAT_ULAW : return AU_ENCODING_ULAW_8 ; - case SF_FORMAT_ALAW : return AU_ENCODING_ALAW_8 ; - - case SF_FORMAT_G721_32 : return AU_ENCODING_ADPCM_G721_32 ; - case SF_FORMAT_G723_24 : return AU_ENCODING_ADPCM_G723_24 ; - case SF_FORMAT_G723_40 : return AU_ENCODING_ADPCM_G723_40 ; - - default : break ; - } ; - return 0 ; -} /* au_format_to_encoding */ - -static int -au_read_header (SF_PRIVATE *psf) -{ AU_FMT au_fmt ; - int marker, dword ; - - memset (&au_fmt, 0, sizeof (au_fmt)) ; - psf_binheader_readf (psf, "pm", 0, &marker) ; - psf_log_printf (psf, "%M\n", marker) ; - - if (marker == DOTSND_MARKER) - { psf->endian = SF_ENDIAN_BIG ; - - psf_binheader_readf (psf, "E44444", &(au_fmt.dataoffset), &(au_fmt.datasize), - &(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ; - } - else if (marker == DNSDOT_MARKER) - { psf->endian = SF_ENDIAN_LITTLE ; - psf_binheader_readf (psf, "e44444", &(au_fmt.dataoffset), &(au_fmt.datasize), - &(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ; - } - else - return SFE_AU_NO_DOTSND ; - - psf_log_printf (psf, " Data Offset : %d\n", au_fmt.dataoffset) ; - - if (psf->fileoffset > 0 && au_fmt.datasize == -1) - { psf_log_printf (psf, " Data Size : -1\n") ; - return SFE_AU_EMBED_BAD_LEN ; - } ; - - if (psf->fileoffset > 0) - { psf->filelength = au_fmt.dataoffset + au_fmt.datasize ; - psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ; - } - else if (au_fmt.datasize == -1 || au_fmt.dataoffset + au_fmt.datasize == psf->filelength) - psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ; - else if (au_fmt.dataoffset + au_fmt.datasize < psf->filelength) - { psf->filelength = au_fmt.dataoffset + au_fmt.datasize ; - psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ; - } - else - { dword = psf->filelength - au_fmt.dataoffset ; - psf_log_printf (psf, " Data Size : %d (should be %d)\n", au_fmt.datasize, dword) ; - au_fmt.datasize = dword ; - } ; - - psf->dataoffset = au_fmt.dataoffset ; - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf_ftell (psf) < psf->dataoffset) - psf_binheader_readf (psf, "j", psf->dataoffset - psf_ftell (psf)) ; - - psf->sf.samplerate = au_fmt.samplerate ; - psf->sf.channels = au_fmt.channels ; - - /* Only fill in type major. */ - if (psf->endian == SF_ENDIAN_BIG) - psf->sf.format = SF_FORMAT_AU ; - else if (psf->endian == SF_ENDIAN_LITTLE) - psf->sf.format = SF_ENDIAN_LITTLE | SF_FORMAT_AU ; - - psf_log_printf (psf, " Encoding : %d => ", au_fmt.encoding) ; - - psf->sf.format = psf->sf.format & SF_FORMAT_ENDMASK ; - - switch (au_fmt.encoding) - { case AU_ENCODING_ULAW_8 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_ULAW ; - psf->bytewidth = 1 ; /* Before decoding */ - psf_log_printf (psf, "8-bit ISDN u-law\n") ; - break ; - - case AU_ENCODING_PCM_8 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_S8 ; - psf->bytewidth = 1 ; - psf_log_printf (psf, "8-bit linear PCM\n") ; - break ; - - case AU_ENCODING_PCM_16 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - psf_log_printf (psf, "16-bit linear PCM\n") ; - break ; - - case AU_ENCODING_PCM_24 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_24 ; - psf->bytewidth = 3 ; - psf_log_printf (psf, "24-bit linear PCM\n") ; - break ; - - case AU_ENCODING_PCM_32 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_32 ; - psf->bytewidth = 4 ; - psf_log_printf (psf, "32-bit linear PCM\n") ; - break ; - - case AU_ENCODING_FLOAT : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_FLOAT ; - psf->bytewidth = 4 ; - psf_log_printf (psf, "32-bit float\n") ; - break ; - - case AU_ENCODING_DOUBLE : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_DOUBLE ; - psf->bytewidth = 8 ; - psf_log_printf (psf, "64-bit double precision float\n") ; - break ; - - case AU_ENCODING_ALAW_8 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_ALAW ; - psf->bytewidth = 1 ; /* Before decoding */ - psf_log_printf (psf, "8-bit ISDN A-law\n") ; - break ; - - case AU_ENCODING_ADPCM_G721_32 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G721_32 ; - psf->bytewidth = 0 ; - psf_log_printf (psf, "G721 32kbs ADPCM\n") ; - break ; - - case AU_ENCODING_ADPCM_G723_24 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G723_24 ; - psf->bytewidth = 0 ; - psf_log_printf (psf, "G723 24kbs ADPCM\n") ; - break ; - - case AU_ENCODING_ADPCM_G723_40 : - psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G723_40 ; - psf->bytewidth = 0 ; - psf_log_printf (psf, "G723 40kbs ADPCM\n") ; - break ; - - case AU_ENCODING_ADPCM_G722 : - psf_log_printf (psf, "G722 64 kbs ADPCM (unsupported)\n") ; - break ; - - case AU_ENCODING_NEXT : - psf_log_printf (psf, "Weird NeXT encoding format (unsupported)\n") ; - break ; - - default : - psf_log_printf (psf, "Unknown!!\n") ; - break ; - } ; - - psf_log_printf (psf, " Sample Rate : %d\n", au_fmt.samplerate) ; - psf_log_printf (psf, " Channels : %d\n", au_fmt.channels) ; - - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - if (! psf->sf.frames && psf->blockwidth) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - - return 0 ; -} /* au_read_header */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 31f691b1-cde9-4ed2-9469-6bca60fb9cd0 -*/ diff --git a/Libraries/SndFile/Files/src/avr.c b/Libraries/SndFile/Files/src/avr.c deleted file mode 100644 index ad02c048a..000000000 --- a/Libraries/SndFile/Files/src/avr.c +++ /dev/null @@ -1,254 +0,0 @@ -/* -** Copyright (C) 2004-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#define TWOBIT_MARKER (MAKE_MARKER ('2', 'B', 'I', 'T')) -#define AVR_HDR_SIZE 128 - -#define SFE_AVR_X 666 - -/* -** From: hyc@hanauma.Jpl.Nasa.Gov (Howard Chu) -** -** A lot of PD software exists to play Mac .snd files on the ST. One other -** format that seems pretty popular (used by a number of commercial packages) -** is the AVR format (from Audio Visual Research). This format has a 128 byte -** header that looks like this (its actually packed, but thats not portable): -*/ - -typedef struct -{ int marker ; /* 2BIT */ - char name [8] ; /* null-padded sample name */ - short mono ; /* 0 = mono, 0xffff = stereo */ - short rez ; /* 8 = 8 bit, 16 = 16 bit */ - short sign ; /* 0 = unsigned, 0xffff = signed */ - - short loop ; /* 0 = no loop, 0xffff = looping sample */ - short midi ; /* 0xffff = no MIDI note assigned, */ - /* 0xffXX = single key note assignment */ - /* 0xLLHH = key split, low/hi note */ - int srate ; /* sample frequency in hertz */ - int frames ; /* sample length in bytes or words (see rez) */ - int lbeg ; /* offset to start of loop in bytes or words. */ - /* set to zero if unused */ - int lend ; /* offset to end of loop in bytes or words. */ - /* set to sample length if unused */ - short res1 ; /* Reserved, MIDI keyboard split */ - short res2 ; /* Reserved, sample compression */ - short res3 ; /* Reserved */ - char ext [20] ; /* Additional filename space, used if (name[7] != 0) */ - char user [64] ; /* User defined. Typically ASCII message */ -} AVR_HEADER ; - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int avr_close (SF_PRIVATE *psf) ; - -static int avr_read_header (SF_PRIVATE *psf) ; -static int avr_write_header (SF_PRIVATE *psf, int calc_length) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -avr_open (SF_PRIVATE *psf) -{ int error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = avr_read_header (psf))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AVR) - return SFE_BAD_OPEN_FORMAT ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - psf->endian = SF_ENDIAN_BIG ; - - if (avr_write_header (psf, SF_FALSE)) - return psf->error ; - - psf->write_header = avr_write_header ; - } ; - - psf->container_close = avr_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - error = pcm_init (psf) ; - - return error ; -} /* avr_open */ - -static int -avr_read_header (SF_PRIVATE *psf) -{ AVR_HEADER hdr ; - - memset (&hdr, 0, sizeof (hdr)) ; - - psf_binheader_readf (psf, "pmb", 0, &hdr.marker, &hdr.name, sizeof (hdr.name)) ; - psf_log_printf (psf, "%M\n", hdr.marker) ; - - if (hdr.marker != TWOBIT_MARKER) - return SFE_AVR_X ; - - psf_log_printf (psf, " Name : %s\n", hdr.name) ; - - psf_binheader_readf (psf, "E22222", &hdr.mono, &hdr.rez, &hdr.sign, &hdr.loop, &hdr.midi) ; - - psf->sf.channels = (hdr.mono & 1) + 1 ; - - psf_log_printf (psf, " Channels : %d\n Bit width : %d\n Signed : %s\n", - (hdr.mono & 1) + 1, hdr.rez, hdr.sign ? "yes" : "no") ; - - switch ((hdr.rez << 16) + (hdr.sign & 1)) - { case ((8 << 16) + 0) : - psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_U8 ; - psf->bytewidth = 1 ; - break ; - - case ((8 << 16) + 1) : - psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_S8 ; - psf->bytewidth = 1 ; - break ; - - case ((16 << 16) + 1) : - psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - break ; - - default : - psf_log_printf (psf, "Error : bad rez/sign combination.\n") ; - return SFE_AVR_X ; - } ; - - psf_binheader_readf (psf, "E4444", &hdr.srate, &hdr.frames, &hdr.lbeg, &hdr.lend) ; - - psf->sf.frames = hdr.frames ; - psf->sf.samplerate = hdr.srate ; - - psf_log_printf (psf, " Frames : %D\n", psf->sf.frames) ; - psf_log_printf (psf, " Sample rate : %d\n", psf->sf.samplerate) ; - - psf_binheader_readf (psf, "E222", &hdr.res1, &hdr.res2, &hdr.res3) ; - psf_binheader_readf (psf, "bb", hdr.ext, sizeof (hdr.ext), hdr.user, sizeof (hdr.user)) ; - - psf_log_printf (psf, " Ext : %s\n User : %s\n", hdr.ext, hdr.user) ; - - psf->endian = SF_ENDIAN_BIG ; - - psf->dataoffset = AVR_HDR_SIZE ; - psf->datalength = hdr.frames * (hdr.rez / 8) ; - - if (psf->fileoffset > 0) - psf->filelength = AVR_HDR_SIZE + psf->datalength ; - - if (psf_ftell (psf) != psf->dataoffset) - psf_binheader_readf (psf, "j", psf->dataoffset - psf_ftell (psf)) ; - - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - if (psf->sf.frames == 0 && psf->blockwidth) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - - return 0 ; -} /* avr_read_header */ - -static int -avr_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int sign ; - - if (psf->pipeoffset > 0) - return 0 ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - /* - ** Only attempt to seek if we are not writng to a pipe. If we are - ** writing to a pipe we shouldn't be here anyway. - */ - if (psf->is_pipe == SF_FALSE) - psf_fseek (psf, 0, SEEK_SET) ; - - psf_binheader_writef (psf, "Emz22", TWOBIT_MARKER, make_size_t (8), - psf->sf.channels == 2 ? 0xFFFF : 0, psf->bytewidth * 8) ; - - sign = ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_PCM_U8) ? 0 : 0xFFFF ; - - psf_binheader_writef (psf, "E222", sign, 0, 0xFFFF) ; - psf_binheader_writef (psf, "E4444", psf->sf.samplerate, psf->sf.frames, 0, 0) ; - - psf_binheader_writef (psf, "E222zz", 0, 0, 0, make_size_t (20), make_size_t (64)) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* avr_write_header */ - -static int -avr_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - avr_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* avr_close */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 0823d454-f39a-4a28-a776-607f1ef33b52 -*/ diff --git a/Libraries/SndFile/Files/src/caf.c b/Libraries/SndFile/Files/src/caf.c deleted file mode 100644 index 01f371989..000000000 --- a/Libraries/SndFile/Files/src/caf.c +++ /dev/null @@ -1,538 +0,0 @@ -/* -** Copyright (C) 2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define aac_MARKER MAKE_MARKER ('a', 'a', 'c', ' ') -#define alac_MARKER MAKE_MARKER ('a', 'l', 'a', 'c') -#define alaw_MARKER MAKE_MARKER ('a', 'l', 'a', 'w') -#define caff_MARKER MAKE_MARKER ('c', 'a', 'f', 'f') -#define chan_MARKER MAKE_MARKER ('c', 'h', 'a', 'n') -#define data_MARKER MAKE_MARKER ('d', 'a', 't', 'a') -#define desc_MARKER MAKE_MARKER ('d', 'e', 's', 'c') -#define edct_MARKER MAKE_MARKER ('e', 'd', 'c', 't') -#define free_MARKER MAKE_MARKER ('f', 'r', 'e', 'e') -#define ima4_MARKER MAKE_MARKER ('i', 'm', 'a', '4') -#define info_MARKER MAKE_MARKER ('i', 'n', 'f', 'o') -#define inst_MARKER MAKE_MARKER ('i', 'n', 's', 't') -#define kuki_MARKER MAKE_MARKER ('k', 'u', 'k', 'i') -#define lpcm_MARKER MAKE_MARKER ('l', 'p', 'c', 'm') -#define mark_MARKER MAKE_MARKER ('m', 'a', 'r', 'k') -#define midi_MARKER MAKE_MARKER ('m', 'i', 'd', 'i') -#define mp1_MARKER MAKE_MARKER ('.', 'm', 'p', '1') -#define mp2_MARKER MAKE_MARKER ('.', 'm', 'p', '2') -#define mp3_MARKER MAKE_MARKER ('.', 'm', 'p', '3') -#define ovvw_MARKER MAKE_MARKER ('o', 'v', 'v', 'w') -#define pakt_MARKER MAKE_MARKER ('p', 'a', 'k', 't') -#define peak_MARKER MAKE_MARKER ('p', 'e', 'a', 'k') -#define regn_MARKER MAKE_MARKER ('r', 'e', 'g', 'n') -#define strg_MARKER MAKE_MARKER ('s', 't', 'r', 'g') -#define umid_MARKER MAKE_MARKER ('u', 'm', 'i', 'd') -#define uuid_MARKER MAKE_MARKER ('u', 'u', 'i', 'd') -#define ulaw_MARKER MAKE_MARKER ('u', 'l', 'a', 'w') -#define MAC3_MARKER MAKE_MARKER ('M', 'A', 'C', '3') -#define MAC6_MARKER MAKE_MARKER ('M', 'A', 'C', '6') - -#define CAF_PEAK_CHUNK_SIZE(ch) (sizeof (int) + ch * (sizeof (float) + 8)) - -#define SFE_CAF_NOT_CAF 666 -#define SFE_CAF_NO_DESC 667 -#define SFE_CAF_BAD_PEAK 668 - -/*------------------------------------------------------------------------------ -** Typedefs. -*/ - -typedef struct -{ unsigned char srate [8] ; - unsigned int fmt_id ; - unsigned int fmt_flags ; - unsigned int pkt_bytes ; - unsigned int pkt_frames ; - unsigned int channels_per_frame ; - unsigned int bits_per_chan ; -} DESC_CHUNK ; - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int caf_close (SF_PRIVATE *psf) ; -static int caf_read_header (SF_PRIVATE *psf) ; -static int caf_write_header (SF_PRIVATE *psf, int calc_length) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -caf_open (SF_PRIVATE *psf) -{ int subformat, format, error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = caf_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - format = psf->sf.format & SF_FORMAT_TYPEMASK ; - if (format != SF_FORMAT_CAF) - return SFE_BAD_OPEN_FORMAT ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - if (psf->mode != SFM_RDWR || psf->filelength < 44) - { psf->filelength = 0 ; - psf->datalength = 0 ; - psf->dataoffset = 0 ; - psf->sf.frames = 0 ; - } ; - - psf->str_flags = SF_STR_ALLOW_START ; - - /* - ** By default, add the peak chunk to floating point files. Default behaviour - ** can be switched off using sf_command (SFC_SET_PEAK_CHUNK, SF_FALSE). - */ - if (psf->mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)) - { if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL) - return SFE_MALLOC_FAILED ; - psf->peak_info->peak_loc = SF_PEAK_START ; - } ; - - if ((error = caf_write_header (psf, SF_FALSE)) != 0) - return error ; - - psf->write_header = caf_write_header ; - } ; - - psf->container_close = caf_close ; - /*psf->command = caf_command ;*/ - - switch (subformat) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - /* Lite remove end */ - - default : - return SFE_UNSUPPORTED_ENCODING ; - } ; - - return error ; -} /* caf_open */ - -static int -caf_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - caf_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* caf_close */ - -/*------------------------------------------------------------------------------ -*/ - -static int -decode_desc_chunk (SF_PRIVATE *psf, const DESC_CHUNK *desc) -{ int format ; - - psf->sf.channels = desc->channels_per_frame ; - - format = SF_FORMAT_CAF | (psf->endian == SF_ENDIAN_LITTLE ? SF_ENDIAN_LITTLE : 0) ; - - if (desc->fmt_id == lpcm_MARKER && desc->fmt_flags & 1) - { /* Floating point data. */ - if (desc->bits_per_chan == 32 && desc->pkt_bytes == 4 * desc->channels_per_frame) - { psf->bytewidth = 4 ; - return format | SF_FORMAT_FLOAT ; - } ; - if (desc->bits_per_chan == 64 && desc->pkt_bytes == 8 * desc->channels_per_frame) - { psf->bytewidth = 8 ; - return format | SF_FORMAT_DOUBLE ; - } ; - } ; - - if ((desc->fmt_flags & 1) != 0) - { psf_log_printf (psf, "**** Ooops, 'desc' chunk suggests float data, but other info invalid.\n") ; - return 0 ; - } ; - - if (desc->fmt_id == lpcm_MARKER) - { /* Integer data. */ - if (desc->bits_per_chan == 32 && desc->pkt_bytes == 4 * desc->channels_per_frame) - { psf->bytewidth = 4 ; - return format | SF_FORMAT_PCM_32 ; - } ; - if (desc->bits_per_chan == 24 && desc->pkt_bytes == 3 * desc->channels_per_frame) - { psf->bytewidth = 3 ; - return format | SF_FORMAT_PCM_24 ; - } ; - if (desc->bits_per_chan == 16 && desc->pkt_bytes == 2 * desc->channels_per_frame) - { psf->bytewidth = 2 ; - return format | SF_FORMAT_PCM_16 ; - } ; - if (desc->bits_per_chan == 8 && desc->pkt_bytes == 1 * desc->channels_per_frame) - { psf->bytewidth = 1 ; - return format | SF_FORMAT_PCM_S8 ; - } ; - } ; - - if (desc->fmt_id == alaw_MARKER && desc->bits_per_chan == 8) - { psf->bytewidth = 1 ; - return format | SF_FORMAT_ALAW ; - } ; - - if (desc->fmt_id == ulaw_MARKER && desc->bits_per_chan == 8) - { psf->bytewidth = 1 ; - return format | SF_FORMAT_ULAW ; - } ; - - return 0 ; -} /* decode_desc_chunk */ - -static int -caf_read_header (SF_PRIVATE *psf) -{ DESC_CHUNK desc ; - sf_count_t chunk_size ; - double srate ; - short version, flags ; - int marker, k, have_data = 0 ; - - memset (&desc, 0, sizeof (desc)) ; - - /* Set position to start of file to begin reading header. */ - psf_binheader_readf (psf, "pmE2E2", 0, &marker, &version, &flags) ; - psf_log_printf (psf, "%M\n Version : %d\n Flags : %x\n", marker, version, flags) ; - if (marker != caff_MARKER) - return SFE_CAF_NOT_CAF ; - - psf_binheader_readf (psf, "mE8b", &marker, &chunk_size, psf->u.ucbuf, 8) ; - srate = double64_be_read (psf->u.ucbuf) ; - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), "%5.3f", srate) ; - psf_log_printf (psf, "%M : %D\n Sample rate : %s\n", marker, chunk_size, psf->u.cbuf) ; - if (marker != desc_MARKER) - return SFE_CAF_NO_DESC ; - - if (chunk_size < sizeof (DESC_CHUNK)) - { psf_log_printf (psf, "**** Chunk size too small. Should be > 32 bytes.\n") ; - return SFE_MALFORMED_FILE ; - } ; - - psf->sf.samplerate = lrint (srate) ; - - psf_binheader_readf (psf, "mE44444", &desc.fmt_id, &desc.fmt_flags, &desc.pkt_bytes, &desc.pkt_frames, - &desc.channels_per_frame, &desc.bits_per_chan) ; - psf_log_printf (psf, " Format id : %M\n Format flags : %x\n Bytes / packet : %u\n" - " Frames / packet : %u\n Channels / frame : %u\n Bits / channel : %u\n", - desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.pkt_frames, desc.channels_per_frame, desc.bits_per_chan) ; - - if (chunk_size > sizeof (DESC_CHUNK)) - psf_binheader_readf (psf, "j", (int) (chunk_size - sizeof (DESC_CHUNK))) ; - - psf->sf.channels = desc.channels_per_frame ; - - while (have_data == 0 && psf_ftell (psf) < psf->filelength - SIGNED_SIZEOF (marker)) - { psf_binheader_readf (psf, "mE8", &marker, &chunk_size) ; - - switch (marker) - { case peak_MARKER : - psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ; - if (chunk_size != CAF_PEAK_CHUNK_SIZE (psf->sf.channels)) - { psf_binheader_readf (psf, "j", (int) chunk_size) ; - psf_log_printf (psf, "*** File PEAK chunk %D should be %d.\n", chunk_size, CAF_PEAK_CHUNK_SIZE (psf->sf.channels)) ; - return SFE_CAF_BAD_PEAK ; - } ; - - if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL) - return SFE_MALLOC_FAILED ; - - /* read in rest of PEAK chunk. */ - psf_binheader_readf (psf, "E4", & (psf->peak_info->edit_number)) ; - psf_log_printf (psf, " edit count : %d\n", psf->peak_info->edit_number) ; - - psf_log_printf (psf, " Ch Position Value\n") ; - for (k = 0 ; k < psf->sf.channels ; k++) - { sf_count_t position ; - float value ; - - psf_binheader_readf (psf, "Ef8", &value, &position) ; - psf->peak_info->peaks [k].value = value ; - psf->peak_info->peaks [k].position = position ; - - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), " %2d %-12ld %g\n", k, (long) position, value) ; - psf_log_printf (psf, psf->u.cbuf) ; - } ; - - psf->peak_info->peak_loc = SF_PEAK_START ; - break ; - - case free_MARKER : - psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ; - psf_binheader_readf (psf, "j", (int) chunk_size) ; - break ; - - case data_MARKER : - psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ; - psf_binheader_readf (psf, "E4", &k) ; - psf_log_printf (psf, " edit : %u\n", k) ; - have_data = 1 ; - break ; - - default : - psf_log_printf (psf, " %M : %D (skipped)\n", marker, chunk_size) ; - psf_binheader_readf (psf, "j", (int) chunk_size) ; - break ; - } ; - } ; - - if (have_data == 0) - { psf_log_printf (psf, "**** Error, could not find 'data' chunk.\n") ; - return SFE_MALFORMED_FILE ; - } ; - - psf_log_printf (psf, "End\n") ; - - psf->dataoffset = psf_ftell (psf) ; - psf->datalength = psf->filelength - psf->dataoffset ; - psf->endian = (desc.fmt_flags & 2) ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ; - - if ((psf->sf.format = decode_desc_chunk (psf, &desc)) == 0) - return SFE_UNSUPPORTED_ENCODING ; - - if (psf->bytewidth > 0) - psf->sf.frames = psf->datalength / psf->bytewidth ; - - return 0 ; -} /* caf_read_header */ - -/*------------------------------------------------------------------------------ -*/ - -static int -caf_write_header (SF_PRIVATE *psf, int calc_length) -{ DESC_CHUNK desc ; - sf_count_t current, free_len ; - int subformat ; - - memset (&desc, 0, sizeof (desc)) ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->bytewidth > 0) - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* 'caff' marker, version and flags. */ - psf_binheader_writef (psf, "Em22", caff_MARKER, 1, 0) ; - - /* 'desc' marker and chunk size. */ - psf_binheader_writef (psf, "Em8", desc_MARKER, (sf_count_t) (sizeof (DESC_CHUNK))) ; - - double64_be_write (1.0 * psf->sf.samplerate, psf->u.ucbuf) ; - psf_binheader_writef (psf, "b", psf->u.ucbuf, 8) ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - - if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)) - psf->endian = SF_ENDIAN_BIG ; - else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_LITTLE || psf->endian == SF_ENDIAN_CPU)) - psf->endian = SF_ENDIAN_LITTLE ; - - if (psf->endian == SF_ENDIAN_LITTLE) - desc.fmt_flags = 2 ; - else - psf->endian = SF_ENDIAN_BIG ; - - /* initial section (same for all, it appears) */ - switch (subformat) - { case SF_FORMAT_PCM_S8 : - desc.fmt_id = lpcm_MARKER ; - psf->bytewidth = 1 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 8 ; - break ; - - case SF_FORMAT_PCM_16 : - desc.fmt_id = lpcm_MARKER ; - psf->bytewidth = 2 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 16 ; - break ; - - case SF_FORMAT_PCM_24 : - psf->bytewidth = 3 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 24 ; - desc.fmt_id = lpcm_MARKER ; - break ; - - case SF_FORMAT_PCM_32 : - desc.fmt_id = lpcm_MARKER ; - psf->bytewidth = 4 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 32 ; - break ; - - case SF_FORMAT_FLOAT : - desc.fmt_id = lpcm_MARKER ; - desc.fmt_flags |= 1 ; - psf->bytewidth = 4 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 32 ; - break ; - - case SF_FORMAT_DOUBLE : - desc.fmt_id = lpcm_MARKER ; - desc.fmt_flags |= 1 ; - psf->bytewidth = 8 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 64 ; - break ; - - case SF_FORMAT_ALAW : - desc.fmt_id = alaw_MARKER ; - psf->bytewidth = 1 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 8 ; - break ; - - case SF_FORMAT_ULAW : - desc.fmt_id = ulaw_MARKER ; - psf->bytewidth = 1 ; - desc.pkt_bytes = psf->bytewidth * psf->sf.channels ; - desc.pkt_frames = 1 ; - desc.channels_per_frame = psf->sf.channels ; - desc.bits_per_chan = 8 ; - break ; - - default : - return SFE_UNIMPLEMENTED ; - } ; - - psf_binheader_writef (psf, "mE44444", desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.pkt_frames, desc.channels_per_frame, desc.bits_per_chan) ; - -#if 0 - if (psf->str_flags & SF_STR_LOCATE_START) - caf_write_strings (psf, SF_STR_LOCATE_START) ; -#endif - - if (psf->peak_info != NULL) - { int k ; - psf_binheader_writef (psf, "Em84", peak_MARKER, (sf_count_t) CAF_PEAK_CHUNK_SIZE (psf->sf.channels), psf->peak_info->edit_number) ; - for (k = 0 ; k < psf->sf.channels ; k++) - psf_binheader_writef (psf, "Ef8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ; - } ; - - /* Add free chunk so that the actual audio data starts at a multiple 0x1000. */ - free_len = 0x1000 - psf->headindex - 16 - 12 ; - while (free_len < 0) - free_len += 0x1000 ; - psf_binheader_writef (psf, "Em8z", free_MARKER, free_len, (int) free_len) ; - - psf_binheader_writef (psf, "Em84", data_MARKER, psf->datalength, 0) ; - - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - if (current < psf->dataoffset) - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - else if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* caf_write_header */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 65883e65-bd3c-4618-9241-d3c02fd630bd -*/ diff --git a/Libraries/SndFile/Files/src/command.c b/Libraries/SndFile/Files/src/command.c deleted file mode 100644 index 861d15930..000000000 --- a/Libraries/SndFile/Files/src/command.c +++ /dev/null @@ -1,338 +0,0 @@ -/* -** Copyright (C) 2001-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "common.h" - -static SF_FORMAT_INFO const simple_formats [] = -{ - { SF_FORMAT_AIFF | SF_FORMAT_PCM_16, - "AIFF (Apple/SGI 16 bit PCM)", "aiff" - }, - - { SF_FORMAT_AIFF | SF_FORMAT_FLOAT, - "AIFF (Apple/SGI 32 bit float)", "aifc" - }, - - { SF_FORMAT_AIFF | SF_FORMAT_PCM_S8, - "AIFF (Apple/SGI 8 bit PCM)", "aiff" - }, - - { SF_FORMAT_AU | SF_FORMAT_PCM_16, - "AU (Sun/Next 16 bit PCM)", "au" - }, - - { SF_FORMAT_AU | SF_FORMAT_ULAW, - "AU (Sun/Next 8-bit u-law)", "au" - }, - - { SF_FORMAT_CAF | SF_FORMAT_PCM_16, - "CAF (Apple 16 bit PCM)", "caf" - }, - -#ifdef HAVE_FLAC_ALL_H - { SF_FORMAT_FLAC | SF_FORMAT_PCM_16, - "FLAC 16 bit", "flac" - }, -#endif - - { SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, - "OKI Dialogic VOX ADPCM", "vox" - }, - - { SF_FORMAT_WAV | SF_FORMAT_PCM_16, - "WAV (Microsoft 16 bit PCM)", "wav" - }, - - { SF_FORMAT_WAV | SF_FORMAT_FLOAT, - "WAV (Microsoft 32 bit float)", "wav" - }, - - { SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, - "WAV (Microsoft 4 bit IMA ADPCM)", "wav" - }, - - { SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, - "WAV (Microsoft 4 bit MS ADPCM)", "wav" - }, - - { SF_FORMAT_WAV | SF_FORMAT_PCM_U8, - "WAV (Microsoft 8 bit PCM)", "wav" - }, - -} ; /* simple_formats */ - -int -psf_get_format_simple_count (void) -{ return (sizeof (simple_formats) / sizeof (SF_FORMAT_INFO)) ; -} /* psf_get_format_simple_count */ - -int -psf_get_format_simple (SF_FORMAT_INFO *data) -{ int indx ; - - if (data->format < 0 || data->format >= (SIGNED_SIZEOF (simple_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO))) - return SFE_BAD_CONTROL_CMD ; - - indx = data->format ; - memcpy (data, &(simple_formats [indx]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ; - - return 0 ; -} /* psf_get_format_simple */ - -/*============================================================================ -** Major format info. -*/ - -static SF_FORMAT_INFO const major_formats [] = -{ - { SF_FORMAT_AIFF, "AIFF (Apple/SGI)", "aiff" }, - { SF_FORMAT_AU, "AU (Sun/NeXT)", "au" }, - { SF_FORMAT_AVR, "AVR (Audio Visual Research)", "avr" }, - { SF_FORMAT_CAF, "CAF (Apple Core Audio File)", "caf" }, -#ifdef HAVE_FLAC_ALL_H - { SF_FORMAT_FLAC, "FLAC (FLAC Lossless Audio Codec)", "flac" }, -#endif - { SF_FORMAT_HTK, "HTK (HMM Tool Kit)", "htk" }, - { SF_FORMAT_SVX, "IFF (Amiga IFF/SVX8/SV16)", "iff" }, - { SF_FORMAT_MAT4, "MAT4 (GNU Octave 2.0 / Matlab 4.2)", "mat" }, - { SF_FORMAT_MAT5, "MAT5 (GNU Octave 2.1 / Matlab 5.0)", "mat" }, - { SF_FORMAT_PAF, "PAF (Ensoniq PARIS)", "paf" }, - { SF_FORMAT_PVF, "PVF (Portable Voice Format)", "pvf" }, - { SF_FORMAT_RAW, "RAW (header-less)", "raw" }, - { SF_FORMAT_SD2, "SD2 (Sound Designer II)", "sd2" }, - { SF_FORMAT_SDS, "SDS (Midi Sample Dump Standard)", "sds" }, - { SF_FORMAT_IRCAM, "SF (Berkeley/IRCAM/CARL)", "sf" }, - { SF_FORMAT_VOC, "VOC (Creative Labs)", "voc" }, - { SF_FORMAT_W64, "W64 (SoundFoundry WAVE 64)", "w64" }, - { SF_FORMAT_WAV, "WAV (Microsoft)", "wav" }, - { SF_FORMAT_NIST, "WAV (NIST Sphere)", "wav" }, - { SF_FORMAT_WAVEX, "WAVEX (Microsoft)", "wav" }, - { SF_FORMAT_XI, "XI (FastTracker 2)", "xi" }, - -} ; /* major_formats */ - -int -psf_get_format_major_count (void) -{ return (sizeof (major_formats) / sizeof (SF_FORMAT_INFO)) ; -} /* psf_get_format_major_count */ - -int -psf_get_format_major (SF_FORMAT_INFO *data) -{ int indx ; - - if (data->format < 0 || data->format >= (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO))) - return SFE_BAD_CONTROL_CMD ; - - indx = data->format ; - memcpy (data, &(major_formats [indx]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ; - - return 0 ; -} /* psf_get_format_major */ - -/*============================================================================ -** Subtype format info. -*/ - -static SF_FORMAT_INFO subtype_formats [] = -{ - { SF_FORMAT_PCM_S8, "Signed 8 bit PCM", NULL }, - { SF_FORMAT_PCM_16, "Signed 16 bit PCM", NULL }, - { SF_FORMAT_PCM_24, "Signed 24 bit PCM", NULL }, - { SF_FORMAT_PCM_32, "Signed 32 bit PCM", NULL }, - - { SF_FORMAT_PCM_U8, "Unsigned 8 bit PCM", NULL }, - - { SF_FORMAT_FLOAT, "32 bit float", NULL }, - { SF_FORMAT_DOUBLE, "64 bit float", NULL }, - - { SF_FORMAT_ULAW, "U-Law", NULL }, - { SF_FORMAT_ALAW, "A-Law", NULL }, - { SF_FORMAT_IMA_ADPCM, "IMA ADPCM", NULL }, - { SF_FORMAT_MS_ADPCM, "Microsoft ADPCM", NULL }, - - { SF_FORMAT_GSM610, "GSM 6.10", NULL }, - - { SF_FORMAT_G721_32, "32kbs G721 ADPCM", NULL }, - { SF_FORMAT_G723_24, "24kbs G723 ADPCM", NULL }, - - { SF_FORMAT_DWVW_12, "12 bit DWVW", NULL }, - { SF_FORMAT_DWVW_16, "16 bit DWVW", NULL }, - { SF_FORMAT_DWVW_24, "24 bit DWVW", NULL }, - { SF_FORMAT_VOX_ADPCM, "VOX ADPCM", "vox" }, - - { SF_FORMAT_DPCM_16, "16 bit DPCM", NULL }, - { SF_FORMAT_DPCM_8, "8 bit DPCM", NULL } -} ; /* subtype_formats */ - -int -psf_get_format_subtype_count (void) -{ return (sizeof (subtype_formats) / sizeof (SF_FORMAT_INFO)) ; -} /* psf_get_format_subtype_count */ - -int -psf_get_format_subtype (SF_FORMAT_INFO *data) -{ int indx ; - - if (data->format < 0 || data->format >= (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO))) - return SFE_BAD_CONTROL_CMD ; - - indx = data->format ; - memcpy (data, &(subtype_formats [indx]), sizeof (SF_FORMAT_INFO)) ; - - return 0 ; -} /* psf_get_format_subtype */ - -/*============================================================================== -*/ - -int -psf_get_format_info (SF_FORMAT_INFO *data) -{ int k, format ; - - if (data->format & SF_FORMAT_TYPEMASK) - { format = data->format & SF_FORMAT_TYPEMASK ; - - for (k = 0 ; k < (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)) ; k++) - { if (format == major_formats [k].format) - { memcpy (data, &(major_formats [k]), sizeof (SF_FORMAT_INFO)) ; - return 0 ; - } ; - } ; - } - else if (data->format & SF_FORMAT_SUBMASK) - { format = data->format & SF_FORMAT_SUBMASK ; - - for (k = 0 ; k < (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)) ; k++) - { if (format == subtype_formats [k].format) - { memcpy (data, &(subtype_formats [k]), sizeof (SF_FORMAT_INFO)) ; - return 0 ; - } ; - } ; - } ; - - memset (data, 0, sizeof (SF_FORMAT_INFO)) ; - - return SFE_BAD_CONTROL_CMD ; -} /* psf_get_format_info */ - -/*============================================================================== -*/ - -double -psf_calc_signal_max (SF_PRIVATE *psf, int normalize) -{ sf_count_t position ; - double max_val, temp, *data ; - int k, len, readcount, save_state ; - - /* If the file is not seekable, there is nothing we can do. */ - if (! psf->sf.seekable) - { psf->error = SFE_NOT_SEEKABLE ; - return 0.0 ; - } ; - - if (! psf->read_double) - { psf->error = SFE_UNIMPLEMENTED ; - return 0.0 ; - } ; - - save_state = sf_command ((SNDFILE*) psf, SFC_GET_NORM_DOUBLE, NULL, 0) ; - sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, normalize) ; - - /* Brute force. Read the whole file and find the biggest sample. */ - /* Get current position in file */ - position = sf_seek ((SNDFILE*) psf, 0, SEEK_CUR) ; - /* Go to start of file. */ - sf_seek ((SNDFILE*) psf, 0, SEEK_SET) ; - - data = psf->u.dbuf ; - len = ARRAY_LEN (psf->u.dbuf) ; - - for (readcount = 1, max_val = 0.0 ; readcount > 0 ; /* nothing */) - { readcount = sf_read_double ((SNDFILE*) psf, data, len) ; - for (k = 0 ; k < readcount ; k++) - { temp = fabs (data [k]) ; - max_val = temp > max_val ? temp : max_val ; - } ; - } ; - - /* Return to SNDFILE to original state. */ - sf_seek ((SNDFILE*) psf, position, SEEK_SET) ; - sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ; - - return max_val ; -} /* psf_calc_signal_max */ - -int -psf_calc_max_all_channels (SF_PRIVATE *psf, double *peaks, int normalize) -{ sf_count_t position ; - double temp, *data ; - int k, len, readcount, save_state ; - int chan ; - - /* If the file is not seekable, there is nothing we can do. */ - if (! psf->sf.seekable) - return (psf->error = SFE_NOT_SEEKABLE) ; - - if (! psf->read_double) - return (psf->error = SFE_UNIMPLEMENTED) ; - - save_state = sf_command ((SNDFILE*) psf, SFC_GET_NORM_DOUBLE, NULL, 0) ; - sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, normalize) ; - - memset (peaks, 0, sizeof (double) * psf->sf.channels) ; - - /* Brute force. Read the whole file and find the biggest sample for each channel. */ - position = sf_seek ((SNDFILE*) psf, 0, SEEK_CUR) ; /* Get current position in file */ - sf_seek ((SNDFILE*) psf, 0, SEEK_SET) ; /* Go to start of file. */ - - len = ARRAY_LEN (psf->u.dbuf) ; - - data = psf->u.dbuf ; - - chan = 0 ; - readcount = len ; - while (readcount > 0) - { readcount = sf_read_double ((SNDFILE*) psf, data, len) ; - for (k = 0 ; k < readcount ; k++) - { temp = fabs (data [k]) ; - peaks [chan] = temp > peaks [chan] ? temp : peaks [chan] ; - chan = (chan + 1) % psf->sf.channels ; - } ; - } ; - - sf_seek ((SNDFILE*) psf, position, SEEK_SET) ; /* Return to original position. */ - - sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ; - - return 0 ; -} /* psf_calc_max_all_channels */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 0aae0d9d-ab2b-4d70-ade3-47a534666f8e -*/ diff --git a/Libraries/SndFile/Files/src/common.c b/Libraries/SndFile/Files/src/common.c deleted file mode 100644 index d75dad547..000000000 --- a/Libraries/SndFile/Files/src/common.c +++ /dev/null @@ -1,1287 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*----------------------------------------------------------------------------------------------- -** psf_log_printf allows libsndfile internal functions to print to an internal logbuffer which -** can later be displayed. -** The format specifiers are as for printf but without the field width and other modifiers. -** Printing is performed to the logbuffer char array of the SF_PRIVATE struct. -** Printing is done in such a way as to guarantee that the log never overflows the end of the -** logbuffer array. -*/ - -static inline void -log_putchar (SF_PRIVATE *psf, char ch) -{ if (psf->logindex < SIGNED_SIZEOF (psf->logbuffer) - 1) - { psf->logbuffer [psf->logindex++] = ch ; - psf->logbuffer [psf->logindex] = 0 ; - } ; - return ; -} /* log_putchar */ - -void -psf_log_printf (SF_PRIVATE *psf, const char *format, ...) -{ va_list ap ; - unsigned int u ; - int d, tens, shift, width, width_specifier, left_align ; - char c, *strptr, istr [5], lead_char, sign_char ; - - va_start (ap, format) ; - - while ((c = *format++)) - { if (c != '%') - { log_putchar (psf, c) ; - continue ; - } ; - - if (format [0] == '%') /* Handle %% */ - { log_putchar (psf, '%') ; - format ++ ; - continue ; - } ; - - sign_char = 0 ; - left_align = SF_FALSE ; - while (1) - { switch (format [0]) - { case ' ' : - case '+' : - sign_char = format [0] ; - format ++ ; - continue ; - - case '-' : - left_align = SF_TRUE ; - format ++ ; - continue ; - - default : break ; - } ; - - break ; - } ; - - if (format [0] == 0) - break ; - - lead_char = ' ' ; - if (format [0] == '0') - lead_char = '0' ; - - width_specifier = 0 ; - while ((c = *format++) && isdigit (c)) - width_specifier = width_specifier * 10 + (c - '0') ; - - switch (c) - { case 0 : /* NULL character. */ - va_end (ap) ; - return ; - - case 's': /* string */ - strptr = va_arg (ap, char *) ; - if (strptr == NULL) - break ; - width_specifier -= strlen (strptr) ; - if (left_align == SF_FALSE) - while (width_specifier -- > 0) - log_putchar (psf, ' ') ; - while (*strptr) - log_putchar (psf, *strptr++) ; - while (width_specifier -- > 0) - log_putchar (psf, ' ') ; - break ; - - case 'd': /* int */ - d = va_arg (ap, int) ; - - if (d < 0) - { d = -d ; - sign_char = '-' ; - if (lead_char != '0' && left_align == SF_FALSE) - width_specifier -- ; - } ; - - tens = 1 ; - width = 1 ; - while (d / tens >= 10) - { tens *= 10 ; - width ++ ; - } ; - - width_specifier -= width ; - - if (sign_char == ' ') - { log_putchar (psf, ' ') ; - width_specifier -- ; - } ; - - if (left_align == SF_FALSE && lead_char != '0') - { if (sign_char == '+') - width_specifier -- ; - - while (width_specifier -- > 0) - log_putchar (psf, lead_char) ; - } ; - - if (sign_char == '+' || sign_char == '-') - { log_putchar (psf, sign_char) ; - width_specifier -- ; - } ; - - if (left_align == SF_FALSE) - while (width_specifier -- > 0) - log_putchar (psf, lead_char) ; - - while (tens > 0) - { log_putchar (psf, '0' + d / tens) ; - d %= tens ; - tens /= 10 ; - } ; - - while (width_specifier -- > 0) - log_putchar (psf, lead_char) ; - break ; - - case 'D': /* sf_count_t */ - { sf_count_t D, Tens ; - - D = va_arg (ap, sf_count_t) ; - - if (D == 0) - { while (-- width_specifier > 0) - log_putchar (psf, lead_char) ; - log_putchar (psf, '0') ; - break ; - } - if (D < 0) - { log_putchar (psf, '-') ; - D = -D ; - } ; - Tens = 1 ; - width = 1 ; - while (D / Tens >= 10) - { Tens *= 10 ; - width ++ ; - } ; - - while (width_specifier > width) - { log_putchar (psf, lead_char) ; - width_specifier-- ; - } ; - - while (Tens > 0) - { log_putchar (psf, '0' + D / Tens) ; - D %= Tens ; - Tens /= 10 ; - } ; - } ; - break ; - - case 'u': /* unsigned int */ - u = va_arg (ap, unsigned int) ; - - tens = 1 ; - width = 1 ; - while (u / tens >= 10) - { tens *= 10 ; - width ++ ; - } ; - - width_specifier -= width ; - - if (sign_char == ' ') - { log_putchar (psf, ' ') ; - width_specifier -- ; - } ; - - if (left_align == SF_FALSE && lead_char != '0') - { if (sign_char == '+') - width_specifier -- ; - - while (width_specifier -- > 0) - log_putchar (psf, lead_char) ; - } ; - - if (sign_char == '+' || sign_char == '-') - { log_putchar (psf, sign_char) ; - width_specifier -- ; - } ; - - if (left_align == SF_FALSE) - while (width_specifier -- > 0) - log_putchar (psf, lead_char) ; - - while (tens > 0) - { log_putchar (psf, '0' + u / tens) ; - u %= tens ; - tens /= 10 ; - } ; - - while (width_specifier -- > 0) - log_putchar (psf, lead_char) ; - break ; - - case 'c': /* char */ - c = va_arg (ap, int) & 0xFF ; - log_putchar (psf, c) ; - break ; - - case 'x': /* hex */ - case 'X': /* hex */ - d = va_arg (ap, int) ; - - if (d == 0) - { while (--width_specifier > 0) - log_putchar (psf, lead_char) ; - log_putchar (psf, '0') ; - break ; - } ; - shift = 28 ; - width = (width_specifier < 8) ? 8 : width_specifier ; - while (! ((0xF << shift) & d)) - { shift -= 4 ; - width -- ; - } ; - - while (width > 0 && width_specifier > width) - { log_putchar (psf, lead_char) ; - width_specifier-- ; - } ; - - while (shift >= 0) - { c = (d >> shift) & 0xF ; - log_putchar (psf, (c > 9) ? c + 'A' - 10 : c + '0') ; - shift -= 4 ; - } ; - break ; - - case 'M': /* int2str */ - d = va_arg (ap, int) ; - if (CPU_IS_LITTLE_ENDIAN) - { istr [0] = d & 0xFF ; - istr [1] = (d >> 8) & 0xFF ; - istr [2] = (d >> 16) & 0xFF ; - istr [3] = (d >> 24) & 0xFF ; - } - else - { istr [3] = d & 0xFF ; - istr [2] = (d >> 8) & 0xFF ; - istr [1] = (d >> 16) & 0xFF ; - istr [0] = (d >> 24) & 0xFF ; - } ; - istr [4] = 0 ; - strptr = istr ; - while (*strptr) - { c = *strptr++ ; - log_putchar (psf, c) ; - } ; - break ; - - default : - log_putchar (psf, '*') ; - log_putchar (psf, c) ; - log_putchar (psf, '*') ; - break ; - } /* switch */ - } /* while */ - - va_end (ap) ; - return ; -} /* psf_log_printf */ - -#ifndef PSF_LOG_PRINTF_ONLY -/*----------------------------------------------------------------------------------------------- -** ASCII header printf functions. -** Some formats (ie NIST) use ascii text in their headers. -** Format specifiers are the same as the standard printf specifiers (uses vsnprintf). -** If this generates a compile error on any system, the author should be notified -** so an alternative vsnprintf can be provided. -*/ - -void -psf_asciiheader_printf (SF_PRIVATE *psf, const char *format, ...) -{ va_list argptr ; - int maxlen ; - char *start ; - - maxlen = strlen ((char*) psf->header) ; - start = ((char*) psf->header) + maxlen ; - maxlen = sizeof (psf->header) - maxlen ; - - va_start (argptr, format) ; - LSF_VSNPRINTF (start, maxlen, format, argptr) ; - va_end (argptr) ; - - /* Make sure the string is properly terminated. */ - start [maxlen - 1] = 0 ; - - psf->headindex = strlen ((char*) psf->header) ; - - return ; -} /* psf_asciiheader_printf */ - -/*----------------------------------------------------------------------------------------------- -** Binary header writing functions. Returns number of bytes written. -** -** Format specifiers for psf_binheader_writef are as follows -** m - marker - four bytes - no endian manipulation -** -** e - all following numerical values will be little endian -** E - all following numerical values will be big endian -** -** t - all following O types will be truncated to 4 bytes -** T - switch off truncation of all following O types -** -** 1 - single byte value -** 2 - two byte value -** 3 - three byte value -** 4 - four byte value -** 8 - eight byte value (sometimes written as 4 bytes) -** -** s - string preceded by a four byte length -** S - string including null terminator -** f - floating point data -** d - double precision floating point data -** h - 16 binary bytes value -** -** b - binary data (see below) -** z - zero bytes (ses below) -** j - jump forwards or backwards -** -** To write a word followed by an int (both little endian) use: -** psf_binheader_writef ("e24", wordval, longval) ; -** -** To write binary data use: -** psf_binheader_writef ("b", &bindata, sizeof (bindata)) ; -** -** To write N zero bytes use: -** NOTE: due to platform issues (ie x86-64) you should cast the -** argument to size_t or ensure the variable type is size_t. -** psf_binheader_writef ("z", N) ; -*/ - -/* These macros may seem a bit messy but do prevent problems with processors which -** seg. fault when asked to write an int or short to a non-int/short aligned address. -*/ - -static inline void -header_put_byte (SF_PRIVATE *psf, char x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 1) - psf->header [psf->headindex++] = x ; -} /* header_put_byte */ - -#if (CPU_IS_BIG_ENDIAN == 1) -static inline void -header_put_marker (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4) - { psf->header [psf->headindex++] = (x >> 24) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = x ; - } ; -} /* header_put_marker */ - -#elif (CPU_IS_LITTLE_ENDIAN == 1) -static inline void -header_put_marker (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4) - { psf->header [psf->headindex++] = x ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 24) ; - } ; -} /* header_put_marker */ - -#else -# error "Cannot determine endian-ness of processor." -#endif - - -static inline void -header_put_be_short (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 2) - { psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = x ; - } ; -} /* header_put_be_short */ - -static inline void -header_put_le_short (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 2) - { psf->header [psf->headindex++] = x ; - psf->header [psf->headindex++] = (x >> 8) ; - } ; -} /* header_put_le_short */ - -static inline void -header_put_be_3byte (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 3) - { psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = x ; - } ; -} /* header_put_be_3byte */ - -static inline void -header_put_le_3byte (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 3) - { psf->header [psf->headindex++] = x ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = (x >> 16) ; - } ; -} /* header_put_le_3byte */ - -static inline void -header_put_be_int (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4) - { psf->header [psf->headindex++] = (x >> 24) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = x ; - } ; -} /* header_put_be_int */ - -static inline void -header_put_le_int (SF_PRIVATE *psf, int x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4) - { psf->header [psf->headindex++] = x ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 24) ; - } ; -} /* header_put_le_int */ - -#if (SIZEOF_SF_COUNT_T == 4) - -static inline void -header_put_be_8byte (SF_PRIVATE *psf, sf_count_t x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8) - { psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = (x >> 24) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = x ; - } ; -} /* header_put_be_8byte */ - -static inline void -header_put_le_8byte (SF_PRIVATE *psf, sf_count_t x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8) - { psf->header [psf->headindex++] = x ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 24) ; - psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = 0 ; - psf->header [psf->headindex++] = 0 ; - } ; -} /* header_put_le_8byte */ - -#elif (SIZEOF_SF_COUNT_T == 8) - -static inline void -header_put_be_8byte (SF_PRIVATE *psf, sf_count_t x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8) - { psf->header [psf->headindex++] = (x >> 56) ; - psf->header [psf->headindex++] = (x >> 48) ; - psf->header [psf->headindex++] = (x >> 40) ; - psf->header [psf->headindex++] = (x >> 32) ; - psf->header [psf->headindex++] = (x >> 24) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = x ; - } ; -} /* header_put_be_8byte */ - -static inline void -header_put_le_8byte (SF_PRIVATE *psf, sf_count_t x) -{ if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8) - { psf->header [psf->headindex++] = x ; - psf->header [psf->headindex++] = (x >> 8) ; - psf->header [psf->headindex++] = (x >> 16) ; - psf->header [psf->headindex++] = (x >> 24) ; - psf->header [psf->headindex++] = (x >> 32) ; - psf->header [psf->headindex++] = (x >> 40) ; - psf->header [psf->headindex++] = (x >> 48) ; - psf->header [psf->headindex++] = (x >> 56) ; - } ; -} /* header_put_le_8byte */ - -#else -#error "SIZEOF_SF_COUNT_T is not defined." -#endif - -int -psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...) -{ va_list argptr ; - sf_count_t countdata ; - unsigned long longdata ; - unsigned int data ; - float floatdata ; - double doubledata ; - void *bindata ; - size_t size ; - char c, *strptr ; - int count = 0, trunc_8to4 ; - - trunc_8to4 = SF_FALSE ; - - va_start (argptr, format) ; - - while ((c = *format++)) - { switch (c) - { case 'e' : /* All conversions are now from LE to host. */ - psf->rwf_endian = SF_ENDIAN_LITTLE ; - break ; - - case 'E' : /* All conversions are now from BE to host. */ - psf->rwf_endian = SF_ENDIAN_BIG ; - break ; - - case 't' : /* All 8 byte values now get written as 4 bytes. */ - trunc_8to4 = SF_TRUE ; - break ; - - case 'T' : /* All 8 byte values now get written as 8 bytes. */ - trunc_8to4 = SF_FALSE ; - break ; - - case 'm' : - data = va_arg (argptr, unsigned int) ; - header_put_marker (psf, data) ; - count += 4 ; - break ; - - case '1' : - data = va_arg (argptr, unsigned int) ; - header_put_byte (psf, data) ; - count += 1 ; - break ; - - case '2' : - data = va_arg (argptr, unsigned int) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - { header_put_be_short (psf, data) ; - } - else - { header_put_le_short (psf, data) ; - } ; - count += 2 ; - break ; - - case '3' : /* tribyte */ - data = va_arg (argptr, unsigned int) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - { header_put_be_3byte (psf, data) ; - } - else - { header_put_le_3byte (psf, data) ; - } ; - count += 3 ; - break ; - - case '4' : - data = va_arg (argptr, unsigned int) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - { header_put_be_int (psf, data) ; - } - else - { header_put_le_int (psf, data) ; - } ; - count += 4 ; - break ; - - case '8' : - countdata = va_arg (argptr, sf_count_t) ; - if (psf->rwf_endian == SF_ENDIAN_BIG && trunc_8to4 == SF_FALSE) - { header_put_be_8byte (psf, countdata) ; - count += 8 ; - } - else if (psf->rwf_endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_FALSE) - { header_put_le_8byte (psf, countdata) ; - count += 8 ; - } - else if (psf->rwf_endian == SF_ENDIAN_BIG && trunc_8to4 == SF_TRUE) - { longdata = countdata & 0xFFFFFFFF ; - header_put_be_int (psf, longdata) ; - count += 4 ; - } - else if (psf->rwf_endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_TRUE) - { longdata = countdata & 0xFFFFFFFF ; - header_put_le_int (psf, longdata) ; - count += 4 ; - } - break ; - - case 'f' : - /* Floats are passed as doubles. Is this always true? */ - floatdata = (float) va_arg (argptr, double) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - float32_be_write (floatdata, psf->header + psf->headindex) ; - else - float32_le_write (floatdata, psf->header + psf->headindex) ; - psf->headindex += 4 ; - count += 4 ; - break ; - - case 'd' : - doubledata = va_arg (argptr, double) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - double64_be_write (doubledata, psf->header + psf->headindex) ; - else - double64_le_write (doubledata, psf->header + psf->headindex) ; - psf->headindex += 8 ; - count += 8 ; - break ; - - case 's' : - /* Write a C string (guaranteed to have a zero terminator). */ - strptr = va_arg (argptr, char *) ; - size = strlen (strptr) + 1 ; - size += (size & 1) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - header_put_be_int (psf, size) ; - else - header_put_le_int (psf, size) ; - memcpy (&(psf->header [psf->headindex]), strptr, size) ; - psf->headindex += size ; - psf->header [psf->headindex - 1] = 0 ; - count += 4 + size ; - break ; - - case 'S' : - /* - ** Write an AIFF style string (no zero terminator but possibly - ** an extra pad byte if the string length is odd). - */ - strptr = va_arg (argptr, char *) ; - size = strlen (strptr) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - header_put_be_int (psf, size) ; - else - header_put_le_int (psf, size) ; - memcpy (&(psf->header [psf->headindex]), strptr, size + 1) ; - size += (size & 1) ; - psf->headindex += size ; - psf->header [psf->headindex] = 0 ; - count += 4 + size ; - break ; - - case 'b' : - bindata = va_arg (argptr, void *) ; - size = va_arg (argptr, size_t) ; - memcpy (&(psf->header [psf->headindex]), bindata, size) ; - psf->headindex += size ; - count += size ; - break ; - - case 'z' : - size = va_arg (argptr, size_t) ; - count += size ; - while (size) - { psf->header [psf->headindex] = 0 ; - psf->headindex ++ ; - size -- ; - } ; - break ; - - case 'h' : - bindata = va_arg (argptr, void *) ; - memcpy (&(psf->header [psf->headindex]), bindata, 16) ; - psf->headindex += 16 ; - count += 16 ; - break ; - - case 'j' : - size = va_arg (argptr, size_t) ; - psf->headindex += size ; - count = size ; - break ; - - default : - psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ; - psf->error = SFE_INTERNAL ; - break ; - } ; - } ; - - va_end (argptr) ; - return count ; -} /* psf_binheader_writef */ - -/*----------------------------------------------------------------------------------------------- -** Binary header reading functions. Returns number of bytes read. -** -** Format specifiers are the same as for header write function above with the following -** additions: -** -** p - jump a given number of position from start of file. -** -** If format is NULL, psf_binheader_readf returns the current offset. -*/ - -#if (CPU_IS_BIG_ENDIAN == 1) -#define GET_MARKER(ptr) ( ((ptr) [0] << 24) | ((ptr) [1] << 16) | \ - ((ptr) [2] << 8) | ((ptr) [3]) ) - -#elif (CPU_IS_LITTLE_ENDIAN == 1) -#define GET_MARKER(ptr) ( ((ptr) [0]) | ((ptr) [1] << 8) | \ - ((ptr) [2] << 16) | ((ptr) [3] << 24) ) - -#else -# error "Cannot determine endian-ness of processor." -#endif - -#define GET_LE_SHORT(ptr) ( ((ptr) [1] << 8) | ((ptr) [0]) ) -#define GET_BE_SHORT(ptr) ( ((ptr) [0] << 8) | ((ptr) [1]) ) - -#define GET_LE_3BYTE(ptr) ( ((ptr) [2] << 16) | ((ptr) [1] << 8) | ((ptr) [0]) ) -#define GET_BE_3BYTE(ptr) ( ((ptr) [0] << 16) | ((ptr) [1] << 8) | ((ptr) [2]) ) - -#define GET_LE_INT(ptr) ( ((ptr) [3] << 24) | ((ptr) [2] << 16) | \ - ((ptr) [1] << 8) | ((ptr) [0]) ) - -#define GET_BE_INT(ptr) ( ((ptr) [0] << 24) | ((ptr) [1] << 16) | \ - ((ptr) [2] << 8) | ((ptr) [3]) ) - -#if (SIZEOF_LONG == 4) -#define GET_LE_8BYTE(ptr) ( ((ptr) [3] << 24) | ((ptr) [2] << 16) | \ - ((ptr) [1] << 8) | ((ptr) [0]) ) - -#define GET_BE_8BYTE(ptr) ( ((ptr) [4] << 24) | ((ptr) [5] << 16) | \ - ((ptr) [6] << 8) | ((ptr) [7]) ) -#else -#define GET_LE_8BYTE(ptr) ( (((ptr) [7] * 1L) << 56) | (((ptr) [6] * 1L) << 48) | \ - (((ptr) [5] * 1L) << 40) | (((ptr) [4] * 1L) << 32) | \ - (((ptr) [3] * 1L) << 24) | (((ptr) [2] * 1L) << 16) | \ - (((ptr) [1] * 1L) << 8 ) | ((ptr) [0])) - -#define GET_BE_8BYTE(ptr) ( (((ptr) [0] * 1L) << 56) | (((ptr) [1] * 1L) << 48) | \ - (((ptr) [2] * 1L) << 40) | (((ptr) [3] * 1L) << 32) | \ - (((ptr) [4] * 1L) << 24) | (((ptr) [5] * 1L) << 16) | \ - (((ptr) [6] * 1L) << 8 ) | ((ptr) [7])) - -#endif - -static int -header_read (SF_PRIVATE *psf, void *ptr, int bytes) -{ int count = 0 ; - - if (psf->headindex >= SIGNED_SIZEOF (psf->header)) - { memset (ptr, 0, SIGNED_SIZEOF (psf->header) - psf->headindex) ; - - /* This is the best that we can do. */ - psf_fseek (psf, bytes, SEEK_CUR) ; - return bytes ; - } ; - - if (psf->headindex + bytes > SIGNED_SIZEOF (psf->header)) - { int most ; - - most = SIGNED_SIZEOF (psf->header) - psf->headindex ; - psf_fread (psf->header + psf->headend, 1, most, psf) ; - memset (ptr + most, 0, bytes - most) ; - - psf_fseek (psf, bytes - most, SEEK_CUR) ; - return bytes ; - } ; - - if (psf->headindex + bytes > psf->headend) - { count = psf_fread (psf->header + psf->headend, 1, bytes - (psf->headend - psf->headindex), psf) ; - if (count != bytes - (int) (psf->headend - psf->headindex)) - { psf_log_printf (psf, "Error : psf_fread returned short count.\n") ; - return 0 ; - } ; - psf->headend += count ; - } ; - - memcpy (ptr, psf->header + psf->headindex, bytes) ; - psf->headindex += bytes ; - - return bytes ; -} /* header_read */ - -static void -header_seek (SF_PRIVATE *psf, sf_count_t position, int whence) -{ - - switch (whence) - { case SEEK_SET : - if (position > SIGNED_SIZEOF (psf->header)) - { /* Too much header to cache so just seek instead. */ - psf_fseek (psf, position, whence) ; - return ; - } ; - if (position > psf->headend) - psf->headend += psf_fread (psf->header + psf->headend, 1, position - psf->headend, psf) ; - psf->headindex = position ; - break ; - - case SEEK_CUR : - if (psf->headindex + position < 0) - break ; - - if (psf->headindex >= SIGNED_SIZEOF (psf->header)) - { psf_fseek (psf, position, whence) ; - return ; - } ; - - if (psf->headindex + position <= psf->headend) - { psf->headindex += position ; - break ; - } ; - - if (psf->headindex + position > SIGNED_SIZEOF (psf->header)) - { /* Need to jump this without caching it. */ - psf->headindex = psf->headend ; - psf_fseek (psf, position, SEEK_CUR) ; - break ; - } ; - - psf->headend += psf_fread (psf->header + psf->headend, 1, position - (psf->headend - psf->headindex), psf) ; - psf->headindex = psf->headend ; - break ; - - case SEEK_END : - default : - psf_log_printf (psf, "Bad whence param in header_seek().\n") ; - break ; - } ; - - return ; -} /* header_seek */ - -static int -header_gets (SF_PRIVATE *psf, char *ptr, int bufsize) -{ - int k ; - - for (k = 0 ; k < bufsize - 1 ; k++) - { if (psf->headindex < psf->headend) - { ptr [k] = psf->header [psf->headindex] ; - psf->headindex ++ ; - } - else - { psf->headend += psf_fread (psf->header + psf->headend, 1, 1, psf) ; - ptr [k] = psf->header [psf->headindex] ; - psf->headindex = psf->headend ; - } ; - - if (ptr [k] == '\n') - break ; - } ; - - ptr [k] = 0 ; - - return k ; -} /* header_gets */ - -int -psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...) -{ va_list argptr ; - sf_count_t *countptr, countdata ; - unsigned char *ucptr, sixteen_bytes [16] ; - unsigned int *intptr, intdata ; - unsigned short *shortptr ; - char *charptr ; - float *floatptr ; - double *doubleptr ; - char c ; - int byte_count = 0, count ; - - if (! format) - return psf_ftell (psf) ; - - va_start (argptr, format) ; - - while ((c = *format++)) - { switch (c) - { case 'e' : /* All conversions are now from LE to host. */ - psf->rwf_endian = SF_ENDIAN_LITTLE ; - break ; - - case 'E' : /* All conversions are now from BE to host. */ - psf->rwf_endian = SF_ENDIAN_BIG ; - break ; - - case 'm' : - intptr = va_arg (argptr, unsigned int*) ; - ucptr = (unsigned char*) intptr ; - byte_count += header_read (psf, ucptr, sizeof (int)) ; - *intptr = GET_MARKER (ucptr) ; - break ; - - case 'h' : - intptr = va_arg (argptr, unsigned int*) ; - ucptr = (unsigned char*) intptr ; - byte_count += header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ; - { int k ; - intdata = 0 ; - for (k = 0 ; k < 16 ; k++) - intdata ^= sixteen_bytes [k] << k ; - } - *intptr = intdata ; - break ; - - case '1' : - charptr = va_arg (argptr, char*) ; - *charptr = 0 ; - byte_count += header_read (psf, charptr, sizeof (char)) ; - break ; - - case '2' : - shortptr = va_arg (argptr, unsigned short*) ; - *shortptr = 0 ; - ucptr = (unsigned char*) shortptr ; - byte_count += header_read (psf, ucptr, sizeof (short)) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - *shortptr = GET_BE_SHORT (ucptr) ; - else - *shortptr = GET_LE_SHORT (ucptr) ; - break ; - - case '3' : - intptr = va_arg (argptr, unsigned int*) ; - *intptr = 0 ; - byte_count += header_read (psf, sixteen_bytes, 3) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - *intptr = GET_BE_3BYTE (sixteen_bytes) ; - else - *intptr = GET_LE_3BYTE (sixteen_bytes) ; - break ; - - case '4' : - intptr = va_arg (argptr, unsigned int*) ; - *intptr = 0 ; - ucptr = (unsigned char*) intptr ; - byte_count += header_read (psf, ucptr, sizeof (int)) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - *intptr = GET_BE_INT (ucptr) ; - else - *intptr = GET_LE_INT (ucptr) ; - break ; - - case '8' : - countptr = va_arg (argptr, sf_count_t *) ; - *countptr = 0 ; - byte_count += header_read (psf, sixteen_bytes, 8) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - countdata = GET_BE_8BYTE (sixteen_bytes) ; - else - countdata = GET_LE_8BYTE (sixteen_bytes) ; - *countptr = countdata ; - break ; - - case 'f' : /* Float conversion */ - floatptr = va_arg (argptr, float *) ; - *floatptr = 0.0 ; - byte_count += header_read (psf, floatptr, sizeof (float)) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - *floatptr = float32_be_read ((unsigned char*) floatptr) ; - else - *floatptr = float32_le_read ((unsigned char*) floatptr) ; - break ; - - case 'd' : /* double conversion */ - doubleptr = va_arg (argptr, double *) ; - *doubleptr = 0.0 ; - byte_count += header_read (psf, doubleptr, sizeof (double)) ; - if (psf->rwf_endian == SF_ENDIAN_BIG) - *doubleptr = double64_be_read ((unsigned char*) doubleptr) ; - else - *doubleptr = double64_le_read ((unsigned char*) doubleptr) ; - break ; - - case 's' : - psf_log_printf (psf, "Format conversion 's' not implemented yet.\n") ; - /* - strptr = va_arg (argptr, char *) ; - size = strlen (strptr) + 1 ; - size += (size & 1) ; - longdata = H2LE_INT (size) ; - get_int (psf, longdata) ; - memcpy (&(psf->header [psf->headindex]), strptr, size) ; - psf->headindex += size ; - */ - break ; - - case 'b' : - charptr = va_arg (argptr, char*) ; - count = va_arg (argptr, int) ; - if (count > 0) - byte_count += header_read (psf, charptr, count) ; - break ; - - case 'G' : - charptr = va_arg (argptr, char*) ; - count = va_arg (argptr, int) ; - if (count > 0) - byte_count += header_gets (psf, charptr, count) ; - break ; - - case 'z' : - psf_log_printf (psf, "Format conversion 'z' not implemented yet.\n") ; - /* - size = va_arg (argptr, size_t) ; - while (size) - { psf->header [psf->headindex] = 0 ; - psf->headindex ++ ; - size -- ; - } ; - */ - break ; - - case 'p' : - /* Get the seek position first. */ - count = va_arg (argptr, int) ; - header_seek (psf, count, SEEK_SET) ; - byte_count = count ; - break ; - - case 'j' : - /* Get the seek position first. */ - count = va_arg (argptr, int) ; - header_seek (psf, count, SEEK_CUR) ; - byte_count += count ; - break ; - - default : - psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ; - psf->error = SFE_INTERNAL ; - break ; - } ; - } ; - - va_end (argptr) ; - - return byte_count ; -} /* psf_binheader_readf */ - -/*----------------------------------------------------------------------------------------------- -*/ - -sf_count_t -psf_default_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start) -{ sf_count_t position, retval ; - - if (! (psf->blockwidth && psf->dataoffset >= 0)) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (! psf->sf.seekable) - { psf->error = SFE_NOT_SEEKABLE ; - return PSF_SEEK_ERROR ; - } ; - - position = psf->dataoffset + psf->blockwidth * samples_from_start ; - - if ((retval = psf_fseek (psf, position, SEEK_SET)) != position) - { psf->error = SFE_SEEK_FAILED ; - return PSF_SEEK_ERROR ; - } ; - - mode = mode ; - - return samples_from_start ; -} /* psf_default_seek */ - -/*----------------------------------------------------------------------------------------------- -*/ - -void -psf_hexdump (void *ptr, int len) -{ char ascii [17], *data ; - int k, m ; - - if ((data = ptr) == NULL) - return ; - if (len <= 0) - return ; - - puts ("") ; - for (k = 0 ; k < len ; k += 16) - { memset (ascii, ' ', sizeof (ascii)) ; - - printf ("%08X: ", k) ; - for (m = 0 ; m < 16 && k + m < len ; m++) - { printf (m == 8 ? " %02X " : "%02X ", data [k + m] & 0xFF) ; - ascii [m] = isprint (data [k + m]) ? data [k + m] : '.' ; - } ; - - if (m <= 8) printf (" ") ; - for ( ; m < 16 ; m++) printf (" ") ; - - ascii [16] = 0 ; - printf (" %s\n", ascii) ; - } ; - - puts ("") ; -} /* psf_hexdump */ - -void -psf_log_SF_INFO (SF_PRIVATE *psf) -{ psf_log_printf (psf, "---------------------------------\n") ; - - psf_log_printf (psf, " Sample rate : %d\n", psf->sf.samplerate) ; - psf_log_printf (psf, " Frames : %D\n", psf->sf.frames) ; - psf_log_printf (psf, " Channels : %d\n", psf->sf.channels) ; - - psf_log_printf (psf, " Format : 0x%X\n", psf->sf.format) ; - psf_log_printf (psf, " Sections : %d\n", psf->sf.sections) ; - psf_log_printf (psf, " Seekable : %s\n", psf->sf.seekable ? "TRUE" : "FALSE") ; - - psf_log_printf (psf, "---------------------------------\n") ; -} /* psf_dump_SFINFO */ - -/*======================================================================================== -*/ - -SF_INSTRUMENT * -psf_instrument_alloc (void) -{ SF_INSTRUMENT *instr ; - - instr = calloc (1, sizeof (SF_INSTRUMENT)) ; - - if (instr == NULL) - return NULL ; - - /* Set non-zero default values. */ - instr->basenote = -1 ; - instr->velocity_lo = -1 ; - instr->velocity_hi = -1 ; - instr->key_lo = -1 ; - instr->key_hi = -1 ; - - return instr ; -} /* psf_instrument_alloc */ - -void* -psf_memset (void *s, int c, sf_count_t len) -{ char *ptr ; - int setcount ; - - ptr = (char *) s ; - - while (len > 0) - { setcount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - memset (ptr, c, setcount) ; - - ptr += setcount ; - len -= setcount ; - } ; - - return s ; -} /* psf_memset */ - -void psf_get_date_str (char *str, int maxlen) -{ time_t current ; - struct tm timedata, *tmptr ; - - time (¤t) ; - -#if defined (HAVE_GMTIME_R) - /* If the re-entrant version is available, use it. */ - tmptr = gmtime_r (¤t, &timedata) ; -#elif defined (HAVE_GMTIME) - /* Otherwise use the standard one and copy the data to local storage. */ - tmptr = gmtime (¤t) ; - memcpy (&timedata, tmptr, sizeof (timedata)) ; -#else - tmptr = NULL ; -#endif - - if (tmptr) - LSF_SNPRINTF (str, maxlen, "%4d-%02d-%02d %02d:%02d:%02d UTC", - 1900 + timedata.tm_year, timedata.tm_mon, timedata.tm_mday, - timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ; - else - LSF_SNPRINTF (str, maxlen, "Unknown date") ; - - return ; -} /* psf_get_date_str */ - -int -subformat_to_bytewidth (int format) -{ - switch (format) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_S8 : - return 1 ; - case SF_FORMAT_PCM_16 : - return 2 ; - case SF_FORMAT_PCM_24 : - return 3 ; - case SF_FORMAT_PCM_32 : - case SF_FORMAT_FLOAT : - return 4 ; - case SF_FORMAT_DOUBLE : - return 8 ; - } ; - - return 0 ; -} /* subformat_to_bytewidth */ - -int -s_bitwidth_to_subformat (int bits) -{ static int array [] = - { SF_FORMAT_PCM_S8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32 - } ; - - if (bits < 8 || bits > 32) - return 0 ; - - return array [((bits + 7) / 8) - 1] ; -} /* bitwidth_to_subformat */ - -int -u_bitwidth_to_subformat (int bits) -{ static int array [] = - { SF_FORMAT_PCM_U8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32 - } ; - - if (bits < 8 || bits > 32) - return 0 ; - - return array [((bits + 7) / 8) - 1] ; -} /* bitwidth_to_subformat */ - -#endif /* PSF_LOG_PRINTF_ONLY */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 33e9795e-f717-461a-9feb-65d083a56395 -*/ diff --git a/Libraries/SndFile/Files/src/common.h b/Libraries/SndFile/Files/src/common.h deleted file mode 100644 index d704782a7..000000000 --- a/Libraries/SndFile/Files/src/common.h +++ /dev/null @@ -1,755 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#ifndef SNDFILE_COMMON_H -#define SNDFILE_COMMON_H - -#include "sfconfig.h" - -#include - -#if HAVE_STDINT_H -#include -#endif - -#ifndef SNDFILE_H -#include "sndfile.h" -#elif HAVE_INTTYPES_H -#include -#endif - -#ifdef __cplusplus -#error "This code is not designed to be compiled with a C++ compiler." -#endif - -#ifdef UNUSED -#elif defined (__GNUC__) -# define UNUSED(x) UNUSED_ ## x __attribute__ ((unused)) -#elif defined (__LCLINT__) -# define UNUSED(x) /*@unused@*/ x -#else -# define UNUSED(x) x -#endif - -#ifdef __GNUC__ -# define WARN_UNUSED __attribute__ ((warn_unused_result)) -#else -# define WARN_UNUSED -#endif - -#define SF_BUFFER_LEN (8192*2) -#define SF_FILENAME_LEN (512) -#define SF_SYSERR_LEN (256) -#define SF_MAX_STRINGS (16) -#define SF_STR_BUFFER_LEN (8192) -#define SF_HEADER_LEN (4100 + SF_STR_BUFFER_LEN) - -#define PSF_SEEK_ERROR ((sf_count_t) -1) - - -#define BITWIDTH2BYTES(x) (((x) + 7) / 8) - -/* For some reason sizeof returns an unsigned value which causes -** a warning when that value is added or subtracted from a signed -** value. Use SIGNED_SIZEOF instead. -*/ -#define SIGNED_SIZEOF(x) ((int) sizeof (x)) - -#define ARRAY_LEN(x) ((int) (sizeof (x) / sizeof ((x) [0]))) - -#define SF_MAX(a,b) ((a) > (b) ? (a) : (b)) -#define SF_MIN(a,b) ((a) < (b) ? (a) : (b)) - -enum -{ /* PEAK chunk location. */ - SF_PEAK_START = 42, - SF_PEAK_END = 43, - - /* PEAK chunk location. */ - SF_SCALE_MAX = 52, - SF_SCALE_MIN = 53, - - /* str_flags values. */ - SF_STR_ALLOW_START = 0x0100, - SF_STR_ALLOW_END = 0x0200, - - /* Location of strings. */ - SF_STR_LOCATE_START = 0x0400, - SF_STR_LOCATE_END = 0x0800, - - SFD_TYPEMASK = 0x0FFFFFFF -} ; - -#define SFM_MASK (SFM_READ | SFM_WRITE | SFM_RDWR) -#define SFM_UNMASK (~SFM_MASK) - -/*--------------------------------------------------------------------------------------- -** Formats that may be supported at some time in the future. -** When support is finalised, these values move to src/sndfile.h. -*/ - -enum -{ /* Work in progress. */ - - /* Formats supported read only. */ - SF_FORMAT_WVE = 0x4020000, /* Psion ALaw Sound File */ - SF_FORMAT_TXW = 0x4030000, /* Yamaha TX16 sampler file */ - SF_FORMAT_DWD = 0x4040000, /* DiamondWare Digirized */ - - /* Following are detected but not supported. */ - SF_FORMAT_OGG = 0x4090000, - - SF_FORMAT_REX = 0x40A0000, /* Propellorheads Rex/Rcy */ - SF_FORMAT_REX2 = 0x40D0000, /* Propellorheads Rex2 */ - SF_FORMAT_KRZ = 0x40E0000, /* Kurzweil sampler file */ - SF_FORMAT_WMA = 0x4100000, /* Windows Media Audio. */ - SF_FORMAT_SHN = 0x4110000, /* Shorten. */ - - /* Unsupported encodings. */ - SF_FORMAT_VORBIS = 0x1001, - - SF_FORMAT_SVX_FIB = 0x1020, /* SVX Fibonacci Delta encoding. */ - SF_FORMAT_SVX_EXP = 0x1021, /* SVX Exponential Delta encoding. */ - - SF_FORMAT_PCM_N = 0x1030 -} ; - -/*--------------------------------------------------------------------------------------- -** PEAK_CHUNK - This chunk type is common to both AIFF and WAVE files although their -** endian encodings are different. -*/ - -typedef struct -{ double value ; /* signed value of peak */ - sf_count_t position ; /* the sample frame for the peak */ -} PEAK_POS ; - -typedef struct -{ /* libsndfile internal : write a PEAK chunk at the start or end of the file? */ - int peak_loc ; - - /* WAV/AIFF */ - unsigned int version ; /* version of the PEAK chunk */ - unsigned int timestamp ; /* secs since 1/1/1970 */ - - /* CAF */ - unsigned int edit_number ; - -#if HAVE_FLEXIBLE_ARRAY - /* the per channel peak info */ - PEAK_POS peaks [] ; -#else - /* - ** This is not ISO compliant C. It works on some compilers which - ** don't support the ISO standard flexible struct array which is - ** used above. If your compiler doesn't like this I suggest you find - ** youself a 1999 ISO C standards compilant compiler. GCC-3.X is - ** highly recommended. - */ - PEAK_POS peaks [0] ; -#endif -} PEAK_INFO ; - -static inline PEAK_INFO * -peak_info_calloc (int channels) -{ return calloc (1, sizeof (PEAK_INFO) + channels * sizeof (PEAK_POS)) ; -} /* peak_info_calloc */ - -typedef struct -{ int type ; - int flags ; - char *str ; -} STR_DATA ; - -static inline size_t -make_size_t (int x) -{ return (size_t) x ; -} /* size_t_of_int */ - -/*======================================================================================= -** SF_PRIVATE stuct - a pointer to this struct is passed back to the caller of the -** sf_open_XXXX functions. The caller however has no knowledge of the struct's -** contents. -*/ - -typedef struct sf_private_tag -{ /* Force the compiler to double align the start of buffer. */ - union - { double dbuf [SF_BUFFER_LEN / sizeof (double)] ; -#if (defined (SIZEOF_INT64_T) && (SIZEOF_INT64_T == 8)) - int64_t lbuf [SF_BUFFER_LEN / sizeof (int64_t)] ; -#else - long lbuf [SF_BUFFER_LEN / sizeof (double)] ; -#endif - float fbuf [SF_BUFFER_LEN / sizeof (float)] ; - int ibuf [SF_BUFFER_LEN / sizeof (int)] ; - short sbuf [SF_BUFFER_LEN / sizeof (short)] ; - char cbuf [SF_BUFFER_LEN / sizeof (char)] ; - signed char scbuf [SF_BUFFER_LEN / sizeof (signed char)] ; - unsigned char ucbuf [SF_BUFFER_LEN / sizeof (signed char)] ; - } u ; - - char filepath [SF_FILENAME_LEN] ; - char rsrcpath [SF_FILENAME_LEN] ; - char directory [SF_FILENAME_LEN] ; - char filename [SF_FILENAME_LEN / 4] ; - - char syserr [SF_SYSERR_LEN] ; - - /* logbuffer and logindex should only be changed within the logging functions - ** of common.c - */ - char logbuffer [SF_BUFFER_LEN] ; - unsigned char header [SF_HEADER_LEN] ; /* Must be unsigned */ - int rwf_endian ; /* Header endian-ness flag. */ - - /* Storage and housekeeping data for adding/reading strings from - ** sound files. - */ - STR_DATA strings [SF_MAX_STRINGS] ; - char str_storage [SF_STR_BUFFER_LEN] ; - char *str_end ; - int str_flags ; - - /* Guard value. If this changes the buffers above have overflowed. */ - int Magick ; - - /* Index variables for maintaining logbuffer and header above. */ - int logindex ; - int headindex, headend ; - int has_text ; - int do_not_close_descriptor ; - -#if USE_WINDOWS_API - /* - ** These fields can only be used in src/file_io.c. - ** They are basically the same as a windows file HANDLE. - */ - void *hfile, *hrsrc, *hsaved ; -#else - /* These fields can only be used in src/file_io.c. */ - int filedes, rsrcdes, savedes ; -#endif - - int error ; - - int mode ; /* Open mode : SFM_READ, SFM_WRITE or SFM_RDWR. */ - int endian ; /* File endianness : SF_ENDIAN_LITTLE or SF_ENDIAN_BIG. */ - int float_endswap ; /* Need to endswap float32s? */ - - /* - ** Maximum float value for calculating the multiplier for - ** float/double to short/int conversions. - */ - int float_int_mult ; - float float_max ; - - /* Vairables for handling pipes. */ - int is_pipe ; /* True if file is a pipe. */ - sf_count_t pipeoffset ; /* Number of bytes read from a pipe. */ - - /* True if clipping must be performed on float->int conversions. */ - int add_clipping ; - - SF_INFO sf ; - - int have_written ; /* Has a single write been done to the file? */ - PEAK_INFO *peak_info ; - - /* Loop Info */ - SF_LOOP_INFO *loop_info ; - SF_INSTRUMENT *instrument ; - - sf_count_t filelength ; /* Overall length of (embedded) file. */ - sf_count_t fileoffset ; /* Offset in number of bytes from beginning of file. */ - - sf_count_t rsrclength ; /* Length of the resource fork (if it exists). */ - - sf_count_t dataoffset ; /* Offset in number of bytes from beginning of file. */ - sf_count_t datalength ; /* Length in bytes of the audio data. */ - sf_count_t dataend ; /* Offset to file tailer. */ - - int blockwidth ; /* Size in bytes of one set of interleaved samples. */ - int bytewidth ; /* Size in bytes of one sample (one channel). */ - - void *dither ; - void *interleave ; - - int last_op ; /* Last operation; either SFM_READ or SFM_WRITE */ - sf_count_t read_current ; - sf_count_t write_current ; - - void *fdata ; /* This is a pointer to dynamically allocated file format - ** specific data. - */ - - SF_DITHER_INFO write_dither ; - SF_DITHER_INFO read_dither ; - - int norm_double ; - int norm_float ; - - int auto_header ; - - int ieee_replace ; - /* A set of file specific function pointers */ - - sf_count_t (*read_short) (struct sf_private_tag*, short *ptr, sf_count_t len) ; - sf_count_t (*read_int) (struct sf_private_tag*, int *ptr, sf_count_t len) ; - sf_count_t (*read_float) (struct sf_private_tag*, float *ptr, sf_count_t len) ; - sf_count_t (*read_double) (struct sf_private_tag*, double *ptr, sf_count_t len) ; - - sf_count_t (*write_short) (struct sf_private_tag*, const short *ptr, sf_count_t len) ; - sf_count_t (*write_int) (struct sf_private_tag*, const int *ptr, sf_count_t len) ; - sf_count_t (*write_float) (struct sf_private_tag*, const float *ptr, sf_count_t len) ; - sf_count_t (*write_double) (struct sf_private_tag*, const double *ptr, sf_count_t len) ; - - sf_count_t (*seek) (struct sf_private_tag*, int mode, sf_count_t samples_from_start) ; - int (*write_header) (struct sf_private_tag*, int calc_length) ; - int (*command) (struct sf_private_tag*, int command, void *data, int datasize) ; - - /* - ** Separate close functions for the codec and the container. - ** The codec close function is always called first. - */ - int (*codec_close) (struct sf_private_tag*) ; - int (*container_close) (struct sf_private_tag*) ; - - char *format_desc ; - - /* Virtual I/O functions. */ - int virtual_io ; - SF_VIRTUAL_IO vio ; - void *vio_user_data ; -} SF_PRIVATE ; - - - -enum -{ SFE_NO_ERROR = SF_ERR_NO_ERROR, - SFE_BAD_OPEN_FORMAT = SF_ERR_UNRECOGNISED_FORMAT, - SFE_SYSTEM = SF_ERR_SYSTEM, - SFE_MALFORMED_FILE = SF_ERR_MALFORMED_FILE, - SFE_UNSUPPORTED_ENCODING = SF_ERR_UNSUPPORTED_ENCODING, - - SFE_BAD_FILE, - SFE_BAD_FILE_READ, - SFE_OPEN_FAILED, - SFE_BAD_SNDFILE_PTR, - SFE_BAD_SF_INFO_PTR, - SFE_BAD_SF_INCOMPLETE, - SFE_BAD_FILE_PTR, - SFE_BAD_INT_PTR, - SFE_BAD_STAT_SIZE, - SFE_MALLOC_FAILED, - SFE_UNIMPLEMENTED, - SFE_BAD_READ_ALIGN, - SFE_BAD_WRITE_ALIGN, - SFE_UNKNOWN_FORMAT, - SFE_NOT_READMODE, - SFE_NOT_WRITEMODE, - SFE_BAD_MODE_RW, - SFE_BAD_SF_INFO, - SFE_BAD_OFFSET, - SFE_NO_EMBED_SUPPORT, - SFE_NO_EMBEDDED_RDWR, - SFE_NO_PIPE_WRITE, - - SFE_INTERNAL, - SFE_BAD_CONTROL_CMD, - SFE_BAD_ENDIAN, - SFE_CHANNEL_COUNT, - SFE_BAD_RDWR_FORMAT, - - SFE_BAD_VIRTUAL_IO, - - SFE_INTERLEAVE_MODE, - SFE_INTERLEAVE_SEEK, - SFE_INTERLEAVE_READ, - - SFE_BAD_SEEK, - SFE_NOT_SEEKABLE, - SFE_AMBIGUOUS_SEEK, - SFE_WRONG_SEEK, - SFE_SEEK_FAILED, - - SFE_BAD_OPEN_MODE, - SFE_OPEN_PIPE_RDWR, - SFE_RDWR_POSITION, - SFE_RDWR_BAD_HEADER, - - SFE_STR_NO_SUPPORT, - SFE_STR_NOT_WRITE, - SFE_STR_MAX_DATA, - SFE_STR_MAX_COUNT, - SFE_STR_BAD_TYPE, - SFE_STR_NO_ADD_END, - SFE_STR_BAD_STRING, - SFE_STR_WEIRD, - - SFE_WAV_NO_RIFF, - SFE_WAV_NO_WAVE, - SFE_WAV_NO_FMT, - SFE_WAV_FMT_SHORT, - SFE_WAV_BAD_FACT, - SFE_WAV_BAD_PEAK, - SFE_WAV_PEAK_B4_FMT, - SFE_WAV_BAD_FORMAT, - SFE_WAV_BAD_BLOCKALIGN, - SFE_WAV_NO_DATA, - SFE_WAV_BAD_LIST, - SFE_WAV_ADPCM_NOT4BIT, - SFE_WAV_ADPCM_CHANNELS, - SFE_WAV_GSM610_FORMAT, - SFE_WAV_UNKNOWN_CHUNK, - SFE_WAV_WVPK_DATA, - - SFE_AIFF_NO_FORM, - SFE_AIFF_AIFF_NO_FORM, - SFE_AIFF_COMM_NO_FORM, - SFE_AIFF_SSND_NO_COMM, - SFE_AIFF_UNKNOWN_CHUNK, - SFE_AIFF_COMM_CHUNK_SIZE, - SFE_AIFF_BAD_COMM_CHUNK, - SFE_AIFF_PEAK_B4_COMM, - SFE_AIFF_BAD_PEAK, - SFE_AIFF_NO_SSND, - SFE_AIFF_NO_DATA, - SFE_AIFF_RW_SSND_NOT_LAST, - - SFE_AU_UNKNOWN_FORMAT, - SFE_AU_NO_DOTSND, - SFE_AU_EMBED_BAD_LEN, - - SFE_RAW_READ_BAD_SPEC, - SFE_RAW_BAD_BITWIDTH, - SFE_RAW_BAD_FORMAT, - - SFE_PAF_NO_MARKER, - SFE_PAF_VERSION, - SFE_PAF_UNKNOWN_FORMAT, - SFE_PAF_SHORT_HEADER, - - SFE_SVX_NO_FORM, - SFE_SVX_NO_BODY, - SFE_SVX_NO_DATA, - SFE_SVX_BAD_COMP, - SFE_SVX_BAD_NAME_LENGTH, - - SFE_NIST_BAD_HEADER, - SFE_NIST_CRLF_CONVERISON, - SFE_NIST_BAD_ENCODING, - - SFE_VOC_NO_CREATIVE, - SFE_VOC_BAD_FORMAT, - SFE_VOC_BAD_VERSION, - SFE_VOC_BAD_MARKER, - SFE_VOC_BAD_SECTIONS, - SFE_VOC_MULTI_SAMPLERATE, - SFE_VOC_MULTI_SECTION, - SFE_VOC_MULTI_PARAM, - SFE_VOC_SECTION_COUNT, - SFE_VOC_NO_PIPE, - - SFE_IRCAM_NO_MARKER, - SFE_IRCAM_BAD_CHANNELS, - SFE_IRCAM_UNKNOWN_FORMAT, - - SFE_W64_64_BIT, - SFE_W64_NO_RIFF, - SFE_W64_NO_WAVE, - SFE_W64_NO_FMT, - SFE_W64_NO_DATA, - SFE_W64_FMT_SHORT, - SFE_W64_FMT_TOO_BIG, - SFE_W64_ADPCM_NOT4BIT, - SFE_W64_ADPCM_CHANNELS, - SFE_W64_GSM610_FORMAT, - - SFE_MAT4_BAD_NAME, - SFE_MAT4_NO_SAMPLERATE, - SFE_MAT4_ZERO_CHANNELS, - - SFE_MAT5_BAD_ENDIAN, - SFE_MAT5_NO_BLOCK, - SFE_MAT5_SAMPLE_RATE, - SFE_MAT5_ZERO_CHANNELS, - - SFE_PVF_NO_PVF1, - SFE_PVF_BAD_HEADER, - SFE_PVF_BAD_BITWIDTH, - - SFE_DWVW_BAD_BITWIDTH, - SFE_G72X_NOT_MONO, - - SFE_XI_BAD_HEADER, - SFE_XI_EXCESS_SAMPLES, - SFE_XI_NO_PIPE, - - SFE_HTK_NO_PIPE, - - SFE_SDS_NOT_SDS, - SFE_SDS_BAD_BIT_WIDTH, - - SFE_SD2_FD_DISALLOWED, - SFE_SD2_BAD_DATA_OFFSET, - SFE_SD2_BAD_MAP_OFFSET, - SFE_SD2_BAD_DATA_LENGTH, - SFE_SD2_BAD_MAP_LENGTH, - SFE_SD2_BAD_RSRC, - SFE_SD2_BAD_SAMPLE_SIZE, - - SFE_FLAC_BAD_HEADER, - SFE_FLAC_NEW_DECODER, - SFE_FLAC_INIT_DECODER, - SFE_FLAC_LOST_SYNC, - SFE_FLAC_BAD_SAMPLE_RATE, - SFE_FLAC_UNKOWN_ERROR, - - SFE_MAX_ERROR /* This must be last in list. */ -} ; - -int subformat_to_bytewidth (int format) ; -int s_bitwidth_to_subformat (int bits) ; -int u_bitwidth_to_subformat (int bits) ; - -/* Functions for reading and writing floats and doubles on processors -** with non-IEEE floats/doubles. -*/ -float float32_be_read (unsigned char *cptr) ; -float float32_le_read (unsigned char *cptr) ; -void float32_be_write (float in, unsigned char *out) ; -void float32_le_write (float in, unsigned char *out) ; - -double double64_be_read (unsigned char *cptr) ; -double double64_le_read (unsigned char *cptr) ; -void double64_be_write (double in, unsigned char *out) ; -void double64_le_write (double in, unsigned char *out) ; - -/* Functions for writing to the internal logging buffer. */ - -void psf_log_printf (SF_PRIVATE *psf, const char *format, ...) ; -void psf_log_SF_INFO (SF_PRIVATE *psf) ; - -void psf_hexdump (void *ptr, int len) ; - -/* Functions used when writing file headers. */ - -int psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...) ; -void psf_asciiheader_printf (SF_PRIVATE *psf, const char *format, ...) ; - -/* Functions used when reading file headers. */ - -int psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...) ; - -/* Functions used in the write function for updating the peak chunk. */ - -void peak_update_short (SF_PRIVATE *psf, short *ptr, size_t items) ; -void peak_update_int (SF_PRIVATE *psf, int *ptr, size_t items) ; -void peak_update_double (SF_PRIVATE *psf, double *ptr, size_t items) ; - -/* Functions defined in command.c. */ - -int psf_get_format_simple_count (void) ; -int psf_get_format_simple (SF_FORMAT_INFO *data) ; - -int psf_get_format_info (SF_FORMAT_INFO *data) ; - -int psf_get_format_major_count (void) ; -int psf_get_format_major (SF_FORMAT_INFO *data) ; - -int psf_get_format_subtype_count (void) ; -int psf_get_format_subtype (SF_FORMAT_INFO *data) ; - -void psf_generate_format_desc (SF_PRIVATE *psf) ; - -double psf_calc_signal_max (SF_PRIVATE *psf, int normalize) ; -int psf_calc_max_all_channels (SF_PRIVATE *psf, double *peaks, int normalize) ; - -/* Functions in strings.c. */ - -const char* psf_get_string (SF_PRIVATE *psf, int str_type) ; -int psf_set_string (SF_PRIVATE *psf, int str_type, const char *str) ; -int psf_store_string (SF_PRIVATE *psf, int str_type, const char *str) ; - -/* Default seek function. Use for PCM and float encoded data. */ -sf_count_t psf_default_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start) ; - -/* Generate the currebt date as a string. */ -void psf_get_date_str (char *str, int maxlen) ; - -int macos_guess_file_type (SF_PRIVATE *psf, const char *filename) ; - -/*------------------------------------------------------------------------------------ -** File I/O functions which will allow access to large files (> 2 Gig) on -** some 32 bit OSes. Implementation in file_io.c. -*/ - -int psf_fopen (SF_PRIVATE *psf, const char *pathname, int flags) ; -int psf_set_stdio (SF_PRIVATE *psf, int mode) ; -int psf_file_valid (SF_PRIVATE *psf) ; -void psf_set_file (SF_PRIVATE *psf, int fd) ; -void psf_init_files (SF_PRIVATE *psf) ; -void psf_use_rsrc (SF_PRIVATE *psf, int on_off) ; - -sf_count_t psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence) ; -sf_count_t psf_fread (void *ptr, sf_count_t bytes, sf_count_t count, SF_PRIVATE *psf) ; -sf_count_t psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t count, SF_PRIVATE *psf) ; -sf_count_t psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf) ; -sf_count_t psf_ftell (SF_PRIVATE *psf) ; -sf_count_t psf_get_filelen (SF_PRIVATE *psf) ; - -void psf_fsync (SF_PRIVATE *psf) ; - -int psf_is_pipe (SF_PRIVATE *psf) ; - -int psf_ftruncate (SF_PRIVATE *psf, sf_count_t len) ; -int psf_fclose (SF_PRIVATE *psf) ; - -/* Open and close the resource fork of a file. */ -int psf_open_rsrc (SF_PRIVATE *psf, int mode) ; -int psf_close_rsrc (SF_PRIVATE *psf) ; - -/* -void psf_fclearerr (SF_PRIVATE *psf) ; -int psf_ferror (SF_PRIVATE *psf) ; -*/ - -/*------------------------------------------------------------------------------------ -** Functions for reading and writing different file formats. -*/ - -int aiff_open (SF_PRIVATE *psf) ; -int au_open (SF_PRIVATE *psf) ; -int avr_open (SF_PRIVATE *psf) ; -int htk_open (SF_PRIVATE *psf) ; -int ircam_open (SF_PRIVATE *psf) ; -int mat4_open (SF_PRIVATE *psf) ; -int mat5_open (SF_PRIVATE *psf) ; -int nist_open (SF_PRIVATE *psf) ; -int paf_open (SF_PRIVATE *psf) ; -int pvf_open (SF_PRIVATE *psf) ; -int raw_open (SF_PRIVATE *psf) ; -int sd2_open (SF_PRIVATE *psf) ; -int sds_open (SF_PRIVATE *psf) ; -int svx_open (SF_PRIVATE *psf) ; -int voc_open (SF_PRIVATE *psf) ; -int w64_open (SF_PRIVATE *psf) ; -int wav_open (SF_PRIVATE *psf) ; -int xi_open (SF_PRIVATE *psf) ; -int flac_open (SF_PRIVATE *psf) ; -int caf_open (SF_PRIVATE *psf) ; - -/* In progress. Do not currently work. */ - -int mpeg_open (SF_PRIVATE *psf) ; -int ogg_open (SF_PRIVATE *psf) ; -int rx2_open (SF_PRIVATE *psf) ; -int txw_open (SF_PRIVATE *psf) ; -int wve_open (SF_PRIVATE *psf) ; -int dwd_open (SF_PRIVATE *psf) ; - -int macbinary3_open (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------------ -** Init functions for a number of common data encodings. -*/ - -int pcm_init (SF_PRIVATE *psf) ; -int ulaw_init (SF_PRIVATE *psf) ; -int alaw_init (SF_PRIVATE *psf) ; -int float32_init (SF_PRIVATE *psf) ; -int double64_init (SF_PRIVATE *psf) ; -int dwvw_init (SF_PRIVATE *psf, int bitwidth) ; -int gsm610_init (SF_PRIVATE *psf) ; -int vox_adpcm_init (SF_PRIVATE *psf) ; -int flac_init (SF_PRIVATE *psf) ; -int g72x_init (SF_PRIVATE * psf) ; - -int dither_init (SF_PRIVATE *psf, int mode) ; - -int wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ; -int wav_w64_msadpcm_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ; - -int aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ; - -int interleave_init (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------------ -** Other helper functions. -*/ - -void *psf_memset (void *s, int c, sf_count_t n) ; - -SF_INSTRUMENT * psf_instrument_alloc (void) ; - -/*------------------------------------------------------------------------------------ -** Here's how we fix systems which don't snprintf / vsnprintf. -** Systems without these functions should use the -*/ - -#if USE_WINDOWS_API -#define LSF_SNPRINTF _snprintf -#elif (HAVE_SNPRINTF && ! FORCE_MISSING_SNPRINTF) -#define LSF_SNPRINTF snprintf -#else -int missing_snprintf (char *str, size_t n, char const *fmt, ...) ; -#define LSF_SNPRINTF missing_snprintf -#endif - -#if USE_WINDOWS_API -#define LSF_VSNPRINTF _vsnprintf -#elif (HAVE_VSNPRINTF && ! FORCE_MISSING_SNPRINTF) -#define LSF_VSNPRINTF vsnprintf -#else -int missing_vsnprintf (char *str, size_t n, const char *fmt, ...) ; -#define LSF_VSNPRINTF missing_vsnprintf -#endif - -/*------------------------------------------------------------------------------------ -** Extra commands for sf_command(). Not for public use yet. -*/ - -enum -{ SFC_TEST_AIFF_ADD_INST_CHUNK = 0x2000, - SFC_TEST_WAV_ADD_INFO_CHUNK = 0x2010 -} ; - -/* -** Maybe, one day, make these functions or something like them, public. -** -** Buffer to buffer dithering. Pointer in and out are allowed to point -** to the same buffer for in-place dithering. -*/ - -#if 0 -int sf_dither_short (const SF_DITHER_INFO *dither, const short *in, short *out, int count) ; -int sf_dither_int (const SF_DITHER_INFO *dither, const int *in, int *out, int count) ; -int sf_dither_float (const SF_DITHER_INFO *dither, const float *in, float *out, int count) ; -int sf_dither_double (const SF_DITHER_INFO *dither, const double *in, double *out, int count) ; -#endif - -#endif /* SNDFILE_COMMON_H */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 7b45c0ee-5835-4a18-a4ef-994e4cd95b67 -*/ diff --git a/Libraries/SndFile/Files/src/config.h b/Libraries/SndFile/Files/src/config.h deleted file mode 100644 index 297581b2d..000000000 --- a/Libraries/SndFile/Files/src/config.h +++ /dev/null @@ -1,265 +0,0 @@ -/* src/config.h. Generated by configure. */ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Set to 1 if the compile is GNU GCC. */ -#define COMPILER_IS_GCC 1 - -/* Target processor clips on negative float to int conversion. */ -#define CPU_CLIPS_NEGATIVE 1 - -/* Target processor clips on positive float to int conversion. */ -#define CPU_CLIPS_POSITIVE 1 - -/* Target processor is big endian. */ -#if __BIG_ENDIAN__ -#define CPU_IS_BIG_ENDIAN 1 -#else -#define CPU_IS_BIG_ENDIAN 0 -#endif - -/* Target processor is little endian. */ -#if __LITTLE_ENDIAN__ -#define CPU_IS_LITTLE_ENDIAN 1 -#else -#define CPU_IS_LITTLE_ENDIAN 0 -#endif - -/* Set to 1 to enable experimental code. */ -#define ENABLE_EXPERIMENTAL_CODE 0 - -/* Major version of GCC or 3 otherwise. */ -#define GCC_MAJOR_VERSION 4 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ALSA_ASOUNDLIB_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_BYTESWAP_H */ - -/* Define to 1 if you have the `calloc' function. */ -#define HAVE_CALLOC 1 - -/* Define to 1 if you have the `ceil' function. */ -#define HAVE_CEIL 1 - -/* Set to 1 if S_IRGRP is defined. */ -#define HAVE_DECL_S_IRGRP 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ENDIAN_H */ - -/* Define to 1 if you have the `fdatasync' function. */ -/* #undef HAVE_FDATASYNC */ - -/* Define to 1 if you have libflac 1.1.1 */ -/* #undef HAVE_FLAC_1_1_1 */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_FLAC_ALL_H */ - -/* Set to 1 if the compile supports the struct hack. */ -#define HAVE_FLEXIBLE_ARRAY 1 - -/* Define to 1 if you have the `floor' function. */ -#define HAVE_FLOOR 1 - -/* Define to 1 if you have the `fmod' function. */ -#define HAVE_FMOD 1 - -/* Define to 1 if you have the `free' function. */ -#define HAVE_FREE 1 - -/* Define to 1 if you have the `fstat' function. */ -#define HAVE_FSTAT 1 - -/* Define to 1 if you have the `fsync' function. */ -#define HAVE_FSYNC 1 - -/* Define to 1 if you have the `ftruncate' function. */ -#define HAVE_FTRUNCATE 1 - -/* Define to 1 if you have the `getpagesize' function. */ -#define HAVE_GETPAGESIZE 1 - -/* Define to 1 if you have the `gmtime' function. */ -#define HAVE_GMTIME 1 - -/* Define to 1 if you have the `gmtime_r' function. */ -#define HAVE_GMTIME_R 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_LOCALE_H 1 - -/* Define if you have C99's lrint function. */ -#define HAVE_LRINT 1 - -/* Define if you have C99's lrintf function. */ -#define HAVE_LRINTF 1 - -/* Define to 1 if you have the `lseek' function. */ -#define HAVE_LSEEK 1 - -/* Define to 1 if you have the `malloc' function. */ -#define HAVE_MALLOC 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `mmap' function. */ -#define HAVE_MMAP 1 - -/* Define to 1 if you have the `open' function. */ -#define HAVE_OPEN 1 - -/* Define to 1 if you have the `pread' function. */ -#define HAVE_PREAD 1 - -/* Define to 1 if you have the `pwrite' function. */ -#define HAVE_PWRITE 1 - -/* Define to 1 if you have the `read' function. */ -#define HAVE_READ 1 - -/* Define to 1 if you have the `realloc' function. */ -#define HAVE_REALLOC 1 - -/* Define to 1 if you have the `setlocale' function. */ -#define HAVE_SETLOCALE 1 - -/* Define to 1 if you have the `snprintf' function. */ -#define HAVE_SNPRINTF 1 - -/* Set to 1 if you have libsqlite3. */ -#define HAVE_SQLITE3 0 - -/* Define to 1 if the system has the type `ssize_t'. */ -#define HAVE_SSIZE_T 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#define HAVE_SYS_WAIT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `vsnprintf' function. */ -#define HAVE_VSNPRINTF 1 - -/* Define to 1 if you have the `write' function. */ -#define HAVE_WRITE 1 - -/* Set to 1 if compiling for MacOSX */ -#define OS_IS_MACOSX 1 - -/* Set to 1 if compiling for Win32 */ -#define OS_IS_WIN32 0 - -/* Name of package */ -#define PACKAGE "libsndfile" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "erikd@mega-nerd.com" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "libsndfile" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libsndfile 1.0.15" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "libsndfile" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "1.0.15" - -/* Set to maximum allowed value of sf_count_t type. */ -#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL - -/* The size of a `double', as computed by sizeof. */ -#define SIZEOF_DOUBLE 8 - -/* The size of a `float', as computed by sizeof. */ -#define SIZEOF_FLOAT 4 - -/* The size of a `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of a `int64_t', as computed by sizeof. */ -#define SIZEOF_INT64_T 8 - -/* The size of a `loff_t', as computed by sizeof. */ -/* #undef SIZEOF_LOFF_T */ - -/* The size of a `long', as computed by sizeof. */ -#define SIZEOF_LONG 4 - -/* The size of a `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - -/* The size of a `off64_t', as computed by sizeof. */ -/* #undef SIZEOF_OFF64_T */ - -/* The size of a `off_t', as computed by sizeof. */ -#define SIZEOF_OFF_T 8 - -/* Set to sizeof (long) if unknown. */ -#define SIZEOF_SF_COUNT_T 8 - -/* The size of a `short', as computed by sizeof. */ -#define SIZEOF_SHORT 2 - -/* The size of a `size_t', as computed by sizeof. */ -#define SIZEOF_SIZE_T 4 - -/* The size of a `ssize_t', as computed by sizeof. */ -#define SIZEOF_SSIZE_T 4 - -/* The size of a `void*', as computed by sizeof. */ -#define SIZEOF_VOIDP 4 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Set to long if unknown. */ -#define TYPEOF_SF_COUNT_T off_t - -/* Set to 1 to use the native windows API */ -#define USE_WINDOWS_API 0 - -/* Version number of package */ -#define VERSION "1.0.15" - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define to make fseeko etc. visible, on some hosts. */ -/* #undef _LARGEFILE_SOURCE */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ diff --git a/Libraries/SndFile/Files/src/config.h.in b/Libraries/SndFile/Files/src/config.h.in deleted file mode 100644 index ff659fef3..000000000 --- a/Libraries/SndFile/Files/src/config.h.in +++ /dev/null @@ -1,256 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Set to 1 if the compile is GNU GCC. */ -#undef COMPILER_IS_GCC - -/* Target processor clips on negative float to int conversion. */ -#undef CPU_CLIPS_NEGATIVE - -/* Target processor clips on positive float to int conversion. */ -#undef CPU_CLIPS_POSITIVE - -/* Target processor is big endian. */ -#undef CPU_IS_BIG_ENDIAN - -/* Target processor is little endian. */ -#undef CPU_IS_LITTLE_ENDIAN - -/* Set to 1 to enable experimental code. */ -#undef ENABLE_EXPERIMENTAL_CODE - -/* Major version of GCC or 3 otherwise. */ -#undef GCC_MAJOR_VERSION - -/* Define to 1 if you have the header file. */ -#undef HAVE_ALSA_ASOUNDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_BYTESWAP_H - -/* Define to 1 if you have the `calloc' function. */ -#undef HAVE_CALLOC - -/* Define to 1 if you have the `ceil' function. */ -#undef HAVE_CEIL - -/* Set to 1 if S_IRGRP is defined. */ -#undef HAVE_DECL_S_IRGRP - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ENDIAN_H - -/* Define to 1 if you have the `fdatasync' function. */ -#undef HAVE_FDATASYNC - -/* Define to 1 if you have libflac 1.1.1 */ -#undef HAVE_FLAC_1_1_1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_FLAC_ALL_H - -/* Set to 1 if the compile supports the struct hack. */ -#undef HAVE_FLEXIBLE_ARRAY - -/* Define to 1 if you have the `floor' function. */ -#undef HAVE_FLOOR - -/* Define to 1 if you have the `fmod' function. */ -#undef HAVE_FMOD - -/* Define to 1 if you have the `free' function. */ -#undef HAVE_FREE - -/* Define to 1 if you have the `fstat' function. */ -#undef HAVE_FSTAT - -/* Define to 1 if you have the `fsync' function. */ -#undef HAVE_FSYNC - -/* Define to 1 if you have the `ftruncate' function. */ -#undef HAVE_FTRUNCATE - -/* Define to 1 if you have the `getpagesize' function. */ -#undef HAVE_GETPAGESIZE - -/* Define to 1 if you have the `gmtime' function. */ -#undef HAVE_GMTIME - -/* Define to 1 if you have the `gmtime_r' function. */ -#undef HAVE_GMTIME_R - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `m' library (-lm). */ -#undef HAVE_LIBM - -/* Define to 1 if you have the header file. */ -#undef HAVE_LOCALE_H - -/* Define if you have C99's lrint function. */ -#undef HAVE_LRINT - -/* Define if you have C99's lrintf function. */ -#undef HAVE_LRINTF - -/* Define to 1 if you have the `lseek' function. */ -#undef HAVE_LSEEK - -/* Define to 1 if you have the `malloc' function. */ -#undef HAVE_MALLOC - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mmap' function. */ -#undef HAVE_MMAP - -/* Define to 1 if you have the `open' function. */ -#undef HAVE_OPEN - -/* Define to 1 if you have the `pread' function. */ -#undef HAVE_PREAD - -/* Define to 1 if you have the `pwrite' function. */ -#undef HAVE_PWRITE - -/* Define to 1 if you have the `read' function. */ -#undef HAVE_READ - -/* Define to 1 if you have the `realloc' function. */ -#undef HAVE_REALLOC - -/* Define to 1 if you have the `setlocale' function. */ -#undef HAVE_SETLOCALE - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Set to 1 if you have libsqlite3. */ -#undef HAVE_SQLITE3 - -/* Define to 1 if the system has the type `ssize_t'. */ -#undef HAVE_SSIZE_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `vsnprintf' function. */ -#undef HAVE_VSNPRINTF - -/* Define to 1 if you have the `write' function. */ -#undef HAVE_WRITE - -/* Set to 1 if compiling for MacOSX */ -#undef OS_IS_MACOSX - -/* Set to 1 if compiling for Win32 */ -#undef OS_IS_WIN32 - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Set to maximum allowed value of sf_count_t type. */ -#undef SF_COUNT_MAX - -/* The size of a `double', as computed by sizeof. */ -#undef SIZEOF_DOUBLE - -/* The size of a `float', as computed by sizeof. */ -#undef SIZEOF_FLOAT - -/* The size of a `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of a `int64_t', as computed by sizeof. */ -#undef SIZEOF_INT64_T - -/* The size of a `loff_t', as computed by sizeof. */ -#undef SIZEOF_LOFF_T - -/* The size of a `long', as computed by sizeof. */ -#undef SIZEOF_LONG - -/* The size of a `long long', as computed by sizeof. */ -#undef SIZEOF_LONG_LONG - -/* The size of a `off64_t', as computed by sizeof. */ -#undef SIZEOF_OFF64_T - -/* The size of a `off_t', as computed by sizeof. */ -#undef SIZEOF_OFF_T - -/* Set to sizeof (long) if unknown. */ -#undef SIZEOF_SF_COUNT_T - -/* The size of a `short', as computed by sizeof. */ -#undef SIZEOF_SHORT - -/* The size of a `size_t', as computed by sizeof. */ -#undef SIZEOF_SIZE_T - -/* The size of a `ssize_t', as computed by sizeof. */ -#undef SIZEOF_SSIZE_T - -/* The size of a `void*', as computed by sizeof. */ -#undef SIZEOF_VOIDP - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Set to long if unknown. */ -#undef TYPEOF_SF_COUNT_T - -/* Set to 1 to use the native windows API */ -#undef USE_WINDOWS_API - -/* Version number of package */ -#undef VERSION - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define to make fseeko etc. visible, on some hosts. */ -#undef _LARGEFILE_SOURCE - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES diff --git a/Libraries/SndFile/Files/src/create_symbols_file.py b/Libraries/SndFile/Files/src/create_symbols_file.py deleted file mode 100755 index 9dbb27d62..000000000 --- a/Libraries/SndFile/Files/src/create_symbols_file.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/python - -# Copyright (C) 2003,2004 Erik de Castro Lopo -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the author nor the names of any contributors may be used -# to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import re, sys - -#---------------------------------------------------------------- -# These are all of the public functions exported from libsndfile. -# -# Its important not to change the order they are listed in or -# the ordinal values in the second column. - -ALL_SYMBOLS = ( - ( "sf_command", 1 ), - ( "sf_open", 2 ), - ( "sf_close", 3 ), - ( "sf_seek", 4 ), - ( "sf_error", 7 ), - ( "sf_perror", 8 ), - ( "sf_error_str", 9 ), - ( "sf_error_number", 10 ), - ( "sf_format_check", 11 ), - ( "sf_read_raw", 16 ), - ( "sf_readf_short", 17 ), - ( "sf_readf_int", 18 ), - ( "sf_readf_float", 19 ), - ( "sf_readf_double", 20 ), - ( "sf_read_short", 21 ), - ( "sf_read_int", 22 ), - ( "sf_read_float", 23 ), - ( "sf_read_double", 24 ), - ( "sf_write_raw", 32 ), - ( "sf_writef_short", 33 ), - ( "sf_writef_int", 34 ), - ( "sf_writef_float", 35 ), - ( "sf_writef_double", 36 ), - ( "sf_write_short", 37 ), - ( "sf_write_int", 38 ), - ( "sf_write_float", 39 ), - ( "sf_write_double", 40 ), - ( "sf_strerror", 50 ), - ( "sf_get_string", 60 ), - ( "sf_set_string", 61 ), - ( "sf_open_fd", 70 ), - ( "sf_open_virtual", 80 ), - ( "sf_write_sync", 90 ) - ) - -#------------------------------------------------------------------------------- - -def linux_symbols (progname, version): - print "# Auto-generated by %s\n" %progname - print "libsndfile.so.%s" % version - print "{" - print " global:" - for name, ordinal in ALL_SYMBOLS: - print " %s ;" % name - print " local:" - print " * ;" - print "} ;" - print - return - -def darwin_symbols (progname, version): - print "# Auto-generated by %s\n" %progname - for name, ordinal in ALL_SYMBOLS: - print "_%s" % name - print - return - -def win32_symbols (progname, version, name): - print "; Auto-generated by %s\n" %progname - print "LIBRARY %s-%s.dll" % (name, re.sub ("\..*", "", version)) - print "EXPORTS\n" - for name, ordinal in ALL_SYMBOLS: - print "%-20s @%s" % (name, ordinal) - print - return - -def no_symbols (os_name): - print - print "No known way of restricting exported symbols on '%s'." % os_name - print "If you know a way, please contact the author." - print - return - -#------------------------------------------------------------------------------- - -progname = re.sub (".*[\\/]", "", sys.argv [0]) - -if len (sys.argv) != 3: - print - print "Usage : %s ." % progname - print - print " Currently supported values for target OS are:" - print " linux" - print " darwin (ie MacOSX)" - print " win32 (ie wintendo)" - print " cygwin (Cygwin on wintendo)" - print - sys.exit (1) - -os_name = sys.argv [1] -version = re.sub ("\.[a-z0-9]+$", "", sys.argv [2]) - -if os_name == "linux": - linux_symbols (progname, version) -elif os_name == "darwin": - darwin_symbols (progname, version) -elif os_name == "win32": - win32_symbols (progname, version, "libsndfile") -elif os_name == "cygwin": - win32_symbols (progname, version, "cygsndfile") -else: - no_symbols (os_name) - -sys.exit (0) - -# Do not edit or modify anything in this comment block. -# The arch-tag line is a file identity tag for the GNU Arch -# revision control system. -# -# arch-tag: 5814f35c-318f-4023-a0c3-d9cf7c9e5f6c - diff --git a/Libraries/SndFile/Files/src/cygsndfile.def b/Libraries/SndFile/Files/src/cygsndfile.def deleted file mode 100644 index 510aa8e22..000000000 --- a/Libraries/SndFile/Files/src/cygsndfile.def +++ /dev/null @@ -1,39 +0,0 @@ -; Auto-generated by create_symbols_file.py - -LIBRARY cygsndfile-1.dll -EXPORTS - -sf_command @1 -sf_open @2 -sf_close @3 -sf_seek @4 -sf_error @7 -sf_perror @8 -sf_error_str @9 -sf_error_number @10 -sf_format_check @11 -sf_read_raw @16 -sf_readf_short @17 -sf_readf_int @18 -sf_readf_float @19 -sf_readf_double @20 -sf_read_short @21 -sf_read_int @22 -sf_read_float @23 -sf_read_double @24 -sf_write_raw @32 -sf_writef_short @33 -sf_writef_int @34 -sf_writef_float @35 -sf_writef_double @36 -sf_write_short @37 -sf_write_int @38 -sf_write_float @39 -sf_write_double @40 -sf_strerror @50 -sf_get_string @60 -sf_set_string @61 -sf_open_fd @70 -sf_open_virtual @80 -sf_write_sync @90 - diff --git a/Libraries/SndFile/Files/src/dither.c b/Libraries/SndFile/Files/src/dither.c deleted file mode 100644 index 873f1bbc1..000000000 --- a/Libraries/SndFile/Files/src/dither.c +++ /dev/null @@ -1,535 +0,0 @@ -/* -** Copyright (C) 2003,2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*============================================================================ -** Rule number 1 is to only apply dither when going from a larger bitwidth -** to a smaller bitwidth. This can happen on both read and write. -** -** Need to apply dither on all conversions marked X below. -** -** Dither on write: -** -** Input -** | short int float double -** --------+----------------------------------------------- -** O 8 bit | X X X X -** u 16 bit | none X X X -** t 24 bit | none X X X -** p 32 bit | none none X X -** u float | none none none none -** t double | none none none none -** -** Dither on read: -** -** Input -** O | 8 bit 16 bit 24 bit 32 bit float double -** u --------+------------------------------------------------- -** t short | none none X X X X -** p int | none none none X X X -** u float | none none none none none none -** t double | none none none none none none -*/ - -#define SFE_DITHER_BAD_PTR 666 -#define SFE_DITHER_BAD_TYPE 667 - -typedef struct -{ int read_short_dither_bits, read_int_dither_bits ; - int write_short_dither_bits, write_int_dither_bits ; - double read_float_dither_scale, read_double_dither_bits ; - double write_float_dither_scale, write_double_dither_bits ; - - sf_count_t (*read_short) (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; - sf_count_t (*read_int) (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; - sf_count_t (*read_float) (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; - sf_count_t (*read_double) (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - - sf_count_t (*write_short) (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; - sf_count_t (*write_int) (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; - sf_count_t (*write_float) (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; - sf_count_t (*write_double) (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - - double buffer [SF_BUFFER_LEN / sizeof (double)] ; -} DITHER_DATA ; - -static sf_count_t dither_read_short (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t dither_read_int (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; - -static sf_count_t dither_write_short (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t dither_write_int (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t dither_write_float (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t dither_write_double (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -int -dither_init (SF_PRIVATE *psf, int mode) -{ DITHER_DATA *pdither ; - - pdither = psf->dither ; /* This may be NULL. */ - - /* Turn off dither on read. */ - if (mode == SFM_READ && psf->read_dither.type == SFD_NO_DITHER) - { if (pdither == NULL) - return 0 ; /* Dither is already off, so just return. */ - - if (pdither->read_short) - psf->read_short = pdither->read_short ; - if (pdither->read_int) - psf->read_int = pdither->read_int ; - if (pdither->read_float) - psf->read_float = pdither->read_float ; - if (pdither->read_double) - psf->read_double = pdither->read_double ; - return 0 ; - } ; - - /* Turn off dither on write. */ - if (mode == SFM_WRITE && psf->write_dither.type == SFD_NO_DITHER) - { if (pdither == NULL) - return 0 ; /* Dither is already off, so just return. */ - - if (pdither->write_short) - psf->write_short = pdither->write_short ; - if (pdither->write_int) - psf->write_int = pdither->write_int ; - if (pdither->write_float) - psf->write_float = pdither->write_float ; - if (pdither->write_double) - psf->write_double = pdither->write_double ; - return 0 ; - } ; - - /* Turn on dither on read if asked. */ - if (mode == SFM_READ && psf->read_dither.type != 0) - { if (pdither == NULL) - pdither = psf->dither = calloc (1, sizeof (DITHER_DATA)) ; - if (pdither == NULL) - return SFE_MALLOC_FAILED ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_DOUBLE : - case SF_FORMAT_FLOAT : - pdither->read_int = psf->read_int ; - psf->read_int = dither_read_int ; - - case SF_FORMAT_PCM_32 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - pdither->read_short = psf->read_short ; - psf->read_short = dither_read_short ; - - default : break ; - } ; - } ; - - /* Turn on dither on write if asked. */ - if (mode == SFM_WRITE && psf->write_dither.type != 0) - { if (pdither == NULL) - pdither = psf->dither = calloc (1, sizeof (DITHER_DATA)) ; - if (pdither == NULL) - return SFE_MALLOC_FAILED ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_DOUBLE : - case SF_FORMAT_FLOAT : - pdither->write_int = psf->write_int ; - psf->write_int = dither_write_int ; - - case SF_FORMAT_PCM_32 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - - default : break ; - } ; - - pdither->write_short = psf->write_short ; - psf->write_short = dither_write_short ; - - pdither->write_int = psf->write_int ; - psf->write_int = dither_write_int ; - - pdither->write_float = psf->write_float ; - psf->write_float = dither_write_float ; - - pdither->write_double = psf->write_double ; - psf->write_double = dither_write_double ; - } ; - - return 0 ; -} /* dither_init */ - -/*============================================================================== -*/ - -static void dither_short (const short *in, short *out, int frames, int channels) ; -static void dither_int (const int *in, int *out, int frames, int channels) ; - -static void dither_float (const float *in, float *out, int frames, int channels) ; -static void dither_double (const double *in, double *out, int frames, int channels) ; - -static sf_count_t -dither_read_short (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ psf = psf ; - ptr = ptr ; - return len ; -} /* dither_read_short */ - -static sf_count_t -dither_read_int (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ psf = psf ; - ptr = ptr ; - return len ; -} /* dither_read_int */ - -/*------------------------------------------------------------------------------ -*/ - -static sf_count_t -dither_write_short (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ DITHER_DATA *pdither ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - - if ((pdither = psf->dither) == NULL) - { psf->error = SFE_DITHER_BAD_PTR ; - return 0 ; - } ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - case SF_FORMAT_DPCM_8 : - break ; - - default : - return pdither->write_short (psf, ptr, len) ; - } ; - - bufferlen = sizeof (pdither->buffer) / sizeof (short) ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - writecount /= psf->sf.channels ; - writecount *= psf->sf.channels ; - - dither_short (ptr, (short*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ; - - thiswrite = pdither->write_short (psf, (short*) pdither->buffer, writecount) ; - total += thiswrite ; - len -= thiswrite ; - if (thiswrite < writecount) - break ; - } ; - - return total ; -} /* dither_write_short */ - -static sf_count_t -dither_write_int (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ DITHER_DATA *pdither ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - - if ((pdither = psf->dither) == NULL) - { psf->error = SFE_DITHER_BAD_PTR ; - return 0 ; - } ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - - case SF_FORMAT_DPCM_8 : - case SF_FORMAT_DPCM_16 : - break ; - - default : - return pdither->write_int (psf, ptr, len) ; - } ; - - - bufferlen = sizeof (pdither->buffer) / sizeof (int) ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - writecount /= psf->sf.channels ; - writecount *= psf->sf.channels ; - - dither_int (ptr, (int*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ; - - thiswrite = pdither->write_int (psf, (int*) pdither->buffer, writecount) ; - total += thiswrite ; - len -= thiswrite ; - if (thiswrite < writecount) - break ; - } ; - - return total ; -} /* dither_write_int */ - -static sf_count_t -dither_write_float (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ DITHER_DATA *pdither ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - - if ((pdither = psf->dither) == NULL) - { psf->error = SFE_DITHER_BAD_PTR ; - return 0 ; - } ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - - case SF_FORMAT_DPCM_8 : - case SF_FORMAT_DPCM_16 : - break ; - - default : - return pdither->write_float (psf, ptr, len) ; - } ; - - bufferlen = sizeof (pdither->buffer) / sizeof (float) ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (float) len ; - writecount /= psf->sf.channels ; - writecount *= psf->sf.channels ; - - dither_float (ptr, (float*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ; - - thiswrite = pdither->write_float (psf, (float*) pdither->buffer, writecount) ; - total += thiswrite ; - len -= thiswrite ; - if (thiswrite < writecount) - break ; - } ; - - return total ; -} /* dither_write_float */ - -static sf_count_t -dither_write_double (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ DITHER_DATA *pdither ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - - if ((pdither = psf->dither) == NULL) - { psf->error = SFE_DITHER_BAD_PTR ; - return 0 ; - } ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - - case SF_FORMAT_DPCM_8 : - case SF_FORMAT_DPCM_16 : - break ; - - default : - return pdither->write_double (psf, ptr, len) ; - } ; - - - bufferlen = sizeof (pdither->buffer) / sizeof (double) ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (double) len ; - writecount /= psf->sf.channels ; - writecount *= psf->sf.channels ; - - dither_double (ptr, (double*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ; - - thiswrite = pdither->write_double (psf, (double*) pdither->buffer, writecount) ; - total += thiswrite ; - len -= thiswrite ; - if (thiswrite < writecount) - break ; - } ; - - return total ; -} /* dither_write_double */ - -/*============================================================================== -*/ - -static void -dither_short (const short *in, short *out, int frames, int channels) -{ int ch, k ; - - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - -} /* dither_short */ - -static void -dither_int (const int *in, int *out, int frames, int channels) -{ int ch, k ; - - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - -} /* dither_int */ - -static void -dither_float (const float *in, float *out, int frames, int channels) -{ int ch, k ; - - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - -} /* dither_float */ - -static void -dither_double (const double *in, double *out, int frames, int channels) -{ int ch, k ; - - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - -} /* dither_double */ - -/*============================================================================== -*/ -#if 0 - -/* -** Not made public because this (maybe) requires storage of state information. -** -** Also maybe need separate state info for each channel!!!! -*/ - -int -DO_NOT_USE_sf_dither_short (const SF_DITHER_INFO *dither, const short *in, short *out, int frames, int channels) -{ int ch, k ; - - if (! dither) - return SFE_DITHER_BAD_PTR ; - - switch (dither->type & SFD_TYPEMASK) - { case SFD_WHITE : - case SFD_TRIANGULAR_PDF : - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - break ; - - default : - return SFE_DITHER_BAD_TYPE ; - } ; - - return 0 ; -} /* DO_NOT_USE_sf_dither_short */ - -int -DO_NOT_USE_sf_dither_int (const SF_DITHER_INFO *dither, const int *in, int *out, int frames, int channels) -{ int ch, k ; - - if (! dither) - return SFE_DITHER_BAD_PTR ; - - switch (dither->type & SFD_TYPEMASK) - { case SFD_WHITE : - case SFD_TRIANGULAR_PDF : - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - break ; - - default : - return SFE_DITHER_BAD_TYPE ; - } ; - - return 0 ; -} /* DO_NOT_USE_sf_dither_int */ - -int -DO_NOT_USE_sf_dither_float (const SF_DITHER_INFO *dither, const float *in, float *out, int frames, int channels) -{ int ch, k ; - - if (! dither) - return SFE_DITHER_BAD_PTR ; - - switch (dither->type & SFD_TYPEMASK) - { case SFD_WHITE : - case SFD_TRIANGULAR_PDF : - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - break ; - - default : - return SFE_DITHER_BAD_TYPE ; - } ; - - return 0 ; -} /* DO_NOT_USE_sf_dither_float */ - -int -DO_NOT_USE_sf_dither_double (const SF_DITHER_INFO *dither, const double *in, double *out, int frames, int channels) -{ int ch, k ; - - if (! dither) - return SFE_DITHER_BAD_PTR ; - - switch (dither->type & SFD_TYPEMASK) - { case SFD_WHITE : - case SFD_TRIANGULAR_PDF : - for (ch = 0 ; ch < channels ; ch++) - for (k = ch ; k < channels * frames ; k += channels) - out [k] = in [k] ; - break ; - - default : - return SFE_DITHER_BAD_TYPE ; - } ; - - return 0 ; -} /* DO_NOT_USE_sf_dither_double */ - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 673fad58-5314-421c-9144-9d54bfdf104c -*/ diff --git a/Libraries/SndFile/Files/src/double64.c b/Libraries/SndFile/Files/src/double64.c deleted file mode 100644 index 9a6f8f119..000000000 --- a/Libraries/SndFile/Files/src/double64.c +++ /dev/null @@ -1,1009 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "float_cast.h" - -#if CPU_IS_LITTLE_ENDIAN - #define DOUBLE64_READ double64_le_read - #define DOUBLE64_WRITE double64_le_write -#elif CPU_IS_BIG_ENDIAN - #define DOUBLE64_READ double64_be_read - #define DOUBLE64_WRITE double64_be_write -#endif - -/* A 32 number which will not overflow when multiplied by sizeof (double). */ -#define SENSIBLE_LEN (0x8000000) - -/*-------------------------------------------------------------------------------------------- -** Processor floating point capabilities. double64_get_capability () returns one of the -** latter three values. -*/ - -enum -{ DOUBLE_UNKNOWN = 0x00, - DOUBLE_CAN_RW_LE = 0x23, - DOUBLE_CAN_RW_BE = 0x34, - DOUBLE_BROKEN_LE = 0x45, - DOUBLE_BROKEN_BE = 0x56 -} ; - -/*-------------------------------------------------------------------------------------------- -** Prototypes for private functions. -*/ - -static sf_count_t host_read_d2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t host_read_d2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t host_read_d2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t host_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t host_write_s2d (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t host_write_i2d (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t host_write_f2d (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t host_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static void double64_peak_update (SF_PRIVATE *psf, const double *buffer, int count, sf_count_t indx) ; - -static int double64_get_capability (SF_PRIVATE *psf) ; - -static sf_count_t replace_read_d2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t replace_read_d2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t replace_read_d2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t replace_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t replace_write_s2d (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t replace_write_i2d (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t replace_write_f2d (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t replace_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static void d2bd_read (double *buffer, int count) ; -static void bd2d_write (double *buffer, int count) ; - -/*-------------------------------------------------------------------------------------------- -** Exported functions. -*/ - -int -double64_init (SF_PRIVATE *psf) -{ static int double64_caps ; - - double64_caps = double64_get_capability (psf) ; - - psf->blockwidth = sizeof (double) * psf->sf.channels ; - - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { switch (psf->endian + double64_caps) - { case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = host_read_d2s ; - psf->read_int = host_read_d2i ; - psf->read_float = host_read_d2f ; - psf->read_double = host_read_d ; - break ; - - case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = host_read_d2s ; - psf->read_int = host_read_d2i ; - psf->read_float = host_read_d2f ; - psf->read_double = host_read_d ; - break ; - - case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_LE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = host_read_d2s ; - psf->read_int = host_read_d2i ; - psf->read_float = host_read_d2f ; - psf->read_double = host_read_d ; - break ; - - case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_BE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = host_read_d2s ; - psf->read_int = host_read_d2i ; - psf->read_float = host_read_d2f ; - psf->read_double = host_read_d ; - break ; - - /* When the CPU is not IEEE compatible. */ - case (SF_ENDIAN_BIG + DOUBLE_BROKEN_BE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = replace_read_d2s ; - psf->read_int = replace_read_d2i ; - psf->read_float = replace_read_d2f ; - psf->read_double = replace_read_d ; - break ; - - case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_LE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = replace_read_d2s ; - psf->read_int = replace_read_d2i ; - psf->read_float = replace_read_d2f ; - psf->read_double = replace_read_d ; - break ; - - case (SF_ENDIAN_BIG + DOUBLE_BROKEN_LE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = replace_read_d2s ; - psf->read_int = replace_read_d2i ; - psf->read_float = replace_read_d2f ; - psf->read_double = replace_read_d ; - break ; - - case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_BE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = replace_read_d2s ; - psf->read_int = replace_read_d2i ; - psf->read_float = replace_read_d2f ; - psf->read_double = replace_read_d ; - break ; - - default : break ; - } ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { switch (psf->endian + double64_caps) - { case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = host_write_s2d ; - psf->write_int = host_write_i2d ; - psf->write_float = host_write_f2d ; - psf->write_double = host_write_d ; - break ; - - case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = host_write_s2d ; - psf->write_int = host_write_i2d ; - psf->write_float = host_write_f2d ; - psf->write_double = host_write_d ; - break ; - - case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_LE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = host_write_s2d ; - psf->write_int = host_write_i2d ; - psf->write_float = host_write_f2d ; - psf->write_double = host_write_d ; - break ; - - case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_BE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = host_write_s2d ; - psf->write_int = host_write_i2d ; - psf->write_float = host_write_f2d ; - psf->write_double = host_write_d ; - break ; - - /* When the CPU is not IEEE compatible. */ - case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_LE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = replace_write_s2d ; - psf->write_int = replace_write_i2d ; - psf->write_float = replace_write_f2d ; - psf->write_double = replace_write_d ; - break ; - - case (SF_ENDIAN_BIG + DOUBLE_BROKEN_BE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = replace_write_s2d ; - psf->write_int = replace_write_i2d ; - psf->write_float = replace_write_f2d ; - psf->write_double = replace_write_d ; - break ; - - case (SF_ENDIAN_BIG + DOUBLE_BROKEN_LE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = replace_write_s2d ; - psf->write_int = replace_write_i2d ; - psf->write_float = replace_write_f2d ; - psf->write_double = replace_write_d ; - break ; - - case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_BE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = replace_write_s2d ; - psf->write_int = replace_write_i2d ; - psf->write_float = replace_write_f2d ; - psf->write_double = replace_write_d ; - break ; - - default : break ; - } ; - } ; - - if (psf->filelength > psf->dataoffset) - { psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset : - psf->filelength - psf->dataoffset ; - } - else - psf->datalength = 0 ; - - psf->sf.frames = psf->datalength / psf->blockwidth ; - - return 0 ; -} /* double64_init */ - -/*---------------------------------------------------------------------------- -** From : http://www.hpcf.cam.ac.uk/fp_formats.html -** -** 64 bit double precision layout (big endian) -** Sign bit 0 -** Exponent bits 1-11 -** Mantissa bits 12-63 -** Exponent Offset 1023 -** -** double single -** -** +INF 7FF0000000000000 7F800000 -** -INF FFF0000000000000 FF800000 -** NaN 7FF0000000000001 7F800001 -** to to -** 7FFFFFFFFFFFFFFF 7FFFFFFF -** and and -** FFF0000000000001 FF800001 -** to to -** FFFFFFFFFFFFFFFF FFFFFFFF -** +OVER 7FEFFFFFFFFFFFFF 7F7FFFFF -** -OVER FFEFFFFFFFFFFFFF FF7FFFFF -** +UNDER 0010000000000000 00800000 -** -UNDER 8010000000000000 80800000 -*/ - -double -double64_be_read (unsigned char *cptr) -{ int exponent, negative, upper, lower ; - double dvalue ; - - negative = (cptr [0] & 0x80) ? 1 : 0 ; - exponent = ((cptr [0] & 0x7F) << 4) | ((cptr [1] >> 4) & 0xF) ; - - /* Might not have a 64 bit long, so load the mantissa into a double. */ - upper = (((cptr [1] & 0xF) << 24) | (cptr [2] << 16) | (cptr [3] << 8) | cptr [4]) ; - lower = (cptr [5] << 16) | (cptr [6] << 8) | cptr [7] ; - - if (exponent == 0 && upper == 0 && lower == 0) - return 0.0 ; - - dvalue = upper + lower / ((double) 0x1000000) ; - dvalue += 0x10000000 ; - - exponent = exponent - 0x3FF ; - - dvalue = dvalue / ((double) 0x10000000) ; - - if (negative) - dvalue *= -1 ; - - if (exponent > 0) - dvalue *= (1 << exponent) ; - else if (exponent < 0) - dvalue /= (1 << abs (exponent)) ; - - return dvalue ; -} /* double64_be_read */ - -double -double64_le_read (unsigned char *cptr) -{ int exponent, negative, upper, lower ; - double dvalue ; - - negative = (cptr [7] & 0x80) ? 1 : 0 ; - exponent = ((cptr [7] & 0x7F) << 4) | ((cptr [6] >> 4) & 0xF) ; - - /* Might not have a 64 bit long, so load the mantissa into a double. */ - upper = ((cptr [6] & 0xF) << 24) | (cptr [5] << 16) | (cptr [4] << 8) | cptr [3] ; - lower = (cptr [2] << 16) | (cptr [1] << 8) | cptr [0] ; - - if (exponent == 0 && upper == 0 && lower == 0) - return 0.0 ; - - dvalue = upper + lower / ((double) 0x1000000) ; - dvalue += 0x10000000 ; - - exponent = exponent - 0x3FF ; - - dvalue = dvalue / ((double) 0x10000000) ; - - if (negative) - dvalue *= -1 ; - - if (exponent > 0) - dvalue *= (1 << exponent) ; - else if (exponent < 0) - dvalue /= (1 << abs (exponent)) ; - - return dvalue ; -} /* double64_le_read */ - -void -double64_be_write (double in, unsigned char *out) -{ int exponent, mantissa ; - - memset (out, 0, sizeof (double)) ; - - if (fabs (in) < 1e-30) - return ; - - if (in < 0.0) - { in *= -1.0 ; - out [0] |= 0x80 ; - } ; - - in = frexp (in, &exponent) ; - - exponent += 1022 ; - - out [0] |= (exponent >> 4) & 0x7F ; - out [1] |= (exponent << 4) & 0xF0 ; - - in *= 0x20000000 ; - mantissa = lrint (floor (in)) ; - - out [1] |= (mantissa >> 24) & 0xF ; - out [2] = (mantissa >> 16) & 0xFF ; - out [3] = (mantissa >> 8) & 0xFF ; - out [4] = mantissa & 0xFF ; - - in = fmod (in, 1.0) ; - in *= 0x1000000 ; - mantissa = lrint (floor (in)) ; - - out [5] = (mantissa >> 16) & 0xFF ; - out [6] = (mantissa >> 8) & 0xFF ; - out [7] = mantissa & 0xFF ; - - return ; -} /* double64_be_write */ - -void -double64_le_write (double in, unsigned char *out) -{ int exponent, mantissa ; - - memset (out, 0, sizeof (double)) ; - - if (fabs (in) < 1e-30) - return ; - - if (in < 0.0) - { in *= -1.0 ; - out [7] |= 0x80 ; - } ; - - in = frexp (in, &exponent) ; - - exponent += 1022 ; - - out [7] |= (exponent >> 4) & 0x7F ; - out [6] |= (exponent << 4) & 0xF0 ; - - in *= 0x20000000 ; - mantissa = lrint (floor (in)) ; - - out [6] |= (mantissa >> 24) & 0xF ; - out [5] = (mantissa >> 16) & 0xFF ; - out [4] = (mantissa >> 8) & 0xFF ; - out [3] = mantissa & 0xFF ; - - in = fmod (in, 1.0) ; - in *= 0x1000000 ; - mantissa = lrint (floor (in)) ; - - out [2] = (mantissa >> 16) & 0xFF ; - out [1] = (mantissa >> 8) & 0xFF ; - out [0] = mantissa & 0xFF ; - - return ; -} /* double64_le_write */ - -/*============================================================================================== -** Private functions. -*/ - -static void -double64_peak_update (SF_PRIVATE *psf, const double *buffer, int count, sf_count_t indx) -{ int chan ; - int k, position ; - float fmaxval ; - - for (chan = 0 ; chan < psf->sf.channels ; chan++) - { fmaxval = fabs (buffer [chan]) ; - position = 0 ; - for (k = chan ; k < count ; k += psf->sf.channels) - if (fmaxval < fabs (buffer [k])) - { fmaxval = fabs (buffer [k]) ; - position = k ; - } ; - - if (fmaxval > psf->peak_info->peaks [chan].value) - { psf->peak_info->peaks [chan].value = fmaxval ; - psf->peak_info->peaks [chan].position = psf->write_current + indx + (position / psf->sf.channels) ; - } ; - } ; - - return ; -} /* double64_peak_update */ - -static int -double64_get_capability (SF_PRIVATE *psf) -{ union - { double d ; - int i [2] ; - unsigned char c [8] ; - } data ; - - data.d = 1.234567890123456789 ; /* Some abitrary value. */ - - if (! psf->ieee_replace) - { /* If this test is true ints and floats are compatible and little endian. */ - if (data.i [0] == 0x428c59fb && data.i [1] == 0x3ff3c0ca && - data.c [0] == 0xfb && data.c [2] == 0x8c && data.c [4] == 0xca && data.c [6] == 0xf3) - return DOUBLE_CAN_RW_LE ; - - /* If this test is true ints and floats are compatible and big endian. */ - if ((data.i [0] == 0x3ff3c0ca && data.i [1] == 0x428c59fb) && - (data.c [0] == 0x3f && data.c [2] == 0xc0 && data.c [4] == 0x42 && data.c [6] == 0x59)) - return DOUBLE_CAN_RW_BE ; - } ; - - /* Doubles are broken. Don't expect reading or writing to be fast. */ - psf_log_printf (psf, "Using IEEE replacement code for double.\n") ; - - return (CPU_IS_LITTLE_ENDIAN) ? DOUBLE_BROKEN_LE : DOUBLE_BROKEN_BE ; -} /* double64_get_capability */ - -/*======================================================================================= -*/ - -static inline void -d2s_array (const double *src, int count, short *dest, double scale) -{ while (--count >= 0) - { dest [count] = lrint (scale * src [count]) ; - } ; -} /* d2s_array */ - -static inline void -d2i_array (const double *src, int count, int *dest, double scale) -{ while (--count >= 0) - { dest [count] = lrint (scale * src [count]) ; - } ; -} /* d2i_array */ - -static inline void -d2f_array (const double *src, int count, float *dest) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* d2f_array */ - -static inline void -s2d_array (const short *src, double *dest, int count) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* s2d_array */ - -static inline void -i2d_array (const int *src, double *dest, int count) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* i2d_array */ - -static inline void -f2d_array (const float *src, double *dest, int count) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* f2d_array */ - -/*---------------------------------------------------------------------------------------------- -*/ - -static sf_count_t -host_read_d2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double scale ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, readcount) ; - - d2s_array (psf->u.dbuf, readcount, ptr + total, scale) ; - total += readcount ; - len -= readcount ; - if (readcount < bufferlen) - break ; - } ; - - return total ; -} /* host_read_d2s */ - -static sf_count_t -host_read_d2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double scale ; - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - d2i_array (psf->u.dbuf, readcount, ptr + total, scale) ; - total += readcount ; - len -= readcount ; - if (readcount < bufferlen) - break ; - } ; - - return total ; -} /* host_read_d2i */ - -static sf_count_t -host_read_d2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - d2f_array (psf->u.dbuf, readcount, ptr + total) ; - total += readcount ; - len -= readcount ; - if (readcount < bufferlen) - break ; - } ; - - return total ; -} /* host_read_d2f */ - -static sf_count_t -host_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen ; - sf_count_t readcount, total = 0 ; - - readcount = psf_fread (ptr, sizeof (double), len, psf) ; - - if (psf->float_endswap != SF_TRUE) - return readcount ; - - /* If the read length was sensible, endswap output in one go. */ - if (readcount < SENSIBLE_LEN) - { endswap_double_array (ptr, readcount) ; - return readcount ; - } ; - - bufferlen = SENSIBLE_LEN ; - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - endswap_double_array (ptr + total, bufferlen) ; - - total += bufferlen ; - len -= bufferlen ; - } ; - - return total ; -} /* host_read_d */ - -static sf_count_t -host_write_s2d (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - s2d_array (ptr + total, psf->u.dbuf, bufferlen) ; - - if (psf->peak_info) - double64_peak_update (psf, psf->u.dbuf, bufferlen, total / psf->sf.channels) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_s2d */ - -static sf_count_t -host_write_i2d (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2d_array (ptr + total, psf->u.dbuf, bufferlen) ; - - if (psf->peak_info) - double64_peak_update (psf, psf->u.dbuf, bufferlen, total / psf->sf.channels) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_i2d */ - -static sf_count_t -host_write_f2d (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - f2d_array (ptr + total, psf->u.dbuf, bufferlen) ; - - if (psf->peak_info) - double64_peak_update (psf, psf->u.dbuf, bufferlen, total / psf->sf.channels) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_f2d */ - -static sf_count_t -host_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - if (psf->peak_info) - double64_peak_update (psf, ptr, len, 0) ; - - if (psf->float_endswap != SF_TRUE) - return psf_fwrite (ptr, sizeof (double), len, psf) ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - endswap_double_copy (psf->u.dbuf, ptr + total, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_d */ - -/*======================================================================================= -*/ - -static sf_count_t -replace_read_d2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double scale ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - d2bd_read (psf->u.dbuf, bufferlen) ; - - d2s_array (psf->u.dbuf, readcount, ptr + total, scale) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_d2s */ - -static sf_count_t -replace_read_d2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double scale ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - d2bd_read (psf->u.dbuf, bufferlen) ; - - d2i_array (psf->u.dbuf, readcount, ptr + total, scale) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_d2i */ - -static sf_count_t -replace_read_d2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - d2bd_read (psf->u.dbuf, bufferlen) ; - - memcpy (ptr + total, psf->u.dbuf, bufferlen * sizeof (double)) ; - - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_d2f */ - -static sf_count_t -replace_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - /* FIXME : This is probably nowhere near optimal. */ - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, readcount) ; - - d2bd_read (psf->u.dbuf, readcount) ; - - memcpy (ptr + total, psf->u.dbuf, readcount * sizeof (double)) ; - - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_d */ - -static sf_count_t -replace_write_s2d (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2d_array (ptr + total, psf->u.dbuf, bufferlen) ; - - if (psf->peak_info) - double64_peak_update (psf, psf->u.dbuf, bufferlen, total / psf->sf.channels) ; - - bd2d_write (psf->u.dbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_s2d */ - -static sf_count_t -replace_write_i2d (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2d_array (ptr + total, psf->u.dbuf, bufferlen) ; - - if (psf->peak_info) - double64_peak_update (psf, psf->u.dbuf, bufferlen, total / psf->sf.channels) ; - - bd2d_write (psf->u.dbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_i2d */ - -static sf_count_t -replace_write_f2d (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - f2d_array (ptr + total, psf->u.dbuf, bufferlen) ; - - bd2d_write (psf->u.dbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_f2d */ - -static sf_count_t -replace_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - /* FIXME : This is probably nowhere near optimal. */ - if (psf->peak_info) - double64_peak_update (psf, ptr, len, 0) ; - - bufferlen = ARRAY_LEN (psf->u.dbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - memcpy (psf->u.dbuf, ptr + total, bufferlen * sizeof (double)) ; - - bd2d_write (psf->u.dbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_double_array (psf->u.dbuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.dbuf, sizeof (double), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_d */ - -/*---------------------------------------------------------------------------------------------- -*/ - -static void -d2bd_read (double *buffer, int count) -{ while (--count >= 0) - { buffer [count] = DOUBLE64_READ ((unsigned char *) (buffer + count)) ; - } ; -} /* d2bd_read */ - -static void -bd2d_write (double *buffer, int count) -{ while (--count >= 0) - { DOUBLE64_WRITE (buffer [count], (unsigned char*) (buffer + count)) ; - } ; -} /* bd2d_write */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 4ee243b7-8c7a-469b-869c-e9aa0ee3b77f -*/ diff --git a/Libraries/SndFile/Files/src/dwd.c b/Libraries/SndFile/Files/src/dwd.c deleted file mode 100644 index a33bae0c8..000000000 --- a/Libraries/SndFile/Files/src/dwd.c +++ /dev/null @@ -1,210 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#if (ENABLE_EXPERIMENTAL_CODE == 0) - -int -dwd_open (SF_PRIVATE *psf) -{ if (psf) - return SFE_UNIMPLEMENTED ; - return (psf && 0) ; -} /* dwd_open */ - -#else - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define SFE_DWD_NO_DWD 1666 -#define SFE_DWD_BAND_BIT_WIDTH 1667 -#define SFE_DWD_COMPRESSION 1668 - -#define DWD_IDENTIFIER "DiamondWare Digitized\n\0\x1a" -#define DWD_IDENTIFIER_LEN 24 - -#define DWD_HEADER_LEN 57 - -/*------------------------------------------------------------------------------ -** Typedefs. -*/ - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int dwd_read_header (SF_PRIVATE *psf) ; - -static int dwd_close (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -dwd_open (SF_PRIVATE *psf) -{ int subformat, error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = dwd_read_header (psf))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_DWD) - return SFE_BAD_OPEN_FORMAT ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { - /*-psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU) - psf->endian = SF_ENDIAN_LITTLE ; - else if (psf->endian != SF_ENDIAN_LITTLE) - psf->endian = SF_ENDIAN_BIG ; - - if (! (encoding = dwd_write_header (psf, SF_FALSE))) - return psf->error ; - - psf->write_header = dwd_write_header ; - -*/ - } ; - - psf->container_close = dwd_close ; - - /*-psf->blockwidth = psf->bytewidth * psf->sf.channels ;-*/ - - return error ; -} /* dwd_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -dwd_close (SF_PRIVATE *psf) -{ - psf = psf ; - - return 0 ; -} /* dwd_close */ - -/* This struct contains all the fields of interest om the DWD header, but does not -** do so in the same order and layout as the actual file, header. -** No assumptions are made about the packing of this struct. -*/ -typedef struct -{ unsigned char major, minor, compression, channels, bitwidth ; - unsigned short srate, maxval ; - unsigned int id, datalen, frames, offset ; -} DWD_HEADER ; - -static int -dwd_read_header (SF_PRIVATE *psf) -{ DWD_HEADER dwdh ; - - memset (psf->u.cbuf, 0, sizeof (psf->u.cbuf)) ; - /* Set position to start of file to begin reading header. */ - psf_binheader_readf (psf, "pb", 0, psf->u.cbuf, DWD_IDENTIFIER_LEN) ; - - if (memcmp (psf->u.cbuf, DWD_IDENTIFIER, DWD_IDENTIFIER_LEN) != 0) - return SFE_DWD_NO_DWD ; - - psf_log_printf (psf, "Read only : DiamondWare Digitized (.dwd)\n", psf->u.cbuf) ; - - psf_binheader_readf (psf, "11", &dwdh.major, &dwdh.minor) ; - psf_binheader_readf (psf, "e4j1", &dwdh.id, 1, &dwdh.compression) ; - psf_binheader_readf (psf, "e211", &dwdh.srate, &dwdh.channels, &dwdh.bitwidth) ; - psf_binheader_readf (psf, "e24", &dwdh.maxval, &dwdh.datalen) ; - psf_binheader_readf (psf, "e44", &dwdh.frames, &dwdh.offset) ; - - psf_log_printf (psf, " Version Major : %d\n Version Minor : %d\n Unique ID : %08X\n", - dwdh.major, dwdh.minor, dwdh.id) ; - psf_log_printf (psf, " Compression : %d => ", dwdh.compression) ; - - if (dwdh.compression != 0) - { psf_log_printf (psf, "Unsupported compression\n") ; - return SFE_DWD_COMPRESSION ; - } - else - psf_log_printf (psf, "None\n") ; - - psf_log_printf (psf, " Sample Rate : %d\n Channels : %d\n" - " Bit Width : %d\n", - dwdh.srate, dwdh.channels, dwdh.bitwidth) ; - - switch (dwdh.bitwidth) - { case 8 : - psf->sf.format = SF_FORMAT_DWD | SF_FORMAT_PCM_S8 ; - psf->bytewidth = 1 ; - break ; - - case 16 : - psf->sf.format = SF_FORMAT_DWD | SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - break ; - - default : - psf_log_printf (psf, "*** Bad bit width %d\n", dwdh.bitwidth) ; - return SFE_DWD_BAND_BIT_WIDTH ; - } ; - - if (psf->filelength != dwdh.offset + dwdh.datalen) - { psf_log_printf (psf, " Data Length : %d (should be %D)\n", dwdh.datalen, psf->filelength - dwdh.offset) ; - dwdh.datalen = (unsigned int) (psf->filelength - dwdh.offset) ; - } - else - psf_log_printf (psf, " Data Length : %d\n", dwdh.datalen) ; - - psf_log_printf (psf, " Max Value : %d\n", dwdh.maxval) ; - psf_log_printf (psf, " Frames : %d\n", dwdh.frames) ; - psf_log_printf (psf, " Data Offset : %d\n", dwdh.offset) ; - - psf->datalength = dwdh.datalen ; - psf->dataoffset = dwdh.offset ; - - psf->endian = SF_ENDIAN_LITTLE ; - - psf->sf.samplerate = dwdh.srate ; - psf->sf.channels = dwdh.channels ; - psf->sf.sections = 1 ; - - return pcm_init (psf) ; -} /* dwd_read_header */ - -/*------------------------------------------------------------------------------ -*/ - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: a5e1d2a6-a840-4039-a0e7-e1a43eb05a4f -*/ diff --git a/Libraries/SndFile/Files/src/dwvw.c b/Libraries/SndFile/Files/src/dwvw.c deleted file mode 100644 index dc9ae774b..000000000 --- a/Libraries/SndFile/Files/src/dwvw.c +++ /dev/null @@ -1,671 +0,0 @@ -/* -** Copyright (C) 2002-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/*=========================================================================== -** Delta Word Variable Width -** -** This decoder and encoder were implemented using information found in this -** document : http://home.swbell.net/rubywand/R011SNDFMTS.TXT -** -** According to the document, the algorithm "was invented 1991 by Magnus -** Lidstrom and is copyright 1993 by NuEdge Development". -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" - -typedef struct -{ int dwm_maxsize, bit_width, max_delta, span ; - int samplecount ; - int bit_count, bits, last_delta_width, last_sample ; - struct - { int index, end ; - unsigned char buffer [256] ; - } b ; -} DWVW_PRIVATE ; - -/*============================================================================================ -*/ - -static sf_count_t dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t dwvw_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t dwvw_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t dwvw_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t dwvw_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t dwvw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; -static int dwvw_close (SF_PRIVATE *psf) ; - -static int dwvw_decode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int *ptr, int len) ; -static int dwvw_decode_load_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int bit_count) ; - -static int dwvw_encode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, const int *ptr, int len) ; -static void dwvw_encode_store_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int data, int new_bits) ; -static void dwvw_read_reset (DWVW_PRIVATE *pdwvw) ; - -/*============================================================================================ -** DWVW initialisation function. -*/ - -int -dwvw_init (SF_PRIVATE *psf, int bitwidth) -{ DWVW_PRIVATE *pdwvw ; - - if (psf->fdata != NULL) - { psf_log_printf (psf, "*** psf->fdata is not NULL.\n") ; - return SFE_INTERNAL ; - } ; - - if (bitwidth > 24) - return SFE_DWVW_BAD_BITWIDTH ; - - if (psf->mode == SFM_RDWR) - return SFE_BAD_MODE_RW ; - - if ((pdwvw = calloc (1, sizeof (DWVW_PRIVATE))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->fdata = (void*) pdwvw ; - - pdwvw->bit_width = bitwidth ; - pdwvw->dwm_maxsize = bitwidth / 2 ; - pdwvw->max_delta = 1 << (bitwidth - 1) ; - pdwvw->span = 1 << bitwidth ; - - dwvw_read_reset (pdwvw) ; - - if (psf->mode == SFM_READ) - { psf->read_short = dwvw_read_s ; - psf->read_int = dwvw_read_i ; - psf->read_float = dwvw_read_f ; - psf->read_double = dwvw_read_d ; - } ; - - if (psf->mode == SFM_WRITE) - { psf->write_short = dwvw_write_s ; - psf->write_int = dwvw_write_i ; - psf->write_float = dwvw_write_f ; - psf->write_double = dwvw_write_d ; - } ; - - psf->codec_close = dwvw_close ; - psf->seek = dwvw_seek ; - - /* FIXME : This is bogus. */ - psf->sf.frames = SF_COUNT_MAX ; - psf->datalength = psf->sf.frames ; - /* EMXIF : This is bogus. */ - - return 0 ; -} /* dwvw_init */ - -/*-------------------------------------------------------------------------------------------- -*/ - -static int -dwvw_close (SF_PRIVATE *psf) -{ DWVW_PRIVATE *pdwvw ; - - if (psf->fdata == NULL) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - if (psf->mode == SFM_WRITE) - { static int last_values [12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; - - /* Write 8 zero samples to fully flush output. */ - dwvw_encode_data (psf, pdwvw, last_values, 12) ; - - /* Write the last buffer worth of data to disk. */ - psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, psf) ; - - if (psf->write_header) - psf->write_header (psf, SF_TRUE) ; - } ; - - return 0 ; -} /* dwvw_close */ - -static sf_count_t -dwvw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ DWVW_PRIVATE *pdwvw ; - - mode = mode ; - - if (! psf->fdata) - { psf->error = SFE_INTERNAL ; - return PSF_SEEK_ERROR ; - } ; - - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - if (offset == 0) - { psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - dwvw_read_reset (pdwvw) ; - return 0 ; - } ; - - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; -} /* dwvw_seek */ - - -/*============================================================================== -*/ - -static sf_count_t -dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int *iptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = iptr [k] >> 16 ; - - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* dwvw_read_s */ - -static sf_count_t -dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int readcount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - while (len > 0) - { readcount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = dwvw_decode_data (psf, pdwvw, ptr, readcount) ; - - total += count ; - len -= count ; - - if (count != readcount) - break ; - } ; - - return total ; -} /* dwvw_read_i */ - -static sf_count_t -dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int *iptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (float) (iptr [k]) ; - - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* dwvw_read_f */ - -static sf_count_t -dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int *iptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (double) (iptr [k]) ; - - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* dwvw_read_d */ - -static int -dwvw_decode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int *ptr, int len) -{ int count ; - int delta_width_modifier, delta_width, delta_negative, delta, sample ; - - /* Restore state from last decode call. */ - delta_width = pdwvw->last_delta_width ; - sample = pdwvw->last_sample ; - - for (count = 0 ; count < len ; count++) - { /* If bit_count parameter is zero get the delta_width_modifier. */ - delta_width_modifier = dwvw_decode_load_bits (psf, pdwvw, -1) ; - - /* Check for end of input bit stream. Break loop if end. */ - if (delta_width_modifier < 0) - break ; - - if (delta_width_modifier && dwvw_decode_load_bits (psf, pdwvw, 1)) - delta_width_modifier = - delta_width_modifier ; - - /* Calculate the current word width. */ - delta_width = (delta_width + delta_width_modifier + pdwvw->bit_width) % pdwvw->bit_width ; - - /* Load the delta. */ - delta = 0 ; - if (delta_width) - { delta = dwvw_decode_load_bits (psf, pdwvw, delta_width - 1) | (1 << (delta_width - 1)) ; - delta_negative = dwvw_decode_load_bits (psf, pdwvw, 1) ; - if (delta == pdwvw->max_delta - 1) - delta += dwvw_decode_load_bits (psf, pdwvw, 1) ; - if (delta_negative) - delta = -delta ; - } ; - - /* Calculate the sample */ - sample += delta ; - - if (sample >= pdwvw->max_delta) - sample -= pdwvw->span ; - else if (sample < - pdwvw->max_delta) - sample += pdwvw->span ; - - /* Store the sample justifying to the most significant bit. */ - ptr [count] = sample << (32 - pdwvw->bit_width) ; - - if (pdwvw->b.end == 0 && pdwvw->bit_count == 0) - break ; - } ; - - pdwvw->last_delta_width = delta_width ; - pdwvw->last_sample = sample ; - - pdwvw->samplecount += count ; - - return count ; -} /* dwvw_decode_data */ - -static int -dwvw_decode_load_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int bit_count) -{ int output = 0, get_dwm = SF_FALSE ; - - /* - ** Depending on the value of parameter bit_count, either get the - ** required number of bits (ie bit_count > 0) or the - ** delta_width_modifier (otherwise). - */ - - if (bit_count < 0) - { get_dwm = SF_TRUE ; - /* modify bit_count to ensure we have enought bits for finding dwm. */ - bit_count = pdwvw->dwm_maxsize ; - } ; - - /* Load bits in bit reseviour. */ - while (pdwvw->bit_count < bit_count) - { if (pdwvw->b.index >= pdwvw->b.end) - { pdwvw->b.end = psf_fread (pdwvw->b.buffer, 1, sizeof (pdwvw->b.buffer), psf) ; - pdwvw->b.index = 0 ; - } ; - - /* Check for end of input stream. */ - if (bit_count < 8 && pdwvw->b.end == 0) - return -1 ; - - pdwvw->bits = (pdwvw->bits << 8) ; - - if (pdwvw->b.index < pdwvw->b.end) - { pdwvw->bits |= pdwvw->b.buffer [pdwvw->b.index] ; - pdwvw->b.index ++ ; - } ; - pdwvw->bit_count += 8 ; - } ; - - /* If asked to get bits do so. */ - if (! get_dwm) - { output = (pdwvw->bits >> (pdwvw->bit_count - bit_count)) & ((1 << bit_count) - 1) ; - pdwvw->bit_count -= bit_count ; - return output ; - } ; - - /* Otherwise must have been asked to get delta_width_modifier. */ - while (output < (pdwvw->dwm_maxsize)) - { pdwvw->bit_count -= 1 ; - if (pdwvw->bits & (1 << pdwvw->bit_count)) - break ; - output += 1 ; - } ; - - return output ; -} /* dwvw_decode_load_bits */ - -static void -dwvw_read_reset (DWVW_PRIVATE *pdwvw) -{ pdwvw->samplecount = 0 ; - pdwvw->b.index = 0 ; - pdwvw->b.end = 0 ; - pdwvw->bit_count = 0 ; - pdwvw->bits = 0 ; - pdwvw->last_delta_width = 0 ; - pdwvw->last_sample = 0 ; -} /* dwvw_read_reset */ - -static void -dwvw_encode_store_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int data, int new_bits) -{ int byte ; - - /* Shift the bits into the resevoir. */ - pdwvw->bits = (pdwvw->bits << new_bits) | (data & ((1 << new_bits) - 1)) ; - pdwvw->bit_count += new_bits ; - - /* Transfer bit to buffer. */ - while (pdwvw->bit_count >= 8) - { byte = pdwvw->bits >> (pdwvw->bit_count - 8) ; - pdwvw->bit_count -= 8 ; - pdwvw->b.buffer [pdwvw->b.index] = byte & 0xFF ; - pdwvw->b.index ++ ; - } ; - - if (pdwvw->b.index > SIGNED_SIZEOF (pdwvw->b.buffer) - 4) - { psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, psf) ; - pdwvw->b.index = 0 ; - } ; - - return ; -} /* dwvw_encode_store_bits */ - -#if 0 -/* Debigging routine. */ -static void -dump_bits (DWVW_PRIVATE *pdwvw) -{ int k, mask ; - - for (k = 0 ; k < 10 && k < pdwvw->b.index ; k++) - { mask = 0x80 ; - while (mask) - { putchar (mask & pdwvw->b.buffer [k] ? '1' : '0') ; - mask >>= 1 ; - } ; - putchar (' ') ; - } - - for (k = pdwvw->bit_count - 1 ; k >= 0 ; k --) - putchar (pdwvw->bits & (1 << k) ? '1' : '0') ; - - putchar ('\n') ; -} /* dump_bits */ -#endif - -#define HIGHEST_BIT(x,count) \ - { int y = x ; \ - (count) = 0 ; \ - while (y) \ - { (count) ++ ; \ - y >>= 1 ; \ - } ; \ - } ; - -static int -dwvw_encode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, const int *ptr, int len) -{ int count ; - int delta_width_modifier, delta, delta_negative, delta_width, extra_bit ; - - for (count = 0 ; count < len ; count++) - { delta = (ptr [count] >> (32 - pdwvw->bit_width)) - pdwvw->last_sample ; - - /* Calculate extra_bit if needed. */ - extra_bit = -1 ; - delta_negative = 0 ; - if (delta < -pdwvw->max_delta) - delta = pdwvw->max_delta + (delta % pdwvw->max_delta) ; - else if (delta == -pdwvw->max_delta) - { extra_bit = 1 ; - delta_negative = 1 ; - delta = pdwvw->max_delta - 1 ; - } - else if (delta > pdwvw->max_delta) - { delta_negative = 1 ; - delta = pdwvw->span - delta ; - delta = abs (delta) ; - } - else if (delta == pdwvw->max_delta) - { extra_bit = 1 ; - delta = pdwvw->max_delta - 1 ; - } - else if (delta < 0) - { delta_negative = 1 ; - delta = abs (delta) ; - } ; - - if (delta == pdwvw->max_delta - 1 && extra_bit == -1) - extra_bit = 0 ; - - /* Find width in bits of delta */ - HIGHEST_BIT (delta, delta_width) ; - - /* Calculate the delta_width_modifier */ - delta_width_modifier = (delta_width - pdwvw->last_delta_width) % pdwvw->bit_width ; - if (delta_width_modifier > pdwvw->dwm_maxsize) - delta_width_modifier -= pdwvw->bit_width ; - if (delta_width_modifier < -pdwvw->dwm_maxsize) - delta_width_modifier += pdwvw->bit_width ; - - /* Write delta_width_modifier zeros, followed by terminating '1'. */ - dwvw_encode_store_bits (psf, pdwvw, 0, abs (delta_width_modifier)) ; - if (abs (delta_width_modifier) != pdwvw->dwm_maxsize) - dwvw_encode_store_bits (psf, pdwvw, 1, 1) ; - - /* Write delta_width_modifier sign. */ - if (delta_width_modifier < 0) - dwvw_encode_store_bits (psf, pdwvw, 1, 1) ; - if (delta_width_modifier > 0) - dwvw_encode_store_bits (psf, pdwvw, 0, 1) ; - - /* Write delta and delta sign bit. */ - if (delta_width) - { dwvw_encode_store_bits (psf, pdwvw, delta, abs (delta_width) - 1) ; - dwvw_encode_store_bits (psf, pdwvw, (delta_negative ? 1 : 0), 1) ; - } ; - - /* Write extra bit!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ - if (extra_bit >= 0) - dwvw_encode_store_bits (psf, pdwvw, extra_bit, 1) ; - - pdwvw->last_sample = ptr [count] >> (32 - pdwvw->bit_width) ; - pdwvw->last_delta_width = delta_width ; - } ; - - pdwvw->samplecount += count ; - - return count ; -} /* dwvw_encode_data */ - -static sf_count_t -dwvw_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int *iptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = ptr [total + k] << 16 ; - count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ; - - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* dwvw_write_s */ - -static sf_count_t -dwvw_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - while (len > 0) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = dwvw_encode_data (psf, pdwvw, ptr, writecount) ; - - total += count ; - len -= count ; - - if (count != writecount) - break ; - } ; - - return total ; -} /* dwvw_write_i */ - -static sf_count_t -dwvw_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int *iptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : 1.0 ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = lrintf (normfact * ptr [total + k]) ; - count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ; - - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* dwvw_write_f */ - -static sf_count_t -dwvw_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ DWVW_PRIVATE *pdwvw ; - int *iptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - if (! psf->fdata) - return 0 ; - pdwvw = (DWVW_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : 1.0 ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = lrint (normfact * ptr [total + k]) ; - count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ; - - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* dwvw_write_d */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 1ca09552-b01f-4d7f-9bcf-612f834fe41d -*/ diff --git a/Libraries/SndFile/Files/src/file_io.c b/Libraries/SndFile/Files/src/file_io.c deleted file mode 100644 index d80e17d30..000000000 --- a/Libraries/SndFile/Files/src/file_io.c +++ /dev/null @@ -1,1537 +0,0 @@ -/* -** Copyright (C) 2002-2005 Erik de Castro Lopo -** Copyright (C) 2003 Ross Bencina -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** The file is split into three sections as follows: -** - The top section (USE_WINDOWS_API == 0) for Linux, Unix and MacOSX -** systems (including Cygwin). -** - The middle section (USE_WINDOWS_API == 1) for microsoft windows -** (including MinGW) using the native windows API. -** - A legacy windows section which attempted to work around grevious -** bugs in microsoft's POSIX implementation. -*/ - -/* -** The header file sfconfig.h MUST be included before the others to ensure -** that large file support is enabled correctly on Unix systems. -*/ - -#include "sfconfig.h" - -#include -#include - -#if HAVE_UNISTD_H -#include -#endif - -#if (HAVE_DECL_S_IRGRP == 0) -#include -#endif - -#include -#include -#include -#include - -#include "sndfile.h" -#include "common.h" - -#define SENSIBLE_SIZE (0x40000000) - -static void psf_log_syserr (SF_PRIVATE *psf, int error) ; - -#if (USE_WINDOWS_API == 0) - -/*------------------------------------------------------------------------------ -** Win32 stuff at the bottom of the file. Unix and other sensible OSes here. -*/ - -static int psf_close_fd (int fd) ; -static int psf_open_fd (const char * path, int mode) ; -static sf_count_t psf_get_filelen_fd (int fd) ; - -int -psf_fopen (SF_PRIVATE *psf, const char *pathname, int open_mode) -{ - psf->error = 0 ; - psf->filedes = psf_open_fd (pathname, open_mode) ; - - if (psf->filedes == - SFE_BAD_OPEN_MODE) - { psf->error = SFE_BAD_OPEN_MODE ; - psf->filedes = -1 ; - return psf->error ; - } ; - - if (psf->filedes == -1) - psf_log_syserr (psf, errno) ; - - psf->mode = open_mode ; - - return psf->error ; -} /* psf_fopen */ - -int -psf_fclose (SF_PRIVATE *psf) -{ int retval ; - - if (psf->virtual_io) - return 0 ; - - if (psf->do_not_close_descriptor) - { psf->filedes = -1 ; - return 0 ; - } ; - - if ((retval = psf_close_fd (psf->filedes)) == -1) - psf_log_syserr (psf, errno) ; - - psf->filedes = -1 ; - - return retval ; -} /* psf_fclose */ - -int -psf_open_rsrc (SF_PRIVATE *psf, int open_mode) -{ - if (psf->rsrcdes > 0) - return 0 ; - - /* Test for MacOSX style resource fork on HPFS or HPFS+ filesystems. */ - LSF_SNPRINTF (psf->rsrcpath, sizeof (psf->rsrcpath), "%s/rsrc", psf->filepath) ; - psf->error = SFE_NO_ERROR ; - if ((psf->rsrcdes = psf_open_fd (psf->rsrcpath, open_mode)) >= 0) - { psf->rsrclength = psf_get_filelen_fd (psf->rsrcdes) ; - if (psf->rsrclength > 0 || (open_mode & SFM_WRITE)) - return SFE_NO_ERROR ; - psf_close_fd (psf->rsrcdes) ; - psf->rsrcdes = -1 ; - } ; - - if (psf->rsrcdes == - SFE_BAD_OPEN_MODE) - { psf->error = SFE_BAD_OPEN_MODE ; - return psf->error ; - } ; - - /* - ** Now try for a resource fork stored as a separate file in the same - ** directory, but preceded with a dot underscore. - */ - LSF_SNPRINTF (psf->rsrcpath, sizeof (psf->rsrcpath), "%s._%s", psf->directory, psf->filename) ; - psf->error = SFE_NO_ERROR ; - if ((psf->rsrcdes = psf_open_fd (psf->rsrcpath, open_mode)) >= 0) - { psf->rsrclength = psf_get_filelen_fd (psf->rsrcdes) ; - return SFE_NO_ERROR ; - } ; - - /* - ** Now try for a resource fork stored in a separate file in the - ** .AppleDouble/ directory. - */ - LSF_SNPRINTF (psf->rsrcpath, sizeof (psf->rsrcpath), "%s.AppleDouble/%s", psf->directory, psf->filename) ; - psf->error = SFE_NO_ERROR ; - if ((psf->rsrcdes = psf_open_fd (psf->rsrcpath, open_mode)) >= 0) - { psf->rsrclength = psf_get_filelen_fd (psf->rsrcdes) ; - return SFE_NO_ERROR ; - } ; - - /* No resource file found. */ - if (psf->rsrcdes == -1) - psf_log_syserr (psf, errno) ; - - psf->rsrcdes = -1 ; - - return psf->error ; -} /* psf_open_rsrc */ - -sf_count_t -psf_get_filelen (SF_PRIVATE *psf) -{ sf_count_t filelen ; - - if (psf->virtual_io) - return psf->vio.get_filelen (psf->vio_user_data) ; - - filelen = psf_get_filelen_fd (psf->filedes) ; - - if (filelen == -1) - { psf_log_syserr (psf, errno) ; - return (sf_count_t) -1 ; - } ; - - if (filelen == -SFE_BAD_STAT_SIZE) - { psf->error = SFE_BAD_STAT_SIZE ; - return (sf_count_t) -1 ; - } ; - - switch (psf->mode) - { case SFM_WRITE : - filelen = filelen - psf->fileoffset ; - break ; - - case SFM_READ : - if (psf->fileoffset > 0 && psf->filelength > 0) - filelen = psf->filelength ; - break ; - - case SFM_RDWR : - /* - ** Cannot open embedded files SFM_RDWR so we don't need to - ** subtract psf->fileoffset. We already have the answer we - ** need. - */ - break ; - - default : - /* Shouldn't be here, so return error. */ - filelen = -1 ; - } ; - - return filelen ; -} /* psf_get_filelen */ - -int -psf_close_rsrc (SF_PRIVATE *psf) -{ - if (psf->rsrcdes >= 0) - psf_close_fd (psf->rsrcdes) ; - psf->rsrcdes = -1 ; - return 0 ; -} /* psf_close_rsrc */ - -int -psf_set_stdio (SF_PRIVATE *psf, int mode) -{ int error = 0 ; - - switch (mode) - { case SFM_RDWR : - error = SFE_OPEN_PIPE_RDWR ; - break ; - - case SFM_READ : - psf->filedes = 0 ; - break ; - - case SFM_WRITE : - psf->filedes = 1 ; - break ; - - default : - error = SFE_BAD_OPEN_MODE ; - break ; - } ; - psf->filelength = 0 ; - - return error ; -} /* psf_set_stdio */ - -void -psf_set_file (SF_PRIVATE *psf, int fd) -{ psf->filedes = fd ; -} /* psf_set_file */ - -int -psf_file_valid (SF_PRIVATE *psf) -{ return (psf->filedes >= 0) ? SF_TRUE : SF_FALSE ; -} /* psf_set_file */ - -sf_count_t -psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence) -{ sf_count_t new_position ; - - if (psf->virtual_io) - return psf->vio.seek (offset, whence, psf->vio_user_data) ; - - switch (whence) - { case SEEK_SET : - offset += psf->fileoffset ; - break ; - - case SEEK_END : - if (psf->mode == SFM_WRITE) - { new_position = lseek (psf->filedes, offset, whence) ; - - if (new_position < 0) - psf_log_syserr (psf, errno) ; - - return new_position - psf->fileoffset ; - } ; - - /* Transform SEEK_END into a SEEK_SET, ie find the file - ** length add the requested offset (should be <= 0) to - ** get the offset wrt the start of file. - */ - whence = SEEK_SET ; - offset = lseek (psf->filedes, 0, SEEK_END) + offset ; - break ; - - default : - /* No need to do anything about SEEK_CUR. */ - break ; - } ; - - new_position = lseek (psf->filedes, offset, whence) ; - - if (new_position < 0) - psf_log_syserr (psf, errno) ; - - new_position -= psf->fileoffset ; - - return new_position ; -} /* psf_fseek */ - -sf_count_t -psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf) -{ sf_count_t total = 0 ; - ssize_t count ; - - if (psf->virtual_io) - return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ; - - items *= bytes ; - - /* Do this check after the multiplication above. */ - if (items <= 0) - return 0 ; - - while (items > 0) - { /* Break the read down to a sensible size. */ - count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ; - - count = read (psf->filedes, ((char*) ptr) + total, (size_t) count) ; - - if (count == -1) - { if (errno == EINTR) - continue ; - - psf_log_syserr (psf, errno) ; - break ; - } ; - - if (count == 0) - break ; - - total += count ; - items -= count ; - } ; - - if (psf->is_pipe) - psf->pipeoffset += total ; - - return total / bytes ; -} /* psf_fread */ - -sf_count_t -psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf) -{ sf_count_t total = 0 ; - ssize_t count ; - - if (psf->virtual_io) - return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ; - - items *= bytes ; - - /* Do this check after the multiplication above. */ - if (items <= 0) - return 0 ; - - while (items > 0) - { /* Break the writes down to a sensible size. */ - count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : items ; - - count = write (psf->filedes, ((const char*) ptr) + total, count) ; - - if (count == -1) - { if (errno == EINTR) - continue ; - - psf_log_syserr (psf, errno) ; - break ; - } ; - - if (count == 0) - break ; - - total += count ; - items -= count ; - } ; - - if (psf->is_pipe) - psf->pipeoffset += total ; - - return total / bytes ; -} /* psf_fwrite */ - -sf_count_t -psf_ftell (SF_PRIVATE *psf) -{ sf_count_t pos ; - - if (psf->virtual_io) - return psf->vio.tell (psf->vio_user_data) ; - - if (psf->is_pipe) - return psf->pipeoffset ; - - pos = lseek (psf->filedes, 0, SEEK_CUR) ; - - if (pos == ((sf_count_t) -1)) - { psf_log_syserr (psf, errno) ; - return -1 ; - } ; - - return pos - psf->fileoffset ; -} /* psf_ftell */ - -static int -psf_close_fd (int fd) -{ int retval ; - - while ((retval = close (fd)) == -1 && errno == EINTR) - /* Do nothing. */ ; - - return retval ; -} /* psf_close_fd */ - -sf_count_t -psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf) -{ sf_count_t k = 0 ; - sf_count_t count ; - - while (k < bufsize - 1) - { count = read (psf->filedes, &(buffer [k]), 1) ; - - if (count == -1) - { if (errno == EINTR) - continue ; - - psf_log_syserr (psf, errno) ; - break ; - } ; - - if (count == 0 || buffer [k++] == '\n') - break ; - } ; - - buffer [k] = 0 ; - - return k ; -} /* psf_fgets */ - -int -psf_is_pipe (SF_PRIVATE *psf) -{ struct stat statbuf ; - - if (psf->virtual_io) - return SF_FALSE ; - - if (fstat (psf->filedes, &statbuf) == -1) - { psf_log_syserr (psf, errno) ; - /* Default to maximum safety. */ - return SF_TRUE ; - } ; - - if (S_ISFIFO (statbuf.st_mode) || S_ISSOCK (statbuf.st_mode)) - return SF_TRUE ; - - return SF_FALSE ; -} /* psf_is_pipe */ - -static sf_count_t -psf_get_filelen_fd (int fd) -{ struct stat statbuf ; - - /* - ** Sanity check. - ** If everything is OK, this will be optimised out. - */ - if (sizeof (statbuf.st_size) == 4 && sizeof (sf_count_t) == 8) - return (sf_count_t) -SFE_BAD_STAT_SIZE ; - - if (fstat (fd, &statbuf) == -1) - return (sf_count_t) -1 ; - - return statbuf.st_size ; -} /* psf_get_filelen_fd */ - -int -psf_ftruncate (SF_PRIVATE *psf, sf_count_t len) -{ int retval ; - - /* Returns 0 on success, non-zero on failure. */ - if (len < 0) - return -1 ; - - if ((sizeof (off_t) < sizeof (sf_count_t)) && len > 0x7FFFFFFF) - return -1 ; - - retval = ftruncate (psf->filedes, len) ; - - if (retval == -1) - psf_log_syserr (psf, errno) ; - - return retval ; -} /* psf_ftruncate */ - -void -psf_init_files (SF_PRIVATE *psf) -{ psf->filedes = -1 ; - psf->rsrcdes = -1 ; - psf->savedes = -1 ; -} /* psf_init_files */ - -void -psf_use_rsrc (SF_PRIVATE *psf, int on_off) -{ - if (on_off) - { if (psf->filedes != psf->rsrcdes) - { psf->savedes = psf->filedes ; - psf->filedes = psf->rsrcdes ; - } ; - } - else if (psf->filedes == psf->rsrcdes) - psf->filedes = psf->savedes ; - - return ; -} /* psf_use_rsrc */ - -static int -psf_open_fd (const char * pathname, int open_mode) -{ int fd, oflag, mode ; - - /* - ** Sanity check. If everything is OK, this test and the printfs will - ** be optimised out. This is meant to catch the problems caused by - ** "sfconfig.h" being included after . - */ - if (sizeof (off_t) != sizeof (sf_count_t)) - { puts ("\n\n*** Fatal error : sizeof (off_t) != sizeof (sf_count_t)") ; - puts ("*** This means that libsndfile was not configured correctly.\n") ; - exit (1) ; - } ; - - switch (open_mode) - { case SFM_READ : - oflag = O_RDONLY ; - mode = 0 ; - break ; - - case SFM_WRITE : - oflag = O_WRONLY | O_CREAT | O_TRUNC ; - mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ; - break ; - - case SFM_RDWR : - oflag = O_RDWR | O_CREAT ; - mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ; - break ; - - default : - return - SFE_BAD_OPEN_MODE ; - break ; - } ; - -#if OS_IS_WIN32 - /* For Cygwin. */ - oflag |= O_BINARY ; -#endif - - if (mode == 0) - fd = open (pathname, oflag) ; - else - fd = open (pathname, oflag, mode) ; - - return fd ; -} /* psf_open_fd */ - -static void -psf_log_syserr (SF_PRIVATE *psf, int error) -{ - /* Only log an error if no error has been set yet. */ - if (psf->error == 0) - { psf->error = SFE_SYSTEM ; - LSF_SNPRINTF (psf->syserr, sizeof (psf->syserr), "System error : %s.", strerror (error)) ; - } ; - - return ; -} /* psf_log_syserr */ - -void -psf_fsync (SF_PRIVATE *psf) -{ -#if HAVE_FSYNC - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - fsync (psf->filedes) ; -#else - psf = NULL ; -#endif -} /* psf_fsync */ - -#elif USE_WINDOWS_API - -/* Win32 file i/o functions implemented using native Win32 API */ - -#include -#include - -#ifndef HAVE_SSIZE_T -typedef long ssize_t ; -#endif - -static int psf_close_handle (HANDLE handle) ; -static HANDLE psf_open_handle (const char * path, int mode) ; -static sf_count_t psf_get_filelen_handle (HANDLE handle) ; - -/* USE_WINDOWS_API */ int -psf_fopen (SF_PRIVATE *psf, const char *pathname, int open_mode) -{ - psf->error = 0 ; - psf->hfile = psf_open_handle (pathname, open_mode) ; - - if (psf->hfile == NULL) - psf_log_syserr (psf, errno) ; - - psf->mode = open_mode ; - - return psf->error ; -} /* psf_fopen */ - -/* USE_WINDOWS_API */ int -psf_fclose (SF_PRIVATE *psf) -{ int retval ; - - if (psf->virtual_io) - return 0 ; - - if (psf->do_not_close_descriptor) - { psf->hfile = NULL ; - return 0 ; - } ; - - if ((retval = psf_close_handle (psf->hfile)) == -1) - psf_log_syserr (psf, errno) ; - - psf->hfile = NULL ; - - return retval ; -} /* psf_fclose */ - -/* USE_WINDOWS_API */ int -psf_open_rsrc (SF_PRIVATE *psf, int open_mode) -{ - if (psf->hrsrc != NULL) - return 0 ; - - /* Test for MacOSX style resource fork on HPFS or HPFS+ filesystems. */ - LSF_SNPRINTF (psf->rsrcpath, sizeof (psf->rsrcpath), "%s/rsrc", psf->filepath) ; - psf->error = SFE_NO_ERROR ; - if ((psf->hrsrc = psf_open_handle (psf->rsrcpath, open_mode)) != NULL) - { psf->rsrclength = psf_get_filelen_handle (psf->hrsrc) ; - return SFE_NO_ERROR ; - } ; - - /* - ** Now try for a resource fork stored as a separate file in the same - ** directory, but preceded with a dot underscore. - */ - LSF_SNPRINTF (psf->rsrcpath, sizeof (psf->rsrcpath), "%s._%s", psf->directory, psf->filename) ; - psf->error = SFE_NO_ERROR ; - if ((psf->hrsrc = psf_open_handle (psf->rsrcpath, open_mode)) != NULL) - { psf->rsrclength = psf_get_filelen_handle (psf->hrsrc) ; - return SFE_NO_ERROR ; - } ; - - /* - ** Now try for a resource fork stored in a separate file in the - ** .AppleDouble/ directory. - */ - LSF_SNPRINTF (psf->rsrcpath, sizeof (psf->rsrcpath), "%s.AppleDouble/%s", psf->directory, psf->filename) ; - psf->error = SFE_NO_ERROR ; - if ((psf->hrsrc = psf_open_handle (psf->rsrcpath, open_mode)) != NULL) - { psf->rsrclength = psf_get_filelen_handle (psf->hrsrc) ; - return SFE_NO_ERROR ; - } ; - - /* No resource file found. */ - if (psf->hrsrc == NULL) - psf_log_syserr (psf, errno) ; - - psf->hrsrc = NULL ; - - return psf->error ; -} /* psf_open_rsrc */ - -/* USE_WINDOWS_API */ sf_count_t -psf_get_filelen (SF_PRIVATE *psf) -{ sf_count_t filelen ; - - if (psf->virtual_io) - return psf->vio.get_filelen (psf->vio_user_data) ; - - filelen = psf_get_filelen_handle (psf->hfile) ; - - if (filelen == -1) - { psf_log_syserr (psf, errno) ; - return (sf_count_t) -1 ; - } ; - - if (filelen == -SFE_BAD_STAT_SIZE) - { psf->error = SFE_BAD_STAT_SIZE ; - return (sf_count_t) -1 ; - } ; - - switch (psf->mode) - { case SFM_WRITE : - filelen = filelen - psf->fileoffset ; - break ; - - case SFM_READ : - if (psf->fileoffset > 0 && psf->filelength > 0) - filelen = psf->filelength ; - break ; - - case SFM_RDWR : - /* - ** Cannot open embedded files SFM_RDWR so we don't need to - ** subtract psf->fileoffset. We already have the answer we - ** need. - */ - break ; - - default : - /* Shouldn't be here, so return error. */ - filelen = -1 ; - } ; - - return filelen ; -} /* psf_get_filelen */ - -/* USE_WINDOWS_API */ void -psf_init_files (SF_PRIVATE *psf) -{ psf->hfile = NULL ; - psf->hrsrc = NULL ; - psf->hsaved = NULL ; -} /* psf_init_files */ - -/* USE_WINDOWS_API */ void -psf_use_rsrc (SF_PRIVATE *psf, int on_off) -{ - if (on_off) - { if (psf->hfile != psf->hrsrc) - { psf->hsaved = psf->hfile ; - psf->hfile = psf->hrsrc ; - } ; - } - else if (psf->hfile == psf->hrsrc) - psf->hfile = psf->hsaved ; - - return ; -} /* psf_use_rsrc */ - -/* USE_WINDOWS_API */ static HANDLE -psf_open_handle (const char * pathname, int open_mode) -{ DWORD dwDesiredAccess ; - DWORD dwShareMode ; - DWORD dwCreationDistribution ; - HANDLE handle ; - - switch (open_mode) - { case SFM_READ : - dwDesiredAccess = GENERIC_READ ; - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ; - dwCreationDistribution = OPEN_EXISTING ; - break ; - - case SFM_WRITE : - dwDesiredAccess = GENERIC_WRITE ; - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ; - dwCreationDistribution = CREATE_ALWAYS ; - break ; - - case SFM_RDWR : - dwDesiredAccess = GENERIC_READ | GENERIC_WRITE ; - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ; - dwCreationDistribution = OPEN_ALWAYS ; - break ; - - default : - return NULL ; - } ; - - handle = CreateFile ( - pathname, /* pointer to name of the file */ - dwDesiredAccess, /* access (read-write) mode */ - dwShareMode, /* share mode */ - 0, /* pointer to security attributes */ - dwCreationDistribution, /* how to create */ - FILE_ATTRIBUTE_NORMAL, /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */ - NULL /* handle to file with attributes to copy */ - ) ; - - if (handle == INVALID_HANDLE_VALUE) - return NULL ; - - return handle ; -} /* psf_open_handle */ - -/* USE_WINDOWS_API */ static void -psf_log_syserr (SF_PRIVATE *psf, int error) -{ LPVOID lpMsgBuf ; - - /* Only log an error if no error has been set yet. */ - if (psf->error == 0) - { psf->error = SFE_SYSTEM ; - - FormatMessage ( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - error, - MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &lpMsgBuf, - 0, - NULL - ) ; - - LSF_SNPRINTF (psf->syserr, sizeof (psf->syserr), "System error : %s", lpMsgBuf) ; - LocalFree (lpMsgBuf) ; - } ; - - return ; -} /* psf_log_syserr */ - - -/* USE_WINDOWS_API */ int -psf_close_rsrc (SF_PRIVATE *psf) -{ - if (psf->hrsrc != NULL) - psf_close_handle (psf->hrsrc) ; - psf->hrsrc = NULL ; - return 0 ; -} /* psf_close_rsrc */ - - -/* USE_WINDOWS_API */ int -psf_set_stdio (SF_PRIVATE *psf, int mode) -{ HANDLE handle = NULL ; - int error = 0 ; - - switch (mode) - { case SFM_RDWR : - error = SFE_OPEN_PIPE_RDWR ; - break ; - - case SFM_READ : - handle = GetStdHandle (STD_INPUT_HANDLE) ; - psf->do_not_close_descriptor = 1 ; - break ; - - case SFM_WRITE : - handle = GetStdHandle (STD_OUTPUT_HANDLE) ; - psf->do_not_close_descriptor = 1 ; - break ; - - default : - error = SFE_BAD_OPEN_MODE ; - break ; - } ; - - psf->hfile = handle ; - psf->filelength = 0 ; - - return error ; -} /* psf_set_stdio */ - -/* USE_WINDOWS_API */ void -psf_set_file (SF_PRIVATE *psf, int fd) -{ HANDLE handle ; - long osfhandle ; - - osfhandle = _get_osfhandle (fd) ; - handle = (HANDLE) osfhandle ; - - psf->hfile = handle ; -} /* psf_set_file */ - -/* USE_WINDOWS_API */ int -psf_file_valid (SF_PRIVATE *psf) -{ if (psf->hfile == NULL) - return SF_FALSE ; - if (psf->hfile == INVALID_HANDLE_VALUE) - return SF_FALSE ; - return SF_TRUE ; -} /* psf_set_file */ - -/* USE_WINDOWS_API */ sf_count_t -psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence) -{ sf_count_t new_position ; - LONG lDistanceToMove, lDistanceToMoveHigh ; - DWORD dwMoveMethod ; - DWORD dwResult, dwError ; - - if (psf->virtual_io) - return psf->vio.seek (offset, whence, psf->vio_user_data) ; - - switch (whence) - { case SEEK_SET : - offset += psf->fileoffset ; - dwMoveMethod = FILE_BEGIN ; - break ; - - case SEEK_END : - dwMoveMethod = FILE_END ; - break ; - - default : - dwMoveMethod = FILE_CURRENT ; - break ; - } ; - - lDistanceToMove = (DWORD) (offset & 0xFFFFFFFF) ; - lDistanceToMoveHigh = (DWORD) ((offset >> 32) & 0xFFFFFFFF) ; - - dwResult = SetFilePointer (psf->hfile, lDistanceToMove, &lDistanceToMoveHigh, dwMoveMethod) ; - - if (dwResult == 0xFFFFFFFF) - dwError = GetLastError () ; - else - dwError = NO_ERROR ; - - if (dwError != NO_ERROR) - { psf_log_syserr (psf, dwError) ; - return -1 ; - } ; - - new_position = (dwResult + ((__int64) lDistanceToMoveHigh << 32)) - psf->fileoffset ; - - return new_position ; -} /* psf_fseek */ - -/* USE_WINDOWS_API */ sf_count_t -psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf) -{ sf_count_t total = 0 ; - ssize_t count ; - DWORD dwNumberOfBytesRead ; - - if (psf->virtual_io) - return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ; - - items *= bytes ; - - /* Do this check after the multiplication above. */ - if (items <= 0) - return 0 ; - - while (items > 0) - { /* Break the writes down to a sensible size. */ - count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ; - - if (ReadFile (psf->hfile, ((char*) ptr) + total, count, &dwNumberOfBytesRead, 0) == 0) - { psf_log_syserr (psf, GetLastError ()) ; - break ; - } - else - count = dwNumberOfBytesRead ; - - if (count == 0) - break ; - - total += count ; - items -= count ; - } ; - - if (psf->is_pipe) - psf->pipeoffset += total ; - - return total / bytes ; -} /* psf_fread */ - -/* USE_WINDOWS_API */ sf_count_t -psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf) -{ sf_count_t total = 0 ; - ssize_t count ; - DWORD dwNumberOfBytesWritten ; - - if (psf->virtual_io) - return psf->vio.write (ptr, bytes * items, psf->vio_user_data) / bytes ; - - items *= bytes ; - - /* Do this check after the multiplication above. */ - if (items <= 0) - return 0 ; - - while (items > 0) - { /* Break the writes down to a sensible size. */ - count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ; - - if (WriteFile (psf->hfile, ((const char*) ptr) + total, count, &dwNumberOfBytesWritten, 0) == 0) - { psf_log_syserr (psf, GetLastError ()) ; - break ; - } - else - count = dwNumberOfBytesWritten ; - - if (count == 0) - break ; - - total += count ; - items -= count ; - } ; - - if (psf->is_pipe) - psf->pipeoffset += total ; - - return total / bytes ; -} /* psf_fwrite */ - -/* USE_WINDOWS_API */ sf_count_t -psf_ftell (SF_PRIVATE *psf) -{ sf_count_t pos ; - LONG lDistanceToMoveLow, lDistanceToMoveHigh ; - DWORD dwResult, dwError ; - - if (psf->virtual_io) - return psf->vio.tell (psf->vio_user_data) ; - - if (psf->is_pipe) - return psf->pipeoffset ; - - lDistanceToMoveLow = 0 ; - lDistanceToMoveHigh = 0 ; - - dwResult = SetFilePointer (psf->hfile, lDistanceToMoveLow, &lDistanceToMoveHigh, FILE_CURRENT) ; - - if (dwResult == 0xFFFFFFFF) - dwError = GetLastError () ; - else - dwError = NO_ERROR ; - - if (dwError != NO_ERROR) - { psf_log_syserr (psf, dwError) ; - return -1 ; - } ; - - pos = (dwResult + ((__int64) lDistanceToMoveHigh << 32)) ; - - return pos - psf->fileoffset ; -} /* psf_ftell */ - -/* USE_WINDOWS_API */ static int -psf_close_handle (HANDLE handle) -{ if (CloseHandle (handle) == 0) - return -1 ; - - return 0 ; -} /* psf_close_handle */ - -/* USE_WINDOWS_API */ sf_count_t -psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf) -{ sf_count_t k = 0 ; - sf_count_t count ; - DWORD dwNumberOfBytesRead ; - - while (k < bufsize - 1) - { if (ReadFile (psf->hfile, &(buffer [k]), 1, &dwNumberOfBytesRead, 0) == 0) - { psf_log_syserr (psf, GetLastError ()) ; - break ; - } - else - { count = dwNumberOfBytesRead ; - /* note that we only check for '\n' not other line endings such as CRLF */ - if (count == 0 || buffer [k++] == '\n') - break ; - } ; - } ; - - buffer [k] = 0 ; - - return k ; -} /* psf_fgets */ - -/* USE_WINDOWS_API */ int -psf_is_pipe (SF_PRIVATE *psf) -{ - if (psf->virtual_io) - return SF_FALSE ; - - if (GetFileType (psf->hfile) == FILE_TYPE_DISK) - return SF_FALSE ; - - /* Default to maximum safety. */ - return SF_TRUE ; -} /* psf_is_pipe */ - -/* USE_WINDOWS_API */ sf_count_t -psf_get_filelen_handle (HANDLE handle) -{ sf_count_t filelen ; - DWORD dwFileSizeLow, dwFileSizeHigh, dwError = NO_ERROR ; - - dwFileSizeLow = GetFileSize (handle, &dwFileSizeHigh) ; - - if (dwFileSizeLow == 0xFFFFFFFF) - dwError = GetLastError () ; - - if (dwError != NO_ERROR) - return (sf_count_t) -1 ; - - filelen = dwFileSizeLow + ((__int64) dwFileSizeHigh << 32) ; - - return filelen ; -} /* psf_get_filelen_handle */ - -/* USE_WINDOWS_API */ void -psf_fsync (SF_PRIVATE *psf) -{ FlushFileBuffers (psf->hfile) ; -} /* psf_fsync */ - - -/* USE_WINDOWS_API */ int -psf_ftruncate (SF_PRIVATE *psf, sf_count_t len) -{ int retval = 0 ; - LONG lDistanceToMoveLow, lDistanceToMoveHigh ; - DWORD dwResult, dwError = NO_ERROR ; - - /* This implementation trashes the current file position. - ** should it save and restore it? what if the current position is past - ** the new end of file? - */ - - /* Returns 0 on success, non-zero on failure. */ - if (len < 0) - return 1 ; - - lDistanceToMoveLow = (DWORD) (len & 0xFFFFFFFF) ; - lDistanceToMoveHigh = (DWORD) ((len >> 32) & 0xFFFFFFFF) ; - - dwResult = SetFilePointer (psf->hfile, lDistanceToMoveLow, &lDistanceToMoveHigh, FILE_BEGIN) ; - - if (dwResult == 0xFFFFFFFF) - dwError = GetLastError () ; - - if (dwError != NO_ERROR) - { retval = -1 ; - psf_log_syserr (psf, dwError) ; - } - else - { /* Note: when SetEndOfFile is used to extend a file, the contents of the - ** new portion of the file is undefined. This is unlike chsize(), - ** which guarantees that the new portion of the file will be zeroed. - ** Not sure if this is important or not. - */ - if (SetEndOfFile (psf->hfile) == 0) - { retval = -1 ; - psf_log_syserr (psf, GetLastError ()) ; - } ; - } ; - - return retval ; -} /* psf_ftruncate */ - - -#else -/* Win32 file i/o functions implemented using Unix-style file i/o API */ - -/* Win32 has a 64 file offset seek function: -** -** __int64 _lseeki64 (int handle, __int64 offset, int origin) ; -** -** It also has a 64 bit fstat function: -** -** int fstati64 (int, struct _stati64) ; -** -** but the fscking thing doesn't work!!!!! The file size parameter returned -** by this function is only valid up until more data is written at the end of -** the file. That makes this function completely 100% useless. -*/ - -#include -#include - -#ifndef HAVE_SSIZE_T -typedef long ssize_t ; -#endif - -/* Win32 */ int -psf_fopen (SF_PRIVATE *psf, const char *pathname, int open_mode) -{ int oflag, mode ; - - switch (open_mode) - { case SFM_READ : - oflag = O_RDONLY | O_BINARY ; - mode = 0 ; - break ; - - case SFM_WRITE : - oflag = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ; - mode = S_IRUSR | S_IWUSR | S_IRGRP ; - break ; - - case SFM_RDWR : - oflag = O_RDWR | O_CREAT | O_BINARY ; - mode = S_IRUSR | S_IWUSR | S_IRGRP ; - break ; - - default : - psf->error = SFE_BAD_OPEN_MODE ; - return -1 ; - break ; - } ; - - if (mode == 0) - psf->filedes = open (pathname, oflag) ; - else - psf->filedes = open (pathname, oflag, mode) ; - - if (psf->filedes == -1) - psf_log_syserr (psf, errno) ; - - return psf->filedes ; -} /* psf_fopen */ - -/* Win32 */ sf_count_t -psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence) -{ sf_count_t new_position ; - - if (psf->virtual_io) - return psf->vio.seek (offset, whence, psf->vio_user_data) ; - - switch (whence) - { case SEEK_SET : - offset += psf->fileoffset ; - break ; - - case SEEK_END : - if (psf->mode == SFM_WRITE) - { new_position = _lseeki64 (psf->filedes, offset, whence) ; - - if (new_position < 0) - psf_log_syserr (psf, errno) ; - - return new_position - psf->fileoffset ; - } ; - - /* Transform SEEK_END into a SEEK_SET, ie find the file - ** length add the requested offset (should be <= 0) to - ** get the offset wrt the start of file. - */ - whence = SEEK_SET ; - offset = _lseeki64 (psf->filedes, 0, SEEK_END) + offset ; - break ; - - default : - /* No need to do anything about SEEK_CUR. */ - break ; - } ; - - /* - ** Bypass weird Win32-ism if necessary. - ** _lseeki64() returns an "invalid parameter" error if called with the - ** offset == 0 and whence == SEEK_CUR. - *** Use the _telli64() function instead. - */ - if (offset == 0 && whence == SEEK_CUR) - new_position = _telli64 (psf->filedes) ; - else - new_position = _lseeki64 (psf->filedes, offset, whence) ; - - if (new_position < 0) - psf_log_syserr (psf, errno) ; - - new_position -= psf->fileoffset ; - - return new_position ; -} /* psf_fseek */ - -/* Win32 */ sf_count_t -psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf) -{ sf_count_t total = 0 ; - ssize_t count ; - - if (psf->virtual_io) - return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ; - - items *= bytes ; - - /* Do this check after the multiplication above. */ - if (items <= 0) - return 0 ; - - while (items > 0) - { /* Break the writes down to a sensible size. */ - count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ; - - count = read (psf->filedes, ((char*) ptr) + total, (size_t) count) ; - - if (count == -1) - { if (errno == EINTR) - continue ; - - psf_log_syserr (psf, errno) ; - break ; - } ; - - if (count == 0) - break ; - - total += count ; - items -= count ; - } ; - - return total / bytes ; -} /* psf_fread */ - -/* Win32 */ sf_count_t -psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf) -{ sf_count_t total = 0 ; - ssize_t count ; - - if (psf->virtual_io) - return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ; - - items *= bytes ; - - /* Do this check after the multiplication above. */ - if (items <= 0) - return 0 ; - - while (items > 0) - { /* Break the writes down to a sensible size. */ - count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : items ; - - count = write (psf->filedes, ((const char*) ptr) + total, count) ; - - if (count == -1) - { if (errno == EINTR) - continue ; - - psf_log_syserr (psf, errno) ; - break ; - } ; - - if (count == 0) - break ; - - total += count ; - items -= count ; - } ; - - return total / bytes ; -} /* psf_fwrite */ - -/* Win32 */ sf_count_t -psf_ftell (SF_PRIVATE *psf) -{ sf_count_t pos ; - - if (psf->virtual_io) - return psf->vio.tell (psf->vio_user_data) ; - - pos = _telli64 (psf->filedes) ; - - if (pos == ((sf_count_t) -1)) - { psf_log_syserr (psf, errno) ; - return -1 ; - } ; - - return pos - psf->fileoffset ; -} /* psf_ftell */ - -/* Win32 */ int -psf_fclose (SF_PRIVATE *psf) -{ int retval ; - - while ((retval = close (psf->filedes)) == -1 && errno == EINTR) - /* Do nothing. */ ; - - if (retval == -1) - psf_log_syserr (psf, errno) ; - - psf->filedes = -1 ; - - return retval ; -} /* psf_fclose */ - -/* Win32 */ sf_count_t -psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf) -{ sf_count_t k = 0 ; - sf_count_t count ; - - while (k < bufsize - 1) - { count = read (psf->filedes, &(buffer [k]), 1) ; - - if (count == -1) - { if (errno == EINTR) - continue ; - - psf_log_syserr (psf, errno) ; - break ; - } ; - - if (count == 0 || buffer [k++] == '\n') - break ; - } ; - - buffer [k] = 0 ; - - return k ; -} /* psf_fgets */ - -/* Win32 */ int -psf_is_pipe (SF_PRIVATE *psf) -{ struct stat statbuf ; - - if (psf->virtual_io) - return SF_FALSE ; - - /* Not sure if this works. */ - if (fstat (psf->filedes, &statbuf) == -1) - { psf_log_syserr (psf, errno) ; - /* Default to maximum safety. */ - return SF_TRUE ; - } ; - - /* These macros are defined in Win32/unistd.h. */ - if (S_ISFIFO (statbuf.st_mode) || S_ISSOCK (statbuf.st_mode)) - return SF_TRUE ; - - return SF_FALSE ; -} /* psf_checkpipe */ - -/* Win32 */ sf_count_t -psf_get_filelen (SF_PRIVATE *psf) -{ -#if 0 - /* - ** Windoze is SOOOOO FUCKED!!!!!!! - ** This code should work but doesn't. Why? - ** Code below does work. - */ - struct _stati64 statbuf ; - - if (_fstati64 (psf->filedes, &statbuf)) - { psf_log_syserr (psf, errno) ; - return (sf_count_t) -1 ; - } ; - - return statbuf.st_size ; -#else - sf_count_t current, filelen ; - - if (psf->virtual_io) - return psf->vio.get_filelen (psf->vio_user_data) ; - - if ((current = _telli64 (psf->filedes)) < 0) - { psf_log_syserr (psf, errno) ; - return (sf_count_t) -1 ; - } ; - - /* - ** Lets face it, windoze if FUBAR!!! - ** - ** For some reason, I have to call _lseeki64() TWICE to get to the - ** end of the file. - ** - ** This might have been avoided if windows had implemented the POSIX - ** standard function fsync() but NO, that would have been too easy. - ** - ** I am VERY close to saying that windoze will no longer be supported - ** by libsndfile and changing the license to GPL at the same time. - */ - - _lseeki64 (psf->filedes, 0, SEEK_END) ; - - if ((filelen = _lseeki64 (psf->filedes, 0, SEEK_END)) < 0) - { psf_log_syserr (psf, errno) ; - return (sf_count_t) -1 ; - } ; - - if (filelen > current) - _lseeki64 (psf->filedes, current, SEEK_SET) ; - - switch (psf->mode) - { case SFM_WRITE : - filelen = filelen - psf->fileoffset ; - break ; - - case SFM_READ : - if (psf->fileoffset > 0 && psf->filelength > 0) - filelen = psf->filelength ; - break ; - - case SFM_RDWR : - /* - ** Cannot open embedded files SFM_RDWR so we don't need to - ** subtract psf->fileoffset. We already have the answer we - ** need. - */ - break ; - - default : - filelen = 0 ; - } ; - - return filelen ; -#endif -} /* psf_get_filelen */ - -/* Win32 */ int -psf_ftruncate (SF_PRIVATE *psf, sf_count_t len) -{ int retval ; - - /* Returns 0 on success, non-zero on failure. */ - if (len < 0) - return 1 ; - - /* The global village idiots at micorsoft decided to implement - ** nearly all the required 64 bit file offset functions except - ** for one, truncate. The fscking morons! - ** - ** This is not 64 bit file offset clean. Somone needs to clean - ** this up. - */ - if (len > 0x7FFFFFFF) - return -1 ; - - retval = chsize (psf->filedes, len) ; - - if (retval == -1) - psf_log_syserr (psf, errno) ; - - return retval ; -} /* psf_ftruncate */ - - -static void -psf_log_syserr (SF_PRIVATE *psf, int error) -{ - /* Only log an error if no error has been set yet. */ - if (psf->error == 0) - { psf->error = SFE_SYSTEM ; - LSF_SNPRINTF (psf->syserr, sizeof (psf->syserr), "System error : %s", strerror (error)) ; - } ; - - return ; -} /* psf_log_syserr */ - -#endif - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 749740d7-ecc7-47bd-8cf7-600f31d32e6d -*/ diff --git a/Libraries/SndFile/Files/src/flac.c b/Libraries/SndFile/Files/src/flac.c deleted file mode 100644 index 1f0872f0b..000000000 --- a/Libraries/SndFile/Files/src/flac.c +++ /dev/null @@ -1,1156 +0,0 @@ -/* -** Copyright (C) 2004, 2005 Erik de Castro Lopo -** Copyright (C) 2004 Tobias Gehrig -** -** This program 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 program 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 program ; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "common.h" - - -#ifndef HAVE_FLAC_ALL_H - -int -flac_open (SF_PRIVATE *psf) -{ if (psf) - return SFE_UNIMPLEMENTED ; - return (psf && 0) ; -} /* flac_open */ - - -#else - -#include - -#include "sfendian.h" -#include "float_cast.h" - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -#define ENC_BUFFER_SIZE 4096 - -typedef enum -{ PFLAC_PCM_SHORT = 0, - PFLAC_PCM_INT = 1, - PFLAC_PCM_FLOAT = 2, - PFLAC_PCM_DOUBLE = 3 -} PFLAC_PCM ; - -typedef struct -{ FLAC__SeekableStreamDecoder *fsd ; - FLAC__SeekableStreamEncoder *fse ; - PFLAC_PCM pcmtype ; - void* ptr ; - unsigned pos, len, remain ; - - const FLAC__int32 * const * wbuffer ; - FLAC__int32 * rbuffer [FLAC__MAX_CHANNELS] ; - - FLAC__int32* encbuffer ; - unsigned bufferpos ; - - const FLAC__Frame *frame ; - FLAC__bool bufferbackup ; -} FLAC_PRIVATE ; - -static sf_count_t flac_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; -static int flac_close (SF_PRIVATE *psf) ; - -static int flac_enc_init (SF_PRIVATE *psf) ; -static int flac_read_header (SF_PRIVATE *psf) ; - -static sf_count_t flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static void f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize) ; -static void f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize) ; -static void f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize) ; -static void f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ; -static void f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ; -static void f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ; -static void d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize) ; -static void d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize) ; -static void d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize) ; -static void d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ; -static void d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ; -static void d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ; - -static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ; - -/* Decoder Callbacks */ -static FLAC__SeekableStreamDecoderReadStatus sf_flac_read_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer [], unsigned *bytes, void *client_data) ; -static FLAC__SeekableStreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; -static FLAC__SeekableStreamDecoderTellStatus sf_flac_tell_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; -static FLAC__SeekableStreamDecoderLengthStatus sf_flac_length_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ; -static FLAC__bool sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *decoder, void *client_data) ; -static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ; -static void sf_flac_meta_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ; -static void sf_flac_error_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ; - -/* Encoder Callbacks */ -static FLAC__SeekableStreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; -#ifdef HAVE_FLAC_1_1_1 -static FLAC__SeekableStreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; -#endif -static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer [], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) ; - -static const int legal_sample_rates [] = -{ 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000 -} ; - -static inline void -s2flac8_array (const short *src, FLAC__int32 *dest, int count) -{ while (--count >= 0) - dest [count] = src [count] >> 8 ; -} /* s2flac8_array */ - -static inline void -s2flac16_array (const short *src, FLAC__int32 *dest, int count) -{ while (--count >= 0) - dest [count] = src [count] ; -} /* s2flac16_array */ - -static inline void -s2flac24_array (const short *src, FLAC__int32 *dest, int count) -{ while (--count >= 0) - dest [count] = src [count] << 8 ; -} /* s2flac24_array */ - -static inline void -i2flac8_array (const int *src, FLAC__int32 *dest, int count) -{ while (--count >= 0) - dest [count] = src [count] >> 24 ; -} /* i2flac8_array */ - -static inline void -i2flac16_array (const int *src, FLAC__int32 *dest, int count) -{ - while (--count >= 0) - dest [count] = src [count] >> 16 ; -} /* i2flac16_array */ - -static inline void -i2flac24_array (const int *src, FLAC__int32 *dest, int count) -{ while (--count >= 0) - dest [count] = src [count] >> 8 ; -} /* i2flac24_array */ - -static sf_count_t -flac_buffer_copy (SF_PRIVATE *psf) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - const FLAC__Frame *frame = pflac->frame ; - const FLAC__int32* const *buffer = pflac->wbuffer ; - unsigned i = 0, j, offset ; - - if (pflac->ptr == NULL) - { /* - ** Not sure why this code is here and not elsewhere. - ** Removing it causes valgrind errors. - */ - pflac->bufferbackup = SF_TRUE ; - for (i = 0 ; i < frame->header.channels ; i++) - { if (pflac->rbuffer [i] == NULL) - pflac->rbuffer [i] = calloc (frame->header.blocksize, sizeof (FLAC__int32)) ; - memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ; - } ; - pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ; - - return 0 ; - } ; - - switch (pflac->pcmtype) - { case PFLAC_PCM_SHORT : - { short *retpcm = ((short*) pflac->ptr) ; - int shift = 16 - frame->header.bits_per_sample ; - if (shift < 0) - { shift = abs (shift) ; - for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++) - { offset = pflac->pos + i * frame->header.channels ; - for (j = 0 ; j < frame->header.channels ; j++) - retpcm [offset + j] = buffer [j][pflac->bufferpos] >> shift ; - pflac->remain -= frame->header.channels ; - pflac->bufferpos++ ; - } - } - else - { for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++) - { offset = pflac->pos + i * frame->header.channels ; - - if (pflac->bufferpos >= frame->header.blocksize) - break ; - - for (j = 0 ; j < frame->header.channels ; j++) - retpcm [offset + j] = (buffer [j][pflac->bufferpos]) << shift ; - - pflac->remain -= frame->header.channels ; - pflac->bufferpos++ ; - } ; - } ; - } ; - break ; - - case PFLAC_PCM_INT : - { int *retpcm = ((int*) pflac->ptr) ; - int shift = 32 - frame->header.bits_per_sample ; - for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++) - { offset = pflac->pos + i * frame->header.channels ; - - if (pflac->bufferpos >= frame->header.blocksize) - break ; - - for (j = 0 ; j < frame->header.channels ; j++) - retpcm [offset + j] = buffer [j][pflac->bufferpos] << shift ; - pflac->remain -= frame->header.channels ; - pflac->bufferpos++ ; - } ; - } ; - break ; - - case PFLAC_PCM_FLOAT : - { float *retpcm = ((float*) pflac->ptr) ; - float norm = (psf->norm_float == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ; - - for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++) - { offset = pflac->pos + i * frame->header.channels ; - - if (pflac->bufferpos >= frame->header.blocksize) - break ; - - for (j = 0 ; j < frame->header.channels ; j++) - retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ; - pflac->remain -= frame->header.channels ; - pflac->bufferpos++ ; - } ; - } ; - break ; - - case PFLAC_PCM_DOUBLE : - { double *retpcm = ((double*) pflac->ptr) ; - double norm = (psf->norm_double == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ; - - for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++) - { offset = pflac->pos + i * frame->header.channels ; - - if (pflac->bufferpos >= frame->header.blocksize) - break ; - - for (j = 0 ; j < frame->header.channels ; j++) - retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ; - pflac->remain -= frame->header.channels ; - pflac->bufferpos++ ; - } ; - } ; - break ; - - default : - return 0 ; - } ; - - offset = i * frame->header.channels ; - pflac->pos += i * frame->header.channels ; - - return offset ; -} /* flac_buffer_copy */ - - -static FLAC__SeekableStreamDecoderReadStatus -sf_flac_read_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__byte buffer [], unsigned *bytes, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - *bytes = psf_fread (buffer, 1, *bytes, psf) ; - if (*bytes > 0 && psf->error == 0) - return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK ; - - return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR ; -} /* sf_flac_read_callback */ - -static FLAC__SeekableStreamDecoderSeekStatus -sf_flac_seek_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - psf_fseek (psf, absolute_byte_offset, SEEK_SET) ; - if (psf->error) - return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR ; - - return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK ; -} /* sf_flac_seek_callback */ - -static FLAC__SeekableStreamDecoderTellStatus -sf_flac_tell_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - *absolute_byte_offset = psf_ftell (psf) ; - if (psf->error) - return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR ; - - return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK ; -} /* sf_flac_tell_callback */ - -static FLAC__SeekableStreamDecoderLengthStatus -sf_flac_length_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - if ((*stream_length = psf->filelength) == 0) - return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR ; - - return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK ; -} /* sf_flac_length_callback */ - -static FLAC__bool -sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *UNUSED (decoder), void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - if (psf_ftell (psf) == psf->filelength) - return SF_TRUE ; - - return SF_FALSE ; -} /* sf_flac_eof_callback */ - -static FLAC__StreamDecoderWriteStatus -sf_flac_write_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - - pflac->frame = frame ; - pflac->bufferpos = 0 ; - - pflac->bufferbackup = SF_FALSE ; - pflac->wbuffer = buffer ; - - flac_buffer_copy (psf) ; - - return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE ; -} /* sf_flac_write_callback */ - -static void -sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - switch (metadata->type) - { case FLAC__METADATA_TYPE_STREAMINFO : - psf->sf.channels = metadata->data.stream_info.channels ; - psf->sf.samplerate = metadata->data.stream_info.sample_rate ; - psf->sf.frames = metadata->data.stream_info.total_samples ; - - switch (metadata->data.stream_info.bits_per_sample) - { case 8 : - psf->sf.format |= SF_FORMAT_PCM_S8 ; - break ; - case 16 : - psf->sf.format |= SF_FORMAT_PCM_16 ; - break ; - case 24 : - psf->sf.format |= SF_FORMAT_PCM_24 ; - break ; - default : - psf_log_printf (psf, "sf_flac_meta_callback : bits_per_sample %d not yet implemented.\n", metadata->data.stream_info.bits_per_sample) ; - break ; - } ; - break ; - - default : - psf_log_printf (psf, "sf_flac_meta_callback : metadata-type %d not yet implemented.\n", metadata->type) ; - break ; - } ; - - return ; -} /* sf_flac_meta_callback */ - -static void -sf_flac_error_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ; - - switch (status) - { case FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC : - psf->error = SFE_FLAC_LOST_SYNC ; - break ; - case FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER : - psf->error = SFE_FLAC_BAD_HEADER ; - break ; - default : - psf->error = SFE_FLAC_UNKOWN_ERROR ; - break ; - } ; - - return ; -} /* sf_flac_error_callback */ - -static FLAC__SeekableStreamEncoderSeekStatus -sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - psf_fseek (psf, absolute_byte_offset, SEEK_SET) ; - if (psf->error) - return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_ERROR ; - - return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK ; -} /* sf_flac_enc_seek_callback */ - -#ifdef HAVE_FLAC_1_1_1 -static FLAC__SeekableStreamEncoderTellStatus -sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - *absolute_byte_offset = psf_ftell (psf) ; - if (psf->error) - return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_ERROR ; - - return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_OK ; -} /* sf_flac_enc_tell_callback */ -#endif - -static FLAC__StreamEncoderWriteStatus -sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], unsigned bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data) -{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - - if (psf_fwrite (buffer, 1, bytes, psf) == bytes && psf->error == 0) - return FLAC__STREAM_ENCODER_WRITE_STATUS_OK ; - - return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR ; -} /* sf_flac_enc_write_callback */ - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -flac_open (SF_PRIVATE *psf) -{ int subformat ; - int error = 0 ; - - FLAC_PRIVATE* pflac = calloc (1, sizeof (FLAC_PRIVATE)) ; - psf->fdata = pflac ; - - if (psf->mode == SFM_RDWR) - return SFE_UNIMPLEMENTED ; - - if (psf->mode == SFM_READ) - { if ((error = flac_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = SF_ENDIAN_BIG ; - - if ((error = flac_enc_init (psf))) - return error ; - } ; - - psf->datalength = psf->filelength ; - psf->dataoffset = 0 ; - psf->blockwidth = 0 ; - psf->bytewidth = 1 ; - - psf->container_close = flac_close ; - psf->seek = flac_seek ; - psf->command = flac_command ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_PCM_S8 : /* 8-bit FLAC. */ - case SF_FORMAT_PCM_16 : /* 16-bit FLAC. */ - case SF_FORMAT_PCM_24 : /* 24-bit FLAC. */ - error = flac_init (psf) ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - return error ; -} /* flac_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -flac_close (SF_PRIVATE *psf) -{ FLAC_PRIVATE* pflac ; - int k ; - - if ((pflac = (FLAC_PRIVATE*) psf->fdata) == NULL) - return 0 ; - - if (psf->mode == SFM_WRITE) - { FLAC__seekable_stream_encoder_finish (pflac->fse) ; - FLAC__seekable_stream_encoder_delete (pflac->fse) ; - if (pflac->encbuffer) - free (pflac->encbuffer) ; - } ; - - if (psf->mode == SFM_READ) - { FLAC__seekable_stream_decoder_finish (pflac->fsd) ; - FLAC__seekable_stream_decoder_delete (pflac->fsd) ; - } ; - - for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++) - free (pflac->rbuffer [k]) ; - - free (pflac) ; - psf->fdata = NULL ; - - return 0 ; -} /* flac_close */ - -static int -flac_enc_init (SF_PRIVATE *psf) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - unsigned bps ; - int k, found ; - - found = 0 ; - for (k = 0 ; k < ARRAY_LEN (legal_sample_rates) ; k++) - if (psf->sf.samplerate == legal_sample_rates [k]) - { found = 1 ; - break ; - } ; - - if (found == 0) - return SFE_FLAC_BAD_SAMPLE_RATE ; - - psf_fseek (psf, 0, SEEK_SET) ; - if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL) - return SFE_FLAC_NEW_DECODER ; - FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ; - FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ; - -#ifdef HAVE_FLAC_1_1_1 - FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ; -#endif - FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ; - FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ; - FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - bps = 8 ; - break ; - case SF_FORMAT_PCM_16 : - bps = 16 ; - break ; - case SF_FORMAT_PCM_24 : - bps = 24 ; - break ; - - default : - bps = 0 ; - break ; - } ; - - FLAC__seekable_stream_encoder_set_bits_per_sample (pflac->fse, bps) ; - - if ((bps = FLAC__seekable_stream_encoder_init (pflac->fse)) != FLAC__SEEKABLE_STREAM_DECODER_OK) - { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__seekable_stream_encoder_get_resolved_state_string (pflac->fse)) ; - return SFE_FLAC_INIT_DECODER ; - } ; - - if (psf->error == 0) - psf->dataoffset = psf_ftell (psf) ; - pflac->encbuffer = calloc (ENC_BUFFER_SIZE, sizeof (FLAC__int32)) ; - - return psf->error ; -} /* flac_enc_init */ - -static int -flac_read_header (SF_PRIVATE *psf) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - - psf_fseek (psf, 0, SEEK_SET) ; - if ((pflac->fsd = FLAC__seekable_stream_decoder_new ()) == NULL) - return SFE_FLAC_NEW_DECODER ; - - FLAC__seekable_stream_decoder_set_read_callback (pflac->fsd, sf_flac_read_callback) ; - FLAC__seekable_stream_decoder_set_seek_callback (pflac->fsd, sf_flac_seek_callback) ; - FLAC__seekable_stream_decoder_set_tell_callback (pflac->fsd, sf_flac_tell_callback) ; - FLAC__seekable_stream_decoder_set_length_callback (pflac->fsd, sf_flac_length_callback) ; - FLAC__seekable_stream_decoder_set_eof_callback (pflac->fsd, sf_flac_eof_callback) ; - FLAC__seekable_stream_decoder_set_write_callback (pflac->fsd, sf_flac_write_callback) ; - FLAC__seekable_stream_decoder_set_metadata_callback (pflac->fsd, sf_flac_meta_callback) ; - FLAC__seekable_stream_decoder_set_error_callback (pflac->fsd, sf_flac_error_callback) ; - FLAC__seekable_stream_decoder_set_client_data (pflac->fsd, psf) ; - - if (FLAC__seekable_stream_decoder_init (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK) - return SFE_FLAC_INIT_DECODER ; - - FLAC__seekable_stream_decoder_process_until_end_of_metadata (pflac->fsd) ; - if (psf->error == 0) - { FLAC__uint64 position ; - FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ; - psf->dataoffset = position ; - } ; - - return psf->error ; -} /* flac_read_header */ - -static int -flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) -{ - /* Avoid compiler warnings. */ - psf = psf ; - data = data ; - datasize = datasize ; - - switch (command) - { default : break ; - } ; - - return 0 ; -} /* flac_command */ - -int -flac_init (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_RDWR) - return SFE_BAD_MODE_RW ; - - if (psf->mode == SFM_READ) - { psf->read_short = flac_read_flac2s ; - psf->read_int = flac_read_flac2i ; - psf->read_float = flac_read_flac2f ; - psf->read_double = flac_read_flac2d ; - } ; - - if (psf->mode == SFM_WRITE) - { psf->write_short = flac_write_s2flac ; - psf->write_int = flac_write_i2flac ; - psf->write_float = flac_write_f2flac ; - psf->write_double = flac_write_d2flac ; - } ; - - psf->bytewidth = 1 ; - psf->blockwidth = psf->sf.channels ; - - if (psf->filelength > psf->dataoffset) - psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ; - else - psf->datalength = 0 ; - - return 0 ; -} /* flac_init */ - -static unsigned -flac_read_loop (SF_PRIVATE *psf, unsigned len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - - pflac->pos = 0 ; - pflac->len = len ; - pflac->remain = len ; - if (pflac->frame != NULL && pflac->bufferpos < pflac->frame->header.blocksize) - flac_buffer_copy (psf) ; - - while (pflac->pos < pflac->len) - { if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0) - break ; - if (FLAC__seekable_stream_decoder_get_state (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK) - break ; - } ; - - pflac->ptr = NULL ; - - return pflac->pos ; -} /* flac_read_loop */ - -static sf_count_t -flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - sf_count_t total = 0, current ; - unsigned readlen ; - - pflac->pcmtype = PFLAC_PCM_SHORT ; - - while (total < len) - { pflac->ptr = ptr + total ; - readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ; - current = flac_read_loop (psf, readlen) ; - if (current == 0) - break ; - total += current ; - } ; - - return total ; -} /* flac_read_flac2s */ - -static sf_count_t -flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - sf_count_t total = 0, current ; - unsigned readlen ; - - pflac->pcmtype = PFLAC_PCM_INT ; - - while (total < len) - { pflac->ptr = ptr + total ; - readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ; - current = flac_read_loop (psf, readlen) ; - if (current == 0) - break ; - total += current ; - } ; - - return total ; -} /* flac_read_flac2i */ - -static sf_count_t -flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - sf_count_t total = 0, current ; - unsigned readlen ; - - pflac->pcmtype = PFLAC_PCM_FLOAT ; - - while (total < len) - { pflac->ptr = ptr + total ; - readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ; - current = flac_read_loop (psf, readlen) ; - if (current == 0) - break ; - total += current ; - } ; - - return total ; -} /* flac_read_flac2f */ - -static sf_count_t -flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - sf_count_t total = 0, current ; - unsigned readlen ; - - pflac->pcmtype = PFLAC_PCM_DOUBLE ; - - while (total < len) - { pflac->ptr = ptr + total ; - readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ; - current = flac_read_loop (psf, readlen) ; - if (current == 0) - break ; - total += current ; - } ; - - return total ; -} /* flac_read_flac2d */ - -static sf_count_t -flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - void (*convert) (const short *, FLAC__int32 *, int) ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - FLAC__int32* buffer = pflac->encbuffer ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - convert = s2flac8_array ; - break ; - case SF_FORMAT_PCM_16 : - convert = s2flac16_array ; - break ; - case SF_FORMAT_PCM_24 : - convert = s2flac24_array ; - break ; - default : - return -1 ; - } ; - - bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ; - bufferlen *= psf->sf.channels ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - convert (ptr + total, buffer, writecount) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) - thiswrite = writecount ; - else - break ; - total += thiswrite ; - if (thiswrite < writecount) - break ; - - len -= thiswrite ; - } ; - - return total ; -} /* flac_write_s2flac */ - -static sf_count_t -flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - void (*convert) (const int *, FLAC__int32 *, int) ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - FLAC__int32* buffer = pflac->encbuffer ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - convert = i2flac8_array ; - break ; - case SF_FORMAT_PCM_16 : - convert = i2flac16_array ; - break ; - case SF_FORMAT_PCM_24 : - convert = i2flac24_array ; - break ; - default : - return -1 ; - } ; - - bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ; - bufferlen *= psf->sf.channels ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - convert (ptr + total, buffer, writecount) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) - thiswrite = writecount ; - else - break ; - total += thiswrite ; - if (thiswrite < writecount) - break ; - - len -= thiswrite ; - } ; - - return total ; -} /* flac_write_i2flac */ - -static sf_count_t -flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - void (*convert) (const float *, FLAC__int32 *, int, int) ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - FLAC__int32* buffer = pflac->encbuffer ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - convert = (psf->add_clipping) ? f2flac8_clip_array : f2flac8_array ; - break ; - case SF_FORMAT_PCM_16 : - convert = (psf->add_clipping) ? f2flac16_clip_array : f2flac16_array ; - break ; - case SF_FORMAT_PCM_24 : - convert = (psf->add_clipping) ? f2flac24_clip_array : f2flac24_array ; - break ; - default : - return -1 ; - } ; - - bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ; - bufferlen *= psf->sf.channels ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - convert (ptr + total, buffer, writecount, psf->norm_float) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) - thiswrite = writecount ; - else - break ; - total += thiswrite ; - if (thiswrite < writecount) - break ; - - len -= thiswrite ; - } ; - - return total ; -} /* flac_write_f2flac */ - -static void -f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) -{ float normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10) : 1.0 ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F)) - { dest [count] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10)) - { dest [count] = 0x80 ; - continue ; - } ; - dest [count] = lrintf (scaled_value) ; - } ; - - return ; -} /* f2flac8_clip_array */ - -static void -f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) -{ - float normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x1000) : 1.0 ; - - while (--count >= 0) { - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF)) { - dest [count] = 0x7FFF ; - continue ; - } - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000)) { - dest [count] = 0x8000 ; - continue ; - } - dest [count] = lrintf (scaled_value) ; - } -} /* f2flac16_clip_array */ - -static void -f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) -{ float normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x100000) : 1.0 ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF)) - { dest [count] = 0x7FFFFF ; - continue ; - } ; - - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000)) - { dest [count] = 0x800000 ; - continue ; - } - dest [count] = lrintf (scaled_value) ; - } ; - - return ; -} /* f2flac24_clip_array */ - -static void -f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize) -{ float normfact = normalize ? (1.0 * 0x7F) : 1.0 ; - - while (--count >= 0) - dest [count] = lrintf (src [count] * normfact) ; -} /* f2flac8_array */ - -static void -f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize) -{ float normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; - - while (--count >= 0) - dest [count] = lrintf (src [count] * normfact) ; -} /* f2flac16_array */ - -static void -f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize) -{ float normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ; - - while (--count >= 0) - dest [count] = lrintf (src [count] * normfact) ; -} /* f2flac24_array */ - -static sf_count_t -flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - void (*convert) (const double *, FLAC__int32 *, int, int) ; - int bufferlen, writecount, thiswrite ; - sf_count_t total = 0 ; - FLAC__int32* buffer = pflac->encbuffer ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - convert = (psf->add_clipping) ? d2flac8_clip_array : d2flac8_array ; - break ; - case SF_FORMAT_PCM_16 : - convert = (psf->add_clipping) ? d2flac16_clip_array : d2flac16_array ; - break ; - case SF_FORMAT_PCM_24 : - convert = (psf->add_clipping) ? d2flac24_clip_array : d2flac24_array ; - break ; - default : - return -1 ; - } ; - - bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ; - bufferlen *= psf->sf.channels ; - - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - convert (ptr + total, buffer, writecount, psf->norm_double) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) - thiswrite = writecount ; - else - break ; - total += thiswrite ; - if (thiswrite < writecount) - break ; - - len -= thiswrite ; - } ; - - return total ; -} /* flac_write_d2flac */ - -static void -d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) -{ double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10) : 1.0 ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F)) - { dest [count] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10)) - { dest [count] = 0x80 ; - continue ; - } ; - dest [count] = lrint (scaled_value) ; - } ; - - return ; -} /* d2flac8_clip_array */ - -static void -d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) -{ double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x1000) : 1.0 ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF)) - { dest [count] = 0x7FFF ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000)) - { dest [count] = 0x8000 ; - continue ; - } ; - dest [count] = lrint (scaled_value) ; - } ; - - return ; -} /* d2flac16_clip_array */ - -static void -d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) -{ double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x100000) : 1.0 ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF)) - { dest [count] = 0x7FFFFF ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000)) - { dest [count] = 0x800000 ; - continue ; - } ; - dest [count] = lrint (scaled_value) ; - } ; - - return ; -} /* d2flac24_clip_array */ - -static void -d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize) -{ double normfact = normalize ? (1.0 * 0x7F) : 1.0 ; - - while (--count >= 0) - dest [count] = lrint (src [count] * normfact) ; -} /* d2flac8_array */ - -static void -d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize) -{ double normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; - - while (--count >= 0) - dest [count] = lrint (src [count] * normfact) ; -} /* d2flac16_array */ - -static void -d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize) -{ double normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ; - - while (--count >= 0) - dest [count] = lrint (src [count] * normfact) ; -} /* d2flac24_array */ - -static sf_count_t -flac_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset) -{ FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->fdata ; - - if (pflac == NULL) - return 0 ; - - if (psf->dataoffset < 0) - { psf->error = SFE_BAD_SEEK ; - return ((sf_count_t) -1) ; - } ; - - pflac->frame = NULL ; - - if (psf->mode == SFM_READ) - { FLAC__uint64 position ; - if (FLAC__seekable_stream_decoder_seek_absolute (pflac->fsd, offset)) - { FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ; - return offset ; - } ; - - return ((sf_count_t) -1) ; - } ; - - /* Seeking in write mode not yet supported. */ - psf->error = SFE_BAD_SEEK ; - - return ((sf_count_t) -1) ; -} /* flac_seek */ - -#endif - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 46d49617-ebff-42b4-8f66-a0e428147360 -*/ diff --git a/Libraries/SndFile/Files/src/float32.c b/Libraries/SndFile/Files/src/float32.c deleted file mode 100644 index b376e60f7..000000000 --- a/Libraries/SndFile/Files/src/float32.c +++ /dev/null @@ -1,961 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "float_cast.h" - -#if CPU_IS_LITTLE_ENDIAN - #define FLOAT32_READ float32_le_read - #define FLOAT32_WRITE float32_le_write -#elif CPU_IS_BIG_ENDIAN - #define FLOAT32_READ float32_be_read - #define FLOAT32_WRITE float32_be_write -#endif - -/*-------------------------------------------------------------------------------------------- -** Processor floating point capabilities. float32_get_capability () returns one of the -** latter four values. -*/ - -enum -{ FLOAT_UNKNOWN = 0x00, - FLOAT_CAN_RW_LE = 0x12, - FLOAT_CAN_RW_BE = 0x23, - FLOAT_BROKEN_LE = 0x34, - FLOAT_BROKEN_BE = 0x45 -} ; - -/*-------------------------------------------------------------------------------------------- -** Prototypes for private functions. -*/ - -static sf_count_t host_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t host_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t host_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t host_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t host_write_s2f (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t host_write_i2f (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t host_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t host_write_d2f (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static void float32_peak_update (SF_PRIVATE *psf, const float *buffer, int count, sf_count_t indx) ; - -static sf_count_t replace_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t replace_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t replace_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t replace_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t replace_write_s2f (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t replace_write_i2f (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t replace_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t replace_write_d2f (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static void bf2f_array (float *buffer, int count) ; -static void f2bf_array (float *buffer, int count) ; - -static int float32_get_capability (SF_PRIVATE *psf) ; - -/*-------------------------------------------------------------------------------------------- -** Exported functions. -*/ - -int -float32_init (SF_PRIVATE *psf) -{ static int float_caps ; - - float_caps = float32_get_capability (psf) ; - - psf->blockwidth = sizeof (float) * psf->sf.channels ; - - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { switch (psf->endian + float_caps) - { case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = host_read_f2s ; - psf->read_int = host_read_f2i ; - psf->read_float = host_read_f ; - psf->read_double = host_read_f2d ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = host_read_f2s ; - psf->read_int = host_read_f2i ; - psf->read_float = host_read_f ; - psf->read_double = host_read_f2d ; - break ; - - case (SF_ENDIAN_BIG + FLOAT_CAN_RW_LE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = host_read_f2s ; - psf->read_int = host_read_f2i ; - psf->read_float = host_read_f ; - psf->read_double = host_read_f2d ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_BE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = host_read_f2s ; - psf->read_int = host_read_f2i ; - psf->read_float = host_read_f ; - psf->read_double = host_read_f2d ; - break ; - - /* When the CPU is not IEEE compatible. */ - case (SF_ENDIAN_BIG + FLOAT_BROKEN_LE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = replace_read_f2s ; - psf->read_int = replace_read_f2i ; - psf->read_float = replace_read_f ; - psf->read_double = replace_read_f2d ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = replace_read_f2s ; - psf->read_int = replace_read_f2i ; - psf->read_float = replace_read_f ; - psf->read_double = replace_read_f2d ; - break ; - - case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) : - psf->float_endswap = SF_FALSE ; - psf->read_short = replace_read_f2s ; - psf->read_int = replace_read_f2i ; - psf->read_float = replace_read_f ; - psf->read_double = replace_read_f2d ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) : - psf->float_endswap = SF_TRUE ; - psf->read_short = replace_read_f2s ; - psf->read_int = replace_read_f2i ; - psf->read_float = replace_read_f ; - psf->read_double = replace_read_f2d ; - break ; - - default : break ; - } ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { switch (psf->endian + float_caps) - { case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = host_write_s2f ; - psf->write_int = host_write_i2f ; - psf->write_float = host_write_f ; - psf->write_double = host_write_d2f ; - break ; - - case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = host_write_s2f ; - psf->write_int = host_write_i2f ; - psf->write_float = host_write_f ; - psf->write_double = host_write_d2f ; - break ; - - case (SF_ENDIAN_BIG + FLOAT_CAN_RW_LE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = host_write_s2f ; - psf->write_int = host_write_i2f ; - psf->write_float = host_write_f ; - psf->write_double = host_write_d2f ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_BE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = host_write_s2f ; - psf->write_int = host_write_i2f ; - psf->write_float = host_write_f ; - psf->write_double = host_write_d2f ; - break ; - - /* When the CPU is not IEEE compatible. */ - case (SF_ENDIAN_BIG + FLOAT_BROKEN_LE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = replace_write_s2f ; - psf->write_int = replace_write_i2f ; - psf->write_float = replace_write_f ; - psf->write_double = replace_write_d2f ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = replace_write_s2f ; - psf->write_int = replace_write_i2f ; - psf->write_float = replace_write_f ; - psf->write_double = replace_write_d2f ; - break ; - - case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) : - psf->float_endswap = SF_FALSE ; - psf->write_short = replace_write_s2f ; - psf->write_int = replace_write_i2f ; - psf->write_float = replace_write_f ; - psf->write_double = replace_write_d2f ; - break ; - - case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) : - psf->float_endswap = SF_TRUE ; - psf->write_short = replace_write_s2f ; - psf->write_int = replace_write_i2f ; - psf->write_float = replace_write_f ; - psf->write_double = replace_write_d2f ; - break ; - - default : break ; - } ; - } ; - - if (psf->filelength > psf->dataoffset) - { psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset : - psf->filelength - psf->dataoffset ; - } - else - psf->datalength = 0 ; - - psf->sf.frames = psf->datalength / psf->blockwidth ; - - return 0 ; -} /* float32_init */ - -float -float32_be_read (unsigned char *cptr) -{ int exponent, mantissa, negative ; - float fvalue ; - - negative = cptr [0] & 0x80 ; - exponent = ((cptr [0] & 0x7F) << 1) | ((cptr [1] & 0x80) ? 1 : 0) ; - mantissa = ((cptr [1] & 0x7F) << 16) | (cptr [2] << 8) | (cptr [3]) ; - - if (! (exponent || mantissa)) - return 0.0 ; - - mantissa |= 0x800000 ; - exponent = exponent ? exponent - 127 : 0 ; - - fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ; - - if (negative) - fvalue *= -1 ; - - if (exponent > 0) - fvalue *= (1 << exponent) ; - else if (exponent < 0) - fvalue /= (1 << abs (exponent)) ; - - return fvalue ; -} /* float32_be_read */ - -float -float32_le_read (unsigned char *cptr) -{ int exponent, mantissa, negative ; - float fvalue ; - - negative = cptr [3] & 0x80 ; - exponent = ((cptr [3] & 0x7F) << 1) | ((cptr [2] & 0x80) ? 1 : 0) ; - mantissa = ((cptr [2] & 0x7F) << 16) | (cptr [1] << 8) | (cptr [0]) ; - - if (! (exponent || mantissa)) - return 0.0 ; - - mantissa |= 0x800000 ; - exponent = exponent ? exponent - 127 : 0 ; - - fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ; - - if (negative) - fvalue *= -1 ; - - if (exponent > 0) - fvalue *= (1 << exponent) ; - else if (exponent < 0) - fvalue /= (1 << abs (exponent)) ; - - return fvalue ; -} /* float32_le_read */ - -void -float32_le_write (float in, unsigned char *out) -{ int exponent, mantissa, negative = 0 ; - - memset (out, 0, sizeof (int)) ; - - if (fabs (in) < 1e-30) - return ; - - if (in < 0.0) - { in *= -1.0 ; - negative = 1 ; - } ; - - in = frexp (in, &exponent) ; - - exponent += 126 ; - - in *= (float) 0x1000000 ; - mantissa = (((int) in) & 0x7FFFFF) ; - - if (negative) - out [3] |= 0x80 ; - - if (exponent & 0x01) - out [2] |= 0x80 ; - - out [0] = mantissa & 0xFF ; - out [1] = (mantissa >> 8) & 0xFF ; - out [2] |= (mantissa >> 16) & 0x7F ; - out [3] |= (exponent >> 1) & 0x7F ; - - return ; -} /* float32_le_write */ - -void -float32_be_write (float in, unsigned char *out) -{ int exponent, mantissa, negative = 0 ; - - memset (out, 0, sizeof (int)) ; - - if (fabs (in) < 1e-30) - return ; - - if (in < 0.0) - { in *= -1.0 ; - negative = 1 ; - } ; - - in = frexp (in, &exponent) ; - - exponent += 126 ; - - in *= (float) 0x1000000 ; - mantissa = (((int) in) & 0x7FFFFF) ; - - if (negative) - out [0] |= 0x80 ; - - if (exponent & 0x01) - out [1] |= 0x80 ; - - out [3] = mantissa & 0xFF ; - out [2] = (mantissa >> 8) & 0xFF ; - out [1] |= (mantissa >> 16) & 0x7F ; - out [0] |= (exponent >> 1) & 0x7F ; - - return ; -} /* float32_be_write */ - -/*============================================================================================== -** Private functions. -*/ - -static void -float32_peak_update (SF_PRIVATE *psf, const float *buffer, int count, sf_count_t indx) -{ int chan ; - int k, position ; - float fmaxval ; - - for (chan = 0 ; chan < psf->sf.channels ; chan++) - { fmaxval = fabs (buffer [chan]) ; - position = 0 ; - for (k = chan ; k < count ; k += psf->sf.channels) - if (fmaxval < fabs (buffer [k])) - { fmaxval = fabs (buffer [k]) ; - position = k ; - } ; - - if (fmaxval > psf->peak_info->peaks [chan].value) - { psf->peak_info->peaks [chan].value = fmaxval ; - psf->peak_info->peaks [chan].position = psf->write_current + indx + (position / psf->sf.channels) ; - } ; - } ; - - return ; -} /* float32_peak_update */ - -static int -float32_get_capability (SF_PRIVATE *psf) -{ union - { float f ; - int i ; - unsigned char c [4] ; - } data ; - - data.f = (float) 1.23456789 ; /* Some abitrary value. */ - - if (! psf->ieee_replace) - { /* If this test is true ints and floats are compatible and little endian. */ - if (data.c [0] == 0x52 && data.c [1] == 0x06 && data.c [2] == 0x9e && data.c [3] == 0x3f) - return FLOAT_CAN_RW_LE ; - - /* If this test is true ints and floats are compatible and big endian. */ - if (data.c [3] == 0x52 && data.c [2] == 0x06 && data.c [1] == 0x9e && data.c [0] == 0x3f) - return FLOAT_CAN_RW_BE ; - } ; - - /* Floats are broken. Don't expect reading or writing to be fast. */ - psf_log_printf (psf, "Using IEEE replacement code for float.\n") ; - - return (CPU_IS_LITTLE_ENDIAN) ? FLOAT_BROKEN_LE : FLOAT_BROKEN_BE ; -} /* float32_get_capability */ - -/*======================================================================================= -*/ - -static inline void -f2s_array (const float *src, int count, short *dest, float scale) -{ while (--count >= 0) - { dest [count] = lrintf (scale * src [count]) ; - } ; -} /* f2s_array */ - -static inline void -f2i_array (const float *src, int count, int *dest, float scale) -{ while (--count >= 0) - { dest [count] = lrintf (scale * src [count]) ; - } ; -} /* f2i_array */ - -static inline void -f2d_array (const float *src, int count, double *dest) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* f2d_array */ - -static inline void -s2f_array (const short *src, float *dest, int count) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; - -} /* s2f_array */ - -static inline void -i2f_array (const int *src, float *dest, int count) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* i2f_array */ - -static inline void -d2f_array (const double *src, float *dest, int count) -{ while (--count >= 0) - { dest [count] = src [count] ; - } ; -} /* d2f_array */ - -/*---------------------------------------------------------------------------------------------- -*/ - -static sf_count_t -host_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float scale ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - -/* Fix me : Need lef2s_array */ - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - f2s_array (psf->u.fbuf, readcount, ptr + total, scale) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* host_read_f2s */ - -static sf_count_t -host_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float scale ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - f2i_array (psf->u.fbuf, readcount, ptr + total, scale) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* host_read_f2i */ - -static sf_count_t -host_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - if (psf->float_endswap != SF_TRUE) - return psf_fread (ptr, sizeof (float), len, psf) ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - endswap_int_copy ((int*) (ptr + total), psf->u.ibuf, readcount) ; - - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* host_read_f */ - -static sf_count_t -host_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - -/* Fix me : Need lef2d_array */ - f2d_array (psf->u.fbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* host_read_f2d */ - -static sf_count_t -host_write_s2f (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2f_array (ptr + total, psf->u.fbuf, bufferlen) ; - - if (psf->peak_info) - float32_peak_update (psf, psf->u.fbuf, bufferlen, total / psf->sf.channels) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_s2f */ - -static sf_count_t -host_write_i2f (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2f_array (ptr + total, psf->u.fbuf, bufferlen) ; - - if (psf->peak_info) - float32_peak_update (psf, psf->u.fbuf, bufferlen, total / psf->sf.channels) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float) , bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_i2f */ - -static sf_count_t -host_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - if (psf->peak_info) - float32_peak_update (psf, ptr, len, 0) ; - - if (psf->float_endswap != SF_TRUE) - return psf_fwrite (ptr, sizeof (float), len, psf) ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - endswap_int_copy (psf->u.ibuf, (const int*) (ptr + total), bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_f */ - -static sf_count_t -host_write_d2f (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - d2f_array (ptr + total, psf->u.fbuf, bufferlen) ; - - if (psf->peak_info) - float32_peak_update (psf, psf->u.fbuf, bufferlen, total / psf->sf.channels) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* host_write_d2f */ - -/*======================================================================================= -*/ - -static sf_count_t -replace_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float scale ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - bf2f_array (psf->u.fbuf, bufferlen) ; - - f2s_array (psf->u.fbuf, readcount, ptr + total, scale) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_f2s */ - -static sf_count_t -replace_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float scale ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - bf2f_array (psf->u.fbuf, bufferlen) ; - - f2i_array (psf->u.fbuf, readcount, ptr + total, scale) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_f2i */ - -static sf_count_t -replace_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - /* FIX THIS */ - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - bf2f_array (psf->u.fbuf, bufferlen) ; - - memcpy (ptr + total, psf->u.fbuf, bufferlen * sizeof (float)) ; - - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_f */ - -static sf_count_t -replace_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - bf2f_array (psf->u.fbuf, bufferlen) ; - - f2d_array (psf->u.fbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* replace_read_f2d */ - -static sf_count_t -replace_write_s2f (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2f_array (ptr + total, psf->u.fbuf, bufferlen) ; - - if (psf->peak_info) - float32_peak_update (psf, psf->u.fbuf, bufferlen, total / psf->sf.channels) ; - - f2bf_array (psf->u.fbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_s2f */ - -static sf_count_t -replace_write_i2f (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2f_array (ptr + total, psf->u.fbuf, bufferlen) ; - - if (psf->peak_info) - float32_peak_update (psf, psf->u.fbuf, bufferlen, total / psf->sf.channels) ; - - f2bf_array (psf->u.fbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_i2f */ - -static sf_count_t -replace_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - /* FIX THIS */ - if (psf->peak_info) - float32_peak_update (psf, ptr, len, 0) ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - - memcpy (psf->u.fbuf, ptr + total, bufferlen * sizeof (float)) ; - - f2bf_array (psf->u.fbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float) , bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_f */ - -static sf_count_t -replace_write_d2f (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.fbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - d2f_array (ptr + total, psf->u.fbuf, bufferlen) ; - - if (psf->peak_info) - float32_peak_update (psf, psf->u.fbuf, bufferlen, total / psf->sf.channels) ; - - f2bf_array (psf->u.fbuf, bufferlen) ; - - if (psf->float_endswap == SF_TRUE) - endswap_int_array (psf->u.ibuf, bufferlen) ; - - writecount = psf_fwrite (psf->u.fbuf, sizeof (float), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* replace_write_d2f */ - -/*---------------------------------------------------------------------------------------------- -*/ - -static void -bf2f_array (float *buffer, int count) -{ while (--count >= 0) - { buffer [count] = FLOAT32_READ ((unsigned char *) (buffer + count)) ; - } ; -} /* bf2f_array */ - -static void -f2bf_array (float *buffer, int count) -{ while (--count >= 0) - { FLOAT32_WRITE (buffer [count], (unsigned char*) (buffer + count)) ; - } ; -} /* f2bf_array */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: b6c34917-488c-4145-9648-f4371fc4c889 -*/ diff --git a/Libraries/SndFile/Files/src/float_cast.h b/Libraries/SndFile/Files/src/float_cast.h deleted file mode 100644 index 099670a36..000000000 --- a/Libraries/SndFile/Files/src/float_cast.h +++ /dev/null @@ -1,262 +0,0 @@ -/* -** Copyright (C) 2001-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* Version 1.4 */ - -#ifndef FLOAT_CAST_HEADER -#define FLOAT_CAST_HEADER - -/*============================================================================ -** On Intel Pentium processors (especially PIII and probably P4), converting -** from float to int is very slow. To meet the C specs, the code produced by -** most C compilers targeting Pentium needs to change the FPU rounding mode -** before the float to int conversion is performed. -** -** Changing the FPU rounding mode causes the FPU pipeline to be flushed. It -** is this flushing of the pipeline which is so slow. -** -** Fortunately the ISO C99 specifications define the functions lrint, lrintf, -** llrint and llrintf which fix this problem as a side effect. -** -** On Unix-like systems, the configure process should have detected the -** presence of these functions. If they weren't found we have to replace them -** here with a standard C cast. -*/ - -/* -** The C99 prototypes for lrint and lrintf are as follows: -** -** long int lrintf (float x) ; -** long int lrint (double x) ; -*/ - -#include "sfconfig.h" - -/* -** The presence of the required functions are detected during the configure -** process and the values HAVE_LRINT and HAVE_LRINTF are set accordingly in -** the sfconfig.h file. -*/ - -#define HAVE_LRINT_REPLACEMENT 0 - -#if (HAVE_LRINT && HAVE_LRINTF) - - /* - ** These defines enable functionality introduced with the 1999 ISO C - ** standard. They must be defined before the inclusion of math.h to - ** engage them. If optimisation is enabled, these functions will be - ** inlined. With optimisation switched off, you have to link in the - ** maths library using -lm. - */ - - #define _ISOC9X_SOURCE 1 - #define _ISOC99_SOURCE 1 - - #define __USE_ISOC9X 1 - #define __USE_ISOC99 1 - - #include - -#elif (defined (__CYGWIN__)) - - #include - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - - #undef lrint - #undef lrintf - - #define lrint double2int - #define lrintf float2int - - /* - ** The native CYGWIN lrint and lrintf functions are buggy: - ** http://sourceware.org/ml/cygwin/2005-06/msg00153.html - ** http://sourceware.org/ml/cygwin/2005-09/msg00047.html - ** and slow. - ** These functions (pulled from the Public Domain MinGW math.h header) - ** replace the native versions. - */ - - static inline long double2int (double in) - { long retval ; - - __asm__ __volatile__ - ( "fistpl %0" - : "=m" (retval) - : "t" (in) - : "st" - ) ; - - return retval ; - } /* double2int */ - - static inline long float2int (float in) - { long retval ; - - __asm__ __volatile__ - ( "fistpl %0" - : "=m" (retval) - : "t" (in) - : "st" - ) ; - - return retval ; - } /* float2int */ - -#elif (defined (WIN32) || defined (_WIN32)) - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - - #include - - /* - ** Win32 doesn't seem to have these functions. - ** Therefore implement inline versions of these functions here. - */ - - __inline long int - lrint (double flt) - { int intgr ; - - _asm - { fld flt - fistp intgr - } ; - - return intgr ; - } - - __inline long int - lrintf (float flt) - { int intgr ; - - _asm - { fld flt - fistp intgr - } ; - - return intgr ; - } - -#elif (defined (__MWERKS__) && defined (macintosh)) - - /* This MacOS 9 solution was provided by Stephane Letz */ - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - #include - - #undef lrint - #undef lrintf - - #define lrint double2int - #define lrintf float2int - - inline int - float2int (register float in) - { long res [2] ; - - asm - { fctiw in, in - stfd in, res - } - return res [1] ; - } /* float2int */ - - inline int - double2int (register double in) - { long res [2] ; - - asm - { fctiw in, in - stfd in, res - } - return res [1] ; - } /* double2int */ - -#elif (defined (__MACH__) && defined (__APPLE__)) - - /* For Apple MacOSX. */ - - #undef HAVE_LRINT_REPLACEMENT - #define HAVE_LRINT_REPLACEMENT 1 - #include - - #undef lrint - #undef lrintf - - #define lrint double2int - #define lrintf float2int - - inline static long - float2int (register float in) - { int res [2] ; - - __asm__ __volatile__ - ( "fctiw %1, %1\n\t" - "stfd %1, %0" - : "=m" (res) /* Output */ - : "f" (in) /* Input */ - : "memory" - ) ; - - return res [1] ; - } /* lrintf */ - - inline static long - double2int (register double in) - { int res [2] ; - - __asm__ __volatile__ - ( "fctiw %1, %1\n\t" - "stfd %1, %0" - : "=m" (res) /* Output */ - : "f" (in) /* Input */ - : "memory" - ) ; - - return res [1] ; - } /* lrint */ - -#else - #ifndef __sgi - #warning "Don't have the functions lrint() and lrintf()." - #warning "Replacing these functions with a standard C cast." - #endif - - #include - - #define lrint(dbl) ((long) (dbl)) - #define lrintf(flt) ((long) (flt)) - -#endif - - -#endif /* FLOAT_CAST_HEADER */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 42db1693-ff61-4051-bac1-e4d24c4e30b7 -*/ diff --git a/Libraries/SndFile/Files/src/g72x.c b/Libraries/SndFile/Files/src/g72x.c deleted file mode 100644 index dbbf9dae5..000000000 --- a/Libraries/SndFile/Files/src/g72x.c +++ /dev/null @@ -1,615 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" -#include "G72x/g72x.h" - -/* This struct is private to the G72x code. */ -struct g72x_state ; -typedef struct g72x_state G72x_STATE ; - -typedef struct -{ /* Private data. Don't mess with it. */ - struct g72x_state * private ; - - /* Public data. Read only. */ - int blocksize, samplesperblock, bytesperblock ; - - /* Public data. Read and write. */ - int blocks_total, block_curr, sample_curr ; - unsigned char block [G72x_BLOCK_SIZE] ; - short samples [G72x_BLOCK_SIZE] ; -} G72x_PRIVATE ; - -static int psf_g72x_decode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) ; -static int psf_g72x_encode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) ; - -static sf_count_t g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t g72x_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t g72x_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t g72x_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t g72x_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t g72x_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -static int g72x_close (SF_PRIVATE *psf) ; - - -/*============================================================================================ -** WAV G721 Reader initialisation function. -*/ - -int -g72x_init (SF_PRIVATE * psf) -{ G72x_PRIVATE *pg72x ; - int bitspersample, bytesperblock, codec ; - - if (psf->fdata != NULL) - { psf_log_printf (psf, "*** psf->fdata is not NULL.\n") ; - return SFE_INTERNAL ; - } ; - - psf->sf.seekable = SF_FALSE ; - - if (psf->sf.channels != 1) - return SFE_G72X_NOT_MONO ; - - if ((pg72x = calloc (1, sizeof (G72x_PRIVATE))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->fdata = (void*) pg72x ; - - pg72x->block_curr = 0 ; - pg72x->sample_curr = 0 ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_G721_32 : - codec = G721_32_BITS_PER_SAMPLE ; - bytesperblock = G721_32_BYTES_PER_BLOCK ; - bitspersample = G721_32_BITS_PER_SAMPLE ; - break ; - - case SF_FORMAT_G723_24: - codec = G723_24_BITS_PER_SAMPLE ; - bytesperblock = G723_24_BYTES_PER_BLOCK ; - bitspersample = G723_24_BITS_PER_SAMPLE ; - break ; - - case SF_FORMAT_G723_40: - codec = G723_40_BITS_PER_SAMPLE ; - bytesperblock = G723_40_BYTES_PER_BLOCK ; - bitspersample = G723_40_BITS_PER_SAMPLE ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - psf->blockwidth = psf->bytewidth = 1 ; - - psf->filelength = psf_get_filelen (psf) ; - if (psf->filelength < psf->dataoffset) - psf->filelength = psf->dataoffset ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend > 0) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->mode == SFM_READ) - { pg72x->private = g72x_reader_init (codec, &(pg72x->blocksize), &(pg72x->samplesperblock)) ; - if (pg72x->private == NULL) - return SFE_MALLOC_FAILED ; - - pg72x->bytesperblock = bytesperblock ; - - psf->read_short = g72x_read_s ; - psf->read_int = g72x_read_i ; - psf->read_float = g72x_read_f ; - psf->read_double = g72x_read_d ; - - psf->seek = g72x_seek ; - - if (psf->datalength % pg72x->blocksize) - { psf_log_printf (psf, "*** Odd psf->datalength (%D) should be a multiple of %d\n", psf->datalength, pg72x->blocksize) ; - pg72x->blocks_total = (psf->datalength / pg72x->blocksize) + 1 ; - } - else - pg72x->blocks_total = psf->datalength / pg72x->blocksize ; - - psf->sf.frames = pg72x->blocks_total * pg72x->samplesperblock ; - - psf_g72x_decode_block (psf, pg72x) ; - } - else if (psf->mode == SFM_WRITE) - { pg72x->private = g72x_writer_init (codec, &(pg72x->blocksize), &(pg72x->samplesperblock)) ; - if (pg72x->private == NULL) - return SFE_MALLOC_FAILED ; - - pg72x->bytesperblock = bytesperblock ; - - psf->write_short = g72x_write_s ; - psf->write_int = g72x_write_i ; - psf->write_float = g72x_write_f ; - psf->write_double = g72x_write_d ; - - if (psf->datalength % pg72x->blocksize) - pg72x->blocks_total = (psf->datalength / pg72x->blocksize) + 1 ; - else - pg72x->blocks_total = psf->datalength / pg72x->blocksize ; - - if (psf->datalength > 0) - psf->sf.frames = (8 * psf->datalength) / bitspersample ; - - if ((psf->sf.frames * bitspersample) / 8 != psf->datalength) - psf_log_printf (psf, "*** Warning : weird psf->datalength.\n") ; - } ; - - psf->codec_close = g72x_close ; - - return 0 ; -} /* g72x_init */ - -/*============================================================================================ -** G721 Read Functions. -*/ - -static int -psf_g72x_decode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) -{ int k ; - - pg72x->block_curr ++ ; - pg72x->sample_curr = 0 ; - - if (pg72x->block_curr > pg72x->blocks_total) - { memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ; - return 1 ; - } ; - - if ((k = psf_fread (pg72x->block, 1, pg72x->bytesperblock, psf)) != pg72x->bytesperblock) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pg72x->bytesperblock) ; - - pg72x->blocksize = k ; - g72x_decode_block (pg72x->private, pg72x->block, pg72x->samples) ; - - return 1 ; -} /* psf_g72x_decode_block */ - -static int -g72x_read_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x, short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { if (pg72x->block_curr > pg72x->blocks_total) - { memset (&(ptr [indx]), 0, (len - indx) * sizeof (short)) ; - return total ; - } ; - - if (pg72x->sample_curr >= pg72x->samplesperblock) - psf_g72x_decode_block (psf, pg72x) ; - - count = pg72x->samplesperblock - pg72x->sample_curr ; - count = (len - indx > count) ? count : len - indx ; - - memcpy (&(ptr [indx]), &(pg72x->samples [pg72x->sample_curr]), count * sizeof (short)) ; - indx += count ; - pg72x->sample_curr += count ; - total = indx ; - } ; - - return total ; -} /* g72x_read_block */ - -static sf_count_t -g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - int readcount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - while (len > 0) - { readcount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = g72x_read_block (psf, pg72x, ptr, readcount) ; - - total += count ; - len -= count ; - - if (count != readcount) - break ; - } ; - - return total ; -} /* g72x_read_s */ - -static sf_count_t -g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = SF_BUFFER_LEN / sizeof (short) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = g72x_read_block (psf, pg72x, sptr, readcount) ; - - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = sptr [k] << 16 ; - - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* g72x_read_i */ - -static sf_count_t -g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = SF_BUFFER_LEN / sizeof (short) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = g72x_read_block (psf, pg72x, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * sptr [k] ; - - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* g72x_read_f */ - -static sf_count_t -g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = SF_BUFFER_LEN / sizeof (short) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = g72x_read_block (psf, pg72x, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (double) (sptr [k]) ; - - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* g72x_read_d */ - -static sf_count_t -g72x_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ - /* Prevent compiler warnings. */ - mode ++ ; - offset ++ ; - - psf_log_printf (psf, "seek unsupported\n") ; - - /* No simple solution. To do properly, would need to seek - ** to start of file and decode everything up to seek position. - ** Maybe implement SEEK_SET to 0 only? - */ - return 0 ; - -/* -** G72x_PRIVATE *pg72x ; -** int newblock, newsample, sample_curr ; -** -** if (psf->fdata == NULL) -** return 0 ; -** pg72x = (G72x_PRIVATE*) psf->fdata ; -** -** if (! (psf->datalength && psf->dataoffset)) -** { psf->error = SFE_BAD_SEEK ; -** return PSF_SEEK_ERROR ; -** } ; -** -** sample_curr = (8 * psf->datalength) / G721_32_BITS_PER_SAMPLE ; -** -** switch (whence) -** { case SEEK_SET : -** if (offset < 0 || offset > sample_curr) -** { psf->error = SFE_BAD_SEEK ; -** return PSF_SEEK_ERROR ; -** } ; -** newblock = offset / pg72x->samplesperblock ; -** newsample = offset % pg72x->samplesperblock ; -** break ; -** -** case SEEK_CUR : -** if (psf->current + offset < 0 || psf->current + offset > sample_curr) -** { psf->error = SFE_BAD_SEEK ; -** return PSF_SEEK_ERROR ; -** } ; -** newblock = (8 * (psf->current + offset)) / pg72x->samplesperblock ; -** newsample = (8 * (psf->current + offset)) % pg72x->samplesperblock ; -** break ; -** -** case SEEK_END : -** if (offset > 0 || sample_curr + offset < 0) -** { psf->error = SFE_BAD_SEEK ; -** return PSF_SEEK_ERROR ; -** } ; -** newblock = (sample_curr + offset) / pg72x->samplesperblock ; -** newsample = (sample_curr + offset) % pg72x->samplesperblock ; -** break ; -** -** default : -** psf->error = SFE_BAD_SEEK ; -** return PSF_SEEK_ERROR ; -** } ; -** -** if (psf->mode == SFM_READ) -** { psf_fseek (psf, psf->dataoffset + newblock * pg72x->blocksize, SEEK_SET) ; -** pg72x->block_curr = newblock ; -** psf_g72x_decode_block (psf, pg72x) ; -** pg72x->sample_curr = newsample ; -** } -** else -** { /+* What to do about write??? *+/ -** psf->error = SFE_BAD_SEEK ; -** return PSF_SEEK_ERROR ; -** } ; -** -** psf->current = newblock * pg72x->samplesperblock + newsample ; -** return psf->current ; -** -*/ -} /* g72x_seek */ - -/*========================================================================================== -** G72x Write Functions. -*/ - -static int -psf_g72x_encode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) -{ int k ; - - /* Encode the samples. */ - g72x_encode_block (pg72x->private, pg72x->samples, pg72x->block) ; - - /* Write the block to disk. */ - if ((k = psf_fwrite (pg72x->block, 1, pg72x->blocksize, psf)) != pg72x->blocksize) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pg72x->blocksize) ; - - pg72x->sample_curr = 0 ; - pg72x->block_curr ++ ; - - /* Set samples to zero for next block. */ - memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ; - - return 1 ; -} /* psf_g72x_encode_block */ - -static int -g72x_write_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x, const short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { count = pg72x->samplesperblock - pg72x->sample_curr ; - - if (count > len - indx) - count = len - indx ; - - memcpy (&(pg72x->samples [pg72x->sample_curr]), &(ptr [indx]), count * sizeof (short)) ; - indx += count ; - pg72x->sample_curr += count ; - total = indx ; - - if (pg72x->sample_curr >= pg72x->samplesperblock) - psf_g72x_encode_block (psf, pg72x) ; - } ; - - return total ; -} /* g72x_write_block */ - -static sf_count_t -g72x_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - int writecount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - while (len > 0) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = g72x_write_block (psf, pg72x, ptr, writecount) ; - - total += count ; - len -= count ; - if (count != writecount) - break ; - } ; - - return total ; -} /* g72x_write_s */ - -static sf_count_t -g72x_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - short *sptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = ptr [total + k] >> 16 ; - count = g72x_write_block (psf, pg72x, sptr, writecount) ; - - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - return total ; -} /* g72x_write_i */ - -static sf_count_t -g72x_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - short *sptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrintf (normfact * ptr [total + k]) ; - count = g72x_write_block (psf, pg72x, sptr, writecount) ; - - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* g72x_write_f */ - -static sf_count_t -g72x_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ G72x_PRIVATE *pg72x ; - short *sptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - pg72x = (G72x_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrint (normfact * ptr [total + k]) ; - count = g72x_write_block (psf, pg72x, sptr, writecount) ; - - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* g72x_write_d */ - -static int -g72x_close (SF_PRIVATE *psf) -{ G72x_PRIVATE *pg72x ; - - pg72x = (G72x_PRIVATE*) psf->fdata ; - - if (psf->mode == SFM_WRITE) - { /* If a block has been partially assembled, write it out - ** as the final block. - */ - - if (pg72x->sample_curr && pg72x->sample_curr < G72x_BLOCK_SIZE) - psf_g72x_encode_block (psf, pg72x) ; - - if (psf->write_header) - psf->write_header (psf, SF_FALSE) ; - } ; - - /* Only free the pointer allocated by g72x_(reader|writer)_init. */ - free (pg72x->private) ; - - return 0 ; -} /* g72x_close */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 3cc5439e-7247-486b-b2e6-11a4affa5744 -*/ diff --git a/Libraries/SndFile/Files/src/gsm610.c b/Libraries/SndFile/Files/src/gsm610.c deleted file mode 100644 index db954ccb1..000000000 --- a/Libraries/SndFile/Files/src/gsm610.c +++ /dev/null @@ -1,628 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" -#include "wav_w64.h" -#include "GSM610/gsm.h" - -#define GSM610_BLOCKSIZE 33 -#define GSM610_SAMPLES 160 - -typedef struct gsm610_tag -{ int blocks ; - int blockcount, samplecount ; - int samplesperblock, blocksize ; - - int (*decode_block) (SF_PRIVATE *psf, struct gsm610_tag *pgsm610) ; - int (*encode_block) (SF_PRIVATE *psf, struct gsm610_tag *pgsm610) ; - - short samples [WAV_W64_GSM610_SAMPLES] ; - unsigned char block [WAV_W64_GSM610_BLOCKSIZE] ; - - /* Damn I hate typedef-ed pointers; yes, gsm is a pointer type. */ - gsm gsm_data ; -} GSM610_PRIVATE ; - -static sf_count_t gsm610_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t gsm610_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t gsm610_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t gsm610_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t gsm610_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t gsm610_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t gsm610_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t gsm610_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static int gsm610_read_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len) ; -static int gsm610_write_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, const short *ptr, int len) ; - -static int gsm610_decode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ; -static int gsm610_encode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ; - -static int gsm610_wav_decode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ; -static int gsm610_wav_encode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ; - -static sf_count_t gsm610_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -static int gsm610_close (SF_PRIVATE *psf) ; - -/*============================================================================================ -** WAV GSM610 initialisation function. -*/ - -int -gsm610_init (SF_PRIVATE *psf) -{ GSM610_PRIVATE *pgsm610 ; - int true_flag = 1 ; - - if (psf->fdata != NULL) - { psf_log_printf (psf, "*** psf->fdata is not NULL.\n") ; - return SFE_INTERNAL ; - } ; - - if (psf->mode == SFM_RDWR) - return SFE_BAD_MODE_RW ; - - psf->sf.seekable = SF_FALSE ; - - if ((pgsm610 = calloc (1, sizeof (GSM610_PRIVATE))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->fdata = (void*) pgsm610 ; - - memset (pgsm610, 0, sizeof (GSM610_PRIVATE)) ; - -/*============================================================ - -Need separate gsm_data structs for encode and decode. - -============================================================*/ - - if ((pgsm610->gsm_data = gsm_create ()) == NULL) - return SFE_MALLOC_FAILED ; - - switch (psf->sf.format & SF_FORMAT_TYPEMASK) - { case SF_FORMAT_WAV : - case SF_FORMAT_WAVEX : - case SF_FORMAT_W64 : - gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true_flag) ; - - pgsm610->encode_block = gsm610_wav_encode_block ; - pgsm610->decode_block = gsm610_wav_decode_block ; - - pgsm610->samplesperblock = WAV_W64_GSM610_SAMPLES ; - pgsm610->blocksize = WAV_W64_GSM610_BLOCKSIZE ; - break ; - - case SF_FORMAT_AIFF : - case SF_FORMAT_RAW : - pgsm610->encode_block = gsm610_encode_block ; - pgsm610->decode_block = gsm610_decode_block ; - - pgsm610->samplesperblock = GSM610_SAMPLES ; - pgsm610->blocksize = GSM610_BLOCKSIZE ; - break ; - - default : - return SFE_INTERNAL ; - break ; - } ; - - if (psf->mode == SFM_READ) - { if (psf->datalength % pgsm610->blocksize == 0) - pgsm610->blocks = psf->datalength / pgsm610->blocksize ; - else if (psf->datalength % pgsm610->blocksize == 1 && pgsm610->blocksize == GSM610_BLOCKSIZE) - { /* - ** Weird AIFF specific case. - ** AIFF chunks must be at an odd offset from the start of file and - ** GSM610_BLOCKSIZE is odd which can result in an odd length SSND - ** chunk. The SSND chunk then gets padded on write which means that - ** when it is read the datalength is too big by 1. - */ - pgsm610->blocks = psf->datalength / pgsm610->blocksize ; - } - else - { psf_log_printf (psf, "*** Warning : data chunk seems to be truncated.\n") ; - pgsm610->blocks = psf->datalength / pgsm610->blocksize + 1 ; - } ; - - psf->sf.frames = pgsm610->samplesperblock * pgsm610->blocks ; - - pgsm610->decode_block (psf, pgsm610) ; /* Read first block. */ - - psf->read_short = gsm610_read_s ; - psf->read_int = gsm610_read_i ; - psf->read_float = gsm610_read_f ; - psf->read_double = gsm610_read_d ; - } ; - - if (psf->mode == SFM_WRITE) - { pgsm610->blockcount = 0 ; - pgsm610->samplecount = 0 ; - - psf->write_short = gsm610_write_s ; - psf->write_int = gsm610_write_i ; - psf->write_float = gsm610_write_f ; - psf->write_double = gsm610_write_d ; - } ; - - psf->codec_close = gsm610_close ; - - psf->seek = gsm610_seek ; - - psf->filelength = psf_get_filelen (psf) ; - psf->datalength = psf->filelength - psf->dataoffset ; - - return 0 ; -} /* gsm610_init */ - -/*============================================================================================ -** GSM 6.10 Read Functions. -*/ - -static int -gsm610_wav_decode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) -{ int k ; - - pgsm610->blockcount ++ ; - pgsm610->samplecount = 0 ; - - if (pgsm610->blockcount > pgsm610->blocks) - { memset (pgsm610->samples, 0, WAV_W64_GSM610_SAMPLES * sizeof (short)) ; - return 1 ; - } ; - - if ((k = psf_fread (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf)) != WAV_W64_GSM610_BLOCKSIZE) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, WAV_W64_GSM610_BLOCKSIZE) ; - - if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0) - { psf_log_printf (psf, "Error from gsm_decode() on frame : %d\n", pgsm610->blockcount) ; - return 0 ; - } ; - - if (gsm_decode (pgsm610->gsm_data, pgsm610->block + (WAV_W64_GSM610_BLOCKSIZE + 1) / 2, pgsm610->samples + WAV_W64_GSM610_SAMPLES / 2) < 0) - { psf_log_printf (psf, "Error from gsm_decode() on frame : %d.5\n", pgsm610->blockcount) ; - return 0 ; - } ; - - return 1 ; -} /* gsm610_wav_decode_block */ - -static int -gsm610_decode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) -{ int k ; - - pgsm610->blockcount ++ ; - pgsm610->samplecount = 0 ; - - if (pgsm610->blockcount > pgsm610->blocks) - { memset (pgsm610->samples, 0, GSM610_SAMPLES * sizeof (short)) ; - return 1 ; - } ; - - if ((k = psf_fread (pgsm610->block, 1, GSM610_BLOCKSIZE, psf)) != GSM610_BLOCKSIZE) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, GSM610_BLOCKSIZE) ; - - if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0) - { psf_log_printf (psf, "Error from gsm_decode() on frame : %d\n", pgsm610->blockcount) ; - return 0 ; - } ; - - return 1 ; -} /* gsm610_decode_block */ - -static int -gsm610_read_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { if (pgsm610->blockcount >= pgsm610->blocks && pgsm610->samplecount >= pgsm610->samplesperblock) - { memset (&(ptr [indx]), 0, (len - indx) * sizeof (short)) ; - return total ; - } ; - - if (pgsm610->samplecount >= pgsm610->samplesperblock) - pgsm610->decode_block (psf, pgsm610) ; - - count = pgsm610->samplesperblock - pgsm610->samplecount ; - count = (len - indx > count) ? count : len - indx ; - - memcpy (&(ptr [indx]), &(pgsm610->samples [pgsm610->samplecount]), count * sizeof (short)) ; - indx += count ; - pgsm610->samplecount += count ; - total = indx ; - } ; - - return total ; -} /* gsm610_read_block */ - -static sf_count_t -gsm610_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - int readcount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - while (len > 0) - { readcount = (len > 0x10000000) ? 0x1000000 : (int) len ; - - count = gsm610_read_block (psf, pgsm610, ptr, readcount) ; - - total += count ; - len -= count ; - - if (count != readcount) - break ; - } ; - - return total ; -} /* gsm610_read_s */ - -static sf_count_t -gsm610_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = gsm610_read_block (psf, pgsm610, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = sptr [k] << 16 ; - - total += count ; - len -= readcount ; - } ; - return total ; -} /* gsm610_read_i */ - -static sf_count_t -gsm610_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = gsm610_read_block (psf, pgsm610, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * sptr [k] ; - - total += count ; - len -= readcount ; - } ; - return total ; -} /* gsm610_read_f */ - -static sf_count_t -gsm610_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = gsm610_read_block (psf, pgsm610, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * sptr [k] ; - - total += count ; - len -= readcount ; - } ; - return total ; -} /* gsm610_read_d */ - -static sf_count_t -gsm610_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ GSM610_PRIVATE *pgsm610 ; - int newblock, newsample ; - - mode = mode ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - if (psf->dataoffset < 0) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (offset == 0) - { int true_flag = 1 ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - pgsm610->blockcount = 0 ; - - gsm_init (pgsm610->gsm_data) ; - if ((psf->sf.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV || - (psf->sf.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_W64) - gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true_flag) ; - - pgsm610->decode_block (psf, pgsm610) ; - pgsm610->samplecount = 0 ; - return 0 ; - } ; - - if (offset < 0 || offset > pgsm610->blocks * pgsm610->samplesperblock) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - newblock = offset / pgsm610->samplesperblock ; - newsample = offset % pgsm610->samplesperblock ; - - if (psf->mode == SFM_READ) - { if (psf->read_current != newblock * pgsm610->samplesperblock + newsample) - { psf_fseek (psf, psf->dataoffset + newblock * pgsm610->samplesperblock, SEEK_SET) ; - pgsm610->blockcount = newblock ; - pgsm610->decode_block (psf, pgsm610) ; - pgsm610->samplecount = newsample ; - } ; - - return newblock * pgsm610->samplesperblock + newsample ; - } ; - - /* What to do about write??? */ - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; -} /* gsm610_seek */ - -/*========================================================================================== -** GSM 6.10 Write Functions. -*/ - -static int -gsm610_encode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) -{ int k ; - - /* Encode the samples. */ - gsm_encode (pgsm610->gsm_data, pgsm610->samples, pgsm610->block) ; - - /* Write the block to disk. */ - if ((k = psf_fwrite (pgsm610->block, 1, GSM610_BLOCKSIZE, psf)) != GSM610_BLOCKSIZE) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, GSM610_BLOCKSIZE) ; - - pgsm610->samplecount = 0 ; - pgsm610->blockcount ++ ; - - /* Set samples to zero for next block. */ - memset (pgsm610->samples, 0, WAV_W64_GSM610_SAMPLES * sizeof (short)) ; - - return 1 ; -} /* gsm610_encode_block */ - -static int -gsm610_wav_encode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) -{ int k ; - - /* Encode the samples. */ - gsm_encode (pgsm610->gsm_data, pgsm610->samples, pgsm610->block) ; - gsm_encode (pgsm610->gsm_data, pgsm610->samples+WAV_W64_GSM610_SAMPLES/2, pgsm610->block+WAV_W64_GSM610_BLOCKSIZE/2) ; - - /* Write the block to disk. */ - if ((k = psf_fwrite (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf)) != WAV_W64_GSM610_BLOCKSIZE) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, WAV_W64_GSM610_BLOCKSIZE) ; - - pgsm610->samplecount = 0 ; - pgsm610->blockcount ++ ; - - /* Set samples to zero for next block. */ - memset (pgsm610->samples, 0, WAV_W64_GSM610_SAMPLES * sizeof (short)) ; - - return 1 ; -} /* gsm610_wav_encode_block */ - -static int -gsm610_write_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, const short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { count = pgsm610->samplesperblock - pgsm610->samplecount ; - - if (count > len - indx) - count = len - indx ; - - memcpy (&(pgsm610->samples [pgsm610->samplecount]), &(ptr [indx]), count * sizeof (short)) ; - indx += count ; - pgsm610->samplecount += count ; - total = indx ; - - if (pgsm610->samplecount >= pgsm610->samplesperblock) - pgsm610->encode_block (psf, pgsm610) ; - } ; - - return total ; -} /* gsm610_write_block */ - -static sf_count_t -gsm610_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - int writecount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - while (len > 0) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = gsm610_write_block (psf, pgsm610, ptr, writecount) ; - - total += count ; - len -= count ; - - if (count != writecount) - break ; - } ; - - return total ; -} /* gsm610_write_s */ - -static sf_count_t -gsm610_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - short *sptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = ptr [total + k] >> 16 ; - count = gsm610_write_block (psf, pgsm610, sptr, writecount) ; - - total += count ; - len -= writecount ; - } ; - return total ; -} /* gsm610_write_i */ - -static sf_count_t -gsm610_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - short *sptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrintf (normfact * ptr [total + k]) ; - count = gsm610_write_block (psf, pgsm610, sptr, writecount) ; - - total += count ; - len -= writecount ; - } ; - return total ; -} /* gsm610_write_f */ - -static sf_count_t -gsm610_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ GSM610_PRIVATE *pgsm610 ; - short *sptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrint (normfact * ptr [total + k]) ; - count = gsm610_write_block (psf, pgsm610, sptr, writecount) ; - - total += count ; - len -= writecount ; - } ; - return total ; -} /* gsm610_write_d */ - -static int -gsm610_close (SF_PRIVATE *psf) -{ GSM610_PRIVATE *pgsm610 ; - - if (psf->fdata == NULL) - return 0 ; - - pgsm610 = (GSM610_PRIVATE*) psf->fdata ; - - if (psf->mode == SFM_WRITE) - { /* If a block has been partially assembled, write it out - ** as the final block. - */ - - if (pgsm610->samplecount && pgsm610->samplecount < pgsm610->samplesperblock) - pgsm610->encode_block (psf, pgsm610) ; - } ; - - if (pgsm610->gsm_data) - gsm_destroy (pgsm610->gsm_data) ; - - return 0 ; -} /* gsm610_close */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 8575187d-af4f-4acf-b9dd-6ff705628345 -*/ diff --git a/Libraries/SndFile/Files/src/htk.c b/Libraries/SndFile/Files/src/htk.c deleted file mode 100644 index 716868b5b..000000000 --- a/Libraries/SndFile/Files/src/htk.c +++ /dev/null @@ -1,225 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define SFE_HTK_BAD_FILE_LEN 1666 -#define SFE_HTK_NOT_WAVEFORM 1667 - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int htk_close (SF_PRIVATE *psf) ; - -static int htk_write_header (SF_PRIVATE *psf, int calc_length) ; -static int htk_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -htk_open (SF_PRIVATE *psf) -{ int subformat ; - int error = 0 ; - - if (psf->is_pipe) - return SFE_HTK_NO_PIPE ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = htk_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_HTK) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = SF_ENDIAN_BIG ; - - if (htk_write_header (psf, SF_FALSE)) - return psf->error ; - - psf->write_header = htk_write_header ; - } ; - - psf->container_close = htk_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */ - error = pcm_init (psf) ; - break ; - - default : break ; - } ; - - return error ; -} /* htk_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -htk_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - htk_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* htk_close */ - -static int -htk_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int sample_count, sample_period ; - - current = psf_ftell (psf) ; - - if (calc_length) - psf->filelength = psf_get_filelen (psf) ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - if (psf->filelength > 12) - sample_count = (psf->filelength - 12) / 2 ; - else - sample_count = 0 ; - - sample_period = 10000000 / psf->sf.samplerate ; - - psf_binheader_writef (psf, "E444", sample_count, sample_period, 0x20000) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* htk_write_header */ - -/* -** Found the following info in a comment block within Bill Schottstaedt's -** sndlib library. -** -** HTK format files consist of a contiguous sequence of samples preceded by a -** header. Each sample is a vector of either 2-byte integers or 4-byte floats. -** 2-byte integers are used for compressed forms as described below and for -** vector quantised data as described later in section 5.11. HTK format data -** files can also be used to store speech waveforms as described in section 5.8. -** -** The HTK file format header is 12 bytes long and contains the following data -** nSamples -- number of samples in file (4-byte integer) -** sampPeriod -- sample period in 100ns units (4-byte integer) -** sampSize -- number of bytes per sample (2-byte integer) -** parmKind -- a code indicating the sample kind (2-byte integer) -** -** The parameter kind consists of a 6 bit code representing the basic -** parameter kind plus additional bits for each of the possible qualifiers. -** The basic parameter kind codes are -** -** 0 WAVEFORM sampled waveform -** 1 LPC linear prediction filter coefficients -** 2 LPREFC linear prediction reflection coefficients -** 3 LPCEPSTRA LPC cepstral coefficients -** 4 LPDELCEP LPC cepstra plus delta coefficients -** 5 IREFC LPC reflection coef in 16 bit integer format -** 6 MFCC mel-frequency cepstral coefficients -** 7 FBANK log mel-filter bank channel outputs -** 8 MELSPEC linear mel-filter bank channel outputs -** 9 USER user defined sample kind -** 10 DISCRETE vector quantised data -** -** and the bit-encoding for the qualifiers (in octal) is -** _E 000100 has energy -** _N 000200 absolute energy suppressed -** _D 000400 has delta coefficients -** _A 001000 has acceleration coefficients -** _C 002000 is compressed -** _Z 004000 has zero mean static coef. -** _K 010000 has CRC checksum -** _O 020000 has 0'th cepstral coef. -*/ - -static int -htk_read_header (SF_PRIVATE *psf) -{ int sample_count, sample_period, marker ; - - psf_binheader_readf (psf, "pE444", 0, &sample_count, &sample_period, &marker) ; - - if (2 * sample_count + 12 != psf->filelength) - return SFE_HTK_BAD_FILE_LEN ; - - if (marker != 0x20000) - return SFE_HTK_NOT_WAVEFORM ; - - psf->sf.channels = 1 ; - psf->sf.samplerate = 10000000 / sample_period ; - - psf_log_printf (psf, "HTK Waveform file\n Sample Count : %d\n Sample Period : %d => %d Hz\n", - sample_count, sample_period, psf->sf.samplerate) ; - - psf->sf.format = SF_FORMAT_HTK | SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - - /* HTK always has a 12 byte header. */ - psf->dataoffset = 12 ; - psf->endian = SF_ENDIAN_BIG ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - if (! psf->sf.frames && psf->blockwidth) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - - return 0 ; -} /* htk_read_header */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: c350e972-082e-4c20-8934-03391a723560 -*/ diff --git a/Libraries/SndFile/Files/src/ima_adpcm.c b/Libraries/SndFile/Files/src/ima_adpcm.c deleted file mode 100644 index abc49e577..000000000 --- a/Libraries/SndFile/Files/src/ima_adpcm.c +++ /dev/null @@ -1,976 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" - -typedef struct IMA_ADPCM_PRIVATE_tag -{ int (*decode_block) (SF_PRIVATE *psf, struct IMA_ADPCM_PRIVATE_tag *pima) ; - int (*encode_block) (SF_PRIVATE *psf, struct IMA_ADPCM_PRIVATE_tag *pima) ; - - int channels, blocksize, samplesperblock, blocks ; - int blockcount, samplecount ; - int previous [2] ; - int stepindx [2] ; - unsigned char *block ; - short *samples ; -#if HAVE_FLEXIBLE_ARRAY - short data [] ; /* ISO C99 struct flexible array. */ -#else - short data [0] ; /* This is a hack and might not work. */ -#endif -} IMA_ADPCM_PRIVATE ; - -/*============================================================================================ -** Predefined IMA ADPCM data. -*/ - -static int ima_indx_adjust [16] = -{ -1, -1, -1, -1, /* +0 - +3, decrease the step size */ - 2, 4, 6, 8, /* +4 - +7, increase the step size */ - -1, -1, -1, -1, /* -0 - -3, decrease the step size */ - 2, 4, 6, 8, /* -4 - -7, increase the step size */ -} ; - -static int ima_step_size [89] = -{ 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, - 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, - 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, - 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, - 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, - 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, - 32767 -} ; - -static int ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ; -static int ima_writer_init (SF_PRIVATE *psf, int blockalign) ; - -static int ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len) ; -static int ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, const short *ptr, int len) ; - -static sf_count_t ima_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t ima_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t ima_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t ima_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t ima_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t ima_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t ima_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t ima_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t ima_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -static int ima_close (SF_PRIVATE *psf) ; - -static int wav_w64_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ; -static int wav_w64_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ; - -/*-static int aiff_ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;-*/ -static int aiff_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ; -static int aiff_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ; - - -/*============================================================================================ -** IMA ADPCM Reader initialisation function. -*/ - -int -wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) -{ int error ; - - if (psf->fdata != NULL) - { psf_log_printf (psf, "*** psf->fdata is not NULL.\n") ; - return SFE_INTERNAL ; - } ; - - if (psf->mode == SFM_RDWR) - return SFE_BAD_MODE_RW ; - - if (psf->mode == SFM_READ) - if ((error = ima_reader_init (psf, blockalign, samplesperblock))) - return error ; - - if (psf->mode == SFM_WRITE) - if ((error = ima_writer_init (psf, blockalign))) - return error ; - - psf->codec_close = ima_close ; - psf->seek = ima_seek ; - - return 0 ; -} /* wav_w64_ima_init */ - -int -aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) -{ int error ; - - if (psf->mode == SFM_RDWR) - return SFE_BAD_MODE_RW ; - - if (psf->mode == SFM_READ) - if ((error = ima_reader_init (psf, blockalign, samplesperblock))) - return error ; - - if (psf->mode == SFM_WRITE) - if ((error = ima_writer_init (psf, blockalign))) - return error ; - - psf->codec_close = ima_close ; - - return 0 ; -} /* aiff_ima_init */ - -static int -ima_close (SF_PRIVATE *psf) -{ IMA_ADPCM_PRIVATE *pima ; - - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - if (psf->mode == SFM_WRITE) - { /* If a block has been partially assembled, write it out - ** as the final block. - */ - if (pima->samplecount && pima->samplecount < pima->samplesperblock) - pima->encode_block (psf, pima) ; - - psf->sf.frames = pima->samplesperblock * pima->blockcount / psf->sf.channels ; - } ; - - return 0 ; -} /* ima_close */ - -/*============================================================================================ -** IMA ADPCM Read Functions. -*/ - -static int -ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) -{ IMA_ADPCM_PRIVATE *pima ; - int pimasize, count ; - - if (psf->mode != SFM_READ) - return SFE_BAD_MODE_RW ; - - pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign * psf->sf.channels + 3 * psf->sf.channels * samplesperblock ; - - if (! (pima = malloc (pimasize))) - return SFE_MALLOC_FAILED ; - - psf->fdata = (void*) pima ; - - memset (pima, 0, pimasize) ; - - pima->samples = pima->data ; - pima->block = (unsigned char*) (pima->data + samplesperblock * psf->sf.channels) ; - - pima->channels = psf->sf.channels ; - pima->blocksize = blockalign ; - pima->samplesperblock = samplesperblock ; - - psf->filelength = psf_get_filelen (psf) ; - psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : - psf->filelength - psf->dataoffset ; - - if (psf->datalength % pima->blocksize) - pima->blocks = psf->datalength / pima->blocksize + 1 ; - else - pima->blocks = psf->datalength / pima->blocksize ; - - switch (psf->sf.format & SF_FORMAT_TYPEMASK) - { case SF_FORMAT_WAV : - case SF_FORMAT_W64 : - count = 2 * (pima->blocksize - 4 * pima->channels) / pima->channels + 1 ; - - if (pima->samplesperblock != count) - psf_log_printf (psf, "*** Warning : samplesperblock should be %d.\n", count) ; - - pima->decode_block = wav_w64_ima_decode_block ; - - psf->sf.frames = pima->samplesperblock * pima->blocks ; - break ; - - case SF_FORMAT_AIFF : - psf_log_printf (psf, "still need to check block count\n") ; - pima->decode_block = aiff_ima_decode_block ; - psf->sf.frames = pima->samplesperblock * pima->blocks / pima->channels ; - break ; - - default : - psf_log_printf (psf, "ima_reader_init: bad psf->sf.format\n") ; - return SFE_INTERNAL ; - break ; - } ; - - pima->decode_block (psf, pima) ; /* Read first block. */ - - psf->read_short = ima_read_s ; - psf->read_int = ima_read_i ; - psf->read_float = ima_read_f ; - psf->read_double = ima_read_d ; - - return 0 ; -} /* ima_reader_init */ - -static int -aiff_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) -{ unsigned char *blockdata ; - int chan, k, diff, bytecode ; - short step, stepindx, predictor, *sampledata ; - -static int count = 0 ; -count ++ ; - - pima->blockcount += pima->channels ; - pima->samplecount = 0 ; - - if (pima->blockcount > pima->blocks) - { memset (pima->samples, 0, pima->samplesperblock * pima->channels * sizeof (short)) ; - return 1 ; - } ; - - if ((k = psf_fread (pima->block, 1, pima->blocksize * pima->channels, psf)) != pima->blocksize * pima->channels) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pima->blocksize) ; - - /* Read and check the block header. */ - for (chan = 0 ; chan < pima->channels ; chan++) - { blockdata = pima->block + chan * 34 ; - sampledata = pima->samples + chan ; - - predictor = (blockdata [0] << 8) | (blockdata [1] & 0x80) ; - stepindx = blockdata [1] & 0x7F ; - -{ -if (count < 5) -printf ("\nchan: %d predictor: %d stepindx: %d (%d)\n", - chan, predictor, stepindx, ima_step_size [stepindx]) ; -} - /* FIXME : Do this a better way. */ - if (stepindx < 0) stepindx = 0 ; - else if (stepindx > 88) stepindx = 88 ; - - /* - ** Pull apart the packed 4 bit samples and store them in their - ** correct sample positions. - */ - for (k = 0 ; k < pima->blocksize - 2 ; k++) - { bytecode = blockdata [k + 2] ; - sampledata [pima->channels * (2 * k + 0)] = bytecode & 0xF ; - sampledata [pima->channels * (2 * k + 1)] = (bytecode >> 4) & 0xF ; - } ; - - /* Decode the encoded 4 bit samples. */ - for (k = 0 ; k < pima->samplesperblock ; k ++) - { step = ima_step_size [stepindx] ; - - bytecode = pima->samples [pima->channels * k + chan] ; - - stepindx += ima_indx_adjust [bytecode] ; - - if (stepindx < 0) stepindx = 0 ; - else if (stepindx > 88) stepindx = 88 ; - - diff = step >> 3 ; - if (bytecode & 1) diff += step >> 2 ; - if (bytecode & 2) diff += step >> 1 ; - if (bytecode & 4) diff += step ; - if (bytecode & 8) diff = -diff ; - - predictor += diff ; - - pima->samples [pima->channels * k + chan] = predictor ; - } ; - } ; - -if (count < 5) -{ - for (k = 0 ; k < 10 ; k++) - printf ("% 7d,", pima->samples [k]) ; - puts ("") ; -} - - return 1 ; -} /* aiff_ima_decode_block */ - -static int -aiff_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) -{ int chan, k, step, diff, vpdiff, blockindx, indx ; - short bytecode, mask ; - -static int count = 0 ; -if (0 && count == 0) -{ pima->samples [0] = 0 ; - printf ("blocksize : %d\n", pima->blocksize) ; - printf ("pima->stepindx [0] : %d\n", pima->stepindx [0]) ; - } -count ++ ; - - /* Encode the block header. */ - for (chan = 0 ; chan < pima->channels ; chan ++) - { blockindx = chan * pima->blocksize ; - - pima->block [blockindx] = (pima->samples [chan] >> 8) & 0xFF ; - pima->block [blockindx + 1] = (pima->samples [chan] & 0x80) + (pima->stepindx [chan] & 0x7F) ; - - pima->previous [chan] = pima->samples [chan] ; - } ; - - /* Encode second and later samples for every block as a 4 bit value. */ - for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++) - { chan = (pima->channels > 1) ? (k % 2) : 0 ; - - diff = pima->samples [k] - pima->previous [chan] ; - - bytecode = 0 ; - step = ima_step_size [pima->stepindx [chan]] ; - vpdiff = step >> 3 ; - if (diff < 0) - { bytecode = 8 ; - diff = -diff ; - } ; - mask = 4 ; - while (mask) - { if (diff >= step) - { bytecode |= mask ; - diff -= step ; - vpdiff += step ; - } ; - step >>= 1 ; - mask >>= 1 ; - } ; - - if (bytecode & 8) - pima->previous [chan] -= vpdiff ; - else - pima->previous [chan] += vpdiff ; - - if (pima->previous [chan] > 32767) - pima->previous [chan] = 32767 ; - else if (pima->previous [chan] < -32768) - pima->previous [chan] = -32768 ; - - pima->stepindx [chan] += ima_indx_adjust [bytecode] ; - if (pima->stepindx [chan] < 0) - pima->stepindx [chan] = 0 ; - else if (pima->stepindx [chan] > 88) - pima->stepindx [chan] = 88 ; - - pima->samples [k] = bytecode ; - } ; - - /* Pack the 4 bit encoded samples. */ - - for (chan = 0 ; chan < pima->channels ; chan ++) - { for (indx = pima->channels ; indx < pima->channels * pima->samplesperblock ; indx += 2 * pima->channels) - { blockindx = chan * pima->blocksize + 2 + indx / 2 ; - -if (0 && count ++ < 5) - printf ("chan: %d blockindx: %3d indx: %3d\n", chan, blockindx, indx) ; - - pima->block [blockindx] = pima->samples [indx] & 0x0F ; - pima->block [blockindx] |= (pima->samples [indx + pima->channels] << 4) & 0xF0 ; - } ; - } ; - - /* Write the block to disk. */ - - if ((k = psf_fwrite (pima->block, 1, pima->channels * pima->blocksize, psf)) != pima->channels * pima->blocksize) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pima->channels * pima->blocksize) ; - - memset (pima->samples, 0, pima->channels * pima->samplesperblock * sizeof (short)) ; - pima->samplecount = 0 ; - pima->blockcount ++ ; - - return 1 ; -} /* aiff_ima_encode_block */ - -static int -wav_w64_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) -{ int chan, k, current, blockindx, indx, indxstart, diff ; - short step, bytecode, stepindx [2] ; - - pima->blockcount ++ ; - pima->samplecount = 0 ; - - if (pima->blockcount > pima->blocks) - { memset (pima->samples, 0, pima->samplesperblock * pima->channels * sizeof (short)) ; - return 1 ; - } ; - - if ((k = psf_fread (pima->block, 1, pima->blocksize, psf)) != pima->blocksize) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pima->blocksize) ; - - /* Read and check the block header. */ - - for (chan = 0 ; chan < pima->channels ; chan++) - { current = pima->block [chan*4] | (pima->block [chan*4+1] << 8) ; - if (current & 0x8000) - current -= 0x10000 ; - - stepindx [chan] = pima->block [chan*4+2] ; - if (stepindx [chan] < 0) - stepindx [chan] = 0 ; - else if (stepindx [chan] > 88) - stepindx [chan] = 88 ; - - if (pima->block [chan*4+3] != 0) - psf_log_printf (psf, "IMA ADPCM synchronisation error.\n") ; - - pima->samples [chan] = current ; - } ; - - /* - ** Pull apart the packed 4 bit samples and store them in their - ** correct sample positions. - */ - - blockindx = 4 * pima->channels ; - - indxstart = pima->channels ; - while (blockindx < pima->blocksize) - { for (chan = 0 ; chan < pima->channels ; chan++) - { indx = indxstart + chan ; - for (k = 0 ; k < 4 ; k++) - { bytecode = pima->block [blockindx++] ; - pima->samples [indx] = bytecode & 0x0F ; - indx += pima->channels ; - pima->samples [indx] = (bytecode >> 4) & 0x0F ; - indx += pima->channels ; - } ; - } ; - indxstart += 8 * pima->channels ; - } ; - - /* Decode the encoded 4 bit samples. */ - - for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++) - { chan = (pima->channels > 1) ? (k % 2) : 0 ; - - bytecode = pima->samples [k] & 0xF ; - - step = ima_step_size [stepindx [chan]] ; - current = pima->samples [k - pima->channels] ; - - diff = step >> 3 ; - if (bytecode & 1) - diff += step >> 2 ; - if (bytecode & 2) - diff += step >> 1 ; - if (bytecode & 4) - diff += step ; - if (bytecode & 8) - diff = -diff ; - - current += diff ; - - if (current > 32767) - current = 32767 ; - else if (current < -32768) - current = -32768 ; - - stepindx [chan] += ima_indx_adjust [bytecode] ; - - if (stepindx [chan] < 0) - stepindx [chan] = 0 ; - else if (stepindx [chan] > 88) - stepindx [chan] = 88 ; - - pima->samples [k] = current ; - } ; - - return 1 ; -} /* wav_w64_ima_decode_block */ - -static int -wav_w64_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) -{ int chan, k, step, diff, vpdiff, blockindx, indx, indxstart ; - short bytecode, mask ; - - /* Encode the block header. */ - for (chan = 0 ; chan < pima->channels ; chan++) - { pima->block [chan*4] = pima->samples [chan] & 0xFF ; - pima->block [chan*4+1] = (pima->samples [chan] >> 8) & 0xFF ; - - pima->block [chan*4+2] = pima->stepindx [chan] ; - pima->block [chan*4+3] = 0 ; - - pima->previous [chan] = pima->samples [chan] ; - } ; - - /* Encode the samples as 4 bit. */ - - for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++) - { chan = (pima->channels > 1) ? (k % 2) : 0 ; - - diff = pima->samples [k] - pima->previous [chan] ; - - bytecode = 0 ; - step = ima_step_size [pima->stepindx [chan]] ; - vpdiff = step >> 3 ; - if (diff < 0) - { bytecode = 8 ; - diff = -diff ; - } ; - mask = 4 ; - while (mask) - { if (diff >= step) - { bytecode |= mask ; - diff -= step ; - vpdiff += step ; - } ; - step >>= 1 ; - mask >>= 1 ; - } ; - - if (bytecode & 8) - pima->previous [chan] -= vpdiff ; - else - pima->previous [chan] += vpdiff ; - - if (pima->previous [chan] > 32767) - pima->previous [chan] = 32767 ; - else if (pima->previous [chan] < -32768) - pima->previous [chan] = -32768 ; - - pima->stepindx [chan] += ima_indx_adjust [bytecode] ; - if (pima->stepindx [chan] < 0) - pima->stepindx [chan] = 0 ; - else if (pima->stepindx [chan] > 88) - pima->stepindx [chan] = 88 ; - - pima->samples [k] = bytecode ; - } ; - - /* Pack the 4 bit encoded samples. */ - - blockindx = 4 * pima->channels ; - - indxstart = pima->channels ; - while (blockindx < pima->blocksize) - { for (chan = 0 ; chan < pima->channels ; chan++) - { indx = indxstart + chan ; - for (k = 0 ; k < 4 ; k++) - { pima->block [blockindx] = pima->samples [indx] & 0x0F ; - indx += pima->channels ; - pima->block [blockindx] |= (pima->samples [indx] << 4) & 0xF0 ; - indx += pima->channels ; - blockindx ++ ; - } ; - } ; - indxstart += 8 * pima->channels ; - } ; - - /* Write the block to disk. */ - - if ((k = psf_fwrite (pima->block, 1, pima->blocksize, psf)) != pima->blocksize) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pima->blocksize) ; - - memset (pima->samples, 0, pima->samplesperblock * sizeof (short)) ; - pima->samplecount = 0 ; - pima->blockcount ++ ; - - return 1 ; -} /* wav_w64_ima_encode_block */ - -static int -ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { if (pima->blockcount >= pima->blocks && pima->samplecount >= pima->samplesperblock) - { memset (&(ptr [indx]), 0, (size_t) ((len - indx) * sizeof (short))) ; - return total ; - } ; - - if (pima->samplecount >= pima->samplesperblock) - pima->decode_block (psf, pima) ; - - count = (pima->samplesperblock - pima->samplecount) * pima->channels ; - count = (len - indx > count) ? count : len - indx ; - - memcpy (&(ptr [indx]), &(pima->samples [pima->samplecount * pima->channels]), count * sizeof (short)) ; - indx += count ; - pima->samplecount += count / pima->channels ; - total = indx ; - } ; - - return total ; -} /* ima_read_block */ - -static sf_count_t -ima_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - int readcount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - while (len > 0) - { readcount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = ima_read_block (psf, pima, ptr, readcount) ; - - total += count ; - len -= count ; - if (count != readcount) - break ; - } ; - - return total ; -} /* ima_read_s */ - -static sf_count_t -ima_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - short *sptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : (int) len ; - count = ima_read_block (psf, pima, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = ((int) sptr [k]) << 16 ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* ima_read_i */ - -static sf_count_t -ima_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - short *sptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : (int) len ; - count = ima_read_block (psf, pima, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (float) (sptr [k]) ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* ima_read_f */ - -static sf_count_t -ima_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - short *sptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : (int) len ; - count = ima_read_block (psf, pima, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (double) (sptr [k]) ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* ima_read_d */ - -static sf_count_t -ima_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ IMA_ADPCM_PRIVATE *pima ; - int newblock, newsample ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - if (psf->datalength < 0 || psf->dataoffset < 0) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (offset == 0) - { psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - pima->blockcount = 0 ; - pima->decode_block (psf, pima) ; - pima->samplecount = 0 ; - return 0 ; - } ; - - if (offset < 0 || offset > pima->blocks * pima->samplesperblock) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - newblock = offset / pima->samplesperblock ; - newsample = offset % pima->samplesperblock ; - - if (mode == SFM_READ) - { psf_fseek (psf, psf->dataoffset + newblock * pima->blocksize, SEEK_SET) ; - pima->blockcount = newblock ; - pima->decode_block (psf, pima) ; - pima->samplecount = newsample ; - } - else - { /* What to do about write??? */ - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - return newblock * pima->samplesperblock + newsample ; -} /* ima_seek */ - -/*========================================================================================== -** IMA ADPCM Write Functions. -*/ - -static int -ima_writer_init (SF_PRIVATE *psf, int blockalign) -{ IMA_ADPCM_PRIVATE *pima ; - int samplesperblock ; - unsigned int pimasize ; - - if (psf->mode != SFM_WRITE) - return SFE_BAD_MODE_RW ; - - samplesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ; - - pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ; - - if ((pima = calloc (1, pimasize)) == NULL) - return SFE_MALLOC_FAILED ; - - psf->fdata = (void*) pima ; - - pima->channels = psf->sf.channels ; - pima->blocksize = blockalign ; - pima->samplesperblock = samplesperblock ; - - pima->block = (unsigned char*) pima->data ; - pima->samples = (short*) (pima->data + blockalign) ; - - pima->samplecount = 0 ; - - switch (psf->sf.format & SF_FORMAT_TYPEMASK) - { case SF_FORMAT_WAV : - case SF_FORMAT_W64 : - pima->encode_block = wav_w64_ima_encode_block ; - break ; - - case SF_FORMAT_AIFF : - pima->encode_block = aiff_ima_encode_block ; - break ; - - default : - psf_log_printf (psf, "ima_reader_init: bad psf->sf.format\n") ; - return SFE_INTERNAL ; - break ; - } ; - - psf->write_short = ima_write_s ; - psf->write_int = ima_write_i ; - psf->write_float = ima_write_f ; - psf->write_double = ima_write_d ; - - return 0 ; -} /* ima_writer_init */ - -/*========================================================================================== -*/ - -static int -ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, const short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { count = (pima->samplesperblock - pima->samplecount) * pima->channels ; - - if (count > len - indx) - count = len - indx ; - - memcpy (&(pima->samples [pima->samplecount * pima->channels]), &(ptr [total]), count * sizeof (short)) ; - indx += count ; - pima->samplecount += count / pima->channels ; - total = indx ; - - if (pima->samplecount >= pima->samplesperblock) - pima->encode_block (psf, pima) ; - } ; - - return total ; -} /* ima_write_block */ - -static sf_count_t -ima_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - int writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - while (len) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = ima_write_block (psf, pima, ptr, writecount) ; - - total += count ; - len -= count ; - if (count != writecount) - break ; - } ; - - return total ; -} /* ima_write_s */ - -static sf_count_t -ima_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = ptr [total + k] >> 16 ; - count = ima_write_block (psf, pima, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* ima_write_i */ - -static sf_count_t -ima_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrintf (normfact * ptr [total + k]) ; - count = ima_write_block (psf, pima, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* ima_write_f */ - -static sf_count_t -ima_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ IMA_ADPCM_PRIVATE *pima ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (! psf->fdata) - return 0 ; - pima = (IMA_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrint (normfact * ptr [total + k]) ; - count = ima_write_block (psf, pima, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* ima_write_d */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 75a54b82-ad18-4758-9933-64e00a7f24e0 -*/ diff --git a/Libraries/SndFile/Files/src/interleave.c b/Libraries/SndFile/Files/src/interleave.c deleted file mode 100644 index 7c18bd46c..000000000 --- a/Libraries/SndFile/Files/src/interleave.c +++ /dev/null @@ -1,306 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfendian.h" - -#include - -#include "sndfile.h" -#include "common.h" - -#define INTERLEAVE_CHANNELS 6 - -typedef struct -{ double buffer [SF_BUFFER_LEN / sizeof (double)] ; - - sf_count_t channel_len ; - - sf_count_t (*read_short) (SF_PRIVATE*, short *ptr, sf_count_t len) ; - sf_count_t (*read_int) (SF_PRIVATE*, int *ptr, sf_count_t len) ; - sf_count_t (*read_float) (SF_PRIVATE*, float *ptr, sf_count_t len) ; - sf_count_t (*read_double) (SF_PRIVATE*, double *ptr, sf_count_t len) ; - -} INTERLEAVE_DATA ; - - - -static sf_count_t interleave_read_short (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t interleave_read_int (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t interleave_read_float (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t interleave_read_double (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t interleave_seek (SF_PRIVATE*, int mode, sf_count_t samples_from_start) ; - - - - -int -interleave_init (SF_PRIVATE *psf) -{ INTERLEAVE_DATA *pdata ; - - if (psf->mode != SFM_READ) - return SFE_INTERLEAVE_MODE ; - - if (psf->interleave) - { psf_log_printf (psf, "*** Weird, already have interleave.\n") ; - return 666 ; - } ; - - /* Free this in sf_close() function. */ - if (! (pdata = malloc (sizeof (INTERLEAVE_DATA)))) - return SFE_MALLOC_FAILED ; - -puts ("interleave_init") ; - - psf->interleave = pdata ; - - /* Save the existing methods. */ - pdata->read_short = psf->read_short ; - pdata->read_int = psf->read_int ; - pdata->read_float = psf->read_float ; - pdata->read_double = psf->read_double ; - - pdata->channel_len = psf->sf.frames * psf->bytewidth ; - - /* Insert our new methods. */ - psf->read_short = interleave_read_short ; - psf->read_int = interleave_read_int ; - psf->read_float = interleave_read_float ; - psf->read_double = interleave_read_double ; - - psf->seek = interleave_seek ; - - return 0 ; -} /* pcm_interleave_init */ - -/*------------------------------------------------------------------------------ -*/ - -static sf_count_t -interleave_read_short (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ INTERLEAVE_DATA *pdata ; - sf_count_t offset, templen ; - int chan, count, k ; - short *inptr, *outptr ; - - if (! (pdata = psf->interleave)) - return 0 ; - - inptr = (short*) pdata->buffer ; - - for (chan = 0 ; chan < psf->sf.channels ; chan++) - { outptr = ptr + chan ; - - offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ; - - if (psf_fseek (psf, offset, SEEK_SET) != offset) - { psf->error = SFE_INTERLEAVE_SEEK ; - return 0 ; - } ; - - templen = len / psf->sf.channels ; - - while (templen > 0) - { if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (short)) - count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (short) ; - else - count = (int) templen ; - - if (pdata->read_short (psf, inptr, count) != count) - { psf->error = SFE_INTERLEAVE_READ ; - return 0 ; - } ; - - for (k = 0 ; k < count ; k++) - { *outptr = inptr [k] ; - outptr += psf->sf.channels ; - } ; - - templen -= count ; - } ; - } ; - - return len ; -} /* interleave_read_short */ - -static sf_count_t -interleave_read_int (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ INTERLEAVE_DATA *pdata ; - sf_count_t offset, templen ; - int chan, count, k ; - int *inptr, *outptr ; - - if (! (pdata = psf->interleave)) - return 0 ; - - inptr = (int*) pdata->buffer ; - - for (chan = 0 ; chan < psf->sf.channels ; chan++) - { outptr = ptr + chan ; - - offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ; - - if (psf_fseek (psf, offset, SEEK_SET) != offset) - { psf->error = SFE_INTERLEAVE_SEEK ; - return 0 ; - } ; - - templen = len / psf->sf.channels ; - - while (templen > 0) - { if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (int)) - count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (int) ; - else - count = (int) templen ; - - if (pdata->read_int (psf, inptr, count) != count) - { psf->error = SFE_INTERLEAVE_READ ; - return 0 ; - } ; - - for (k = 0 ; k < count ; k++) - { *outptr = inptr [k] ; - outptr += psf->sf.channels ; - } ; - - templen -= count ; - } ; - } ; - - return len ; -} /* interleave_read_int */ - -static sf_count_t -interleave_read_float (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ INTERLEAVE_DATA *pdata ; - sf_count_t offset, templen ; - int chan, count, k ; - float *inptr, *outptr ; - - if (! (pdata = psf->interleave)) - return 0 ; - - inptr = (float*) pdata->buffer ; - - for (chan = 0 ; chan < psf->sf.channels ; chan++) - { outptr = ptr + chan ; - - offset = psf->dataoffset + pdata->channel_len * chan + psf->read_current * psf->bytewidth ; - -/*-printf ("chan : %d read_current : %6lld offset : %6lld\n", chan, psf->read_current, offset) ;-*/ - - if (psf_fseek (psf, offset, SEEK_SET) != offset) - { psf->error = SFE_INTERLEAVE_SEEK ; -/*-puts ("interleave_seek error") ; exit (1) ;-*/ - return 0 ; - } ; - - templen = len / psf->sf.channels ; - - while (templen > 0) - { if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (float)) - count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (float) ; - else - count = (int) templen ; - - if (pdata->read_float (psf, inptr, count) != count) - { psf->error = SFE_INTERLEAVE_READ ; -/*-puts ("interleave_read error") ; exit (1) ;-*/ - return 0 ; - } ; - - for (k = 0 ; k < count ; k++) - { *outptr = inptr [k] ; - outptr += psf->sf.channels ; - } ; - - templen -= count ; - } ; - } ; - - return len ; -} /* interleave_read_float */ - -static sf_count_t -interleave_read_double (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ INTERLEAVE_DATA *pdata ; - sf_count_t offset, templen ; - int chan, count, k ; - double *inptr, *outptr ; - - if (! (pdata = psf->interleave)) - return 0 ; - - inptr = (double*) pdata->buffer ; - - for (chan = 0 ; chan < psf->sf.channels ; chan++) - { outptr = ptr + chan ; - - offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ; - - if (psf_fseek (psf, offset, SEEK_SET) != offset) - { psf->error = SFE_INTERLEAVE_SEEK ; - return 0 ; - } ; - - templen = len / psf->sf.channels ; - - while (templen > 0) - { if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (double)) - count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (double) ; - else - count = (int) templen ; - - if (pdata->read_double (psf, inptr, count) != count) - { psf->error = SFE_INTERLEAVE_READ ; - return 0 ; - } ; - - for (k = 0 ; k < count ; k++) - { *outptr = inptr [k] ; - outptr += psf->sf.channels ; - } ; - - templen -= count ; - } ; - } ; - - return len ; -} /* interleave_read_double */ - -/*------------------------------------------------------------------------------ -*/ - -static sf_count_t -interleave_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start) -{ psf = psf ; mode = mode ; - - /* - ** Do nothing here. This is a place holder to prevent the default - ** seek function from being called. - */ - - return samples_from_start ; -} /* interleave_seek */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 82314e13-0225-4408-a2f2-e6dab3f38904 -*/ diff --git a/Libraries/SndFile/Files/src/ircam.c b/Libraries/SndFile/Files/src/ircam.c deleted file mode 100644 index 003809f3f..000000000 --- a/Libraries/SndFile/Files/src/ircam.c +++ /dev/null @@ -1,331 +0,0 @@ -/* -** Copyright (C) 2001-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -/* The IRCAM magic number is weird in that one byte in the number can have -** values of 0x1, 0x2, 0x03 or 0x04. Hence the need for a marker and a mask. -*/ - -#define IRCAM_BE_MASK (MAKE_MARKER (0xFF, 0xFF, 0x00, 0xFF)) -#define IRCAM_BE_MARKER (MAKE_MARKER (0x64, 0xA3, 0x00, 0x00)) - -#define IRCAM_LE_MASK (MAKE_MARKER (0xFF, 0x00, 0xFF, 0xFF)) -#define IRCAM_LE_MARKER (MAKE_MARKER (0x00, 0x00, 0xA3, 0x64)) - -#define IRCAM_02B_MARKER (MAKE_MARKER (0x64, 0xA3, 0x02, 0x00)) -#define IRCAM_03L_MARKER (MAKE_MARKER (0x64, 0xA3, 0x03, 0x00)) - -#define IRCAM_DATA_OFFSET (1024) - -/*------------------------------------------------------------------------------ -** Typedefs. -*/ - -enum -{ IRCAM_PCM_16 = 0x00002, - IRCAM_FLOAT = 0x00004, - IRCAM_ALAW = 0x10001, - IRCAM_ULAW = 0x20001, - IRCAM_PCM_32 = 0x40004 -} ; - - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int ircam_close (SF_PRIVATE *psf) ; -static int ircam_write_header (SF_PRIVATE *psf, int calc_length) ; -static int ircam_read_header (SF_PRIVATE *psf) ; - -static int get_encoding (int subformat) ; - -static const char* get_encoding_str (int encoding) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -ircam_open (SF_PRIVATE *psf) -{ int subformat ; - int error = SFE_NO_ERROR ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = ircam_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_IRCAM) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU) - psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ; - - psf->dataoffset = IRCAM_DATA_OFFSET ; - - if ((error = ircam_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = ircam_write_header ; - } ; - - psf->container_close = ircam_close ; - - switch (subformat) - { case SF_FORMAT_ULAW : /* 8-bit Ulaw encoding. */ - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : /* 8-bit Alaw encoding. */ - error = alaw_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */ - case SF_FORMAT_PCM_32 : /* 32-bit linear PCM. */ - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_FLOAT : /* 32-bit linear PCM. */ - error = float32_init (psf) ; - break ; - - default : break ; - } ; - - return error ; -} /* ircam_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -ircam_read_header (SF_PRIVATE *psf) -{ unsigned int marker, encoding ; - float samplerate ; - int error = SFE_NO_ERROR ; - - psf_binheader_readf (psf, "epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ; - - if (((marker & IRCAM_BE_MASK) != IRCAM_BE_MARKER) && ((marker & IRCAM_LE_MASK) != IRCAM_LE_MARKER)) - { psf_log_printf (psf, "marker: 0x%X\n", marker) ; - return SFE_IRCAM_NO_MARKER ; - } ; - - psf->endian = SF_ENDIAN_LITTLE ; - - if (psf->sf.channels > 256) - { psf_binheader_readf (psf, "Epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ; - - /* Sanity checking for endian-ness detection. */ - if (psf->sf.channels > 256) - { psf_log_printf (psf, "marker: 0x%X\n", marker) ; - return SFE_IRCAM_BAD_CHANNELS ; - } ; - - psf->endian = SF_ENDIAN_BIG ; - } ; - - psf_log_printf (psf, "marker: 0x%X\n", marker) ; - - psf->sf.samplerate = (int) samplerate ; - - psf_log_printf (psf, " Sample Rate : %d\n" - " Channels : %d\n" - " Encoding : %X => %s\n", psf->sf.samplerate, psf->sf.channels, encoding, get_encoding_str (encoding)) ; - - switch (encoding) - { case IRCAM_PCM_16 : - psf->bytewidth = 2 ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ; - break ; - - case IRCAM_PCM_32 : - psf->bytewidth = 4 ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ; - break ; - - case IRCAM_FLOAT : - psf->bytewidth = 4 ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ; - break ; - - case IRCAM_ALAW : - psf->bytewidth = 1 ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ALAW ; - break ; - - case IRCAM_ULAW : - psf->bytewidth = 1 ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ULAW ; - break ; - - default : - error = SFE_IRCAM_UNKNOWN_FORMAT ; - break ; - } ; - - if (psf->endian == SF_ENDIAN_BIG) - psf->sf.format |= SF_ENDIAN_BIG ; - else - psf->sf.format |= SF_ENDIAN_LITTLE ; - - if (error) - return error ; - - psf->dataoffset = IRCAM_DATA_OFFSET ; - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->sf.frames == 0 && psf->blockwidth) - psf->sf.frames = psf->datalength / psf->blockwidth ; - - psf_log_printf (psf, " Samples : %d\n", psf->sf.frames) ; - - psf_binheader_readf (psf, "p", IRCAM_DATA_OFFSET) ; - - return 0 ; -} /* ircam_read_header */ - -static int -ircam_close (SF_PRIVATE *psf) -{ - psf_log_printf (psf, "close\n") ; - - return 0 ; -} /* ircam_close */ - -static int -ircam_write_header (SF_PRIVATE *psf, int calc_length) -{ int encoding ; - float samplerate ; - sf_count_t current ; - - if (psf->pipeoffset > 0) - return 0 ; - - current = psf_ftell (psf) ; - - calc_length = calc_length ; - - /* This also sets psf->endian. */ - encoding = get_encoding (psf->sf.format & SF_FORMAT_SUBMASK) ; - - if (encoding == 0) - return SFE_BAD_OPEN_FORMAT ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - if (psf->is_pipe == SF_FALSE) - psf_fseek (psf, 0, SEEK_SET) ; - - samplerate = psf->sf.samplerate ; - - switch (psf->endian) - { case SF_ENDIAN_BIG : - psf_binheader_writef (psf, "Emf", IRCAM_02B_MARKER, samplerate) ; - psf_binheader_writef (psf, "E44", psf->sf.channels, encoding) ; - break ; - - case SF_ENDIAN_LITTLE : - psf_binheader_writef (psf, "emf", IRCAM_03L_MARKER, samplerate) ; - psf_binheader_writef (psf, "e44", psf->sf.channels, encoding) ; - break ; - - default : return SFE_BAD_OPEN_FORMAT ; - } ; - - psf_binheader_writef (psf, "z", (size_t) (IRCAM_DATA_OFFSET - psf->headindex)) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* ircam_write_header */ - -static int -get_encoding (int subformat) -{ switch (subformat) - { case SF_FORMAT_PCM_16 : return IRCAM_PCM_16 ; - case SF_FORMAT_PCM_32 : return IRCAM_PCM_32 ; - - case SF_FORMAT_FLOAT : return IRCAM_FLOAT ; - - case SF_FORMAT_ULAW : return IRCAM_ULAW ; - case SF_FORMAT_ALAW : return IRCAM_ALAW ; - - default : break ; - } ; - - return 0 ; -} /* get_encoding */ - -static const char* -get_encoding_str (int encoding) -{ switch (encoding) - { case IRCAM_PCM_16 : return "16 bit PCM" ; - case IRCAM_FLOAT : return "32 bit float" ; - case IRCAM_ALAW : return "A law" ; - case IRCAM_ULAW : return "u law" ; - case IRCAM_PCM_32 : return "32 bit PCM" ; - } ; - return "Unknown encoding" ; -} /* get_encoding_str */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: f2714ab8-f286-4c94-9740-edaf673a1c71 -*/ diff --git a/Libraries/SndFile/Files/src/libsndfile.def b/Libraries/SndFile/Files/src/libsndfile.def deleted file mode 100644 index 7b144538f..000000000 --- a/Libraries/SndFile/Files/src/libsndfile.def +++ /dev/null @@ -1,39 +0,0 @@ -; Auto-generated by create_symbols_file.py - -LIBRARY libsndfile-1.dll -EXPORTS - -sf_command @1 -sf_open @2 -sf_close @3 -sf_seek @4 -sf_error @7 -sf_perror @8 -sf_error_str @9 -sf_error_number @10 -sf_format_check @11 -sf_read_raw @16 -sf_readf_short @17 -sf_readf_int @18 -sf_readf_float @19 -sf_readf_double @20 -sf_read_short @21 -sf_read_int @22 -sf_read_float @23 -sf_read_double @24 -sf_write_raw @32 -sf_writef_short @33 -sf_writef_int @34 -sf_writef_float @35 -sf_writef_double @36 -sf_write_short @37 -sf_write_int @38 -sf_write_float @39 -sf_write_double @40 -sf_strerror @50 -sf_get_string @60 -sf_set_string @61 -sf_open_fd @70 -sf_open_virtual @80 -sf_write_sync @90 - diff --git a/Libraries/SndFile/Files/src/macbinary3.c b/Libraries/SndFile/Files/src/macbinary3.c deleted file mode 100644 index 53edd3715..000000000 --- a/Libraries/SndFile/Files/src/macbinary3.c +++ /dev/null @@ -1,58 +0,0 @@ -/* -** Copyright (C) 2003-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#if (OS_IS_MACOSX == 1) - -//#include - -int -macbinary3_open (SF_PRIVATE *psf) -{ - if (psf) - return 0 ; - - return 0 ; -} /* macbinary3_open */ - -#else - -int -macbinary3_open (SF_PRIVATE *psf) -{ - psf = psf ; - return 0 ; -} /* macbinary3_open */ - -#endif /* OS_IS_MACOSX */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: c397a7d7-1a31-4349-9684-bd29ef06211e -*/ diff --git a/Libraries/SndFile/Files/src/macos.c b/Libraries/SndFile/Files/src/macos.c deleted file mode 100644 index bb5543aa0..000000000 --- a/Libraries/SndFile/Files/src/macos.c +++ /dev/null @@ -1,63 +0,0 @@ -/* -** Copyright (C) 2003-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#define STR_MARKER MAKE_MARKER ('S', 'T', 'R', ' ') - -int -macos_guess_file_type (SF_PRIVATE *psf, const char *filename) -{ static char rsrc_name [1024] ; - struct stat statbuf ; - int format ; - - psf = psf ; - - snprintf (rsrc_name, sizeof (rsrc_name), "%s/rsrc", filename) ; - - /* If there is no resource fork, just return. */ - if (stat (rsrc_name, &statbuf) != 0) - { psf_log_printf (psf, "No resource fork.\n") ; - return 0 ; - } ; - - if (statbuf.st_size == 0) - { psf_log_printf (psf, "Have zero size resource fork.\n") ; - return 0 ; - } ; - - format = 0 ; - - return format ; -} /* macos_guess_file_type */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 5fbf66d7-9547-442a-9c73-92fd164f3a95 -*/ diff --git a/Libraries/SndFile/Files/src/mat4.c b/Libraries/SndFile/Files/src/mat4.c deleted file mode 100644 index fcc611150..000000000 --- a/Libraries/SndFile/Files/src/mat4.c +++ /dev/null @@ -1,394 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "float_cast.h" - -/*------------------------------------------------------------------------------ -** Information on how to decode and encode this file was obtained in a PDF -** file which I found on http://www.wotsit.org/. -** Also did a lot of testing with GNU Octave but do not have access to -** Matlab (tm) and so could not test it there. -*/ - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define MAT4_BE_DOUBLE (MAKE_MARKER (0, 0, 0x03, 0xE8)) -#define MAT4_LE_DOUBLE (MAKE_MARKER (0, 0, 0, 0)) - -#define MAT4_BE_FLOAT (MAKE_MARKER (0, 0, 0x03, 0xF2)) -#define MAT4_LE_FLOAT (MAKE_MARKER (0x0A, 0, 0, 0)) - -#define MAT4_BE_PCM_32 (MAKE_MARKER (0, 0, 0x03, 0xFC)) -#define MAT4_LE_PCM_32 (MAKE_MARKER (0x14, 0, 0, 0)) - -#define MAT4_BE_PCM_16 (MAKE_MARKER (0, 0, 0x04, 0x06)) -#define MAT4_LE_PCM_16 (MAKE_MARKER (0x1E, 0, 0, 0)) - -/* Can't see any reason to ever implement this. */ -#define MAT4_BE_PCM_U8 (MAKE_MARKER (0, 0, 0x04, 0x1A)) -#define MAT4_LE_PCM_U8 (MAKE_MARKER (0x32, 0, 0, 0)) - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int mat4_close (SF_PRIVATE *psf) ; - -static int mat4_format_to_encoding (int format, int endian) ; - -static int mat4_write_header (SF_PRIVATE *psf, int calc_length) ; -static int mat4_read_header (SF_PRIVATE *psf) ; - -static const char * mat4_marker_to_str (int marker) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -mat4_open (SF_PRIVATE *psf) -{ int subformat, error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = mat4_read_header (psf))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_MAT4) - return SFE_BAD_OPEN_FORMAT ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0)) - psf->endian = SF_ENDIAN_LITTLE ; - else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0)) - psf->endian = SF_ENDIAN_BIG ; - - if ((error = mat4_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = mat4_write_header ; - } ; - - psf->container_close = mat4_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - - default : break ; - } ; - - if (error) - return error ; - - return error ; -} /* mat4_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -mat4_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - mat4_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* mat4_close */ - -/*------------------------------------------------------------------------------ -*/ - -static int -mat4_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int encoding ; - double samplerate ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - encoding = mat4_format_to_encoding (psf->sf.format & SF_FORMAT_SUBMASK, psf->endian) ; - - if (encoding == -1) - return SFE_BAD_OPEN_FORMAT ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* Need sample rate as a double for writing to the header. */ - samplerate = psf->sf.samplerate ; - - if (psf->endian == SF_ENDIAN_BIG) - { psf_binheader_writef (psf, "Em444", MAT4_BE_DOUBLE, 1, 1, 0) ; - psf_binheader_writef (psf, "E4bd", 11, "samplerate", 11, samplerate) ; - psf_binheader_writef (psf, "tEm484", encoding, psf->sf.channels, psf->sf.frames, 0) ; - psf_binheader_writef (psf, "E4b", 9, "wavedata", 9) ; - } - else if (psf->endian == SF_ENDIAN_LITTLE) - { psf_binheader_writef (psf, "em444", MAT4_LE_DOUBLE, 1, 1, 0) ; - psf_binheader_writef (psf, "e4bd", 11, "samplerate", 11, samplerate) ; - psf_binheader_writef (psf, "tem484", encoding, psf->sf.channels, psf->sf.frames, 0) ; - psf_binheader_writef (psf, "e4b", 9, "wavedata", 9) ; - } - else - return SFE_BAD_OPEN_FORMAT ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* mat4_write_header */ - -static int -mat4_read_header (SF_PRIVATE *psf) -{ int marker, namesize, rows, cols, imag ; - double value ; - const char *marker_str ; - char name [64] ; - - psf_binheader_readf (psf, "pm", 0, &marker) ; - - /* MAT4 file must start with a double for the samplerate. */ - if (marker == MAT4_BE_DOUBLE) - { psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ; - marker_str = "big endian double" ; - } - else if (marker == MAT4_LE_DOUBLE) - { psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ; - marker_str = "little endian double" ; - } - else - return SFE_UNIMPLEMENTED ; - - psf_log_printf (psf, "GNU Octave 2.0 / MATLAB v4.2 format\nMarker : %s\n", marker_str) ; - - psf_binheader_readf (psf, "444", &rows, &cols, &imag) ; - - psf_log_printf (psf, " Rows : %d\n Cols : %d\n Imag : %s\n", rows, cols, imag ? "True" : "False") ; - - psf_binheader_readf (psf, "4", &namesize) ; - - if (namesize >= SIGNED_SIZEOF (name)) - return SFE_MAT4_BAD_NAME ; - - psf_binheader_readf (psf, "b", name, namesize) ; - name [namesize] = 0 ; - - psf_log_printf (psf, " Name : %s\n", name) ; - - psf_binheader_readf (psf, "d", &value) ; - - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), " Value : %f\n", value) ; - psf_log_printf (psf, psf->u.cbuf) ; - - if ((rows != 1) || (cols != 1)) - return SFE_MAT4_NO_SAMPLERATE ; - - psf->sf.samplerate = lrint (value) ; - - /* Now write out the audio data. */ - - psf_binheader_readf (psf, "m", &marker) ; - - psf_log_printf (psf, "Marker : %s\n", mat4_marker_to_str (marker)) ; - - psf_binheader_readf (psf, "444", &rows, &cols, &imag) ; - - psf_log_printf (psf, " Rows : %d\n Cols : %d\n Imag : %s\n", rows, cols, imag ? "True" : "False") ; - - psf_binheader_readf (psf, "4", &namesize) ; - - if (namesize >= SIGNED_SIZEOF (name)) - return SFE_MAT4_BAD_NAME ; - - psf_binheader_readf (psf, "b", name, namesize) ; - name [namesize] = 0 ; - - psf_log_printf (psf, " Name : %s\n", name) ; - - psf->dataoffset = psf_ftell (psf) ; - - if (rows == 0 && cols == 0) - { psf_log_printf (psf, "*** Error : zero channel count.\n") ; - return SFE_MAT4_ZERO_CHANNELS ; - } ; - - psf->sf.channels = rows ; - psf->sf.frames = cols ; - - psf->sf.format = psf->endian | SF_FORMAT_MAT4 ; - switch (marker) - { case MAT4_BE_DOUBLE : - case MAT4_LE_DOUBLE : - psf->sf.format |= SF_FORMAT_DOUBLE ; - psf->bytewidth = 8 ; - break ; - - case MAT4_BE_FLOAT : - case MAT4_LE_FLOAT : - psf->sf.format |= SF_FORMAT_FLOAT ; - psf->bytewidth = 4 ; - break ; - - case MAT4_BE_PCM_32 : - case MAT4_LE_PCM_32 : - psf->sf.format |= SF_FORMAT_PCM_32 ; - psf->bytewidth = 4 ; - break ; - - case MAT4_BE_PCM_16 : - case MAT4_LE_PCM_16 : - psf->sf.format |= SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - break ; - - default : - psf_log_printf (psf, "*** Error : Bad marker %08X\n", marker) ; - return SFE_UNIMPLEMENTED ; - } ; - - if ((psf->filelength - psf->dataoffset) < psf->sf.channels * psf->sf.frames * psf->bytewidth) - { psf_log_printf (psf, "*** File seems to be truncated. %D <--> %D\n", - psf->filelength - psf->dataoffset, psf->sf.channels * psf->sf.frames * psf->bytewidth) ; - } - else if ((psf->filelength - psf->dataoffset) > psf->sf.channels * psf->sf.frames * psf->bytewidth) - psf->dataend = psf->dataoffset + rows * cols * psf->bytewidth ; - - psf->datalength = psf->filelength - psf->dataoffset - psf->dataend ; - - psf->sf.sections = 1 ; - - return 0 ; -} /* mat4_read_header */ - -static int -mat4_format_to_encoding (int format, int endian) -{ - switch (format | endian) - { case (SF_FORMAT_PCM_16 | SF_ENDIAN_BIG) : - return MAT4_BE_PCM_16 ; - - case (SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE) : - return MAT4_LE_PCM_16 ; - - case (SF_FORMAT_PCM_32 | SF_ENDIAN_BIG) : - return MAT4_BE_PCM_32 ; - - case (SF_FORMAT_PCM_32 | SF_ENDIAN_LITTLE) : - return MAT4_LE_PCM_32 ; - - case (SF_FORMAT_FLOAT | SF_ENDIAN_BIG) : - return MAT4_BE_FLOAT ; - - case (SF_FORMAT_FLOAT | SF_ENDIAN_LITTLE) : - return MAT4_LE_FLOAT ; - - case (SF_FORMAT_DOUBLE | SF_ENDIAN_BIG) : - return MAT4_BE_DOUBLE ; - - case (SF_FORMAT_DOUBLE | SF_ENDIAN_LITTLE) : - return MAT4_LE_DOUBLE ; - - default : break ; - } ; - - return -1 ; -} /* mat4_format_to_encoding */ - -static const char * -mat4_marker_to_str (int marker) -{ static char str [32] ; - - switch (marker) - { - case MAT4_BE_PCM_16 : return "big endian 16 bit PCM" ; - case MAT4_LE_PCM_16 : return "little endian 16 bit PCM" ; - - case MAT4_BE_PCM_32 : return "big endian 32 bit PCM" ; - case MAT4_LE_PCM_32 : return "little endian 32 bit PCM" ; - - - case MAT4_BE_FLOAT : return "big endian float" ; - case MAT4_LE_FLOAT : return "big endian float" ; - - case MAT4_BE_DOUBLE : return "big endian double" ; - case MAT4_LE_DOUBLE : return "little endian double" ; - } ; - - /* This is a little unsafe but is really only for debugging. */ - str [sizeof (str) - 1] = 0 ; - LSF_SNPRINTF (str, sizeof (str) - 1, "%08X", marker) ; - return str ; -} /* mat4_marker_to_str */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: f7e5f5d6-fc39-452e-bc4a-59627116ff59 -*/ diff --git a/Libraries/SndFile/Files/src/mat5.c b/Libraries/SndFile/Files/src/mat5.c deleted file mode 100644 index dfef7b517..000000000 --- a/Libraries/SndFile/Files/src/mat5.c +++ /dev/null @@ -1,507 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "float_cast.h" - -/*------------------------------------------------------------------------------ -** Information on how to decode and encode this file was obtained in a PDF -** file which I found on http://www.wotsit.org/. -** Also did a lot of testing with GNU Octave but do not have access to -** Matlab (tm) and so could not test it there. -*/ - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define MATL_MARKER (MAKE_MARKER ('M', 'A', 'T', 'L')) - -#define IM_MARKER (('I' << 8) + 'M') -#define MI_MARKER (('M' << 8) + 'I') - -/*------------------------------------------------------------------------------ -** Enums and typedefs. -*/ - -enum -{ MAT5_TYPE_SCHAR = 0x1, - MAT5_TYPE_UCHAR = 0x2, - MAT5_TYPE_INT16 = 0x3, - MAT5_TYPE_UINT16 = 0x4, - MAT5_TYPE_INT32 = 0x5, - MAT5_TYPE_UINT32 = 0x6, - MAT5_TYPE_FLOAT = 0x7, - MAT5_TYPE_DOUBLE = 0x9, - MAT5_TYPE_ARRAY = 0xE, - - MAT5_TYPE_COMP_USHORT = 0x00020004, - MAT5_TYPE_COMP_UINT = 0x00040006 -} ; - -typedef struct -{ sf_count_t size ; - int rows, cols ; - char name [32] ; -} MAT5_MATRIX ; - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int mat5_close (SF_PRIVATE *psf) ; - -static int mat5_write_header (SF_PRIVATE *psf, int calc_length) ; -static int mat5_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -mat5_open (SF_PRIVATE *psf) -{ int subformat, error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = mat5_read_header (psf))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_MAT5) - return SFE_BAD_OPEN_FORMAT ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0)) - psf->endian = SF_ENDIAN_LITTLE ; - else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0)) - psf->endian = SF_ENDIAN_BIG ; - - if ((error = mat5_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = mat5_write_header ; - } ; - - psf->container_close = mat5_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - - default : break ; - } ; - - return error ; -} /* mat5_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -mat5_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - mat5_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* mat5_close */ - -/*------------------------------------------------------------------------------ -*/ - -static int -mat5_write_header (SF_PRIVATE *psf, int calc_length) -{ static const char *filename = "MATLAB 5.0 MAT-file, written by " PACKAGE "-" VERSION ", " ; - static const char *sr_name = "samplerate\0\0\0\0\0\0\0\0\0\0\0" ; - static const char *wd_name = "wavedata\0" ; - sf_count_t current, datasize ; - int encoding ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf_fseek (psf, 0, SEEK_END) ; - psf->filelength = psf_ftell (psf) ; - psf_fseek (psf, 0, SEEK_SET) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_U8 : - encoding = MAT5_TYPE_UCHAR ; - break ; - - case SF_FORMAT_PCM_16 : - encoding = MAT5_TYPE_INT16 ; - break ; - - case SF_FORMAT_PCM_32 : - encoding = MAT5_TYPE_INT32 ; - break ; - - case SF_FORMAT_FLOAT : - encoding = MAT5_TYPE_FLOAT ; - break ; - - case SF_FORMAT_DOUBLE : - encoding = MAT5_TYPE_DOUBLE ; - break ; - - default : - return SFE_BAD_OPEN_FORMAT ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - psf_get_date_str (psf->u.cbuf, sizeof (psf->u.scbuf)) ; - psf_binheader_writef (psf, "bb", filename, strlen (filename), psf->u.cbuf, strlen (psf->u.cbuf) + 1) ; - - memset (psf->u.scbuf, ' ', 124 - psf->headindex) ; - psf_binheader_writef (psf, "b", psf->u.scbuf, 124 - psf->headindex) ; - - psf->rwf_endian = psf->endian ; - - if (psf->rwf_endian == SF_ENDIAN_BIG) - psf_binheader_writef (psf, "2b", 0x0100, "MI", 2) ; - else - psf_binheader_writef (psf, "2b", 0x0100, "IM", 2) ; - - psf_binheader_writef (psf, "444444", MAT5_TYPE_ARRAY, 64, MAT5_TYPE_UINT32, 8, 6, 0) ; - psf_binheader_writef (psf, "4444", MAT5_TYPE_INT32, 8, 1, 1) ; - psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (sr_name), sr_name, 16) ; - - if (psf->sf.samplerate > 0xFFFF) - psf_binheader_writef (psf, "44", MAT5_TYPE_COMP_UINT, psf->sf.samplerate) ; - else - { unsigned short samplerate = psf->sf.samplerate ; - - psf_binheader_writef (psf, "422", MAT5_TYPE_COMP_USHORT, samplerate, 0) ; - } ; - - datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ; - - psf_binheader_writef (psf, "t484444", MAT5_TYPE_ARRAY, datasize + 64, MAT5_TYPE_UINT32, 8, 6, 0) ; - psf_binheader_writef (psf, "t4448", MAT5_TYPE_INT32, 8, psf->sf.channels, psf->sf.frames) ; - psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (wd_name), wd_name, strlen (wd_name)) ; - - datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ; - if (datasize > 0x7FFFFFFF) - datasize = 0x7FFFFFFF ; - - psf_binheader_writef (psf, "t48", encoding, datasize) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* mat5_write_header */ - -static int -mat5_read_header (SF_PRIVATE *psf) -{ char name [32] ; - short version, endian ; - int type, size, flags1, flags2, rows, cols ; - - psf_binheader_readf (psf, "pb", 0, psf->u.cbuf, 124) ; - - psf->u.scbuf [125] = 0 ; - - if (strlen (psf->u.cbuf) >= 124) - return SFE_UNIMPLEMENTED ; - - if (strstr (psf->u.cbuf, "MATLAB 5.0 MAT-file") == psf->u.cbuf) - psf_log_printf (psf, "%s\n", psf->u.scbuf) ; - - - psf_binheader_readf (psf, "E22", &version, &endian) ; - - if (endian == MI_MARKER) - { psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ; - if (CPU_IS_LITTLE_ENDIAN) version = ENDSWAP_SHORT (version) ; - } - else if (endian == IM_MARKER) - { psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ; - if (CPU_IS_BIG_ENDIAN) version = ENDSWAP_SHORT (version) ; - } - else - return SFE_MAT5_BAD_ENDIAN ; - - if ((CPU_IS_LITTLE_ENDIAN && endian == IM_MARKER) || - (CPU_IS_BIG_ENDIAN && endian == MI_MARKER)) - version = ENDSWAP_SHORT (version) ; - - psf_log_printf (psf, "Version : 0x%04X\n", version) ; - psf_log_printf (psf, "Endian : 0x%04X => %s\n", endian, - (psf->endian == SF_ENDIAN_LITTLE) ? "Little" : "Big") ; - - /*========================================================*/ - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, "Block\n Type : %X Size : %d\n", type, size) ; - - if (type != MAT5_TYPE_ARRAY) - return SFE_MAT5_NO_BLOCK ; - - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - - if (type != MAT5_TYPE_UINT32) - return SFE_MAT5_NO_BLOCK ; - - psf_binheader_readf (psf, "44", &flags1, &flags2) ; - psf_log_printf (psf, " Flg1 : %X Flg2 : %d\n", flags1, flags2) ; - - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - - if (type != MAT5_TYPE_INT32) - return SFE_MAT5_NO_BLOCK ; - - psf_binheader_readf (psf, "44", &rows, &cols) ; - psf_log_printf (psf, " Rows : %X Cols : %d\n", rows, cols) ; - - if (rows != 1 || cols != 1) - return SFE_MAT5_SAMPLE_RATE ; - - psf_binheader_readf (psf, "4", &type) ; - - if (type == MAT5_TYPE_SCHAR) - { psf_binheader_readf (psf, "4", &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - if (size > SIGNED_SIZEOF (name) - 1) - { psf_log_printf (psf, "Error : Bad name length.\n") ; - return SFE_MAT5_NO_BLOCK ; - } ; - - psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ; - name [size] = 0 ; - } - else if ((type & 0xFFFF) == MAT5_TYPE_SCHAR) - { size = type >> 16 ; - if (size > 4) - { psf_log_printf (psf, "Error : Bad name length.\n") ; - return SFE_MAT5_NO_BLOCK ; - } ; - - psf_log_printf (psf, " Type : %X\n", type) ; - psf_binheader_readf (psf, "4", &name) ; - name [size] = 0 ; - } - else - return SFE_MAT5_NO_BLOCK ; - - psf_log_printf (psf, " Name : %s\n", name) ; - - /*-----------------------------------------*/ - - psf_binheader_readf (psf, "44", &type, &size) ; - - switch (type) - { case MAT5_TYPE_DOUBLE : - { double samplerate ; - - psf_binheader_readf (psf, "d", &samplerate) ; - LSF_SNPRINTF (name, sizeof (name), "%f\n", samplerate) ; - psf_log_printf (psf, " Val : %s\n", name) ; - - psf->sf.samplerate = lrint (samplerate) ; - } ; - break ; - - case MAT5_TYPE_COMP_USHORT : - { unsigned short samplerate ; - - psf_binheader_readf (psf, "j2j", -4, &samplerate, 2) ; - psf_log_printf (psf, " Val : %u\n", samplerate) ; - psf->sf.samplerate = samplerate ; - } - break ; - - case MAT5_TYPE_COMP_UINT : - psf_log_printf (psf, " Val : %u\n", size) ; - psf->sf.samplerate = size ; - break ; - - default : - psf_log_printf (psf, " Type : %X Size : %d ***\n", type, size) ; - return SFE_MAT5_SAMPLE_RATE ; - } ; - - /*-----------------------------------------*/ - - - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - - if (type != MAT5_TYPE_ARRAY) - return SFE_MAT5_NO_BLOCK ; - - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - - if (type != MAT5_TYPE_UINT32) - return SFE_MAT5_NO_BLOCK ; - - psf_binheader_readf (psf, "44", &flags1, &flags2) ; - psf_log_printf (psf, " Flg1 : %X Flg2 : %d\n", flags1, flags2) ; - - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - - if (type != MAT5_TYPE_INT32) - return SFE_MAT5_NO_BLOCK ; - - psf_binheader_readf (psf, "44", &rows, &cols) ; - psf_log_printf (psf, " Rows : %X Cols : %d\n", rows, cols) ; - - psf_binheader_readf (psf, "4", &type) ; - - if (type == MAT5_TYPE_SCHAR) - { psf_binheader_readf (psf, "4", &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - if (size > SIGNED_SIZEOF (name) - 1) - { psf_log_printf (psf, "Error : Bad name length.\n") ; - return SFE_MAT5_NO_BLOCK ; - } ; - - psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ; - name [size] = 0 ; - } - else if ((type & 0xFFFF) == MAT5_TYPE_SCHAR) - { size = type >> 16 ; - if (size > 4) - { psf_log_printf (psf, "Error : Bad name length.\n") ; - return SFE_MAT5_NO_BLOCK ; - } ; - - psf_log_printf (psf, " Type : %X\n", type) ; - psf_binheader_readf (psf, "4", &name) ; - name [size] = 0 ; - } - else - return SFE_MAT5_NO_BLOCK ; - - psf_log_printf (psf, " Name : %s\n", name) ; - - psf_binheader_readf (psf, "44", &type, &size) ; - psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ; - - /*++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - if (rows == 0 && cols == 0) - { psf_log_printf (psf, "*** Error : zero channel count.\n") ; - return SFE_MAT5_ZERO_CHANNELS ; - } ; - - psf->sf.channels = rows ; - psf->sf.frames = cols ; - - psf->sf.format = psf->endian | SF_FORMAT_MAT5 ; - - switch (type) - { case MAT5_TYPE_DOUBLE : - psf_log_printf (psf, "Data type : double\n") ; - psf->sf.format |= SF_FORMAT_DOUBLE ; - psf->bytewidth = 8 ; - break ; - - case MAT5_TYPE_FLOAT : - psf_log_printf (psf, "Data type : float\n") ; - psf->sf.format |= SF_FORMAT_FLOAT ; - psf->bytewidth = 4 ; - break ; - - case MAT5_TYPE_INT32 : - psf_log_printf (psf, "Data type : 32 bit PCM\n") ; - psf->sf.format |= SF_FORMAT_PCM_32 ; - psf->bytewidth = 4 ; - break ; - - case MAT5_TYPE_INT16 : - psf_log_printf (psf, "Data type : 16 bit PCM\n") ; - psf->sf.format |= SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - break ; - - case MAT5_TYPE_UCHAR : - psf_log_printf (psf, "Data type : unsigned 8 bit PCM\n") ; - psf->sf.format |= SF_FORMAT_PCM_U8 ; - psf->bytewidth = 1 ; - break ; - - default : - psf_log_printf (psf, "*** Error : Bad marker %08X\n", type) ; - return SFE_UNIMPLEMENTED ; - } ; - - psf->dataoffset = psf_ftell (psf) ; - psf->datalength = psf->filelength - psf->dataoffset ; - - return 0 ; -} /* mat5_read_header */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: dfdb6742-b2be-4be8-b390-d0c674e8bc8e -*/ diff --git a/Libraries/SndFile/Files/src/ms_adpcm.c b/Libraries/SndFile/Files/src/ms_adpcm.c deleted file mode 100644 index bb774fa1b..000000000 --- a/Libraries/SndFile/Files/src/ms_adpcm.c +++ /dev/null @@ -1,834 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" -#include "wav_w64.h" - -/* These required here because we write the header in this file. */ - -#define RIFF_MARKER (MAKE_MARKER ('R', 'I', 'F', 'F')) -#define WAVE_MARKER (MAKE_MARKER ('W', 'A', 'V', 'E')) -#define fmt_MARKER (MAKE_MARKER ('f', 'm', 't', ' ')) -#define fact_MARKER (MAKE_MARKER ('f', 'a', 'c', 't')) -#define data_MARKER (MAKE_MARKER ('d', 'a', 't', 'a')) - -#define WAVE_FORMAT_MS_ADPCM 0x0002 - -typedef struct -{ int channels, blocksize, samplesperblock, blocks, dataremaining ; - int blockcount ; - sf_count_t samplecount ; - short *samples ; - unsigned char *block ; -#if HAVE_FLEXIBLE_ARRAY - short dummydata [] ; /* ISO C99 struct flexible array. */ -#else - short dummydata [0] ; /* This is a hack an might not work. */ -#endif -} MSADPCM_PRIVATE ; - -/*============================================================================================ -** MS ADPCM static data and functions. -*/ - -static int AdaptationTable [] = -{ 230, 230, 230, 230, 307, 409, 512, 614, - 768, 614, 512, 409, 307, 230, 230, 230 -} ; - -/* TODO : The first 7 coef's are are always hardcode and must - appear in the actual WAVE file. They should be read in - in case a sound program added extras to the list. */ - -static int AdaptCoeff1 [MSADPCM_ADAPT_COEFF_COUNT] = -{ 256, 512, 0, 192, 240, 460, 392 -} ; - -static int AdaptCoeff2 [MSADPCM_ADAPT_COEFF_COUNT] = -{ 0, -256, 0, 64, 0, -208, -232 -} ; - -/*============================================================================================ -** MS ADPCM Block Layout. -** ====================== -** Block is usually 256, 512 or 1024 bytes depending on sample rate. -** For a mono file, the block is laid out as follows: -** byte purpose -** 0 block predictor [0..6] -** 1,2 initial idelta (positive) -** 3,4 sample 1 -** 5,6 sample 0 -** 7..n packed bytecodes -** -** For a stereo file, the block is laid out as follows: -** byte purpose -** 0 block predictor [0..6] for left channel -** 1 block predictor [0..6] for right channel -** 2,3 initial idelta (positive) for left channel -** 4,5 initial idelta (positive) for right channel -** 6,7 sample 1 for left channel -** 8,9 sample 1 for right channel -** 10,11 sample 0 for left channel -** 12,13 sample 0 for right channel -** 14..n packed bytecodes -*/ - -/*============================================================================================ -** Static functions. -*/ - -static int msadpcm_decode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ; -static sf_count_t msadpcm_read_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ; - -static int msadpcm_encode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ; -static sf_count_t msadpcm_write_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, const short *ptr, int len) ; - -static sf_count_t msadpcm_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t msadpcm_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t msadpcm_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t msadpcm_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t msadpcm_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t msadpcm_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t msadpcm_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t msadpcm_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t msadpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; -static int msadpcm_close (SF_PRIVATE *psf) ; - -static void choose_predictor (unsigned int channels, short *data, int *bpred, int *idelta) ; - -/*============================================================================================ -** MS ADPCM Read Functions. -*/ - -int -wav_w64_msadpcm_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) -{ MSADPCM_PRIVATE *pms ; - unsigned int pmssize ; - int count ; - - if (psf->fdata != NULL) - { psf_log_printf (psf, "*** psf->fdata is not NULL.\n") ; - return SFE_INTERNAL ; - } ; - - if (psf->mode == SFM_WRITE) - samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ; - - pmssize = sizeof (MSADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ; - - if (! (psf->fdata = malloc (pmssize))) - return SFE_MALLOC_FAILED ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - memset (pms, 0, pmssize) ; - - pms->samples = pms->dummydata ; - pms->block = (unsigned char*) (pms->dummydata + psf->sf.channels * samplesperblock) ; - - pms->channels = psf->sf.channels ; - pms->blocksize = blockalign ; - pms->samplesperblock = samplesperblock ; - - if (psf->mode == SFM_READ) - { pms->dataremaining = psf->datalength ; - - if (psf->datalength % pms->blocksize) - pms->blocks = psf->datalength / pms->blocksize + 1 ; - else - pms->blocks = psf->datalength / pms->blocksize ; - - count = 2 * (pms->blocksize - 6 * pms->channels) / pms->channels ; - if (pms->samplesperblock != count) - psf_log_printf (psf, "*** Warning : samplesperblock shoud be %d.\n", count) ; - - psf->sf.frames = (psf->datalength / pms->blocksize) * pms->samplesperblock ; - - psf_log_printf (psf, " bpred idelta\n") ; - - msadpcm_decode_block (psf, pms) ; - - psf->read_short = msadpcm_read_s ; - psf->read_int = msadpcm_read_i ; - psf->read_float = msadpcm_read_f ; - psf->read_double = msadpcm_read_d ; - } ; - - if (psf->mode == SFM_WRITE) - { pms->samples = pms->dummydata ; - - pms->samplecount = 0 ; - - psf->write_short = msadpcm_write_s ; - psf->write_int = msadpcm_write_i ; - psf->write_float = msadpcm_write_f ; - psf->write_double = msadpcm_write_d ; - } ; - - psf->codec_close = msadpcm_close ; - psf->seek = msadpcm_seek ; - - return 0 ; -} /* wav_w64_msadpcm_init */ - -static int -msadpcm_decode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) -{ int chan, k, blockindx, sampleindx ; - short bytecode, bpred [2], chan_idelta [2] ; - - int predict ; - int current ; - int idelta ; - - pms->blockcount ++ ; - pms->samplecount = 0 ; - - if (pms->blockcount > pms->blocks) - { memset (pms->samples, 0, pms->samplesperblock * pms->channels) ; - return 1 ; - } ; - - if ((k = psf_fread (pms->block, 1, pms->blocksize, psf)) != pms->blocksize) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pms->blocksize) ; - - /* Read and check the block header. */ - - if (pms->channels == 1) - { bpred [0] = pms->block [0] ; - - if (bpred [0] >= 7) - psf_log_printf (psf, "MS ADPCM synchronisation error (%d).\n", bpred [0]) ; - - chan_idelta [0] = pms->block [1] | (pms->block [2] << 8) ; - chan_idelta [1] = 0 ; - - psf_log_printf (psf, "(%d) (%d)\n", bpred [0], chan_idelta [0]) ; - - pms->samples [1] = pms->block [3] | (pms->block [4] << 8) ; - pms->samples [0] = pms->block [5] | (pms->block [6] << 8) ; - blockindx = 7 ; - } - else - { bpred [0] = pms->block [0] ; - bpred [1] = pms->block [1] ; - - if (bpred [0] >= 7 || bpred [1] >= 7) - psf_log_printf (psf, "MS ADPCM synchronisation error (%d %d).\n", bpred [0], bpred [1]) ; - - chan_idelta [0] = pms->block [2] | (pms->block [3] << 8) ; - chan_idelta [1] = pms->block [4] | (pms->block [5] << 8) ; - - psf_log_printf (psf, "(%d, %d) (%d, %d)\n", bpred [0], bpred [1], chan_idelta [0], chan_idelta [1]) ; - - pms->samples [2] = pms->block [6] | (pms->block [7] << 8) ; - pms->samples [3] = pms->block [8] | (pms->block [9] << 8) ; - - pms->samples [0] = pms->block [10] | (pms->block [11] << 8) ; - pms->samples [1] = pms->block [12] | (pms->block [13] << 8) ; - - blockindx = 14 ; - } ; - - /*-------------------------------------------------------- - This was left over from a time when calculations were done - as ints rather than shorts. Keep this around as a reminder - in case I ever find a file which decodes incorrectly. - - if (chan_idelta [0] & 0x8000) - chan_idelta [0] -= 0x10000 ; - if (chan_idelta [1] & 0x8000) - chan_idelta [1] -= 0x10000 ; - --------------------------------------------------------*/ - - /* Pull apart the packed 4 bit samples and store them in their - ** correct sample positions. - */ - - sampleindx = 2 * pms->channels ; - while (blockindx < pms->blocksize) - { bytecode = pms->block [blockindx++] ; - pms->samples [sampleindx++] = (bytecode >> 4) & 0x0F ; - pms->samples [sampleindx++] = bytecode & 0x0F ; - } ; - - /* Decode the encoded 4 bit samples. */ - - for (k = 2 * pms->channels ; k < (pms->samplesperblock * pms->channels) ; k ++) - { chan = (pms->channels > 1) ? (k % 2) : 0 ; - - bytecode = pms->samples [k] & 0xF ; - - /* Compute next Adaptive Scale Factor (ASF) */ - idelta = chan_idelta [chan] ; - chan_idelta [chan] = (AdaptationTable [bytecode] * idelta) >> 8 ; /* => / 256 => FIXED_POINT_ADAPTATION_BASE == 256 */ - if (chan_idelta [chan] < 16) - chan_idelta [chan] = 16 ; - if (bytecode & 0x8) - bytecode -= 0x10 ; - - predict = ((pms->samples [k - pms->channels] * AdaptCoeff1 [bpred [chan]]) - + (pms->samples [k - 2 * pms->channels] * AdaptCoeff2 [bpred [chan]])) >> 8 ; /* => / 256 => FIXED_POINT_COEFF_BASE == 256 */ - current = (bytecode * idelta) + predict ; - - if (current > 32767) - current = 32767 ; - else if (current < -32768) - current = -32768 ; - - pms->samples [k] = current ; - } ; - - return 1 ; -} /* msadpcm_decode_block */ - -static sf_count_t -msadpcm_read_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { if (pms->blockcount >= pms->blocks && pms->samplecount >= pms->samplesperblock) - { memset (&(ptr [indx]), 0, (size_t) ((len - indx) * sizeof (short))) ; - return total ; - } ; - - if (pms->samplecount >= pms->samplesperblock) - msadpcm_decode_block (psf, pms) ; - - count = (pms->samplesperblock - pms->samplecount) * pms->channels ; - count = (len - indx > count) ? count : len - indx ; - - memcpy (&(ptr [indx]), &(pms->samples [pms->samplecount * pms->channels]), count * sizeof (short)) ; - indx += count ; - pms->samplecount += count / pms->channels ; - total = indx ; - } ; - - return total ; -} /* msadpcm_read_block */ - -static sf_count_t -msadpcm_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - int readcount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - while (len > 0) - { readcount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = msadpcm_read_block (psf, pms, ptr, readcount) ; - - total += count ; - len -= count ; - if (count != readcount) - break ; - } ; - - return total ; -} /* msadpcm_read_s */ - -static sf_count_t -msadpcm_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = msadpcm_read_block (psf, pms, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = sptr [k] << 16 ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - return total ; -} /* msadpcm_read_i */ - -static sf_count_t -msadpcm_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = msadpcm_read_block (psf, pms, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (float) (sptr [k]) ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - return total ; -} /* msadpcm_read_f */ - -static sf_count_t -msadpcm_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - short *sptr ; - int k, bufferlen, readcount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = msadpcm_read_block (psf, pms, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (double) (sptr [k]) ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - return total ; -} /* msadpcm_read_d */ - -static sf_count_t -msadpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ MSADPCM_PRIVATE *pms ; - int newblock, newsample ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - if (psf->datalength < 0 || psf->dataoffset < 0) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (offset == 0) - { psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - pms->blockcount = 0 ; - msadpcm_decode_block (psf, pms) ; - pms->samplecount = 0 ; - return 0 ; - } ; - - if (offset < 0 || offset > pms->blocks * pms->samplesperblock) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - newblock = offset / pms->samplesperblock ; - newsample = offset % pms->samplesperblock ; - - if (mode == SFM_READ) - { psf_fseek (psf, psf->dataoffset + newblock * pms->blocksize, SEEK_SET) ; - pms->blockcount = newblock ; - msadpcm_decode_block (psf, pms) ; - pms->samplecount = newsample ; - } - else - { /* What to do about write??? */ - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - return newblock * pms->samplesperblock + newsample ; -} /* msadpcm_seek */ - -/*========================================================================================== -** MS ADPCM Write Functions. -*/ - -void -msadpcm_write_adapt_coeffs (SF_PRIVATE *psf) -{ int k ; - - for (k = 0 ; k < MSADPCM_ADAPT_COEFF_COUNT ; k++) - psf_binheader_writef (psf, "22", AdaptCoeff1 [k], AdaptCoeff2 [k]) ; -} /* msadpcm_write_adapt_coeffs */ - -/*========================================================================================== -*/ - -static int -msadpcm_encode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) -{ unsigned int blockindx ; - unsigned char byte ; - int chan, k, predict, bpred [2], idelta [2], errordelta, newsamp ; - - choose_predictor (pms->channels, pms->samples, bpred, idelta) ; - - /* Write the block header. */ - - if (pms->channels == 1) - { pms->block [0] = bpred [0] ; - pms->block [1] = idelta [0] & 0xFF ; - pms->block [2] = idelta [0] >> 8 ; - pms->block [3] = pms->samples [1] & 0xFF ; - pms->block [4] = pms->samples [1] >> 8 ; - pms->block [5] = pms->samples [0] & 0xFF ; - pms->block [6] = pms->samples [0] >> 8 ; - - blockindx = 7 ; - byte = 0 ; - - /* Encode the samples as 4 bit. */ - - for (k = 2 ; k < pms->samplesperblock ; k++) - { predict = (pms->samples [k-1] * AdaptCoeff1 [bpred [0]] + pms->samples [k-2] * AdaptCoeff2 [bpred [0]]) >> 8 ; - errordelta = (pms->samples [k] - predict) / idelta [0] ; - if (errordelta < -8) - errordelta = -8 ; - else if (errordelta > 7) - errordelta = 7 ; - newsamp = predict + (idelta [0] * errordelta) ; - if (newsamp > 32767) - newsamp = 32767 ; - else if (newsamp < -32768) - newsamp = -32768 ; - if (errordelta < 0) - errordelta += 0x10 ; - - byte = (byte << 4) | (errordelta & 0xF) ; - if (k % 2) - { pms->block [blockindx++] = byte ; - byte = 0 ; - } ; - - idelta [0] = (idelta [0] * AdaptationTable [errordelta]) >> 8 ; - if (idelta [0] < 16) - idelta [0] = 16 ; - pms->samples [k] = newsamp ; - } ; - } - else - { /* Stereo file. */ - pms->block [0] = bpred [0] ; - pms->block [1] = bpred [1] ; - - pms->block [2] = idelta [0] & 0xFF ; - pms->block [3] = idelta [0] >> 8 ; - pms->block [4] = idelta [1] & 0xFF ; - pms->block [5] = idelta [1] >> 8 ; - - pms->block [6] = pms->samples [2] & 0xFF ; - pms->block [7] = pms->samples [2] >> 8 ; - pms->block [8] = pms->samples [3] & 0xFF ; - pms->block [9] = pms->samples [3] >> 8 ; - - pms->block [10] = pms->samples [0] & 0xFF ; - pms->block [11] = pms->samples [0] >> 8 ; - pms->block [12] = pms->samples [1] & 0xFF ; - pms->block [13] = pms->samples [1] >> 8 ; - - blockindx = 14 ; - byte = 0 ; - chan = 1 ; - - for (k = 4 ; k < 2 * pms->samplesperblock ; k++) - { chan = k & 1 ; - - predict = (pms->samples [k-2] * AdaptCoeff1 [bpred [chan]] + pms->samples [k-4] * AdaptCoeff2 [bpred [chan]]) >> 8 ; - errordelta = (pms->samples [k] - predict) / idelta [chan] ; - - - if (errordelta < -8) - errordelta = -8 ; - else if (errordelta > 7) - errordelta = 7 ; - newsamp = predict + (idelta [chan] * errordelta) ; - if (newsamp > 32767) - newsamp = 32767 ; - else if (newsamp < -32768) - newsamp = -32768 ; - if (errordelta < 0) - errordelta += 0x10 ; - - byte = (byte << 4) | (errordelta & 0xF) ; - - if (chan) - { pms->block [blockindx++] = byte ; - byte = 0 ; - } ; - - idelta [chan] = (idelta [chan] * AdaptationTable [errordelta]) >> 8 ; - if (idelta [chan] < 16) - idelta [chan] = 16 ; - pms->samples [k] = newsamp ; - } ; - } ; - - /* Write the block to disk. */ - - if ((k = psf_fwrite (pms->block, 1, pms->blocksize, psf)) != pms->blocksize) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pms->blocksize) ; - - memset (pms->samples, 0, pms->samplesperblock * sizeof (short)) ; - - pms->blockcount ++ ; - pms->samplecount = 0 ; - - return 1 ; -} /* msadpcm_encode_block */ - -static sf_count_t -msadpcm_write_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, const short *ptr, int len) -{ int count, total = 0, indx = 0 ; - - while (indx < len) - { count = (pms->samplesperblock - pms->samplecount) * pms->channels ; - - if (count > len - indx) - count = len - indx ; - - memcpy (&(pms->samples [pms->samplecount * pms->channels]), &(ptr [total]), count * sizeof (short)) ; - indx += count ; - pms->samplecount += count / pms->channels ; - total = indx ; - - if (pms->samplecount >= pms->samplesperblock) - msadpcm_encode_block (psf, pms) ; - } ; - - return total ; -} /* msadpcm_write_block */ - -static sf_count_t -msadpcm_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - int writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - while (len > 0) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = msadpcm_write_block (psf, pms, ptr, writecount) ; - - total += count ; - len -= count ; - if (count != writecount) - break ; - } ; - - return total ; -} /* msadpcm_write_s */ - -static sf_count_t -msadpcm_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = ptr [total + k] >> 16 ; - count = msadpcm_write_block (psf, pms, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - return total ; -} /* msadpcm_write_i */ - -static sf_count_t -msadpcm_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrintf (normfact * ptr [total + k]) ; - count = msadpcm_write_block (psf, pms, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - return total ; -} /* msadpcm_write_f */ - -static sf_count_t -msadpcm_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ MSADPCM_PRIVATE *pms ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - if (! psf->fdata) - return 0 ; - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrint (normfact * ptr [total + k]) ; - count = msadpcm_write_block (psf, pms, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - return total ; -} /* msadpcm_write_d */ - -/*======================================================================================== -*/ - -static int -msadpcm_close (SF_PRIVATE *psf) -{ MSADPCM_PRIVATE *pms ; - - pms = (MSADPCM_PRIVATE*) psf->fdata ; - - if (psf->mode == SFM_WRITE) - { /* Now we know static int for certain the length of the file we can - ** re-write the header. - */ - - if (pms->samplecount && pms->samplecount < pms->samplesperblock) - msadpcm_encode_block (psf, pms) ; - } ; - - return 0 ; -} /* msadpcm_close */ - -/*======================================================================================== -** Static functions. -*/ - -/*---------------------------------------------------------------------------------------- -** Choosing the block predictor. -** Each block requires a predictor and an idelta for each channel. -** The predictor is in the range [0..6] which is an indx into the two AdaptCoeff tables. -** The predictor is chosen by trying all of the possible predictors on a small set of -** samples at the beginning of the block. The predictor with the smallest average -** abs (idelta) is chosen as the best predictor for this block. -** The value of idelta is chosen to to give a 4 bit code value of +/- 4 (approx. half the -** max. code value). If the average abs (idelta) is zero, the sixth predictor is chosen. -** If the value of idelta is less then 16 it is set to 16. -** -** Microsoft uses an IDELTA_COUNT (number of sample pairs used to choose best predictor) -** value of 3. The best possible results would be obtained by using all the samples to -** choose the predictor. -*/ - -#define IDELTA_COUNT 3 - -static void -choose_predictor (unsigned int channels, short *data, int *block_pred, int *idelta) -{ unsigned int chan, k, bpred, idelta_sum, best_bpred, best_idelta ; - - for (chan = 0 ; chan < channels ; chan++) - { best_bpred = best_idelta = 0 ; - - for (bpred = 0 ; bpred < 7 ; bpred++) - { idelta_sum = 0 ; - for (k = 2 ; k < 2 + IDELTA_COUNT ; k++) - idelta_sum += abs (data [k * channels] - ((data [(k - 1) * channels] * AdaptCoeff1 [bpred] + data [(k - 2) * channels] * AdaptCoeff2 [bpred]) >> 8)) ; - idelta_sum /= (4 * IDELTA_COUNT) ; - - if (bpred == 0 || idelta_sum < best_idelta) - { best_bpred = bpred ; - best_idelta = idelta_sum ; - } ; - - if (! idelta_sum) - { best_bpred = bpred ; - best_idelta = 16 ; - break ; - } ; - - } ; /* for bpred ... */ - if (best_idelta < 16) - best_idelta = 16 ; - - block_pred [chan] = best_bpred ; - idelta [chan] = best_idelta ; - } ; - - return ; -} /* choose_predictor */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: a98908a3-5305-4935-872b-77d6a86c330f -*/ diff --git a/Libraries/SndFile/Files/src/nist.c b/Libraries/SndFile/Files/src/nist.c deleted file mode 100644 index 2ab20dbf9..000000000 --- a/Libraries/SndFile/Files/src/nist.c +++ /dev/null @@ -1,367 +0,0 @@ -/* -** Copyright (C) 1999-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** Some of the information used to read NIST files was gleaned from -** reading the code of Bill Schottstaedt's sndlib library -** ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz -** However, no code from that package was used. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -*/ - -#define NIST_HEADER_LENGTH 1024 - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int nist_close (SF_PRIVATE *psf) ; -static int nist_write_header (SF_PRIVATE *psf, int calc_length) ; -static int nist_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -*/ - -int -nist_open (SF_PRIVATE *psf) -{ int error ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = nist_read_header (psf))) - return error ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_NIST) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU) - psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - psf->sf.frames = 0 ; - - if ((error = nist_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = nist_write_header ; - } ; - - psf->container_close = nist_close ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - default : error = SFE_UNIMPLEMENTED ; - break ; - } ; - - return error ; -} /* nist_open */ - -/*------------------------------------------------------------------------------ -*/ - -static char bad_header [] = -{ 'N', 'I', 'S', 'T', '_', '1', 'A', 0x0d, 0x0a, - ' ', ' ', ' ', '1', '0', '2', '4', 0x0d, 0x0a, - 0 -} ; - - static int -nist_read_header (SF_PRIVATE *psf) -{ char *psf_header ; - int bitwidth = 0, bytes = 0, count, encoding ; - char str [64], *cptr ; - long samples ; - - psf->sf.format = SF_FORMAT_NIST ; - - psf_header = psf->u.cbuf ; - - if (sizeof (psf->header) <= NIST_HEADER_LENGTH) - return SFE_INTERNAL ; - - /* Go to start of file and read in the whole header. */ - psf_binheader_readf (psf, "pb", 0, psf_header, NIST_HEADER_LENGTH) ; - - /* Header is a string, so make sure it is null terminated. */ - psf_header [NIST_HEADER_LENGTH] = 0 ; - - /* Now trim the header after the end marker. */ - if ((cptr = strstr (psf_header, "end_head"))) - { cptr += strlen ("end_head") + 1 ; - cptr [0] = 0 ; - } ; - - if (strstr (psf_header, bad_header) == psf_header) - return SFE_NIST_CRLF_CONVERISON ; - - /* Make sure its a NIST file. */ - if (strstr (psf_header, "NIST_1A\n") != psf_header) - { psf_log_printf (psf, "Not a NIST file.\n") ; - return SFE_NIST_BAD_HEADER ; - } ; - - if (sscanf (psf_header, "NIST_1A\n%d\n", &count) == 1) - psf->dataoffset = count ; - else - { psf_log_printf (psf, "*** Suspicious header length.\n") ; - psf->dataoffset = NIST_HEADER_LENGTH ; - } ; - - /* Determine sample encoding, start by assuming PCM. */ - encoding = SF_FORMAT_PCM_U8 ; - if ((cptr = strstr (psf_header, "sample_coding -s"))) - { sscanf (cptr, "sample_coding -s%d %63s", &count, str) ; - - if (strcmp (str, "pcm") == 0) - encoding = SF_FORMAT_PCM_U8 ; - else if (strcmp (str, "alaw") == 0) - encoding = SF_FORMAT_ALAW ; - else if ((strcmp (str, "ulaw") == 0) || (strcmp (str, "mu-law") == 0)) - encoding = SF_FORMAT_ULAW ; - else - { psf_log_printf (psf, "*** Unknown encoding : %s\n", str) ; - encoding = 0 ; - } ; - } ; - - if ((cptr = strstr (psf_header, "channel_count -i "))) - sscanf (cptr, "channel_count -i %d", &(psf->sf.channels)) ; - - if ((cptr = strstr (psf_header, "sample_rate -i "))) - sscanf (cptr, "sample_rate -i %d", &(psf->sf.samplerate)) ; - - if ((cptr = strstr (psf_header, "sample_count -i "))) - { sscanf (psf_header, "sample_count -i %ld", &samples) ; - psf->sf.frames = samples ; - } ; - - if ((cptr = strstr (psf_header, "sample_n_bytes -i "))) - sscanf (cptr, "sample_n_bytes -i %d", &(psf->bytewidth)) ; - - /* Default endian-ness (for 8 bit, u-law, A-law. */ - psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ; - - /* This is where we figure out endian-ness. */ - if ((cptr = strstr (psf_header, "sample_byte_format -s"))) - { sscanf (cptr, "sample_byte_format -s%d %8s", &bytes, str) ; - if (bytes > 1) - { if (psf->bytewidth == 0) - psf->bytewidth = bytes ; - else if (psf->bytewidth != bytes) - { psf_log_printf (psf, "psf->bytewidth (%d) != bytes (%d)\n", psf->bytewidth, bytes) ; - return SFE_NIST_BAD_ENCODING ; - } ; - - if (strstr (str, "01") == str) - psf->endian = SF_ENDIAN_LITTLE ; - else if (strstr (str, "10")) - psf->endian = SF_ENDIAN_BIG ; - else - { psf_log_printf (psf, "Weird endian-ness : %s\n", str) ; - return SFE_NIST_BAD_ENCODING ; - } ; - } ; - - psf->sf.format |= psf->endian ; - } ; - - if ((cptr = strstr (psf_header, "sample_sig_bits -i "))) - sscanf (cptr, "sample_sig_bits -i %d", &bitwidth) ; - - if (strstr (psf_header, "channels_interleaved -s5 FALSE")) - { psf_log_printf (psf, "Non-interleaved data unsupported.\n", str) ; - return SFE_NIST_BAD_ENCODING ; - } ; - - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - psf->datalength = psf->filelength - psf->dataoffset ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - - if (encoding == SF_FORMAT_PCM_U8) - { switch (psf->bytewidth) - { case 1 : - psf->sf.format |= SF_FORMAT_PCM_S8 ; - break ; - - case 2 : - psf->sf.format |= SF_FORMAT_PCM_16 ; - break ; - - case 3 : - psf->sf.format |= SF_FORMAT_PCM_24 ; - break ; - - case 4 : - psf->sf.format |= SF_FORMAT_PCM_32 ; - break ; - - default : break ; - } ; - } - else if (encoding != 0) - psf->sf.format |= encoding ; - else - return SFE_UNIMPLEMENTED ; - - return 0 ; -} /* nist_read_header */ - -static int -nist_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - nist_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* nist_close */ - -/*========================================================================= -*/ - -static int -nist_write_header (SF_PRIVATE *psf, int calc_length) -{ const char *end_str ; - long samples ; - sf_count_t current ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->bytewidth > 0) - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - if (psf->endian == SF_ENDIAN_BIG) - end_str = "10" ; - else if (psf->endian == SF_ENDIAN_LITTLE) - end_str = "01" ; - else - end_str = "error" ; - - /* Clear the whole header. */ - memset (psf->header, 0, sizeof (psf->header)) ; - psf->headindex = 0 ; - - psf_fseek (psf, 0, SEEK_SET) ; - - psf_asciiheader_printf (psf, "NIST_1A\n 1024\n") ; - psf_asciiheader_printf (psf, "channel_count -i %d\n", psf->sf.channels) ; - psf_asciiheader_printf (psf, "sample_rate -i %d\n", psf->sf.samplerate) ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n") ; - psf_asciiheader_printf (psf, "sample_n_bytes -i 1\n" - "sample_sig_bits -i 8\n") ; - break ; - - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - psf_asciiheader_printf (psf, "sample_n_bytes -i %d\n", psf->bytewidth) ; - psf_asciiheader_printf (psf, "sample_sig_bits -i %d\n", psf->bytewidth * 8) ; - psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n" - "sample_byte_format -s%d %s\n", psf->bytewidth, end_str) ; - break ; - - case SF_FORMAT_ALAW : - psf_asciiheader_printf (psf, "sample_coding -s4 alaw\n") ; - psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ; - break ; - - case SF_FORMAT_ULAW : - psf_asciiheader_printf (psf, "sample_coding -s4 ulaw\n") ; - psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - psf->dataoffset = NIST_HEADER_LENGTH ; - - /* Fix this */ - samples = psf->sf.frames ; - psf_asciiheader_printf (psf, "sample_count -i %ld\n", samples) ; - psf_asciiheader_printf (psf, "end_head\n") ; - - /* Zero fill to dataoffset. */ - psf_binheader_writef (psf, "z", (size_t) (NIST_HEADER_LENGTH - psf->headindex)) ; - - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* nist_write_header */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: b45ed85d-9e22-4ad9-b78c-4b58b67152a8 -*/ diff --git a/Libraries/SndFile/Files/src/ogg.c b/Libraries/SndFile/Files/src/ogg.c deleted file mode 100644 index 869baa950..000000000 --- a/Libraries/SndFile/Files/src/ogg.c +++ /dev/null @@ -1,44 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program ; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -int -ogg_open (SF_PRIVATE *psf) -{ if (psf) - return SFE_UNIMPLEMENTED ; - return (psf && 0) ; -} /* ogg_open */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 9ff1fe9c-629e-4e9c-9ef5-3d0eb1e427a0 -*/ diff --git a/Libraries/SndFile/Files/src/paf.c b/Libraries/SndFile/Files/src/paf.c deleted file mode 100644 index 6114dac83..000000000 --- a/Libraries/SndFile/Files/src/paf.c +++ /dev/null @@ -1,843 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define FAP_MARKER (MAKE_MARKER ('f', 'a', 'p', ' ')) -#define PAF_MARKER (MAKE_MARKER (' ', 'p', 'a', 'f')) - -/*------------------------------------------------------------------------------ -** Other defines. -*/ - -#define PAF_HEADER_LENGTH 2048 - -#define PAF24_SAMPLES_PER_BLOCK 10 -#define PAF24_BLOCK_SIZE 32 - -/*------------------------------------------------------------------------------ -** Typedefs. -*/ - -typedef struct -{ int version ; - int endianness ; - int samplerate ; - int format ; - int channels ; - int source ; -} PAF_FMT ; - -typedef struct -{ int max_blocks, channels, samplesperblock, blocksize ; - int read_block, write_block, read_count, write_count ; - sf_count_t sample_count ; - int *samples ; - unsigned char *block ; -#if HAVE_FLEXIBLE_ARRAY - int data [] ; /* ISO C99 struct flexible array. */ -#else - int data [1] ; /* This is a hack and may not work. */ -#endif -} PAF24_PRIVATE ; - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int paf24_init (SF_PRIVATE *psf) ; - -static int paf_read_header (SF_PRIVATE *psf) ; -static int paf_write_header (SF_PRIVATE *psf, int calc_length) ; - -static sf_count_t paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t paf24_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t paf24_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t paf24_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t paf24_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -enum -{ PAF_PCM_16 = 0, - PAF_PCM_24 = 1, - PAF_PCM_S8 = 2 -} ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -paf_open (SF_PRIVATE *psf) -{ int subformat, error, endian ; - - psf->dataoffset = PAF_HEADER_LENGTH ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = paf_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF) - return SFE_BAD_OPEN_FORMAT ; - - endian = psf->sf.format & SF_FORMAT_ENDMASK ; - - /* PAF is by default big endian. */ - psf->endian = SF_ENDIAN_BIG ; - - if (endian == SF_ENDIAN_LITTLE || (CPU_IS_LITTLE_ENDIAN && (endian == SF_ENDIAN_CPU))) - psf->endian = SF_ENDIAN_LITTLE ; - - if ((error = paf_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = paf_write_header ; - } ; - - switch (subformat) - { case SF_FORMAT_PCM_S8 : - psf->bytewidth = 1 ; - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : - psf->bytewidth = 2 ; - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_24 : - /* No bytewidth because of whacky 24 bit encoding. */ - error = paf24_init (psf) ; - break ; - - default : return SFE_PAF_UNKNOWN_FORMAT ; - } ; - - return error ; -} /* paf_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -paf_read_header (SF_PRIVATE *psf) -{ PAF_FMT paf_fmt ; - int marker ; - - memset (&paf_fmt, 0, sizeof (paf_fmt)) ; - psf_binheader_readf (psf, "pm", 0, &marker) ; - - psf_log_printf (psf, "Signature : '%M'\n", marker) ; - - if (marker == PAF_MARKER) - { psf_binheader_readf (psf, "E444444", &(paf_fmt.version), &(paf_fmt.endianness), - &(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ; - } - else if (marker == FAP_MARKER) - { psf_binheader_readf (psf, "e444444", &(paf_fmt.version), &(paf_fmt.endianness), - &(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ; - } - else - return SFE_PAF_NO_MARKER ; - - psf_log_printf (psf, "Version : %d\n", paf_fmt.version) ; - - if (paf_fmt.version != 0) - { psf_log_printf (psf, "*** Bad version number. should be zero.\n") ; - return SFE_PAF_VERSION ; - } ; - - psf_log_printf (psf, "Sample Rate : %d\n", paf_fmt.samplerate) ; - psf_log_printf (psf, "Channels : %d\n", paf_fmt.channels) ; - - psf_log_printf (psf, "Endianness : %d => ", paf_fmt.endianness) ; - if (paf_fmt.endianness) - { psf_log_printf (psf, "Little\n", paf_fmt.endianness) ; - psf->endian = SF_ENDIAN_LITTLE ; - } - else - { psf_log_printf (psf, "Big\n", paf_fmt.endianness) ; - psf->endian = SF_ENDIAN_BIG ; - } ; - - if (psf->filelength < PAF_HEADER_LENGTH) - return SFE_PAF_SHORT_HEADER ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - psf_binheader_readf (psf, "p", (int) psf->dataoffset) ; - - psf->sf.samplerate = paf_fmt.samplerate ; - psf->sf.channels = paf_fmt.channels ; - - /* Only fill in type major. */ - psf->sf.format = SF_FORMAT_PAF ; - - psf_log_printf (psf, "Format : %d => ", paf_fmt.format) ; - - /* PAF is by default big endian. */ - psf->sf.format |= paf_fmt.endianness ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ; - - switch (paf_fmt.format) - { case PAF_PCM_S8 : - psf_log_printf (psf, "8 bit linear PCM\n") ; - psf->bytewidth = 1 ; - - psf->sf.format |= SF_FORMAT_PCM_S8 ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - psf->sf.frames = psf->datalength / psf->blockwidth ; - break ; - - case PAF_PCM_16 : - psf_log_printf (psf, "16 bit linear PCM\n") ; - psf->bytewidth = 2 ; - - psf->sf.format |= SF_FORMAT_PCM_16 ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - psf->sf.frames = psf->datalength / psf->blockwidth ; - break ; - - case PAF_PCM_24 : - psf_log_printf (psf, "24 bit linear PCM\n") ; - psf->bytewidth = 3 ; - - psf->sf.format |= SF_FORMAT_PCM_24 ; - - psf->blockwidth = 0 ; - psf->sf.frames = PAF24_SAMPLES_PER_BLOCK * psf->datalength / - (PAF24_BLOCK_SIZE * psf->sf.channels) ; - break ; - - default : psf_log_printf (psf, "Unknown\n") ; - return SFE_PAF_UNKNOWN_FORMAT ; - break ; - } ; - - psf_log_printf (psf, "Source : %d => ", paf_fmt.source) ; - - switch (paf_fmt.source) - { case 1 : psf_log_printf (psf, "Analog Recording\n") ; - break ; - case 2 : psf_log_printf (psf, "Digital Transfer\n") ; - break ; - case 3 : psf_log_printf (psf, "Multi-track Mixdown\n") ; - break ; - case 5 : psf_log_printf (psf, "Audio Resulting From DSP Processing\n") ; - break ; - default : psf_log_printf (psf, "Unknown\n") ; - break ; - } ; - - return 0 ; -} /* paf_read_header */ - -static int -paf_write_header (SF_PRIVATE *psf, int calc_length) -{ int paf_format ; - - /* PAF header already written so no need to re-write. */ - if (psf_ftell (psf) >= PAF_HEADER_LENGTH) - return 0 ; - - psf->dataoffset = PAF_HEADER_LENGTH ; - - psf->dataoffset = PAF_HEADER_LENGTH ; - - /* Prevent compiler warning. */ - calc_length = calc_length ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - paf_format = PAF_PCM_S8 ; - break ; - - case SF_FORMAT_PCM_16 : - paf_format = PAF_PCM_16 ; - break ; - - case SF_FORMAT_PCM_24 : - paf_format = PAF_PCM_24 ; - break ; - - default : return SFE_PAF_UNKNOWN_FORMAT ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - if (psf->endian == SF_ENDIAN_BIG) - { /* Marker, version, endianness, samplerate */ - psf_binheader_writef (psf, "Em444", PAF_MARKER, 0, 0, psf->sf.samplerate) ; - /* format, channels, source */ - psf_binheader_writef (psf, "E444", paf_format, psf->sf.channels, 0) ; - } - else if (psf->endian == SF_ENDIAN_LITTLE) - { /* Marker, version, endianness, samplerate */ - psf_binheader_writef (psf, "em444", FAP_MARKER, 0, 1, psf->sf.samplerate) ; - /* format, channels, source */ - psf_binheader_writef (psf, "e444", paf_format, psf->sf.channels, 0) ; - } ; - - /* Zero fill to dataoffset. */ - psf_binheader_writef (psf, "z", (size_t) (psf->dataoffset - psf->headindex)) ; - - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - return psf->error ; -} /* paf_write_header */ - -/*=============================================================================== -** 24 bit PAF files have a really weird encoding. -** For a mono file, 10 samples (each being 3 bytes) are packed into a 32 byte -** block. The 8 ints in this 32 byte block are then endian swapped (as ints) -** if necessary before being written to disk. -** For a stereo file, blocks of 10 samples from the same channel are encoded -** into 32 bytes as for the mono case. The 32 byte blocks are then interleaved -** on disk. -** Reading has to reverse the above process :-). -** Weird!!! -** -** The code below attempts to gain efficiency while maintaining readability. -*/ - -static int paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ; -static int paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ; -static int paf24_close (SF_PRIVATE *psf) ; - - -static int -paf24_init (SF_PRIVATE *psf) -{ PAF24_PRIVATE *ppaf24 ; - int paf24size ; - - paf24size = sizeof (PAF24_PRIVATE) + psf->sf.channels * - (PAF24_BLOCK_SIZE + PAF24_SAMPLES_PER_BLOCK * sizeof (int)) ; - - /* - ** Not exatly sure why this needs to be here but the tests - ** fail without it. - */ - psf->last_op = 0 ; - - if (! (psf->fdata = malloc (paf24size))) - return SFE_MALLOC_FAILED ; - - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - memset (ppaf24, 0, paf24size) ; - - ppaf24->channels = psf->sf.channels ; - ppaf24->samples = ppaf24->data ; - ppaf24->block = (unsigned char*) (ppaf24->data + PAF24_SAMPLES_PER_BLOCK * ppaf24->channels) ; - - ppaf24->blocksize = PAF24_BLOCK_SIZE * ppaf24->channels ; - ppaf24->samplesperblock = PAF24_SAMPLES_PER_BLOCK ; - - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { paf24_read_block (psf, ppaf24) ; /* Read first block. */ - - psf->read_short = paf24_read_s ; - psf->read_int = paf24_read_i ; - psf->read_float = paf24_read_f ; - psf->read_double = paf24_read_d ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->write_short = paf24_write_s ; - psf->write_int = paf24_write_i ; - psf->write_float = paf24_write_f ; - psf->write_double = paf24_write_d ; - } ; - - psf->seek = paf24_seek ; - psf->container_close = paf24_close ; - - psf->filelength = psf_get_filelen (psf) ; - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->datalength % PAF24_BLOCK_SIZE) - { if (psf->mode == SFM_READ) - psf_log_printf (psf, "*** Warning : file seems to be truncated.\n") ; - ppaf24->max_blocks = psf->datalength / ppaf24->blocksize + 1 ; - } - else - ppaf24->max_blocks = psf->datalength / ppaf24->blocksize ; - - ppaf24->read_block = 0 ; - if (psf->mode == SFM_RDWR) - ppaf24->write_block = ppaf24->max_blocks ; - else - ppaf24->write_block = 0 ; - - psf->sf.frames = ppaf24->samplesperblock * ppaf24->max_blocks ; - ppaf24->sample_count = psf->sf.frames ; - - return 0 ; -} /* paf24_init */ - -static sf_count_t -paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ PAF24_PRIVATE *ppaf24 ; - int newblock, newsample ; - - if (psf->fdata == NULL) - { psf->error = SFE_INTERNAL ; - return PSF_SEEK_ERROR ; - } ; - - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - if (mode == SFM_READ && ppaf24->write_count > 0) - paf24_write_block (psf, ppaf24) ; - - newblock = offset / ppaf24->samplesperblock ; - newsample = offset % ppaf24->samplesperblock ; - - switch (mode) - { case SFM_READ : - if (psf->last_op == SFM_WRITE && ppaf24->write_count) - paf24_write_block (psf, ppaf24) ; - - psf_fseek (psf, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ; - ppaf24->read_block = newblock ; - paf24_read_block (psf, ppaf24) ; - ppaf24->read_count = newsample ; - break ; - - case SFM_WRITE : - if (offset > ppaf24->sample_count) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (psf->last_op == SFM_WRITE && ppaf24->write_count) - paf24_write_block (psf, ppaf24) ; - - psf_fseek (psf, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ; - ppaf24->write_block = newblock ; - paf24_read_block (psf, ppaf24) ; - ppaf24->write_count = newsample ; - break ; - - default : - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - return newblock * ppaf24->samplesperblock + newsample ; -} /* paf24_seek */ - -static int -paf24_close (SF_PRIVATE *psf) -{ PAF24_PRIVATE *ppaf24 ; - - if (psf->fdata == NULL) - return 0 ; - - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (ppaf24->write_count > 0) - paf24_write_block (psf, ppaf24) ; - } ; - - return 0 ; -} /* paf24_close */ - -/*--------------------------------------------------------------------------- -*/ -static int -paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) -{ int k, channel ; - unsigned char *cptr ; - - ppaf24->read_block ++ ; - ppaf24->read_count = 0 ; - - if (ppaf24->read_block * ppaf24->samplesperblock > ppaf24->sample_count) - { memset (ppaf24->samples, 0, ppaf24->samplesperblock * ppaf24->channels) ; - return 1 ; - } ; - - /* Read the block. */ - if ((k = psf_fread (ppaf24->block, 1, ppaf24->blocksize, psf)) != ppaf24->blocksize) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, ppaf24->blocksize) ; - - - if (CPU_IS_LITTLE_ENDIAN) - { /* Do endian swapping if necessary. */ - if (psf->endian == SF_ENDIAN_BIG) - endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ; - - /* Unpack block. */ - for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++) - { channel = k % ppaf24->channels ; - cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ; - ppaf24->samples [k] = (cptr [0] << 8) | (cptr [1] << 16) | (cptr [2] << 24) ; - } ; - } - else - { /* Do endian swapping if necessary. */ - if (psf->endian == SF_ENDIAN_BIG) - endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ; - - /* Unpack block. */ - for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++) - { channel = k % ppaf24->channels ; - cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ; - ppaf24->samples [k] = (cptr [0] << 8) | (cptr [1] << 16) | (cptr [2] << 24) ; - } ; - } ; - - return 1 ; -} /* paf24_read_block */ - -static int -paf24_read (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len) -{ int count, total = 0 ; - - while (total < len) - { if (ppaf24->read_block * ppaf24->samplesperblock >= ppaf24->sample_count) - { memset (&(ptr [total]), 0, (len - total) * sizeof (int)) ; - return total ; - } ; - - if (ppaf24->read_count >= ppaf24->samplesperblock) - paf24_read_block (psf, ppaf24) ; - - count = (ppaf24->samplesperblock - ppaf24->read_count) * ppaf24->channels ; - count = (len - total > count) ? count : len - total ; - - memcpy (&(ptr [total]), &(ppaf24->samples [ppaf24->read_count * ppaf24->channels]), count * sizeof (int)) ; - total += count ; - ppaf24->read_count += count / ppaf24->channels ; - } ; - - return total ; -} /* paf24_read */ - -static sf_count_t -paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int *iptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = paf24_read (psf, ppaf24, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = iptr [k] >> 16 ; - total += count ; - len -= readcount ; - } ; - return total ; -} /* paf24_read_s */ - -static sf_count_t -paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int total ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - total = paf24_read (psf, ppaf24, ptr, len) ; - - return total ; -} /* paf24_read_i */ - -static sf_count_t -paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int *iptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 / 0x80000000) : (1.0 / 0x100) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = paf24_read (psf, ppaf24, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * iptr [k] ; - total += count ; - len -= readcount ; - } ; - return total ; -} /* paf24_read_f */ - -static sf_count_t -paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int *iptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 / 0x80000000) : (1.0 / 0x100) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = paf24_read (psf, ppaf24, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * iptr [k] ; - total += count ; - len -= readcount ; - } ; - return total ; -} /* paf24_read_d */ - -/*--------------------------------------------------------------------------- -*/ - -static int -paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) -{ int k, nextsample, channel ; - unsigned char *cptr ; - - /* First pack block. */ - - if (CPU_IS_LITTLE_ENDIAN) - { for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++) - { channel = k % ppaf24->channels ; - cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ; - nextsample = ppaf24->samples [k] >> 8 ; - cptr [0] = nextsample ; - cptr [1] = nextsample >> 8 ; - cptr [2] = nextsample >> 16 ; - } ; - - /* Do endian swapping if necessary. */ - if (psf->endian == SF_ENDIAN_BIG) - endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ; - } - else if (CPU_IS_BIG_ENDIAN) - { /* This is correct. */ - for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++) - { channel = k % ppaf24->channels ; - cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ; - nextsample = ppaf24->samples [k] >> 8 ; - cptr [0] = nextsample ; - cptr [1] = nextsample >> 8 ; - cptr [2] = nextsample >> 16 ; - } ; - if (psf->endian == SF_ENDIAN_BIG) - endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ; - } ; - - /* Write block to disk. */ - if ((k = psf_fwrite (ppaf24->block, 1, ppaf24->blocksize, psf)) != ppaf24->blocksize) - psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, ppaf24->blocksize) ; - - if (ppaf24->sample_count < ppaf24->write_block * ppaf24->samplesperblock + ppaf24->write_count) - ppaf24->sample_count = ppaf24->write_block * ppaf24->samplesperblock + ppaf24->write_count ; - - if (ppaf24->write_count == ppaf24->samplesperblock) - { ppaf24->write_block ++ ; - ppaf24->write_count = 0 ; - } ; - - return 1 ; -} /* paf24_write_block */ - -static int -paf24_write (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, const int *ptr, int len) -{ int count, total = 0 ; - - while (total < len) - { count = (ppaf24->samplesperblock - ppaf24->write_count) * ppaf24->channels ; - - if (count > len - total) - count = len - total ; - - memcpy (&(ppaf24->samples [ppaf24->write_count * ppaf24->channels]), &(ptr [total]), count * sizeof (int)) ; - total += count ; - ppaf24->write_count += count / ppaf24->channels ; - - if (ppaf24->write_count >= ppaf24->samplesperblock) - paf24_write_block (psf, ppaf24) ; - } ; - - return total ; -} /* paf24_write */ - -static sf_count_t -paf24_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int *iptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = ptr [total + k] << 16 ; - count = paf24_write (psf, ppaf24, iptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - return total ; -} /* paf24_write_s */ - -static sf_count_t -paf24_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int writecount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - while (len > 0) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = paf24_write (psf, ppaf24, ptr, writecount) ; - - total += count ; - len -= count ; - if (count != writecount) - break ; - } ; - - return total ; -} /* paf24_write_i */ - -static sf_count_t -paf24_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int *iptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : (1.0 / 0x100) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = lrintf (normfact * ptr [total + k]) ; - count = paf24_write (psf, ppaf24, iptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* paf24_write_f */ - -static sf_count_t -paf24_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ PAF24_PRIVATE *ppaf24 ; - int *iptr ; - int k, bufferlen, writecount = 0, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - ppaf24 = (PAF24_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : (1.0 / 0x100) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = lrint (normfact * ptr [total+k]) ; - count = paf24_write (psf, ppaf24, iptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* paf24_write_d */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 477a5308-451e-4bbd-bab4-fab6caa4e884 -*/ diff --git a/Libraries/SndFile/Files/src/pcm.c b/Libraries/SndFile/Files/src/pcm.c deleted file mode 100644 index bad607c16..000000000 --- a/Libraries/SndFile/Files/src/pcm.c +++ /dev/null @@ -1,2899 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" - -/* Need to be able to handle 3 byte (24 bit) integers. So defined a -** type and use SIZEOF_TRIBYTE instead of (tribyte). -*/ - -typedef void tribyte ; - -#define SIZEOF_TRIBYTE 3 - -static sf_count_t pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_les2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_let2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; - -static sf_count_t pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_les2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_let2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; - -static sf_count_t pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_les2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_let2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; - -static sf_count_t pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_les2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_let2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; -static sf_count_t pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t pcm_write_s2sc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2uc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2bes (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2les (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2bet (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2let (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2bei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t pcm_write_s2lei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; - -static sf_count_t pcm_write_i2sc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2uc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2bes (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2les (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2bet (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2let (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2bei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t pcm_write_i2lei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; - -static sf_count_t pcm_write_f2sc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2uc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2bes (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2les (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2bet (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2let (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2bei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t pcm_write_f2lei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; - -static sf_count_t pcm_write_d2sc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2uc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2bes (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2les (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2bet (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2let (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2bei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; -static sf_count_t pcm_write_d2lei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -/*----------------------------------------------------------------------------------------------- -*/ - -enum -{ /* Char type for 8 bit files. */ - SF_CHARS_SIGNED = 200, - SF_CHARS_UNSIGNED = 201 -} ; - -/*----------------------------------------------------------------------------------------------- -*/ - -int -pcm_init (SF_PRIVATE *psf) -{ int chars = 0 ; - - if (psf->bytewidth == 0 || psf->sf.channels == 0) - return SFE_INTERNAL ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_PCM_S8) - chars = SF_CHARS_SIGNED ; - else if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_PCM_U8) - chars = SF_CHARS_UNSIGNED ; - - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { switch (psf->bytewidth * 0x10000 + psf->endian + chars) - { case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_SIGNED) : - case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_SIGNED) : - psf->read_short = pcm_read_sc2s ; - psf->read_int = pcm_read_sc2i ; - psf->read_float = pcm_read_sc2f ; - psf->read_double = pcm_read_sc2d ; - break ; - case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_UNSIGNED) : - case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_UNSIGNED) : - psf->read_short = pcm_read_uc2s ; - psf->read_int = pcm_read_uc2i ; - psf->read_float = pcm_read_uc2f ; - psf->read_double = pcm_read_uc2d ; - break ; - - case (2 * 0x10000 + SF_ENDIAN_BIG) : - psf->read_short = pcm_read_bes2s ; - psf->read_int = pcm_read_bes2i ; - psf->read_float = pcm_read_bes2f ; - psf->read_double = pcm_read_bes2d ; - break ; - case (3 * 0x10000 + SF_ENDIAN_BIG) : - psf->read_short = pcm_read_bet2s ; - psf->read_int = pcm_read_bet2i ; - psf->read_float = pcm_read_bet2f ; - psf->read_double = pcm_read_bet2d ; - break ; - case (4 * 0x10000 + SF_ENDIAN_BIG) : - psf->read_short = pcm_read_bei2s ; - psf->read_int = pcm_read_bei2i ; - psf->read_float = pcm_read_bei2f ; - psf->read_double = pcm_read_bei2d ; - break ; - - case (2 * 0x10000 + SF_ENDIAN_LITTLE) : - psf->read_short = pcm_read_les2s ; - psf->read_int = pcm_read_les2i ; - psf->read_float = pcm_read_les2f ; - psf->read_double = pcm_read_les2d ; - break ; - case (3 * 0x10000 + SF_ENDIAN_LITTLE) : - psf->read_short = pcm_read_let2s ; - psf->read_int = pcm_read_let2i ; - psf->read_float = pcm_read_let2f ; - psf->read_double = pcm_read_let2d ; - break ; - case (4 * 0x10000 + SF_ENDIAN_LITTLE) : - psf->read_short = pcm_read_lei2s ; - psf->read_int = pcm_read_lei2i ; - psf->read_float = pcm_read_lei2f ; - psf->read_double = pcm_read_lei2d ; - break ; - default : - psf_log_printf (psf, "pcm.c returning SFE_UNIMPLEMENTED\n") ; - return SFE_UNIMPLEMENTED ; - } ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { switch (psf->bytewidth * 0x10000 + psf->endian + chars) - { case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_SIGNED) : - case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_SIGNED) : - psf->write_short = pcm_write_s2sc ; - psf->write_int = pcm_write_i2sc ; - psf->write_float = pcm_write_f2sc ; - psf->write_double = pcm_write_d2sc ; - break ; - case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_UNSIGNED) : - case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_UNSIGNED) : - psf->write_short = pcm_write_s2uc ; - psf->write_int = pcm_write_i2uc ; - psf->write_float = pcm_write_f2uc ; - psf->write_double = pcm_write_d2uc ; - break ; - - case (2 * 0x10000 + SF_ENDIAN_BIG) : - psf->write_short = pcm_write_s2bes ; - psf->write_int = pcm_write_i2bes ; - psf->write_float = pcm_write_f2bes ; - psf->write_double = pcm_write_d2bes ; - break ; - - case (3 * 0x10000 + SF_ENDIAN_BIG) : - psf->write_short = pcm_write_s2bet ; - psf->write_int = pcm_write_i2bet ; - psf->write_float = pcm_write_f2bet ; - psf->write_double = pcm_write_d2bet ; - break ; - - case (4 * 0x10000 + SF_ENDIAN_BIG) : - psf->write_short = pcm_write_s2bei ; - psf->write_int = pcm_write_i2bei ; - psf->write_float = pcm_write_f2bei ; - psf->write_double = pcm_write_d2bei ; - break ; - - case (2 * 0x10000 + SF_ENDIAN_LITTLE) : - psf->write_short = pcm_write_s2les ; - psf->write_int = pcm_write_i2les ; - psf->write_float = pcm_write_f2les ; - psf->write_double = pcm_write_d2les ; - break ; - - case (3 * 0x10000 + SF_ENDIAN_LITTLE) : - psf->write_short = pcm_write_s2let ; - psf->write_int = pcm_write_i2let ; - psf->write_float = pcm_write_f2let ; - psf->write_double = pcm_write_d2let ; - break ; - - case (4 * 0x10000 + SF_ENDIAN_LITTLE) : - psf->write_short = pcm_write_s2lei ; - psf->write_int = pcm_write_i2lei ; - psf->write_float = pcm_write_f2lei ; - psf->write_double = pcm_write_d2lei ; - break ; - - default : - psf_log_printf (psf, "pcm.c returning SFE_UNIMPLEMENTED\n") ; - return SFE_UNIMPLEMENTED ; - } ; - - } ; - - if (psf->filelength > psf->dataoffset) - { psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset : - psf->filelength - psf->dataoffset ; - } - else - psf->datalength = 0 ; - - psf->sf.frames = psf->datalength / psf->blockwidth ; - - return 0 ; -} /* pcm_init */ - -/*============================================================================== -*/ - -static inline void -sc2s_array (signed char *src, int count, short *dest) -{ while (--count >= 0) - { dest [count] = src [count] << 8 ; - } ; -} /* sc2s_array */ - -static inline void -uc2s_array (unsigned char *src, int count, short *dest) -{ while (--count >= 0) - { dest [count] = (((short) src [count]) - 0x80) << 8 ; - } ; -} /* uc2s_array */ - -static inline void -let2s_array (tribyte *src, int count, short *dest) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - dest [count] = LET2H_SHORT_PTR (ucptr) ; - } ; -} /* let2s_array */ - -static inline void -bet2s_array (tribyte *src, int count, short *dest) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - dest [count] = BET2H_SHORT_PTR (ucptr) ; - } ; -} /* bet2s_array */ - -static inline void -lei2s_array (int *src, int count, short *dest) -{ int value ; - - while (--count >= 0) - { value = LEI2H_INT (src [count]) ; - dest [count] = value >> 16 ; - } ; -} /* lei2s_array */ - -static inline void -bei2s_array (int *src, int count, short *dest) -{ int value ; - - while (--count >= 0) - { value = BEI2H_INT (src [count]) ; - dest [count] = value >> 16 ; - } ; -} /* bei2s_array */ - -/*-------------------------------------------------------------------------- -*/ - -static inline void -sc2i_array (signed char *src, int count, int *dest) -{ while (--count >= 0) - { dest [count] = ((int) src [count]) << 24 ; - } ; -} /* sc2i_array */ - -static inline void -uc2i_array (unsigned char *src, int count, int *dest) -{ while (--count >= 0) - { dest [count] = (((int) src [count]) - 128) << 24 ; - } ; -} /* uc2i_array */ - -static inline void -bes2i_array (short *src, int count, int *dest) -{ short value ; - - while (--count >= 0) - { value = BES2H_SHORT (src [count]) ; - dest [count] = value << 16 ; - } ; -} /* bes2i_array */ - -static inline void -les2i_array (short *src, int count, int *dest) -{ short value ; - - while (--count >= 0) - { value = LES2H_SHORT (src [count]) ; - dest [count] = value << 16 ; - } ; -} /* les2i_array */ - -static inline void -bet2i_array (tribyte *src, int count, int *dest) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - dest [count] = BET2H_INT_PTR (ucptr) ; - } ; -} /* bet2i_array */ - -static inline void -let2i_array (tribyte *src, int count, int *dest) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - dest [count] = LET2H_INT_PTR (ucptr) ; - } ; -} /* let2i_array */ - -/*-------------------------------------------------------------------------- -*/ - -static inline void -sc2f_array (signed char *src, int count, float *dest, float normfact) -{ while (--count >= 0) - dest [count] = ((float) src [count]) * normfact ; -} /* sc2f_array */ - -static inline void -uc2f_array (unsigned char *src, int count, float *dest, float normfact) -{ while (--count >= 0) - dest [count] = (((int) src [count]) - 128) * normfact ; -} /* uc2f_array */ - -static inline void -les2f_array (short *src, int count, float *dest, float normfact) -{ short value ; - - while (--count >= 0) - { value = src [count] ; - value = LES2H_SHORT (value) ; - dest [count] = ((float) value) * normfact ; - } ; -} /* les2f_array */ - -static inline void -bes2f_array (short *src, int count, float *dest, float normfact) -{ short value ; - - while (--count >= 0) - { value = src [count] ; - value = BES2H_SHORT (value) ; - dest [count] = ((float) value) * normfact ; - } ; -} /* bes2f_array */ - -static inline void -let2f_array (tribyte *src, int count, float *dest, float normfact) -{ unsigned char *ucptr ; - int value ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - value = LET2H_INT_PTR (ucptr) ; - dest [count] = ((float) value) * normfact ; - } ; -} /* let2f_array */ - -static inline void -bet2f_array (tribyte *src, int count, float *dest, float normfact) -{ unsigned char *ucptr ; - int value ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - value = BET2H_INT_PTR (ucptr) ; - dest [count] = ((float) value) * normfact ; - } ; -} /* bet2f_array */ - -static inline void -lei2f_array (int *src, int count, float *dest, float normfact) -{ int value ; - - while (--count >= 0) - { value = src [count] ; - value = LEI2H_INT (value) ; - dest [count] = ((float) value) * normfact ; - } ; -} /* lei2f_array */ - -static inline void -bei2f_array (int *src, int count, float *dest, float normfact) -{ int value ; - - while (--count >= 0) - { value = src [count] ; - value = BEI2H_INT (value) ; - dest [count] = ((float) value) * normfact ; - } ; -} /* bei2f_array */ - -/*-------------------------------------------------------------------------- -*/ - -static inline void -sc2d_array (signed char *src, int count, double *dest, double normfact) -{ while (--count >= 0) - dest [count] = ((double) src [count]) * normfact ; -} /* sc2d_array */ - -static inline void -uc2d_array (unsigned char *src, int count, double *dest, double normfact) -{ while (--count >= 0) - dest [count] = (((int) src [count]) - 128) * normfact ; -} /* uc2d_array */ - -static inline void -les2d_array (short *src, int count, double *dest, double normfact) -{ short value ; - - while (--count >= 0) - { value = src [count] ; - value = LES2H_SHORT (value) ; - dest [count] = ((double) value) * normfact ; - } ; -} /* les2d_array */ - -static inline void -bes2d_array (short *src, int count, double *dest, double normfact) -{ short value ; - - while (--count >= 0) - { value = src [count] ; - value = BES2H_SHORT (value) ; - dest [count] = ((double) value) * normfact ; - } ; -} /* bes2d_array */ - -static inline void -let2d_array (tribyte *src, int count, double *dest, double normfact) -{ unsigned char *ucptr ; - int value ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - value = LET2H_INT_PTR (ucptr) ; - dest [count] = ((double) value) * normfact ; - } ; -} /* let2d_array */ - -static inline void -bet2d_array (tribyte *src, int count, double *dest, double normfact) -{ unsigned char *ucptr ; - int value ; - - ucptr = ((unsigned char*) src) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - value = (ucptr [0] << 24) | (ucptr [1] << 16) | (ucptr [2] << 8) ; - dest [count] = ((double) value) * normfact ; - } ; -} /* bet2d_array */ - -static inline void -lei2d_array (int *src, int count, double *dest, double normfact) -{ int value ; - - while (--count >= 0) - { value = src [count] ; - value = LEI2H_INT (value) ; - dest [count] = ((double) value) * normfact ; - } ; -} /* lei2d_array */ - -static inline void -bei2d_array (int *src, int count, double *dest, double normfact) -{ int value ; - - while (--count >= 0) - { value = src [count] ; - value = BEI2H_INT (value) ; - dest [count] = ((double) value) * normfact ; - } ; -} /* bei2d_array */ - -/*-------------------------------------------------------------------------- -*/ - -static inline void -s2sc_array (const short *src, signed char *dest, int count) -{ while (--count >= 0) - dest [count] = src [count] >> 8 ; -} /* s2sc_array */ - -static inline void -s2uc_array (const short *src, unsigned char *dest, int count) -{ while (--count >= 0) - dest [count] = (src [count] >> 8) + 0x80 ; -} /* s2uc_array */ - -static inline void -s2let_array (const short *src, tribyte *dest, int count) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) dest) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - ucptr [0] = 0 ; - ucptr [1] = src [count] ; - ucptr [2] = src [count] >> 8 ; - } ; -} /* s2let_array */ - -static inline void -s2bet_array (const short *src, tribyte *dest, int count) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) dest) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - ucptr [2] = 0 ; - ucptr [1] = src [count] ; - ucptr [0] = src [count] >> 8 ; - } ; -} /* s2bet_array */ - -static inline void -s2lei_array (const short *src, int *dest, int count) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) dest) + 4 * count ; - while (--count >= 0) - { ucptr -= 4 ; - ucptr [0] = 0 ; - ucptr [1] = 0 ; - ucptr [2] = src [count] ; - ucptr [3] = src [count] >> 8 ; - } ; -} /* s2lei_array */ - -static inline void -s2bei_array (const short *src, int *dest, int count) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) dest) + 4 * count ; - while (--count >= 0) - { ucptr -= 4 ; - ucptr [0] = src [count] >> 8 ; - ucptr [1] = src [count] ; - ucptr [2] = 0 ; - ucptr [3] = 0 ; - } ; -} /* s2bei_array */ - -/*-------------------------------------------------------------------------- -*/ - -static inline void -i2sc_array (const int *src, signed char *dest, int count) -{ while (--count >= 0) - dest [count] = (src [count] >> 24) ; -} /* i2sc_array */ - -static inline void -i2uc_array (const int *src, unsigned char *dest, int count) -{ while (--count >= 0) - dest [count] = ((src [count] >> 24) + 128) ; -} /* i2uc_array */ - -static inline void -i2bes_array (const int *src, short *dest, int count) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) dest) + 2 * count ; - while (--count >= 0) - { ucptr -= 2 ; - ucptr [0] = src [count] >> 24 ; - ucptr [1] = src [count] >> 16 ; - } ; -} /* i2bes_array */ - -static inline void -i2les_array (const int *src, short *dest, int count) -{ unsigned char *ucptr ; - - ucptr = ((unsigned char*) dest) + 2 * count ; - while (--count >= 0) - { ucptr -= 2 ; - ucptr [0] = src [count] >> 16 ; - ucptr [1] = src [count] >> 24 ; - } ; -} /* i2les_array */ - -static inline void -i2let_array (const int *src, tribyte *dest, int count) -{ unsigned char *ucptr ; - int value ; - - ucptr = ((unsigned char*) dest) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - value = src [count] >> 8 ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - } ; -} /* i2let_array */ - -static inline void -i2bet_array (const int *src, tribyte *dest, int count) -{ unsigned char *ucptr ; - int value ; - - ucptr = ((unsigned char*) dest) + 3 * count ; - while (--count >= 0) - { ucptr -= 3 ; - value = src [count] >> 8 ; - ucptr [2] = value ; - ucptr [1] = value >> 8 ; - ucptr [0] = value >> 16 ; - } ; -} /* i2bet_array */ - -/*=============================================================================================== -*/ - -static sf_count_t -pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - sc2s_array (psf->u.scbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_sc2s */ - -static sf_count_t -pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - uc2s_array (psf->u.ucbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_uc2s */ - -static sf_count_t -pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int total ; - - total = psf_fread (ptr, sizeof (short), len, psf) ; - if (CPU_IS_LITTLE_ENDIAN) - endswap_short_array (ptr, len) ; - - return total ; -} /* pcm_read_bes2s */ - -static sf_count_t -pcm_read_les2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int total ; - - total = psf_fread (ptr, sizeof (short), len, psf) ; - if (CPU_IS_BIG_ENDIAN) - endswap_short_array (ptr, len) ; - - return total ; -} /* pcm_read_les2s */ - -static sf_count_t -pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - bet2s_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bet2s */ - -static sf_count_t -pcm_read_let2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - let2s_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_let2s */ - -static sf_count_t -pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - bei2s_array (psf->u.ibuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bei2s */ - -static sf_count_t -pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - lei2s_array (psf->u.ibuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_lei2s */ - -/*----------------------------------------------------------------------------------------------- -*/ - -static sf_count_t -pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - sc2i_array (psf->u.scbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_sc2i */ - -static sf_count_t -pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - uc2i_array (psf->u.ucbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_uc2i */ - -static sf_count_t -pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - bes2i_array (psf->u.sbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bes2i */ - -static sf_count_t -pcm_read_les2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - les2i_array (psf->u.sbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_les2i */ - -static sf_count_t -pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - bet2i_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bet2i */ - -static sf_count_t -pcm_read_let2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - let2i_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_let2i */ - -static sf_count_t -pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int total ; - - total = psf_fread (ptr, sizeof (int), len, psf) ; - if (CPU_IS_LITTLE_ENDIAN) - endswap_int_array (ptr, len) ; - - return total ; -} /* pcm_read_bei2i */ - -static sf_count_t -pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int total ; - - total = psf_fread (ptr, sizeof (int), len, psf) ; - if (CPU_IS_BIG_ENDIAN) - endswap_int_array (ptr, len) ; - - return total ; -} /* pcm_read_lei2i */ - -/*----------------------------------------------------------------------------------------------- -*/ - -static sf_count_t -pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - sc2f_array (psf->u.scbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_sc2f */ - -static sf_count_t -pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - uc2f_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_uc2f */ - -static sf_count_t -pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - bes2f_array (psf->u.sbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bes2f */ - -static sf_count_t -pcm_read_les2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - les2f_array (psf->u.sbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_les2f */ - -static sf_count_t -pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - /* Special normfactor because tribyte value is read into an int. */ - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 / 256.0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - bet2f_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bet2f */ - -static sf_count_t -pcm_read_let2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - /* Special normfactor because tribyte value is read into an int. */ - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 / 256.0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - let2f_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_let2f */ - -static sf_count_t -pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - bei2f_array (psf->u.ibuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bei2f */ - -static sf_count_t -pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - lei2f_array (psf->u.ibuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_lei2f */ - -/*----------------------------------------------------------------------------------------------- -*/ - -static sf_count_t -pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - sc2d_array (psf->u.scbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_sc2d */ - -static sf_count_t -pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - uc2d_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_uc2d */ - -static sf_count_t -pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - bes2d_array (psf->u.sbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bes2d */ - -static sf_count_t -pcm_read_les2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - les2d_array (psf->u.sbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_les2d */ - -static sf_count_t -pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 / 256.0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - bet2d_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bet2d */ - -static sf_count_t -pcm_read_let2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - /* Special normfactor because tribyte value is read into an int. */ - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 / 256.0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - let2d_array ((tribyte*) (psf->u.ucbuf), readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_let2d */ - -static sf_count_t -pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - bei2d_array (psf->u.ibuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_bei2d */ - -static sf_count_t -pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - lei2d_array (psf->u.ibuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* pcm_read_lei2d */ - -/*=============================================================================================== -**----------------------------------------------------------------------------------------------- -**=============================================================================================== -*/ - -static sf_count_t -pcm_write_s2sc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2sc_array (ptr + total, psf->u.scbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2sc */ - -static sf_count_t -pcm_write_s2uc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2uc_array (ptr + total, psf->u.ucbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2uc */ - -static sf_count_t -pcm_write_s2bes (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - if (CPU_IS_BIG_ENDIAN) - return psf_fwrite (ptr, sizeof (short), len, psf) ; - else - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - endswap_short_copy (psf->u.sbuf, ptr + total, bufferlen) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2bes */ - -static sf_count_t -pcm_write_s2les (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - if (CPU_IS_LITTLE_ENDIAN) - return psf_fwrite (ptr, sizeof (short), len, psf) ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - endswap_short_copy (psf->u.sbuf, ptr + total, bufferlen) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2les */ - -static sf_count_t -pcm_write_s2bet (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2bet_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2bet */ - -static sf_count_t -pcm_write_s2let (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2let_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2let */ - -static sf_count_t -pcm_write_s2bei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2bei_array (ptr + total, psf->u.ibuf, bufferlen) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2bei */ - -static sf_count_t -pcm_write_s2lei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2lei_array (ptr + total, psf->u.ibuf, bufferlen) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_s2lei */ - -/*----------------------------------------------------------------------------------------------- -*/ - -static sf_count_t -pcm_write_i2sc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2sc_array (ptr + total, psf->u.scbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2sc */ - -static sf_count_t -pcm_write_i2uc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2uc_array (ptr + total, psf->u.ucbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.ucbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2uc */ - -static sf_count_t -pcm_write_i2bes (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2bes_array (ptr + total, psf->u.sbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2bes */ - -static sf_count_t -pcm_write_i2les (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2les_array (ptr + total, psf->u.sbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2les */ - -static sf_count_t -pcm_write_i2bet (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2bet_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2bet */ - -static sf_count_t -pcm_write_i2let (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2let_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2les */ - -static sf_count_t -pcm_write_i2bei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - if (CPU_IS_BIG_ENDIAN) - return psf_fwrite (ptr, sizeof (int), len, psf) ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - endswap_int_copy (psf->u.ibuf, ptr + total, bufferlen) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2bei */ - -static sf_count_t -pcm_write_i2lei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - if (CPU_IS_LITTLE_ENDIAN) - return psf_fwrite (ptr, sizeof (int), len, psf) ; - - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - endswap_int_copy (psf->u.ibuf, ptr + total, bufferlen) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_i2lei */ - -/*------------------------------------------------------------------------------ -**============================================================================== -**------------------------------------------------------------------------------ -*/ - -static void -f2sc_array (const float *src, signed char *dest, int count, int normalize) -{ float normfact ; - - normfact = normalize ? (1.0 * 0x7F) : 1.0 ; - - while (--count >= 0) - { dest [count] = lrintf (src [count] * normfact) ; - } ; -} /* f2sc_array */ - -static void -f2sc_clip_array (const float *src, signed char *dest, int count, int normalize) -{ float normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { dest [count] = 127 ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { dest [count] = -128 ; - continue ; - } ; - - dest [count] = lrintf (scaled_value) >> 24 ; - } ; -} /* f2sc_clip_array */ - -static sf_count_t -pcm_write_f2sc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, signed char *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2sc_clip_array : f2sc_array ; - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.scbuf, bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2sc */ - -/*============================================================================== -*/ - -static void -f2uc_array (const float *src, unsigned char *dest, int count, int normalize) -{ float normfact ; - - normfact = normalize ? (1.0 * 0x7F) : 1.0 ; - - while (--count >= 0) - { dest [count] = lrintf (src [count] * normfact) + 128 ; - } ; -} /* f2uc_array */ - -static void -f2uc_clip_array (const float *src, unsigned char *dest, int count, int normalize) -{ float normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { dest [count] = 0xFF ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { dest [count] = 0 ; - continue ; - } ; - - dest [count] = (lrintf (scaled_value) >> 24) + 128 ; - } ; -} /* f2uc_clip_array */ - -static sf_count_t -pcm_write_f2uc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, unsigned char *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2uc_clip_array : f2uc_array ; - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.ucbuf, bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2uc */ - -/*============================================================================== -*/ - -static void -f2bes_array (const float *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact ; - short value ; - - normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - value = lrintf (src [count] * normfact) ; - ucptr [1] = value ; - ucptr [0] = value >> 8 ; - } ; -} /* f2bes_array */ - -static void -f2bes_clip_array (const float *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [1] = 0xFF ; - ucptr [0] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [1] = 0x00 ; - ucptr [0] = 0x80 ; - continue ; - } ; - - value = lrintf (scaled_value) ; - ucptr [1] = value >> 16 ; - ucptr [0] = value >> 24 ; - } ; -} /* f2bes_clip_array */ - -static sf_count_t -pcm_write_f2bes (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, short *t, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2bes_clip_array : f2bes_array ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.sbuf, bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2bes */ - -/*============================================================================== -*/ - -static void -f2les_array (const float *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact ; - int value ; - - normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - value = lrintf (src [count] * normfact) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - } ; -} /* f2les_array */ - -static void -f2les_clip_array (const float *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0xFF ; - ucptr [1] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x00 ; - ucptr [1] = 0x80 ; - continue ; - } ; - - value = lrintf (scaled_value) ; - ucptr [0] = value >> 16 ; - ucptr [1] = value >> 24 ; - } ; -} /* f2les_clip_array */ - -static sf_count_t -pcm_write_f2les (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, short *t, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2les_clip_array : f2les_array ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.sbuf, bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2les */ - -/*============================================================================== -*/ - -static void -f2let_array (const float *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact ; - int value ; - - normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - value = lrintf (src [count] * normfact) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - } ; -} /* f2let_array */ - -static void -f2let_clip_array (const float *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0xFF ; - ucptr [1] = 0xFF ; - ucptr [2] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x00 ; - ucptr [1] = 0x00 ; - ucptr [2] = 0x80 ; - continue ; - } ; - - value = lrintf (scaled_value) ; - ucptr [0] = value >> 8 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 24 ; - } ; -} /* f2let_clip_array */ - -static sf_count_t -pcm_write_f2let (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, tribyte *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2let_clip_array : f2let_array ; - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2let */ - -/*============================================================================== -*/ - -static void -f2bet_array (const float *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact ; - int value ; - - normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - value = lrintf (src [count] * normfact) ; - ucptr [0] = value >> 16 ; - ucptr [1] = value >> 8 ; - ucptr [2] = value ; - } ; -} /* f2bet_array */ - -static void -f2bet_clip_array (const float *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0x7F ; - ucptr [1] = 0xFF ; - ucptr [2] = 0xFF ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x80 ; - ucptr [1] = 0x00 ; - ucptr [2] = 0x00 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [0] = value >> 24 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 8 ; - } ; -} /* f2bet_clip_array */ - -static sf_count_t -pcm_write_f2bet (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, tribyte *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2bet_clip_array : f2bet_array ; - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2bet */ - -/*============================================================================== -*/ - -static void -f2bei_array (const float *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact ; - int value ; - - normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - while (--count >= 0) - { ucptr -= 4 ; - value = lrintf (src [count] * normfact) ; - ucptr [0] = value >> 24 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 8 ; - ucptr [3] = value ; - } ; -} /* f2bei_array */ - -static void -f2bei_clip_array (const float *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= 1.0 * 0x7FFFFFFF) - { ucptr [0] = 0x7F ; - ucptr [1] = 0xFF ; - ucptr [2] = 0xFF ; - ucptr [3] = 0xFF ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x80 ; - ucptr [1] = 0x00 ; - ucptr [2] = 0x00 ; - ucptr [3] = 0x00 ; - continue ; - } ; - - value = lrintf (scaled_value) ; - ucptr [0] = value >> 24 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 8 ; - ucptr [3] = value ; - } ; -} /* f2bei_clip_array */ - -static sf_count_t -pcm_write_f2bei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, int *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2bei_clip_array : f2bei_array ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.ibuf, bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2bei */ - -/*============================================================================== -*/ - -static void -f2lei_array (const float *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact ; - int value ; - - normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - value = lrintf (src [count] * normfact) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - ucptr [3] = value >> 24 ; - } ; -} /* f2lei_array */ - -static void -f2lei_clip_array (const float *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - float normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0xFF ; - ucptr [1] = 0xFF ; - ucptr [2] = 0xFF ; - ucptr [3] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x00 ; - ucptr [1] = 0x00 ; - ucptr [2] = 0x00 ; - ucptr [3] = 0x80 ; - continue ; - } ; - - value = lrintf (scaled_value) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - ucptr [3] = value >> 24 ; - } ; -} /* f2lei_clip_array */ - -static sf_count_t -pcm_write_f2lei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ void (*convert) (const float *, int *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? f2lei_clip_array : f2lei_array ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.ibuf, bufferlen, psf->norm_float) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_f2lei */ - -/*============================================================================== -*/ - -static void -d2sc_array (const double *src, signed char *dest, int count, int normalize) -{ double normfact ; - - normfact = normalize ? (1.0 * 0x7F) : 1.0 ; - - while (--count >= 0) - { dest [count] = lrint (src [count] * normfact) ; - } ; -} /* d2sc_array */ - -static void -d2sc_clip_array (const double *src, signed char *dest, int count, int normalize) -{ double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { dest [count] = 127 ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { dest [count] = -128 ; - continue ; - } ; - - dest [count] = lrintf (scaled_value) >> 24 ; - } ; -} /* d2sc_clip_array */ - -static sf_count_t -pcm_write_d2sc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, signed char *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2sc_clip_array : d2sc_array ; - bufferlen = ARRAY_LEN (psf->u.scbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.scbuf, bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2sc */ - -/*============================================================================== -*/ - -static void -d2uc_array (const double *src, unsigned char *dest, int count, int normalize) -{ double normfact ; - - normfact = normalize ? (1.0 * 0x7F) : 1.0 ; - - while (--count >= 0) - { dest [count] = lrint (src [count] * normfact) + 128 ; - } ; -} /* d2uc_array */ - -static void -d2uc_clip_array (const double *src, unsigned char *dest, int count, int normalize) -{ double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ; - - while (--count >= 0) - { scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { dest [count] = 255 ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { dest [count] = 0 ; - continue ; - } ; - - dest [count] = (lrint (src [count] * normfact) >> 24) + 128 ; - } ; -} /* d2uc_clip_array */ - -static sf_count_t -pcm_write_d2uc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, unsigned char *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2uc_clip_array : d2uc_array ; - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.ucbuf, bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2uc */ - -/*============================================================================== -*/ - -static void -d2bes_array (const double *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - short value ; - double normfact ; - - normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - value = lrint (src [count] * normfact) ; - ucptr [1] = value ; - ucptr [0] = value >> 8 ; - } ; -} /* d2bes_array */ - -static void -d2bes_clip_array (const double *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - double normfact, scaled_value ; - int value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [1] = 0xFF ; - ucptr [0] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [1] = 0x00 ; - ucptr [0] = 0x80 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [1] = value >> 16 ; - ucptr [0] = value >> 24 ; - } ; -} /* d2bes_clip_array */ - -static sf_count_t -pcm_write_d2bes (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, short *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2bes_clip_array : d2bes_array ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.sbuf, bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2bes */ - -/*============================================================================== -*/ - -static void -d2les_array (const double *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - short value ; - double normfact ; - - normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - value = lrint (src [count] * normfact) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - } ; -} /* d2les_array */ - -static void -d2les_clip_array (const double *src, short *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ; - ucptr = ((unsigned char*) dest) + 2 * count ; - - while (--count >= 0) - { ucptr -= 2 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0xFF ; - ucptr [1] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x00 ; - ucptr [1] = 0x80 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [0] = value >> 16 ; - ucptr [1] = value >> 24 ; - } ; -} /* d2les_clip_array */ - -static sf_count_t -pcm_write_d2les (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, short *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2les_clip_array : d2les_array ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.sbuf, bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2les */ - -/*============================================================================== -*/ - -static void -d2let_array (const double *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact ; - - normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - value = lrint (src [count] * normfact) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - } ; -} /* d2let_array */ - -static void -d2let_clip_array (const double *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0xFF ; - ucptr [1] = 0xFF ; - ucptr [2] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x00 ; - ucptr [1] = 0x00 ; - ucptr [2] = 0x80 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [0] = value >> 8 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 24 ; - } ; -} /* d2let_clip_array */ - -static sf_count_t -pcm_write_d2let (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, tribyte *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2let_clip_array : d2let_array ; - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2let */ - -/*============================================================================== -*/ - -static void -d2bet_array (const double *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact ; - - normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - value = lrint (src [count] * normfact) ; - ucptr [2] = value ; - ucptr [1] = value >> 8 ; - ucptr [0] = value >> 16 ; - } ; -} /* d2bet_array */ - -static void -d2bet_clip_array (const double *src, tribyte *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ; - ucptr = ((unsigned char*) dest) + 3 * count ; - - while (--count >= 0) - { ucptr -= 3 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [2] = 0xFF ; - ucptr [1] = 0xFF ; - ucptr [0] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [2] = 0x00 ; - ucptr [1] = 0x00 ; - ucptr [0] = 0x80 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [2] = value >> 8 ; - ucptr [1] = value >> 16 ; - ucptr [0] = value >> 24 ; - } ; -} /* d2bet_clip_array */ - -static sf_count_t -pcm_write_d2bet (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, tribyte *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2bet_clip_array : d2bet_array ; - bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2bet */ - -/*============================================================================== -*/ - -static void -d2bei_array (const double *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact ; - - normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - value = lrint (src [count] * normfact) ; - ucptr [0] = value >> 24 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 8 ; - ucptr [3] = value ; - } ; -} /* d2bei_array */ - -static void -d2bei_clip_array (const double *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [3] = 0xFF ; - ucptr [2] = 0xFF ; - ucptr [1] = 0xFF ; - ucptr [0] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [3] = 0x00 ; - ucptr [2] = 0x00 ; - ucptr [1] = 0x00 ; - ucptr [0] = 0x80 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [0] = value >> 24 ; - ucptr [1] = value >> 16 ; - ucptr [2] = value >> 8 ; - ucptr [3] = value ; - } ; -} /* d2bei_clip_array */ - -static sf_count_t -pcm_write_d2bei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, int *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2bei_clip_array : d2bei_array ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.ibuf, bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2bei */ - -/*============================================================================== -*/ - -static void -d2lei_array (const double *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact ; - - normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - value = lrint (src [count] * normfact) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - ucptr [3] = value >> 24 ; - } ; -} /* d2lei_array */ - -static void -d2lei_clip_array (const double *src, int *dest, int count, int normalize) -{ unsigned char *ucptr ; - int value ; - double normfact, scaled_value ; - - normfact = normalize ? (8.0 * 0x10000000) : 1.0 ; - ucptr = ((unsigned char*) dest) + 4 * count ; - - while (--count >= 0) - { ucptr -= 4 ; - scaled_value = src [count] * normfact ; - if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) - { ucptr [0] = 0xFF ; - ucptr [1] = 0xFF ; - ucptr [2] = 0xFF ; - ucptr [3] = 0x7F ; - continue ; - } ; - if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) - { ucptr [0] = 0x00 ; - ucptr [1] = 0x00 ; - ucptr [2] = 0x00 ; - ucptr [3] = 0x80 ; - continue ; - } ; - - value = lrint (scaled_value) ; - ucptr [0] = value ; - ucptr [1] = value >> 8 ; - ucptr [2] = value >> 16 ; - ucptr [3] = value >> 24 ; - } ; -} /* d2lei_clip_array */ - -static sf_count_t -pcm_write_d2lei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ void (*convert) (const double *, int *, int, int) ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - convert = (psf->add_clipping) ? d2lei_clip_array : d2lei_array ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - convert (ptr + total, psf->u.ibuf, bufferlen, psf->norm_double) ; - writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* pcm_write_d2lei */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: d8bc7c0e-1e2f-4ff3-a28f-10ce1fbade3b -*/ diff --git a/Libraries/SndFile/Files/src/pvf.c b/Libraries/SndFile/Files/src/pvf.c deleted file mode 100644 index 1dab17ccb..000000000 --- a/Libraries/SndFile/Files/src/pvf.c +++ /dev/null @@ -1,199 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define PVF1_MARKER (MAKE_MARKER ('P', 'V', 'F', '1')) - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int pvf_close (SF_PRIVATE *psf) ; - -static int pvf_write_header (SF_PRIVATE *psf, int calc_length) ; -static int pvf_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -pvf_open (SF_PRIVATE *psf) -{ int subformat ; - int error = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = pvf_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PVF) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = SF_ENDIAN_BIG ; - - if (pvf_write_header (psf, SF_FALSE)) - return psf->error ; - - psf->write_header = pvf_write_header ; - } ; - - psf->container_close = pvf_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */ - case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */ - case SF_FORMAT_PCM_32 : /* 32-bit linear PCM. */ - error = pcm_init (psf) ; - break ; - - default : break ; - } ; - - return error ; -} /* pvf_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -pvf_close (SF_PRIVATE *psf) -{ - psf = psf ; - - return 0 ; -} /* pvf_close */ - -static int -pvf_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - - if (psf->pipeoffset > 0) - return 0 ; - - calc_length = calc_length ; /* Avoid a compiler warning. */ - - current = psf_ftell (psf) ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - if (psf->is_pipe == SF_FALSE) - psf_fseek (psf, 0, SEEK_SET) ; - - LSF_SNPRINTF ((char*) psf->header, sizeof (psf->header), "PVF1\n%d %d %d\n", - psf->sf.channels, psf->sf.samplerate, psf->bytewidth * 8) ; - - psf->headindex = strlen ((char*) psf->header) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* pvf_write_header */ - -static int -pvf_read_header (SF_PRIVATE *psf) -{ char buffer [32] ; - int marker, channels, samplerate, bitwidth ; - - psf_binheader_readf (psf, "pmj", 0, &marker, 1) ; - psf_log_printf (psf, "%M\n", marker) ; - - if (marker != PVF1_MARKER) - return SFE_PVF_NO_PVF1 ; - - /* Grab characters up until a newline which is replaced by an EOS. */ - psf_binheader_readf (psf, "G", buffer, sizeof (buffer)) ; - - if (sscanf (buffer, "%d %d %d", &channels, &samplerate, &bitwidth) != 3) - return SFE_PVF_BAD_HEADER ; - - psf_log_printf (psf, " Channels : %d\n Sample rate : %d\n Bit width : %d\n", - channels, samplerate, bitwidth) ; - - psf->sf.channels = channels ; - psf->sf.samplerate = samplerate ; - - switch (bitwidth) - { case 8 : - psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_S8 ; - psf->bytewidth = 1 ; - break ; - - case 16 : - psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - break ; - case 32 : - psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_32 ; - psf->bytewidth = 4 ; - break ; - - default : - return SFE_PVF_BAD_BITWIDTH ; - } ; - - psf->dataoffset = psf_ftell (psf) ; - psf_log_printf (psf, " Data Offset : %D\n", psf->dataoffset) ; - - psf->endian = SF_ENDIAN_BIG ; - - psf->datalength = psf->filelength - psf->dataoffset ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - if (! psf->sf.frames && psf->blockwidth) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - - return 0 ; -} /* pvf_read_header */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 20a26761-8bc1-41d7-b1f3-9793bf3d9864 -*/ diff --git a/Libraries/SndFile/Files/src/raw.c b/Libraries/SndFile/Files/src/raw.c deleted file mode 100644 index 65be491fe..000000000 --- a/Libraries/SndFile/Files/src/raw.c +++ /dev/null @@ -1,111 +0,0 @@ -/* -** Copyright (C) 1999-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include - -#include "sndfile.h" -#include "common.h" - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -raw_open (SF_PRIVATE *psf) -{ int subformat, error = SFE_NO_ERROR ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - - if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)) - psf->endian = SF_ENDIAN_BIG ; - else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)) - psf->endian = SF_ENDIAN_LITTLE ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - psf->dataoffset = 0 ; - psf->datalength = psf->filelength ; - - switch (subformat) - { case SF_FORMAT_PCM_S8 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_U8 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - case SF_FORMAT_GSM610 : - error = gsm610_init (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - - case SF_FORMAT_DWVW_12 : - error = dwvw_init (psf, 12) ; - break ; - - case SF_FORMAT_DWVW_16 : - error = dwvw_init (psf, 16) ; - break ; - - case SF_FORMAT_DWVW_24 : - error = dwvw_init (psf, 24) ; - break ; - - case SF_FORMAT_VOX_ADPCM : - error = vox_adpcm_init (psf) ; - break ; - /* Lite remove end */ - - default : return SFE_BAD_OPEN_FORMAT ; - } ; - - return error ; -} /* raw_open */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: f0066de7-d6ce-4f36-a1e0-e475c07d4e1a -*/ diff --git a/Libraries/SndFile/Files/src/rx2.c b/Libraries/SndFile/Files/src/rx2.c deleted file mode 100644 index d95f11fe7..000000000 --- a/Libraries/SndFile/Files/src/rx2.c +++ /dev/null @@ -1,326 +0,0 @@ -/* -** Copyright (C) 2001-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#if (ENABLE_EXPERIMENTAL_CODE == 0) - -int -rx2_open (SF_PRIVATE *psf) -{ if (psf) - return SFE_UNIMPLEMENTED ; - return (psf && 0) ; -} /* rx2_open */ - -#else - -/*------------------------------------------------------------------------------ - * Macros to handle big/little endian issues. -*/ - -#define CAT_MARKER (MAKE_MARKER ('C', 'A', 'T', ' ')) -#define GLOB_MARKER (MAKE_MARKER ('G', 'L', 'O', 'B')) - -#define RECY_MARKER (MAKE_MARKER ('R', 'E', 'C', 'Y')) - -#define SLCL_MARKER (MAKE_MARKER ('S', 'L', 'C', 'L')) -#define SLCE_MARKER (MAKE_MARKER ('S', 'L', 'C', 'E')) - -#define DEVL_MARKER (MAKE_MARKER ('D', 'E', 'V', 'L')) -#define TRSH_MARKER (MAKE_MARKER ('T', 'R', 'S', 'H')) - -#define EQ_MARKER (MAKE_MARKER ('E', 'Q', ' ', ' ')) -#define COMP_MARKER (MAKE_MARKER ('C', 'O', 'M', 'P')) - -#define SINF_MARKER (MAKE_MARKER ('S', 'I', 'N', 'F')) -#define SDAT_MARKER (MAKE_MARKER ('S', 'D', 'A', 'T')) - -/*------------------------------------------------------------------------------ - * Typedefs for file chunks. -*/ - - -/*------------------------------------------------------------------------------ - * Private static functions. -*/ -static int rx2_close (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public functions. -*/ - -int -rx2_open (SF_PRIVATE *psf) -{ static const char *marker_type [4] = - { "Original Enabled", "Enabled Hidden", - "Additional/PencilTool", "Disabled" - } ; - - int error, marker, length, glob_offset, slce_count, frames ; - - int sdat_length = 0, slce_total = 0 ; - - int n_channels ; - - - /* So far only doing read. */ - - psf_binheader_readf (psf, "Epm4", 0, &marker, &length) ; - - if (marker != CAT_MARKER) - { psf_log_printf (psf, "length : %d\n", length) ; - return -1000 ; - } ; - - if (length != psf->filelength - 8) - psf_log_printf (psf, "%M : %d (should be %d)\n", marker, length, psf->filelength - 8) ; - else - psf_log_printf (psf, "%M : %d\n", marker, length) ; - - /* 'REX2' marker */ - psf_binheader_readf (psf, "m", &marker) ; - psf_log_printf (psf, "%M", marker) ; - - /* 'HEAD' marker */ - psf_binheader_readf (psf, "m", &marker) ; - psf_log_printf (psf, "%M\n", marker) ; - - /* Grab 'GLOB' offset. */ - psf_binheader_readf (psf, "E4", &glob_offset) ; - glob_offset += 0x14 ; /* Add the current file offset. */ - - /* Jump to offset 0x30 */ - psf_binheader_readf (psf, "p", 0x30) ; - - /* Get name length */ - length = 0 ; - psf_binheader_readf (psf, "1", &length) ; - if (length >= SIGNED_SIZEOF (psf->u.cbuf)) - { psf_log_printf (psf, " Text : %d *** Error : Too sf_count_t!\n") ; - return -1001 ; - } - - memset (psf->u.cbuf, 0, sizeof (psf->u.cbuf)) ; - psf_binheader_readf (psf, "b", psf->u.cbuf, length) ; - psf_log_printf (psf, " Text : \"%s\"\n", psf->u.cbuf) ; - - /* Jump to GLOB offset position. */ - if (glob_offset & 1) - glob_offset ++ ; - - psf_binheader_readf (psf, "p", glob_offset) ; - - slce_count = 0 ; - /* GLOB */ - while (1) - { psf_binheader_readf (psf, "m", &marker) ; - - if (marker != SLCE_MARKER && slce_count > 0) - { psf_log_printf (psf, " SLCE count : %d\n", slce_count) ; - slce_count = 0 ; - } - switch (marker) - { case GLOB_MARKER: - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " %M : %d\n", marker, length) ; - psf_binheader_readf (psf, "j", length) ; - break ; - - case RECY_MARKER: - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " %M : %d\n", marker, length) ; - psf_binheader_readf (psf, "j", (length+1) & 0xFFFFFFFE) ; /* ?????? */ - break ; - - case CAT_MARKER: - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " %M : %d\n", marker, length) ; - /*-psf_binheader_readf (psf, "j", length) ;-*/ - break ; - - case DEVL_MARKER: - psf_binheader_readf (psf, "mE4", &marker, &length) ; - psf_log_printf (psf, " DEVL%M : %d\n", marker, length) ; - if (length & 1) - length ++ ; - psf_binheader_readf (psf, "j", length) ; - break ; - - case EQ_MARKER: - case COMP_MARKER: - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " %M : %d\n", marker, length) ; - /* This is weird!!!! why make this (length - 1) */ - if (length & 1) - length ++ ; - psf_binheader_readf (psf, "j", length) ; - break ; - - case SLCL_MARKER: - psf_log_printf (psf, " %M\n (Offset, Next Offset, Type)\n", marker) ; - slce_count = 0 ; - break ; - - case SLCE_MARKER: - { int len [4], indx ; - - psf_binheader_readf (psf, "E4444", &len [0], &len [1], &len [2], &len [3]) ; - - indx = ((len [3] & 0x0000FFFF) >> 8) & 3 ; - - if (len [2] == 1) - { if (indx != 1) - indx = 3 ; /* 2 cases, where next slice offset = 1 -> disabled & enabled/hidden */ - - psf_log_printf (psf, " %M : (%6d, ?: 0x%X, %s)\n", marker, len [1], (len [3] & 0xFFFF0000) >> 16, marker_type [indx]) ; - } - else - { slce_total += len [2] ; - - psf_log_printf (psf, " %M : (%6d, SLCE_next_ofs:%d, ?: 0x%X, %s)\n", marker, len [1], len [2], (len [3] & 0xFFFF0000) >> 16, marker_type [indx]) ; - } ; - - slce_count ++ ; - } ; - break ; - - case SINF_MARKER: - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " %M : %d\n", marker, length) ; - - psf_binheader_readf (psf, "E2", &n_channels) ; - n_channels = (n_channels & 0x0000FF00) >> 8 ; - psf_log_printf (psf, " Channels : %d\n", n_channels) ; - - psf_binheader_readf (psf, "E44", &psf->sf.samplerate, &frames) ; - psf->sf.frames = frames ; - psf_log_printf (psf, " Sample Rate : %d\n", psf->sf.samplerate) ; - psf_log_printf (psf, " Frames : %D\n", psf->sf.frames) ; - - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " ??????????? : %d\n", length) ; - - psf_binheader_readf (psf, "E4", &length) ; - psf_log_printf (psf, " ??????????? : %d\n", length) ; - break ; - - case SDAT_MARKER: - psf_binheader_readf (psf, "E4", &length) ; - - sdat_length = length ; - - /* Get the current offset. */ - psf->dataoffset = psf_binheader_readf (psf, NULL) ; - - if (psf->dataoffset + length != psf->filelength) - psf_log_printf (psf, " %M : %d (should be %d)\n", marker, length, psf->dataoffset + psf->filelength) ; - else - psf_log_printf (psf, " %M : %d\n", marker, length) ; - break ; - - default : - psf_log_printf (psf, "Unknown marker : 0x%X %M", marker, marker) ; - return -1003 ; - break ; - } ; - - /* SDAT always last marker in file. */ - if (marker == SDAT_MARKER) - break ; - } ; - - puts (psf->logbuffer) ; - puts ("-----------------------------------") ; - - printf ("SDAT length : %d\n", sdat_length) ; - printf ("SLCE count : %d\n", slce_count) ; - - /* Hack for zero slice count. */ - if (slce_count == 0 && slce_total == 1) - slce_total = frames ; - - printf ("SLCE samples : %d\n", slce_total) ; - - /* Two bytes per sample. */ - printf ("Comp Ratio : %f:1\n", (2.0 * slce_total * n_channels) / sdat_length) ; - - puts (" ") ; - - psf->logbuffer [0] = 0 ; - - /* OK, have the header although not too sure what it all means. */ - - psf->endian = SF_ENDIAN_BIG ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf_fseek (psf, psf->dataoffset, SEEK_SET)) - return SFE_BAD_SEEK ; - - psf->sf.format = (SF_FORMAT_REX2 | SF_FORMAT_DWVW_12) ; - - psf->sf.channels = 1 ; - psf->bytewidth = 2 ; - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - if ((error = dwvw_init (psf, 16))) - return error ; - - psf->container_close = rx2_close ; - - if (! psf->sf.frames && psf->blockwidth) - psf->sf.frames = psf->datalength / psf->blockwidth ; - - /* All done. */ - - return 0 ; -} /* rx2_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -rx2_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE) - { /* Now we know for certain the length of the file we can re-write - ** correct values for the FORM, 8SVX and BODY chunks. - */ - - } ; - - return 0 ; -} /* rx2_close */ - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 7366e813-9fee-4d1f-881e-e4a691469370 -*/ diff --git a/Libraries/SndFile/Files/src/sd2.c b/Libraries/SndFile/Files/src/sd2.c deleted file mode 100644 index 7ef481429..000000000 --- a/Libraries/SndFile/Files/src/sd2.c +++ /dev/null @@ -1,613 +0,0 @@ -/* -** Copyright (C) 2001-2006 Erik de Castro Lopo -** Copyright (C) 2004 Paavo Jumppanen -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** The sd2 support implemented in this file was partially sponsored -** (financially) by Paavo Jumppanen. -*/ - -/* -** Documentation on the Mac resource fork was obtained here : -** http://developer.apple.com/documentation/mac/MoreToolbox/MoreToolbox-99.html -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -/*------------------------------------------------------------------------------ - * Markers. -*/ - -#define Sd2f_MARKER MAKE_MARKER ('S', 'd', '2', 'f') -#define Sd2a_MARKER MAKE_MARKER ('S', 'd', '2', 'a') -#define ALCH_MARKER MAKE_MARKER ('A', 'L', 'C', 'H') -#define lsf1_MARKER MAKE_MARKER ('l', 's', 'f', '1') - -#define STR_MARKER MAKE_MARKER ('S', 'T', 'R', ' ') -#define sdML_MARKER MAKE_MARKER ('s', 'd', 'M', 'L') - -enum -{ RSRC_STR = 111, - RSRC_BIN -} ; - -typedef struct -{ unsigned char * rsrc_data ; - int rsrc_len ; - - int data_offset, data_length ; - int map_offset, map_length ; - - int type_count, type_offset ; - int item_offset ; - - int str_index, str_count ; - - int string_offset ; - - /* All the above just to get these three. */ - int sample_size, sample_rate, channels ; -} SD2_RSRC ; - -typedef struct -{ int type ; - int id ; - char name [32] ; - char value [32] ; - int value_len ; -} STR_RSRC ; - -/*------------------------------------------------------------------------------ - * Private static functions. -*/ - -static int sd2_close (SF_PRIVATE *psf) ; - -static int sd2_parse_rsrc_fork (SF_PRIVATE *psf) ; -static int parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc) ; - -static int sd2_write_rsrc_fork (SF_PRIVATE *psf, int calc_length) ; - -/*------------------------------------------------------------------------------ -** Public functions. -*/ - -int -sd2_open (SF_PRIVATE *psf) -{ int subformat, error = 0, valid ; - - /* SD2 is always big endian. */ - psf->endian = SF_ENDIAN_BIG ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->rsrclength > 0)) - { psf_use_rsrc (psf, SF_TRUE) ; - valid = psf_file_valid (psf) ; - psf_use_rsrc (psf, SF_FALSE) ; - if (! valid) - { psf_log_printf (psf, "sd2_open : psf->rsrcdes < 0\n") ; - return SFE_SD2_BAD_RSRC ; - } ; - - error = sd2_parse_rsrc_fork (psf) ; - - if (error) - goto error_cleanup ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SD2) - { error = SFE_BAD_OPEN_FORMAT ; - goto error_cleanup ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - psf->dataoffset = 0 ; - - /* Only open and write the resource in RDWR mode is its current length is zero. */ - if (psf->mode == SFM_WRITE || (psf->mode == SFM_RDWR && psf->rsrclength == 0)) - { psf_open_rsrc (psf, psf->mode) ; - - error = sd2_write_rsrc_fork (psf, SF_FALSE) ; - - if (error) - goto error_cleanup ; - - /* Not needed. */ - psf->write_header = NULL ; - } ; - - psf->container_close = sd2_close ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */ - case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */ - case SF_FORMAT_PCM_24 : /* 24-bit linear PCM */ - error = pcm_init (psf) ; - break ; - - default : - error = SFE_UNIMPLEMENTED ; - break ; - } ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - -error_cleanup: - - /* Close the resource fork regardless. We won't need it again. */ - psf_close_rsrc (psf) ; - - return error ; -} /* sd2_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -sd2_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE) - { /* Now we know for certain the audio_length of the file we can re-write - ** correct values for the FORM, 8SVX and BODY chunks. - */ - - } ; - - return 0 ; -} /* sd2_close */ - -/*------------------------------------------------------------------------------ -*/ - -static inline void -write_char (unsigned char * data, int offset, char value) -{ data [offset] = value ; -} /* write_char */ - -static inline void -write_short (unsigned char * data, int offset, short value) -{ data [offset] = value >> 8 ; - data [offset + 1] = value ; -} /* write_char */ - -static inline void -write_int (unsigned char * data, int offset, int value) -{ data [offset] = value >> 24 ; - data [offset + 1] = value >> 16 ; - data [offset + 2] = value >> 8 ; - data [offset + 3] = value ; -} /* write_int */ - -static inline void -write_marker (unsigned char * data, int offset, int value) -{ - if (CPU_IS_BIG_ENDIAN) - { data [offset] = value >> 24 ; - data [offset + 1] = value >> 16 ; - data [offset + 2] = value >> 8 ; - data [offset + 3] = value ; - } - else - { data [offset] = value ; - data [offset + 1] = value >> 8 ; - data [offset + 2] = value >> 16 ; - data [offset + 3] = value >> 24 ; - } ; -} /* write_marker */ - -static void -write_str (unsigned char * data, int offset, char * buffer, int buffer_len) -{ memcpy (data + offset, buffer, buffer_len) ; -} /* write_str */ - -static int -sd2_write_rsrc_fork (SF_PRIVATE *psf, int UNUSED (calc_length)) -{ SD2_RSRC rsrc ; - STR_RSRC str_rsrc [] = - { { RSRC_STR, 1000, "_sample-size", "", 0 }, - { RSRC_STR, 1001, "_sample-rate", "", 0 }, - { RSRC_STR, 1002, "_channels", "", 0 }, - { RSRC_BIN, 1000, "_Markers", "", 8 } - } ; - - int k, str_offset, data_offset, next_str ; - - psf_use_rsrc (psf, SF_TRUE) ; - - memset (&rsrc, 0, sizeof (rsrc)) ; - - rsrc.sample_rate = psf->sf.samplerate ; - rsrc.sample_size = psf->bytewidth ; - rsrc.channels = psf->sf.channels ; - - rsrc.rsrc_data = psf->header ; - rsrc.rsrc_len = sizeof (psf->header) ; - memset (rsrc.rsrc_data, 0xea, rsrc.rsrc_len) ; - - LSF_SNPRINTF (str_rsrc [0].value, sizeof (str_rsrc [0].value), "_%d", rsrc.sample_size) ; - LSF_SNPRINTF (str_rsrc [1].value, sizeof (str_rsrc [1].value), "_%d.000000", rsrc.sample_rate) ; - LSF_SNPRINTF (str_rsrc [2].value, sizeof (str_rsrc [2].value), "_%d", rsrc.channels) ; - - for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++) - { if (str_rsrc [k].value_len == 0) - { str_rsrc [k].value_len = strlen (str_rsrc [k].value) ; - str_rsrc [k].value [0] = str_rsrc [k].value_len - 1 ; - } ; - - /* Turn name string into a pascal string. */ - str_rsrc [k].name [0] = strlen (str_rsrc [k].name) - 1 ; - } ; - - rsrc.data_offset = 0x100 ; - - /* - ** Calculate data length : - ** length of strings, plus the length of the sdML chunk. - */ - rsrc.data_length = 0 ; - for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++) - rsrc.data_length += str_rsrc [k].value_len + 4 ; - - rsrc.map_offset = rsrc.data_offset + rsrc.data_length ; - - /* Very start of resource fork. */ - write_int (rsrc.rsrc_data, 0, rsrc.data_offset) ; - write_int (rsrc.rsrc_data, 4, rsrc.map_offset) ; - write_int (rsrc.rsrc_data, 8, rsrc.data_length) ; - - write_char (rsrc.rsrc_data, 0x30, strlen (psf->filename)) ; - write_str (rsrc.rsrc_data, 0x31, psf->filename, strlen (psf->filename)) ; - - write_short (rsrc.rsrc_data, 0x50, 0) ; - write_marker (rsrc.rsrc_data, 0x52, Sd2f_MARKER) ; - write_marker (rsrc.rsrc_data, 0x56, lsf1_MARKER) ; - - /* Very start of resource map. */ - write_int (rsrc.rsrc_data, rsrc.map_offset + 0, rsrc.data_offset) ; - write_int (rsrc.rsrc_data, rsrc.map_offset + 4, rsrc.map_offset) ; - write_int (rsrc.rsrc_data, rsrc.map_offset + 8, rsrc.data_length) ; - - /* These I don't currently understand. */ - if (1) - { write_char (rsrc.rsrc_data, rsrc.map_offset+ 16, 1) ; - /* Next resource map. */ - write_int (rsrc.rsrc_data, rsrc.map_offset + 17, 0x12345678) ; - /* File ref number. */ - write_short (rsrc.rsrc_data, rsrc.map_offset + 21, 0xabcd) ; - /* Fork attributes. */ - write_short (rsrc.rsrc_data, rsrc.map_offset + 23, 0) ; - } ; - - /* Resource type offset. */ - rsrc.type_offset = rsrc.map_offset + 30 ; - write_short (rsrc.rsrc_data, rsrc.map_offset + 24, rsrc.type_offset - rsrc.map_offset - 2) ; - - /* Type index max. */ - rsrc.type_count = 2 ; - write_short (rsrc.rsrc_data, rsrc.map_offset + 28, rsrc.type_count - 1) ; - - rsrc.item_offset = rsrc.type_offset + rsrc.type_count * 8 ; - - rsrc.str_count = ARRAY_LEN (str_rsrc) ; - rsrc.string_offset = rsrc.item_offset + (rsrc.str_count + 1) * 12 - rsrc.map_offset ; - write_short (rsrc.rsrc_data, rsrc.map_offset + 26, rsrc.string_offset) ; - - /* Write 'STR ' resource type. */ - rsrc.str_count = 3 ; - write_marker (rsrc.rsrc_data, rsrc.type_offset, STR_MARKER) ; - write_short (rsrc.rsrc_data, rsrc.type_offset + 4, rsrc.str_count - 1) ; - write_short (rsrc.rsrc_data, rsrc.type_offset + 6, 0x12) ; - - /* Write 'sdML' resource type. */ - write_marker (rsrc.rsrc_data, rsrc.type_offset + 8, sdML_MARKER) ; - write_short (rsrc.rsrc_data, rsrc.type_offset + 12, 0) ; - write_short (rsrc.rsrc_data, rsrc.type_offset + 14, 0x36) ; - - str_offset = rsrc.map_offset + rsrc.string_offset ; - next_str = 0 ; - data_offset = rsrc.data_offset ; - for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++) - { write_str (rsrc.rsrc_data, str_offset, str_rsrc [k].name, strlen (str_rsrc [k].name)) ; - - write_short (rsrc.rsrc_data, rsrc.item_offset + k * 12, str_rsrc [k].id) ; - write_short (rsrc.rsrc_data, rsrc.item_offset + k * 12 + 2, next_str) ; - - str_offset += strlen (str_rsrc [k].name) ; - next_str += strlen (str_rsrc [k].name) ; - - write_int (rsrc.rsrc_data, rsrc.item_offset + k * 12 + 4, data_offset - rsrc.data_offset) ; - - write_int (rsrc.rsrc_data, data_offset, str_rsrc [k].value_len) ; - write_str (rsrc.rsrc_data, data_offset + 4, str_rsrc [k].value, str_rsrc [k].value_len) ; - data_offset += 4 + str_rsrc [k].value_len ; - } ; - - /* Finally, calculate and set map length. */ - rsrc.map_length = str_offset - rsrc.map_offset ; - write_int (rsrc.rsrc_data, 12, rsrc.map_length) ; - write_int (rsrc.rsrc_data, rsrc.map_offset + 12, rsrc.map_length) ; - - rsrc.rsrc_len = rsrc.map_offset + rsrc.map_length ; - - psf_fwrite (rsrc.rsrc_data, rsrc.rsrc_len, 1, psf) ; - - psf_use_rsrc (psf, SF_FALSE) ; - - if (psf->error) - return psf->error ; - - return 0 ; -} /* sd2_write_rsrc_fork */ - -/*------------------------------------------------------------------------------ -*/ - -static inline int -read_char (const unsigned char * data, int offset) -{ return data [offset] ; -} /* read_char */ - -static inline int -read_short (const unsigned char * data, int offset) -{ return (data [offset] << 8) + data [offset + 1] ; -} /* read_short */ - -static inline int -read_int (const unsigned char * data, int offset) -{ return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ; -} /* read_int */ - -static inline int -read_marker (const unsigned char * data, int offset) -{ - if (CPU_IS_BIG_ENDIAN) - return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ; - else if (CPU_IS_LITTLE_ENDIAN) - return data [offset] + (data [offset + 1] << 8) + (data [offset + 2] << 16) + (data [offset + 3] << 24) ; - else - return 0x666 ; -} /* read_marker */ - -static void -read_str (const unsigned char * data, int offset, char * buffer, int buffer_len) -{ int k ; - - memset (buffer, 0, buffer_len) ; - - for (k = 0 ; k < buffer_len - 1 ; k++) - { if (isprint (data [offset + k]) == 0) - return ; - buffer [k] = data [offset + k] ; - } ; - return ; -} /* read_str */ - -static int -sd2_parse_rsrc_fork (SF_PRIVATE *psf) -{ SD2_RSRC rsrc ; - int k, marker, error = 0 ; - - psf_use_rsrc (psf, SF_TRUE) ; - - memset (&rsrc, 0, sizeof (rsrc)) ; - - rsrc.rsrc_len = psf_get_filelen (psf) ; - psf_log_printf (psf, "Resource length : %d (0x%04X)\n", rsrc.rsrc_len, rsrc.rsrc_len) ; - - if (rsrc.rsrc_len > SIGNED_SIZEOF (psf->header)) - rsrc.rsrc_data = calloc (1, rsrc.rsrc_len) ; - else - rsrc.rsrc_data = psf->header ; - - /* Read in the whole lot. */ - psf_fread (rsrc.rsrc_data, rsrc.rsrc_len, 1, psf) ; - - /* Reset the header storage because we have changed to the rsrcdes. */ - psf->headindex = psf->headend = rsrc.rsrc_len ; - - rsrc.data_offset = read_int (rsrc.rsrc_data, 0) ; - rsrc.map_offset = read_int (rsrc.rsrc_data, 4) ; - rsrc.data_length = read_int (rsrc.rsrc_data, 8) ; - rsrc.map_length = read_int (rsrc.rsrc_data, 12) ; - - if (rsrc.data_offset == 0x51607 && rsrc.map_offset == 0x20000) - { psf_log_printf (psf, "Trying offset of 0x52 bytes.\n") ; - rsrc.data_offset = read_int (rsrc.rsrc_data, 0x52 + 0) + 0x52 ; - rsrc.map_offset = read_int (rsrc.rsrc_data, 0x52 + 4) + 0x52 ; - rsrc.data_length = read_int (rsrc.rsrc_data, 0x52 + 8) ; - rsrc.map_length = read_int (rsrc.rsrc_data, 0x52 + 12) ; - } ; - - psf_log_printf (psf, " data offset : 0x%04X\n map offset : 0x%04X\n" - " data length : 0x%04X\n map length : 0x%04X\n", - rsrc.data_offset, rsrc.map_offset, rsrc.data_length, rsrc.map_length) ; - - if (rsrc.data_offset > rsrc.rsrc_len) - { psf_log_printf (psf, "Error : rsrc.data_offset (%d, 0x%x) > len\n", rsrc.data_offset, rsrc.data_offset) ; - error = SFE_SD2_BAD_DATA_OFFSET ; - goto parse_rsrc_fork_cleanup ; - } ; - - if (rsrc.map_offset > rsrc.rsrc_len) - { psf_log_printf (psf, "Error : rsrc.map_offset > len\n") ; - error = SFE_SD2_BAD_MAP_OFFSET ; - goto parse_rsrc_fork_cleanup ; - } ; - - if (rsrc.data_length > rsrc.rsrc_len) - { psf_log_printf (psf, "Error : rsrc.data_length > len\n") ; - error = SFE_SD2_BAD_DATA_LENGTH ; - goto parse_rsrc_fork_cleanup ; - } ; - - if (rsrc.map_length > rsrc.rsrc_len) - { psf_log_printf (psf, "Error : rsrc.map_length > len\n") ; - error = SFE_SD2_BAD_MAP_LENGTH ; - goto parse_rsrc_fork_cleanup ; - } ; - - if (rsrc.data_offset + rsrc.data_length != rsrc.map_offset || rsrc.map_offset + rsrc.map_length != rsrc.rsrc_len) - { psf_log_printf (psf, "Error : This does not look like a MacOSX resource fork.\n") ; - error = SFE_SD2_BAD_RSRC ; - goto parse_rsrc_fork_cleanup ; - } ; - - rsrc.string_offset = rsrc.map_offset + read_short (rsrc.rsrc_data, rsrc.map_offset + 26) ; - if (rsrc.string_offset > rsrc.rsrc_len) - { psf_log_printf (psf, "Bad string offset (%d).\n", rsrc.string_offset) ; - error = SFE_SD2_BAD_RSRC ; - goto parse_rsrc_fork_cleanup ; - } ; - - rsrc.type_offset = rsrc.map_offset + 30 ; - - rsrc.type_count = read_short (rsrc.rsrc_data, rsrc.map_offset + 28) + 1 ; - if (rsrc.type_count < 1) - { psf_log_printf (psf, "Bad type count.\n") ; - error = SFE_SD2_BAD_RSRC ; - goto parse_rsrc_fork_cleanup ; - } ; - - rsrc.item_offset = rsrc.type_offset + rsrc.type_count * 8 ; - if (rsrc.item_offset < 0 || rsrc.item_offset > rsrc.rsrc_len) - { psf_log_printf (psf, "Bad item offset (%d).\n", rsrc.item_offset) ; - error = SFE_SD2_BAD_RSRC ; - goto parse_rsrc_fork_cleanup ; - } ; - - rsrc.str_index = -1 ; - for (k = 0 ; k < rsrc.type_count ; k ++) - { marker = read_marker (rsrc.rsrc_data, rsrc.type_offset + k * 8) ; - - if (marker == STR_MARKER) - { rsrc.str_index = k ; - rsrc.str_count = read_short (rsrc.rsrc_data, rsrc.type_offset + k * 8 + 4) + 1 ; - error = parse_str_rsrc (psf, &rsrc) ; - goto parse_rsrc_fork_cleanup ; - } ; - } ; - - psf_log_printf (psf, "No 'STR ' resource.\n") ; - error = SFE_SD2_BAD_RSRC ; - -parse_rsrc_fork_cleanup : - - psf_use_rsrc (psf, SF_FALSE) ; - - if ((void *) rsrc.rsrc_data < (void *) psf || (void *) rsrc.rsrc_data > (void *) (psf + 1)) - free (rsrc.rsrc_data) ; - - return error ; -} /* sd2_parse_rsrc_fork */ - -static int -parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc) -{ char name [32], value [32] ; - int k, str_offset, data_offset, data_len, rsrc_id ; - - psf_log_printf (psf, "Finding parameters :\n") ; - - str_offset = rsrc->string_offset ; - for (k = 0 ; k < rsrc->str_count ; k++) - { int slen ; - - slen = read_char (rsrc->rsrc_data, str_offset) ; - read_str (rsrc->rsrc_data, str_offset + 1, name, SF_MIN (SIGNED_SIZEOF (name), slen + 1)) ; - str_offset += slen + 1 ; - - rsrc_id = read_short (rsrc->rsrc_data, rsrc->item_offset + k * 12) ; - - data_offset = rsrc->data_offset + read_int (rsrc->rsrc_data, rsrc->item_offset + k * 12 + 4) ; - if (data_offset < 0 || data_offset > rsrc->rsrc_len) - { psf_log_printf (psf, "Bad data offset (%d)\n", data_offset) ; - return SFE_SD2_BAD_DATA_OFFSET ; - } ; - - data_len = read_int (rsrc->rsrc_data, data_offset) ; - if (data_len < 0 || data_len > rsrc->rsrc_len) - { psf_log_printf (psf, "Bad data length (%d).\n", data_len) ; - return SFE_SD2_BAD_RSRC ; - } ; - - slen = read_char (rsrc->rsrc_data, data_offset + 4) ; - read_str (rsrc->rsrc_data, data_offset + 5, value, SF_MIN (SIGNED_SIZEOF (value), slen + 1)) ; - - psf_log_printf (psf, " %-12s 0x%04x %4d %2d %2d '%s'\n", name, data_offset, rsrc_id, data_len, slen, value) ; - - if (strcmp (name, "sample-size") == 0 && rsrc->sample_size == 0) - rsrc->sample_size = strtol (value, NULL, 10) ; - else if (strcmp (name, "sample-rate") == 0 && rsrc->sample_rate == 0) - rsrc->sample_rate = strtol (value, NULL, 10) ; - else if (strcmp (name, "channels") == 0 && rsrc->channels == 0) - rsrc->channels = strtol (value, NULL, 10) ; - } ; - - if (rsrc->sample_rate < 0) - { psf_log_printf (psf, "Bad sample rate (%d)\n", rsrc->sample_rate) ; - return SFE_SD2_BAD_RSRC ; - } ; - - if (rsrc->channels < 0) - { psf_log_printf (psf, "Bad channel count (%d)\n", rsrc->channels) ; - return SFE_SD2_BAD_RSRC ; - } ; - - psf->sf.samplerate = rsrc->sample_rate ; - psf->sf.channels = rsrc->channels ; - psf->bytewidth = rsrc->sample_size ; - - switch (rsrc->sample_size) - { case 1 : - psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_S8 ; - break ; - - case 2 : - psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_16 ; - break ; - - case 3 : - psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_24 ; - break ; - - default : - psf_log_printf (psf, "Bad sample size (%d)\n", rsrc->sample_size) ; - return SFE_SD2_BAD_SAMPLE_SIZE ; - } ; - - psf_log_printf (psf, "ok\n") ; - - return 0 ; -} /* parse_str_rsrc */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 1ee183e5-6b9f-4c2c-bd0a-24f35595cefc -*/ diff --git a/Libraries/SndFile/Files/src/sds.c b/Libraries/SndFile/Files/src/sds.c deleted file mode 100644 index 3769bf021..000000000 --- a/Libraries/SndFile/Files/src/sds.c +++ /dev/null @@ -1,993 +0,0 @@ -/* -** Copyright (C) 2002-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "float_cast.h" - -/*------------------------------------------------------------------------------ -*/ - -#define SDS_DATA_OFFSET 0x15 -#define SDS_BLOCK_SIZE 127 - -#define SDS_AUDIO_BYTES_PER_BLOCK 120 - -#define SDS_3BYTE_TO_INT_DECODE(x) (((x) & 0x7F) | (((x) & 0x7F00) >> 1) | (((x) & 0x7F0000) >> 2)) -#define SDS_INT_TO_3BYTE_ENCODE(x) (((x) & 0x7F) | (((x) << 1) & 0x7F00) | (((x) << 2) & 0x7F0000)) - -/*------------------------------------------------------------------------------ -** Typedefs. -*/ - -typedef struct tag_SDS_PRIVATE -{ int bitwidth, frames ; - int samplesperblock, total_blocks ; - - int (*reader) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ; - int (*writer) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ; - - int read_block, read_count ; - unsigned char read_data [SDS_BLOCK_SIZE] ; - int read_samples [SDS_BLOCK_SIZE / 2] ; /* Maximum samples per block */ - - int write_block, write_count ; - unsigned char write_data [SDS_BLOCK_SIZE] ; - int write_samples [SDS_BLOCK_SIZE / 2] ; /* Maximum samples per block */ -} SDS_PRIVATE ; - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int sds_close (SF_PRIVATE *psf) ; - -static int sds_write_header (SF_PRIVATE *psf, int calc_length) ; -static int sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; - -static int sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; - -static sf_count_t sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t sds_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -static int sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; -static int sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; -static int sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; - -static int sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *iptr, int readcount) ; - -static int sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; -static int sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; -static int sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ; - -static int sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *iptr, int writecount) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -sds_open (SF_PRIVATE *psf) -{ SDS_PRIVATE *psds ; - int error = 0 ; - - /* Hmmmm, need this here to pass update_header_test. */ - psf->sf.frames = 0 ; - - if (! (psds = calloc (1, sizeof (SDS_PRIVATE)))) - return SFE_MALLOC_FAILED ; - psf->fdata = psds ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = sds_read_header (psf, psds))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SDS) - return SFE_BAD_OPEN_FORMAT ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (sds_write_header (psf, SF_FALSE)) - return psf->error ; - - psf->write_header = sds_write_header ; - - psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ; - } ; - - if ((error = sds_init (psf, psds)) != 0) - return error ; - - psf->seek = sds_seek ; - psf->container_close = sds_close ; - - psf->blockwidth = 0 ; - - return error ; -} /* sds_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -sds_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { SDS_PRIVATE *psds ; - - if ((psds = (SDS_PRIVATE *) psf->fdata) == NULL) - { psf_log_printf (psf, "*** Bad psf->fdata ptr.\n") ; - return SFE_INTERNAL ; - } ; - - if (psds->write_count > 0) - { memset (&(psds->write_data [psds->write_count]), 0, (psds->samplesperblock - psds->write_count) * sizeof (int)) ; - psds->writer (psf, psds) ; - } ; - - sds_write_header (psf, SF_TRUE) ; - } ; - - return 0 ; -} /* sds_close */ - -static int -sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ - if (psds->bitwidth < 8 || psds->bitwidth > 28) - return (psf->error = SFE_SDS_BAD_BIT_WIDTH) ; - - if (psds->bitwidth < 14) - { psds->reader = sds_2byte_read ; - psds->writer = sds_2byte_write ; - psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 2 ; - } - else if (psds->bitwidth < 21) - { psds->reader = sds_3byte_read ; - psds->writer = sds_3byte_write ; - psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 3 ; - } - else - { psds->reader = sds_4byte_read ; - psds->writer = sds_4byte_write ; - psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 4 ; - } ; - - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { psf->read_short = sds_read_s ; - psf->read_int = sds_read_i ; - psf->read_float = sds_read_f ; - psf->read_double = sds_read_d ; - - /* Read first block. */ - psds->reader (psf, psds) ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->write_short = sds_write_s ; - psf->write_int = sds_write_i ; - psf->write_float = sds_write_f ; - psf->write_double = sds_write_d ; - } ; - - return 0 ; -} /* sds_init */ - -static int -sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char channel, bitwidth, loop_type, byte ; - unsigned short sample_no, marker ; - unsigned int samp_period, data_length, sustain_loop_start, sustain_loop_end ; - int bytesread, blockcount ; - - /* Set position to start of file to begin reading header. */ - bytesread = psf_binheader_readf (psf, "pE211", 0, &marker, &channel, &byte) ; - - if (marker != 0xF07E || byte != 0x01) - return SFE_SDS_NOT_SDS ; - - psf_log_printf (psf, "Midi Sample Dump Standard (.sds)\nF07E\n Midi Channel : %d\n", channel) ; - - bytesread += psf_binheader_readf (psf, "e213", &sample_no, &bitwidth, &samp_period) ; - - sample_no = SDS_3BYTE_TO_INT_DECODE (sample_no) ; - samp_period = SDS_3BYTE_TO_INT_DECODE (samp_period) ; - - psds->bitwidth = bitwidth ; - - psf->sf.samplerate = 1000000000 / samp_period ; - - psf_log_printf (psf, " Sample Number : %d\n" - " Bit Width : %d\n" - " Sample Rate : %d\n", - sample_no, psds->bitwidth, psf->sf.samplerate) ; - - bytesread += psf_binheader_readf (psf, "e3331", &data_length, &sustain_loop_start, &sustain_loop_end, &loop_type) ; - - data_length = SDS_3BYTE_TO_INT_DECODE (data_length) ; - - sustain_loop_start = SDS_3BYTE_TO_INT_DECODE (sustain_loop_start) ; - sustain_loop_end = SDS_3BYTE_TO_INT_DECODE (sustain_loop_end) ; - - psf_log_printf (psf, " Sustain Loop\n" - " Start : %d\n" - " End : %d\n" - " Loop Type : %d\n", - sustain_loop_start, sustain_loop_end, loop_type) ; - - psf->dataoffset = SDS_DATA_OFFSET ; - psf->datalength = psf->filelength - psf->dataoffset ; - - if (data_length != psf->filelength - psf->dataoffset) - { psf_log_printf (psf, " Datalength : %d (truncated data??? %d)\n", data_length, psf->filelength - psf->dataoffset) ; - data_length = psf->filelength - psf->dataoffset ; - } - else - psf_log_printf (psf, " Datalength : %d\n", data_length) ; - - bytesread += psf_binheader_readf (psf, "1", &byte) ; - if (byte != 0xF7) - psf_log_printf (psf, "bad end : %X\n", byte & 0xFF) ; - - for (blockcount = 0 ; bytesread < psf->filelength ; blockcount++) - { - bytesread += psf_fread (&marker, 1, 2, psf) ; - - if (marker == 0) - break ; - - psf_fseek (psf, SDS_BLOCK_SIZE - 2, SEEK_CUR) ; - bytesread += SDS_BLOCK_SIZE - 2 ; - } ; - - psf_log_printf (psf, "\nBlocks : %d\n", blockcount) ; - psds->total_blocks = blockcount ; - - psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / ((psds->bitwidth + 6) / 7) ; - psf_log_printf (psf, "Samples/Block : %d\n", psds->samplesperblock) ; - - psf_log_printf (psf, "Frames : %d\n", blockcount * psds->samplesperblock) ; - - psf->sf.frames = blockcount * psds->samplesperblock ; - psds->frames = blockcount * psds->samplesperblock ; - - /* Always Mono */ - psf->sf.channels = 1 ; - psf->sf.sections = 1 ; - - /* - ** Lie to the user about PCM bit width. Always round up to - ** the next multiple of 8. - */ - switch ((psds->bitwidth + 7) / 8) - { case 1 : - psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_S8 ; - break ; - - case 2 : - psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_16 ; - break ; - - case 3 : - psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_24 ; - break ; - - case 4 : - psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_32 ; - break ; - - default : - psf_log_printf (psf, "*** Weird byte width (%d)\n", (psds->bitwidth + 7) / 8) ; - return SFE_SDS_BAD_BIT_WIDTH ; - } ; - - psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ; - - return 0 ; -} /* sds_read_header */ - -static int -sds_write_header (SF_PRIVATE *psf, int calc_length) -{ SDS_PRIVATE *psds ; - sf_count_t current ; - int samp_period, data_length, sustain_loop_start, sustain_loop_end ; - unsigned char loop_type = 0 ; - - if ((psds = (SDS_PRIVATE *) psf->fdata) == NULL) - { psf_log_printf (psf, "*** Bad psf->fdata ptr.\n") ; - return SFE_INTERNAL ; - } ; - - if (psf->pipeoffset > 0) - return 0 ; - - current = psf_ftell (psf) ; - - if (calc_length) - psf->sf.frames = psds->total_blocks * psds->samplesperblock + psds->write_count ; - - if (psds->write_count > 0) - { int current_count = psds->write_count ; - int current_block = psds->write_block ; - - psds->writer (psf, psds) ; - - psf_fseek (psf, -1 * SDS_BLOCK_SIZE, SEEK_CUR) ; - - psds->write_count = current_count ; - psds->write_block = current_block ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - if (psf->is_pipe == SF_FALSE) - psf_fseek (psf, 0, SEEK_SET) ; - - psf_binheader_writef (psf, "E211", 0xF07E, 0, 1) ; - - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - psds->bitwidth = 8 ; - break ; - case SF_FORMAT_PCM_16 : - psds->bitwidth = 16 ; - break ; - case SF_FORMAT_PCM_24 : - psds->bitwidth = 24 ; - break ; - default: - return SFE_SDS_BAD_BIT_WIDTH ; - } ; - - samp_period = SDS_INT_TO_3BYTE_ENCODE (1000000000 / psf->sf.samplerate) ; - - psf_binheader_writef (psf, "e213", 0, psds->bitwidth, samp_period) ; - - data_length = SDS_INT_TO_3BYTE_ENCODE (psds->total_blocks * SDS_BLOCK_SIZE) ; - sustain_loop_start = SDS_INT_TO_3BYTE_ENCODE (0) ; - sustain_loop_end = SDS_INT_TO_3BYTE_ENCODE (psf->sf.frames) ; - - psf_binheader_writef (psf, "e33311", data_length, sustain_loop_start, sustain_loop_end, loop_type, 0xF7) ; - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - psf->datalength = psds->write_block * SDS_BLOCK_SIZE ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* sds_write_header */ - - -/*------------------------------------------------------------------------------ -*/ - -static int -sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char *ucptr, checksum ; - unsigned int sample ; - int k ; - - psds->read_block ++ ; - psds->read_count = 0 ; - - if (psds->read_block * psds->samplesperblock > psds->frames) - { memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ; - return 1 ; - } ; - - if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ; - - if (psds->read_data [0] != 0xF0) - { printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ; - } ; - - checksum = psds->read_data [1] ; - if (checksum != 0x7E) - { printf ("Error 1 : %02X\n", checksum & 0xFF) ; - } - - for (k = 2 ; k < SDS_BLOCK_SIZE - 3 ; k ++) - checksum ^= psds->read_data [k] ; - - checksum &= 0x7F ; - - if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2]) - { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ; - } ; - - ucptr = psds->read_data + 5 ; - for (k = 0 ; k < 120 ; k += 2) - { sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) ; - psds->read_samples [k / 2] = (int) (sample - 0x80000000) ; - } ; - - return 1 ; -} /* sds_2byte_read */ - -static int -sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char *ucptr, checksum ; - unsigned int sample ; - int k ; - - psds->read_block ++ ; - psds->read_count = 0 ; - - if (psds->read_block * psds->samplesperblock > psds->frames) - { memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ; - return 1 ; - } ; - - if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ; - - if (psds->read_data [0] != 0xF0) - { printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ; - } ; - - checksum = psds->read_data [1] ; - if (checksum != 0x7E) - { printf ("Error 1 : %02X\n", checksum & 0xFF) ; - } - - for (k = 2 ; k < SDS_BLOCK_SIZE - 3 ; k ++) - checksum ^= psds->read_data [k] ; - - checksum &= 0x7F ; - - if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2]) - { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ; - } ; - - ucptr = psds->read_data + 5 ; - for (k = 0 ; k < 120 ; k += 3) - { sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) ; - psds->read_samples [k / 3] = (int) (sample - 0x80000000) ; - } ; - - return 1 ; -} /* sds_3byte_read */ - -static int -sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char *ucptr, checksum ; - unsigned int sample ; - int k ; - - psds->read_block ++ ; - psds->read_count = 0 ; - - if (psds->read_block * psds->samplesperblock > psds->frames) - { memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ; - return 1 ; - } ; - - if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ; - - if (psds->read_data [0] != 0xF0) - { printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ; - } ; - - checksum = psds->read_data [1] ; - if (checksum != 0x7E) - { printf ("Error 1 : %02X\n", checksum & 0xFF) ; - } - - for (k = 2 ; k < SDS_BLOCK_SIZE - 3 ; k ++) - checksum ^= psds->read_data [k] ; - - checksum &= 0x7F ; - - if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2]) - { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ; - } ; - - ucptr = psds->read_data + 5 ; - for (k = 0 ; k < 120 ; k += 4) - { sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) + (ucptr [k + 3] << 4) ; - psds->read_samples [k / 4] = (int) (sample - 0x80000000) ; - } ; - - return 1 ; -} /* sds_4byte_read */ - - -static sf_count_t -sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int *iptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = sds_read (psf, psds, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = iptr [k] >> 16 ; - total += count ; - len -= readcount ; - } ; - - return total ; -} /* sds_read_s */ - -static sf_count_t -sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int total ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - total = sds_read (psf, psds, ptr, len) ; - - return total ; -} /* sds_read_i */ - -static sf_count_t -sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int *iptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - if (psf->norm_float == SF_TRUE) - normfact = 1.0 / 0x80000000 ; - else - normfact = 1.0 / (1 << psds->bitwidth) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = sds_read (psf, psds, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * iptr [k] ; - total += count ; - len -= readcount ; - } ; - - return total ; -} /* sds_read_f */ - -static sf_count_t -sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int *iptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - if (psf->norm_double == SF_TRUE) - normfact = 1.0 / 0x80000000 ; - else - normfact = 1.0 / (1 << psds->bitwidth) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = sds_read (psf, psds, iptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * iptr [k] ; - total += count ; - len -= readcount ; - } ; - - return total ; -} /* sds_read_d */ - -static int -sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *ptr, int len) -{ int count, total = 0 ; - - while (total < len) - { if (psds->read_block * psds->samplesperblock >= psds->frames) - { memset (&(ptr [total]), 0, (len - total) * sizeof (int)) ; - return total ; - } ; - - if (psds->read_count >= psds->samplesperblock) - psds->reader (psf, psds) ; - - count = (psds->samplesperblock - psds->read_count) ; - count = (len - total > count) ? count : len - total ; - - memcpy (&(ptr [total]), &(psds->read_samples [psds->read_count]), count * sizeof (int)) ; - total += count ; - psds->read_count += count ; - } ; - - return total ; -} /* sds_read */ - -/*============================================================================== -*/ - -static sf_count_t -sds_seek (SF_PRIVATE *psf, int mode, sf_count_t seek_from_start) -{ SDS_PRIVATE *psds ; - sf_count_t file_offset ; - int newblock, newsample ; - - if ((psds = psf->fdata) == NULL) - { psf->error = SFE_INTERNAL ; - return PSF_SEEK_ERROR ; - } ; - - if (psf->datalength < 0 || psf->dataoffset < 0) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (seek_from_start < 0 || seek_from_start > psf->sf.frames) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (mode == SFM_READ && psds->write_count > 0) - psds->writer (psf, psds) ; - - newblock = seek_from_start / psds->samplesperblock ; - newsample = seek_from_start % psds->samplesperblock ; - - switch (mode) - { case SFM_READ : - if (newblock > psds->total_blocks) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ; - - if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset) - { psf->error = SFE_SEEK_FAILED ; - return PSF_SEEK_ERROR ; - } ; - - psds->read_block = newblock ; - psds->reader (psf, psds) ; - psds->read_count = newsample ; - break ; - - case SFM_WRITE : - if (newblock > psds->total_blocks) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ; - - if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset) - { psf->error = SFE_SEEK_FAILED ; - return PSF_SEEK_ERROR ; - } ; - - psds->write_block = newblock ; - psds->reader (psf, psds) ; - psds->write_count = newsample ; - break ; - - default : - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - break ; - } ; - - return seek_from_start ; -} /* sds_seek */ - -/*============================================================================== -*/ - -static int -sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char *ucptr, checksum ; - unsigned int sample ; - int k ; - - psds->write_data [0] = 0xF0 ; - psds->write_data [1] = 0x7E ; - psds->write_data [2] = 0 ; /* Channel number */ - psds->write_data [3] = psds->write_block & 0x7F ; /* Packet number */ - - ucptr = psds->write_data + 5 ; - for (k = 0 ; k < 120 ; k += 2) - { sample = psds->write_samples [k / 2] ; - sample += 0x80000000 ; - ucptr [k] = (sample >> 25) & 0x7F ; - ucptr [k + 1] = (sample >> 18) & 0x7F ; - } ; - - checksum = psds->write_data [1] ; - for (k = 2 ; k < SDS_BLOCK_SIZE - 3 ; k ++) - checksum ^= psds->write_data [k] ; - checksum &= 0x7F ; - - psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ; - psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ; - - if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE) - psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ; - - psds->write_block ++ ; - psds->write_count = 0 ; - - if (psds->write_block > psds->total_blocks) - psds->total_blocks = psds->write_block ; - psds->frames = psds->total_blocks * psds->samplesperblock ; - - return 1 ; -} /* sds_2byte_write */ - -static int -sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char *ucptr, checksum ; - unsigned int sample ; - int k ; - - psds->write_data [0] = 0xF0 ; - psds->write_data [1] = 0x7E ; - psds->write_data [2] = 0 ; /* Channel number */ - psds->write_data [3] = psds->write_block & 0x7F ; /* Packet number */ - - ucptr = psds->write_data + 5 ; - for (k = 0 ; k < 120 ; k += 3) - { sample = psds->write_samples [k / 3] ; - sample += 0x80000000 ; - ucptr [k] = (sample >> 25) & 0x7F ; - ucptr [k + 1] = (sample >> 18) & 0x7F ; - ucptr [k + 2] = (sample >> 11) & 0x7F ; - } ; - - checksum = psds->write_data [1] ; - for (k = 2 ; k < SDS_BLOCK_SIZE - 3 ; k ++) - checksum ^= psds->write_data [k] ; - checksum &= 0x7F ; - - psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ; - psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ; - - if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE) - psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ; - - psds->write_block ++ ; - psds->write_count = 0 ; - - if (psds->write_block > psds->total_blocks) - psds->total_blocks = psds->write_block ; - psds->frames = psds->total_blocks * psds->samplesperblock ; - - return 1 ; -} /* sds_3byte_write */ - -static int -sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) -{ unsigned char *ucptr, checksum ; - unsigned int sample ; - int k ; - - psds->write_data [0] = 0xF0 ; - psds->write_data [1] = 0x7E ; - psds->write_data [2] = 0 ; /* Channel number */ - psds->write_data [3] = psds->write_block & 0x7F ; /* Packet number */ - - ucptr = psds->write_data + 5 ; - for (k = 0 ; k < 120 ; k += 4) - { sample = psds->write_samples [k / 4] ; - sample += 0x80000000 ; - ucptr [k] = (sample >> 25) & 0x7F ; - ucptr [k + 1] = (sample >> 18) & 0x7F ; - ucptr [k + 2] = (sample >> 11) & 0x7F ; - ucptr [k + 3] = (sample >> 4) & 0x7F ; - } ; - - checksum = psds->write_data [1] ; - for (k = 2 ; k < SDS_BLOCK_SIZE - 3 ; k ++) - checksum ^= psds->write_data [k] ; - checksum &= 0x7F ; - - psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ; - psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ; - - if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE) - psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ; - - psds->write_block ++ ; - psds->write_count = 0 ; - - if (psds->write_block > psds->total_blocks) - psds->total_blocks = psds->write_block ; - psds->frames = psds->total_blocks * psds->samplesperblock ; - - return 1 ; -} /* sds_4byte_write */ - -static sf_count_t -sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int *iptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = ptr [total + k] << 16 ; - count = sds_write (psf, psds, iptr, writecount) ; - total += count ; - len -= writecount ; - } ; - - return total ; -} /* sds_write_s */ - -static sf_count_t -sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int total ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - total = sds_write (psf, psds, ptr, len) ; - - return total ; -} /* sds_write_i */ - -static sf_count_t -sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int *iptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - if (psf->norm_float == SF_TRUE) - normfact = 1.0 * 0x80000000 ; - else - normfact = 1.0 * (1 << psds->bitwidth) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = normfact * ptr [total + k] ; - count = sds_write (psf, psds, iptr, writecount) ; - total += count ; - len -= writecount ; - } ; - - return total ; -} /* sds_write_f */ - -static sf_count_t -sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ SDS_PRIVATE *psds ; - int *iptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->fdata == NULL) - return 0 ; - psds = (SDS_PRIVATE*) psf->fdata ; - - if (psf->norm_double == SF_TRUE) - normfact = 1.0 * 0x80000000 ; - else - normfact = 1.0 * (1 << psds->bitwidth) ; - - iptr = psf->u.ibuf ; - bufferlen = ARRAY_LEN (psf->u.ibuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : len ; - for (k = 0 ; k < writecount ; k++) - iptr [k] = normfact * ptr [total + k] ; - count = sds_write (psf, psds, iptr, writecount) ; - total += count ; - len -= writecount ; - } ; - - return total ; -} /* sds_write_d */ - -static int -sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *ptr, int len) -{ int count, total = 0 ; - - while (total < len) - { count = psds->samplesperblock - psds->write_count ; - if (count > len - total) - count = len - total ; - - memcpy (&(psds->write_samples [psds->write_count]), &(ptr [total]), count * sizeof (int)) ; - total += count ; - psds->write_count += count ; - - if (psds->write_count >= psds->samplesperblock) - psds->writer (psf, psds) ; - } ; - - return total ; -} /* sds_write */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: d5d26aa3-368c-4ca6-bb85-377e5a2578cc -*/ diff --git a/Libraries/SndFile/Files/src/sf_unistd.h b/Libraries/SndFile/Files/src/sf_unistd.h deleted file mode 100644 index f24ae67e9..000000000 --- a/Libraries/SndFile/Files/src/sf_unistd.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* Some defines that microsoft 'forgot' to implement. */ - -#ifndef S_IRWXU -#define S_IRWXU 0000700 /* rwx, owner */ -#endif - -#ifndef S_IRUSR -#define S_IRUSR 0000400 /* read permission, owner */ -#endif - -#ifndef S_IWUSR -#define S_IWUSR 0000200 /* write permission, owner */ -#endif - -#ifndef S_IXUSR -#define S_IXUSR 0000100 /* execute/search permission, owner */ -#endif - -#define S_IRWXG 0000070 /* rwx, group */ -#define S_IRGRP 0000040 /* read permission, group */ -#define S_IWGRP 0000020 /* write permission, grougroup */ -#define S_IXGRP 0000010 /* execute/search permission, group */ - -#define S_IRWXO 0000007 /* rwx, other */ -#define S_IROTH 0000004 /* read permission, other */ -#define S_IWOTH 0000002 /* write permission, other */ -#define S_IXOTH 0000001 /* execute/search permission, other */ - -#ifndef S_ISFIFO -#define S_ISFIFO(mode) (((mode) & _S_IFMT) == _S_IFIFO) -#endif - -#ifndef S_ISREG -#define S_ISREG(mode) (((mode) & _S_IFREG) == _S_IFREG) -#endif - -/* -** Don't know if these are still needed. -** -** #define _IFMT _S_IFMT -** #define _IFREG _S_IFREG -*/ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 253aea6d-6299-46fd-8d06-bc5f6224c8fe -*/ diff --git a/Libraries/SndFile/Files/src/sfconfig.h b/Libraries/SndFile/Files/src/sfconfig.h deleted file mode 100644 index f12df6d78..000000000 --- a/Libraries/SndFile/Files/src/sfconfig.h +++ /dev/null @@ -1,108 +0,0 @@ -/* -** Copyright (C) 2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** Autoconf leaves many config parameters undefined. -** Here we change then from being undefined to defining them to 0. -** This allows things like: -** -** #if HAVE_CONFIG_PARAM -** -** and -** -** if (HAVE_CONFIG_PARAM) -** do_something () ; -*/ - -#ifndef SFCONFIG_H -#define SFCONFIG_H - -/* Include the Autoconf generated file. */ -#include "config.h" - -/* Now fiddle the values. */ - -#ifndef HAVE_ALSA_ASOUNDLIB_H -#define HAVE_ALSA_ASOUNDLIB_H 0 -#endif - -#ifndef HAVE_BYTESWAP_H -#define HAVE_BYTESWAP_H 0 -#endif - -#ifndef HAVE_DECL_S_IRGRP -#define HAVE_DECL_S_IRGRP 0 -#endif - -#ifndef HAVE_ENDIAN_H -#define HAVE_ENDIAN_H 0 -#endif - -#ifndef HAVE_FSYNC -#define HAVE_FSYNC 0 -#endif - -#ifndef HAVE_LOCALE_H -#define HAVE_LOCALE_H 0 -#endif - -#ifndef HAVE_LRINT -#define HAVE_LRINT 0 -#endif - -#ifndef HAVE_LRINTF -#define HAVE_LRINTF 0 -#endif - -#ifndef HAVE_MMAP -#define HAVE_MMAP 0 -#endif - -#ifndef HAVE_PREAD -#define HAVE_PREAD 0 -#endif - -#ifndef HAVE_PWRITE -#define HAVE_PWRITE 0 -#endif - -#ifndef HAVE_SETLOCALE -#define HAVE_SETLOCALE 0 -#endif - -#ifndef HAVE_SQLITE3 -#define HAVE_SQLITE3 0 -#endif - -#ifndef HAVE_STDINT_H -#define HAVE_STDINT_H 0 -#endif - -#ifndef HAVE_UNISTD_H -#define HAVE_UNISTD_H 0 -#endif - -#endif - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 2df2316e-8f9d-4860-bba7-f3c16c63eed3 -*/ diff --git a/Libraries/SndFile/Files/src/sfendian.h b/Libraries/SndFile/Files/src/sfendian.h deleted file mode 100644 index 29c656e71..000000000 --- a/Libraries/SndFile/Files/src/sfendian.h +++ /dev/null @@ -1,256 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#if HAVE_STDINT_H -#include -#elif HAVE_INTTYPES_H -#include -#endif - -#if (defined (SIZEOF_INT64_T) && (SIZEOF_INT64_T == 8)) -/* Good, we have int64_t. */ -#elif (defined (SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)) -typedef long long int64_t ; -#elif (defined (SIZEOF_LONG) && (SIZEOF_LONG == 8)) -typedef long int64_t ; -#elif (defined (WIN32) || defined (_WIN32)) -typedef __int64 int64_t ; -#else -#error "No 64 bit integer type." -#endif - -#if HAVE_BYTESWAP_H - -#include - -#define ENDSWAP_SHORT(x) ((short) bswap_16 (x)) -#define ENDSWAP_INT(x) ((int) bswap_32 (x)) - -#else - -#define ENDSWAP_SHORT(x) ((((x)>>8)&0xFF)+(((x)&0xFF)<<8)) -#define ENDSWAP_INT(x) ((((x)>>24)&0xFF)+(((x)>>8)&0xFF00)+(((x)&0xFF00)<<8)+(((x)&0xFF)<<24)) - -#endif - -/* -** Many file types (ie WAV, AIFF) use sets of four consecutive bytes as a -** marker indicating different sections of the file. -** The following MAKE_MARKER macro allows th creation of integer constants -** for these markers. -*/ - -#if (CPU_IS_LITTLE_ENDIAN == 1) - #define MAKE_MARKER(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24)) -#elif (CPU_IS_BIG_ENDIAN == 1) - #define MAKE_MARKER(a,b,c,d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d)) -#else - #error "Target CPU endian-ness unknown. May need to hand edit src/sfconfig.h" -#endif - -/* -** Macros to handle reading of data of a specific endian-ness into host endian -** shorts and ints. The single input is an unsigned char* pointer to the start -** of the object. There are two versions of each macro as we need to deal with -** both big and little endian CPUs. -*/ - -#if (CPU_IS_LITTLE_ENDIAN == 1) - #define LES2H_SHORT(x) (x) - #define LEI2H_INT(x) (x) - - #define BES2H_SHORT(x) ENDSWAP_SHORT (x) - #define BEI2H_INT(x) ENDSWAP_INT (x) - - #define H2BE_SHORT(x) ENDSWAP_SHORT (x) - #define H2BE_INT(x) ENDSWAP_INT (x) - -#elif (CPU_IS_BIG_ENDIAN == 1) - #define LES2H_SHORT(x) ENDSWAP_SHORT (x) - #define LEI2H_INT(x) ENDSWAP_INT (x) - - #define BES2H_SHORT(x) (x) - #define BEI2H_INT(x) (x) - - #define H2LE_SHORT(x) ENDSWAP_SHORT (x) - #define H2LE_INT(x) ENDSWAP_INT (x) - -#else - #error "Target CPU endian-ness unknown. May need to hand edit src/sfconfig.h" -#endif - -#define LET2H_SHORT_PTR(x) ((x) [1] + ((x) [2] << 8)) -#define LET2H_INT_PTR(x) (((x) [0] << 8) + ((x) [1] << 16) + ((x) [2] << 24)) - -#define BET2H_SHORT_PTR(x) (((x) [0] << 8) + (x) [1]) -#define BET2H_INT_PTR(x) (((x) [0] << 24) + ((x) [1] << 16) + ((x) [2] << 8)) - -/*----------------------------------------------------------------------------------------------- -** Generic functions for performing endian swapping on integer arrays. -*/ - -static inline void -endswap_short_array (short *ptr, int len) -{ short temp ; - - while (--len >= 0) - { temp = ptr [len] ; - ptr [len] = ENDSWAP_SHORT (temp) ; - } ; -} /* endswap_short_array */ - -static inline void -endswap_short_copy (short *dest, const short *src, int len) -{ - while (--len >= 0) - { dest [len] = ENDSWAP_SHORT (src [len]) ; - } ; -} /* endswap_short_copy */ - -static inline void -endswap_int_array (int *ptr, int len) -{ int temp ; - - while (--len >= 0) - { temp = ptr [len] ; - ptr [len] = ENDSWAP_INT (temp) ; - } ; -} /* endswap_int_array */ - -static inline void -endswap_int_copy (int *dest, const int *src, int len) -{ - while (--len >= 0) - { dest [len] = ENDSWAP_INT (src [len]) ; - } ; -} /* endswap_int_copy */ - -/*======================================================================================== -*/ - -#if (HAVE_BYTESWAP_H && defined (SIZEOF_INT64_T) && (SIZEOF_INT64_T == 8)) - -static inline void -endswap_int64_t_array (int64_t *ptr, int len) -{ int64_t value ; - - while (--len >= 0) - { value = ptr [len] ; - ptr [len] = bswap_64 (value) ; - } ; -} /* endswap_int64_t_array */ - -static inline void -endswap_int64_t_copy (int64_t *dest, const int64_t *src, int len) -{ int64_t value ; - - while (--len >= 0) - { value = src [len] ; - dest [len] = bswap_64 (value) ; - } ; -} /* endswap_int64_t_copy */ - -#else - -static inline void -endswap_int64_t_array (int64_t *ptr, int len) -{ unsigned char *ucptr, temp ; - - ucptr = (unsigned char *) ptr ; - ucptr += 8 * len ; - while (--len >= 0) - { ucptr -= 8 ; - - temp = ucptr [0] ; - ucptr [0] = ucptr [7] ; - ucptr [7] = temp ; - - temp = ucptr [1] ; - ucptr [1] = ucptr [6] ; - ucptr [6] = temp ; - - temp = ucptr [2] ; - ucptr [2] = ucptr [5] ; - ucptr [5] = temp ; - - temp = ucptr [3] ; - ucptr [3] = ucptr [4] ; - ucptr [4] = temp ; - } ; -} /* endswap_int64_t_array */ - -static inline void -endswap_int64_t_copy (int64_t *dest, const int64_t *src, int len) -{ const unsigned char *psrc ; - unsigned char *pdest ; - - if (dest == src) - { endswap_int64_t_array (dest, len) ; - return ; - } ; - - psrc = ((const unsigned char *) src) + 8 * len ; - pdest = ((unsigned char *) dest) + 8 * len ; - while (--len >= 0) - { psrc -= 8 ; - pdest -= 8 ; - - pdest [0] = psrc [7] ; - pdest [2] = psrc [5] ; - pdest [4] = psrc [3] ; - pdest [6] = psrc [1] ; - pdest [7] = psrc [0] ; - pdest [1] = psrc [6] ; - pdest [3] = psrc [4] ; - pdest [5] = psrc [2] ; - } ; -} /* endswap_int64_t_copy */ - -#endif - -/* A couple of wrapper functions. */ - -static inline void -endswap_float_array (float *ptr, int len) -{ endswap_int_array ((void *) ptr, len) ; -} /* endswap_float_array */ - -static inline void -endswap_double_array (double *ptr, int len) -{ endswap_int64_t_array ((void *) ptr, len) ; -} /* endswap_double_array */ - -static inline void -endswap_float_copy (float *dest, const float *src, int len) -{ endswap_int_copy ((int *) dest, (const int *) src, len) ; -} /* endswap_float_copy */ - -static inline void -endswap_double_copy (double *dest, const double *src, int len) -{ endswap_int64_t_copy ((int64_t *) dest, (const int64_t *) src, len) ; -} /* endswap_double_copy */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: f0c5cd54-42d3-4237-90ec-11fe24995de7 -*/ diff --git a/Libraries/SndFile/Files/src/sndfile.c b/Libraries/SndFile/Files/src/sndfile.c deleted file mode 100644 index 40811c8e4..000000000 --- a/Libraries/SndFile/Files/src/sndfile.c +++ /dev/null @@ -1,2642 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#define SNDFILE_MAGICK 0x1234C0DE - -typedef struct -{ int error ; - const char *str ; -} ErrorStruct ; - -static -ErrorStruct SndfileErrors [] = -{ - /* Public error values and their associated strings. */ - { SF_ERR_NO_ERROR , "No Error." }, - { SF_ERR_UNRECOGNISED_FORMAT , "File opened for read. Format not recognised." }, - { SF_ERR_SYSTEM , "System error." /* Often replaced. */ }, - { SF_ERR_MALFORMED_FILE , "Supported file format but file is malformed." }, - { SF_ERR_UNSUPPORTED_ENCODING , "Supported file format but unsupported encoding." }, - - /* Private error values and their associated strings. */ - { SFE_BAD_FILE , "File does not exist or is not a regular file (possibly a pipe?)." }, - { SFE_BAD_FILE_READ , "File exists but no data could be read." }, - { SFE_OPEN_FAILED , "Could not open file." }, - { SFE_BAD_SNDFILE_PTR , "Not a valid SNDFILE* pointer." }, - { SFE_BAD_SF_INFO_PTR , "NULL SF_INFO pointer passed to libsndfile." }, - { SFE_BAD_SF_INCOMPLETE , "SF_PRIVATE struct incomplete and end of header parsing." }, - { SFE_BAD_FILE_PTR , "Bad FILE pointer." }, - { SFE_BAD_INT_PTR , "Internal error, Bad pointer." }, - { SFE_BAD_STAT_SIZE , "Error : software was misconfigured at compile time (sizeof statbuf.st_size)." }, - - { SFE_MALLOC_FAILED , "Internal malloc () failed." }, - { SFE_UNIMPLEMENTED , "File contains data in an unimplemented format." }, - { SFE_BAD_READ_ALIGN , "Attempt to read a non-integer number of channels." }, - { SFE_BAD_WRITE_ALIGN , "Attempt to write a non-integer number of channels." }, - { SFE_UNKNOWN_FORMAT , "File contains data in an unknown format." }, - { SFE_NOT_READMODE , "Read attempted on file currently open for write." }, - { SFE_NOT_WRITEMODE , "Write attempted on file currently open for read." }, - { SFE_BAD_MODE_RW , "This file format does not support read/write mode." }, - { SFE_BAD_SF_INFO , "Internal error : SF_INFO struct incomplete." }, - { SFE_BAD_OFFSET , "Error : supplied offset beyond end of file." }, - { SFE_NO_EMBED_SUPPORT , "Error : embedding not supported for this file format." }, - { SFE_NO_EMBEDDED_RDWR , "Error : cannot open embedded file read/write." }, - { SFE_NO_PIPE_WRITE , "Error : this file format does not support pipe write." }, - { SFE_BAD_RDWR_FORMAT , "Attempted to open read only format for RDWR." }, - { SFE_BAD_VIRTUAL_IO , "Error : bad pointer on SF_VIRTUAL_IO struct." }, - - { SFE_INTERLEAVE_MODE , "Attempt to write to file with non-interleaved data." }, - { SFE_INTERLEAVE_SEEK , "Bad karma in seek during interleave read operation." }, - { SFE_INTERLEAVE_READ , "Bad karma in read during interleave read operation." }, - - { SFE_INTERNAL , "Unspecified internal error." }, - { SFE_BAD_CONTROL_CMD , "Bad command passed to function sf_command()." }, - { SFE_BAD_ENDIAN , "Bad endian-ness. Try default endian-ness" }, - { SFE_CHANNEL_COUNT , "Too many channels specified." }, - - { SFE_BAD_SEEK , "Internal psf_fseek() failed." }, - { SFE_NOT_SEEKABLE , "Seek attempted on unseekable file type." }, - { SFE_AMBIGUOUS_SEEK , "Error : combination of file open mode and seek command is ambiguous." }, - { SFE_WRONG_SEEK , "Error : invalid seek parameters." }, - { SFE_SEEK_FAILED , "Error : parameters OK, but psf_seek() failed." }, - - { SFE_BAD_OPEN_MODE , "Error : bad mode parameter for file open." }, - { SFE_OPEN_PIPE_RDWR , "Error : attempt toopen a pipe in read/write mode." }, - { SFE_RDWR_POSITION , "Error on RDWR position (cryptic)." }, - { SFE_RDWR_BAD_HEADER , "Error : Cannot open file in read/write mode due to string data in header." }, - - { SFE_STR_NO_SUPPORT , "Error : File type does not support string data." }, - { SFE_STR_NOT_WRITE , "Error : Trying to set a string when file is not in write mode." }, - { SFE_STR_MAX_DATA , "Error : Maximum string data storage reached." }, - { SFE_STR_MAX_COUNT , "Error : Maximum string data count reached." }, - { SFE_STR_BAD_TYPE , "Error : Bad string data type." }, - { SFE_STR_NO_ADD_END , "Error : file type does not support strings added at end of file." }, - { SFE_STR_BAD_STRING , "Error : bad string." }, - { SFE_STR_WEIRD , "Error : Weird string error." }, - - { SFE_WAV_NO_RIFF , "Error in WAV file. No 'RIFF' chunk marker." }, - { SFE_WAV_NO_WAVE , "Error in WAV file. No 'WAVE' chunk marker." }, - { SFE_WAV_NO_FMT , "Error in WAV file. No 'fmt ' chunk marker." }, - { SFE_WAV_FMT_SHORT , "Error in WAV file. Short 'fmt ' chunk." }, - - { SFE_WAV_BAD_FACT , "Error in WAV file. 'fact' chunk out of place." }, - { SFE_WAV_BAD_PEAK , "Error in WAV file. Bad 'PEAK' chunk." }, - { SFE_WAV_PEAK_B4_FMT , "Error in WAV file. 'PEAK' chunk found before 'fmt ' chunk." }, - - { SFE_WAV_BAD_FORMAT , "Error in WAV file. Errors in 'fmt ' chunk." }, - { SFE_WAV_BAD_BLOCKALIGN , "Error in WAV file. Block alignment in 'fmt ' chunk is incorrect." }, - { SFE_WAV_NO_DATA , "Error in WAV file. No 'data' chunk marker." }, - { SFE_WAV_BAD_LIST , "Error in WAV file. Malformed LIST chunk." }, - { SFE_WAV_UNKNOWN_CHUNK , "Error in WAV file. File contains an unknown chunk marker." }, - { SFE_WAV_WVPK_DATA , "Error in WAV file. Data is in WAVPACK format." }, - - { SFE_WAV_ADPCM_NOT4BIT , "Error in ADPCM WAV file. Invalid bit width." }, - { SFE_WAV_ADPCM_CHANNELS , "Error in ADPCM WAV file. Invalid number of channels." }, - { SFE_WAV_GSM610_FORMAT , "Error in GSM610 WAV file. Invalid format chunk." }, - - { SFE_AIFF_NO_FORM , "Error in AIFF file, bad 'FORM' marker." }, - { SFE_AIFF_AIFF_NO_FORM , "Error in AIFF file, 'AIFF' marker without 'FORM'." }, - { SFE_AIFF_COMM_NO_FORM , "Error in AIFF file, 'COMM' marker without 'FORM'." }, - { SFE_AIFF_SSND_NO_COMM , "Error in AIFF file, 'SSND' marker without 'COMM'." }, - { SFE_AIFF_UNKNOWN_CHUNK , "Error in AIFF file, unknown chunk." }, - { SFE_AIFF_COMM_CHUNK_SIZE, "Error in AIFF file, bad 'COMM' chunk size." }, - { SFE_AIFF_BAD_COMM_CHUNK , "Error in AIFF file, bad 'COMM' chunk." }, - { SFE_AIFF_PEAK_B4_COMM , "Error in AIFF file. 'PEAK' chunk found before 'COMM' chunk." }, - { SFE_AIFF_BAD_PEAK , "Error in AIFF file. Bad 'PEAK' chunk." }, - { SFE_AIFF_NO_SSND , "Error in AIFF file, bad 'SSND' chunk." }, - { SFE_AIFF_NO_DATA , "Error in AIFF file, no sound data." }, - { SFE_AIFF_RW_SSND_NOT_LAST, "Error in AIFF file, RDWR only possible if SSND chunk at end of file." }, - - { SFE_AU_UNKNOWN_FORMAT , "Error in AU file, unknown format." }, - { SFE_AU_NO_DOTSND , "Error in AU file, missing '.snd' or 'dns.' marker." }, - { SFE_AU_EMBED_BAD_LEN , "Embedded AU file with unknown length." }, - - { SFE_RAW_READ_BAD_SPEC , "Error while opening RAW file for read. Must specify format and channels.\n" - "Possibly trying to open unsupported format." - }, - { SFE_RAW_BAD_BITWIDTH , "Error. RAW file bitwidth must be a multiple of 8." }, - { SFE_RAW_BAD_FORMAT , "Error. Bad format field in SF_INFO struct when openning a RAW file for read." }, - - { SFE_PAF_NO_MARKER , "Error in PAF file, no marker." }, - { SFE_PAF_VERSION , "Error in PAF file, bad version." }, - { SFE_PAF_UNKNOWN_FORMAT , "Error in PAF file, unknown format." }, - { SFE_PAF_SHORT_HEADER , "Error in PAF file. File shorter than minimal header." }, - - { SFE_SVX_NO_FORM , "Error in 8SVX / 16SV file, no 'FORM' marker." }, - { SFE_SVX_NO_BODY , "Error in 8SVX / 16SV file, no 'BODY' marker." }, - { SFE_SVX_NO_DATA , "Error in 8SVX / 16SV file, no sound data." }, - { SFE_SVX_BAD_COMP , "Error in 8SVX / 16SV file, unsupported compression format." }, - { SFE_SVX_BAD_NAME_LENGTH , "Error in 8SVX / 16SV file, NAME chunk too long." }, - - { SFE_NIST_BAD_HEADER , "Error in NIST file, bad header." }, - { SFE_NIST_CRLF_CONVERISON, "Error : NIST file damaged by Windows CR -> CRLF conversion process." }, - { SFE_NIST_BAD_ENCODING , "Error in NIST file, unsupported compression format." }, - - { SFE_VOC_NO_CREATIVE , "Error in VOC file, no 'Creative Voice File' marker." }, - { SFE_VOC_BAD_FORMAT , "Error in VOC file, bad format." }, - { SFE_VOC_BAD_VERSION , "Error in VOC file, bad version number." }, - { SFE_VOC_BAD_MARKER , "Error in VOC file, bad marker in file." }, - { SFE_VOC_BAD_SECTIONS , "Error in VOC file, incompatible VOC sections." }, - { SFE_VOC_MULTI_SAMPLERATE, "Error in VOC file, more than one sample rate defined." }, - { SFE_VOC_MULTI_SECTION , "Unimplemented VOC file feature, file contains multiple sound sections." }, - { SFE_VOC_MULTI_PARAM , "Error in VOC file, file contains multiple bit or channel widths." }, - { SFE_VOC_SECTION_COUNT , "Error in VOC file, too many sections." }, - { SFE_VOC_NO_PIPE , "Error : not able to operate on VOC files over a pipe." }, - - { SFE_IRCAM_NO_MARKER , "Error in IRCAM file, bad IRCAM marker." }, - { SFE_IRCAM_BAD_CHANNELS , "Error in IRCAM file, bad channel count." }, - { SFE_IRCAM_UNKNOWN_FORMAT, "Error in IRCAM file, unknow encoding format." }, - - { SFE_W64_64_BIT , "Error in W64 file, file contains 64 bit offset." }, - - { SFE_W64_NO_RIFF , "Error in W64 file. No 'riff' chunk marker." }, - { SFE_W64_NO_WAVE , "Error in W64 file. No 'wave' chunk marker." }, - { SFE_W64_NO_FMT , "Error in W64 file. No 'fmt ' chunk marker." }, - { SFE_W64_NO_DATA , "Error in W64 file. No 'data' chunk marker." }, - - { SFE_W64_FMT_SHORT , "Error in W64 file. Short 'fmt ' chunk." }, - { SFE_W64_FMT_TOO_BIG , "Error in W64 file. 'fmt ' chunk too large." }, - - { SFE_W64_ADPCM_NOT4BIT , "Error in ADPCM W64 file. Invalid bit width." }, - { SFE_W64_ADPCM_CHANNELS , "Error in ADPCM W64 file. Invalid number of channels." }, - { SFE_W64_GSM610_FORMAT , "Error in GSM610 W64 file. Invalid format chunk." }, - - { SFE_MAT4_BAD_NAME , "Error in MAT4 file. No variable name." }, - { SFE_MAT4_NO_SAMPLERATE , "Error in MAT4 file. No sample rate." }, - { SFE_MAT4_ZERO_CHANNELS , "Error in MAT4 file. Channel count is zero." }, - - { SFE_MAT5_BAD_ENDIAN , "Error in MAT5 file. Not able to determine endian-ness." }, - { SFE_MAT5_NO_BLOCK , "Error in MAT5 file. Bad block structure." }, - { SFE_MAT5_SAMPLE_RATE , "Error in MAT5 file. Not able to determine sample rate." }, - { SFE_MAT5_ZERO_CHANNELS , "Error in MAT5 file. Channel count is zero." }, - - { SFE_PVF_NO_PVF1 , "Error in PVF file. No PVF1 marker." }, - { SFE_PVF_BAD_HEADER , "Error in PVF file. Bad header." }, - { SFE_PVF_BAD_BITWIDTH , "Error in PVF file. Bad bit width." }, - - { SFE_XI_BAD_HEADER , "Error in XI file. Bad header." }, - { SFE_XI_EXCESS_SAMPLES , "Error in XI file. Excess samples in file." }, - { SFE_XI_NO_PIPE , "Error : not able to operate on XI files over a pipe." }, - - { SFE_HTK_NO_PIPE , "Error : not able to operate on HTK files over a pipe." }, - - { SFE_SDS_NOT_SDS , "Error : not an SDS file." }, - { SFE_SDS_BAD_BIT_WIDTH , "Error : bad bit width for SDS file." }, - - { SFE_SD2_FD_DISALLOWED , "Error : cannot open SD2 file without a file name." }, - { SFE_SD2_BAD_DATA_OFFSET , "Error : bad data offset." }, - { SFE_SD2_BAD_MAP_OFFSET , "Error : bad map offset." }, - { SFE_SD2_BAD_DATA_LENGTH , "Error : bad data length." }, - { SFE_SD2_BAD_MAP_LENGTH , "Error : bad map length." }, - { SFE_SD2_BAD_RSRC , "Error : bad resource fork." }, - { SFE_SD2_BAD_SAMPLE_SIZE , "Error : bad sample size." }, - - { SFE_FLAC_BAD_HEADER , "Error : bad flac header." }, - { SFE_FLAC_NEW_DECODER , "Error : problem while creating flac decoder." }, - { SFE_FLAC_INIT_DECODER , "Error : problem while initialization of the flac decoder." }, - { SFE_FLAC_LOST_SYNC , "Error : flac decoder lost sync." }, - { SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." }, - { SFE_FLAC_UNKOWN_ERROR , "Error : unkown error in flac decoder." }, - - { SFE_DWVW_BAD_BITWIDTH , "Error : Bad bit width for DWVW encoding. Must be 12, 16 or 24." }, - { SFE_G72X_NOT_MONO , "Error : G72x encoding does not support more than 1 channel." }, - - { SFE_MAX_ERROR , "Maximum error number." }, - { SFE_MAX_ERROR + 1 , NULL } -} ; - -/*------------------------------------------------------------------------------ -*/ - -static int format_from_extension (SF_PRIVATE *psf) ; -static int guess_file_type (SF_PRIVATE *psf) ; -static int validate_sfinfo (SF_INFO *sfinfo) ; -static int validate_psf (SF_PRIVATE *psf) ; -static void save_header_info (SF_PRIVATE *psf) ; -static void copy_filename (SF_PRIVATE *psf, const char *path) ; -static int psf_close (SF_PRIVATE *psf) ; -static int psf_open_file (SF_PRIVATE *psf, int mode, SF_INFO *sfinfo) ; - -static int try_resource_fork (SF_PRIVATE * psf, int mode) ; - -/*------------------------------------------------------------------------------ -** Private (static) variables. -*/ - -static int sf_errno = 0 ; -static char sf_logbuffer [SF_BUFFER_LEN] = { 0 } ; -static char sf_syserr [SF_SYSERR_LEN] = { 0 } ; - -/*------------------------------------------------------------------------------ -*/ - -#define VALIDATE_SNDFILE_AND_ASSIGN_PSF(a,b,c) \ - { if (! (a)) \ - { sf_errno = SFE_BAD_SNDFILE_PTR ; \ - return 0 ; \ - } ; \ - (b) = (SF_PRIVATE*) (a) ; \ - if ((b)->virtual_io == SF_FALSE && \ - psf_file_valid (b) == 0) \ - { (b)->error = SFE_BAD_FILE_PTR ; \ - return 0 ; \ - } ; \ - if ((b)->Magick != SNDFILE_MAGICK) \ - { (b)->error = SFE_BAD_SNDFILE_PTR ; \ - return 0 ; \ - } ; \ - if (c) (b)->error = 0 ; \ - } - -/*------------------------------------------------------------------------------ -** Public functions. -*/ - -SNDFILE* -sf_open (const char *path, int mode, SF_INFO *sfinfo) -{ SF_PRIVATE *psf ; - int error = 0 ; - - if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL) - { sf_errno = SFE_MALLOC_FAILED ; - return NULL ; - } ; - - memset (psf, 0, sizeof (SF_PRIVATE)) ; - psf_init_files (psf) ; - - psf_log_printf (psf, "File : %s\n", path) ; - - copy_filename (psf, path) ; - - if (strcmp (path, "-") == 0) - error = psf_set_stdio (psf, mode) ; - else - error = psf_fopen (psf, path, mode) ; - - if (error == 0) - error = psf_open_file (psf, mode, sfinfo) ; - - if (error) - { sf_errno = error ; - if (error == SFE_SYSTEM) - LSF_SNPRINTF (sf_syserr, sizeof (sf_syserr), "%s", psf->syserr) ; - LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "%s", psf->logbuffer) ; - psf_close (psf) ; - return NULL ; - } ; - - memcpy (sfinfo, &(psf->sf), sizeof (SF_INFO)) ; - - return (SNDFILE*) psf ; -} /* sf_open */ - -SNDFILE* -sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) -{ SF_PRIVATE *psf ; - int error ; - - if ((sfinfo->format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) - { sf_errno = SFE_SD2_FD_DISALLOWED ; - return NULL ; - } ; - - if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL) - { sf_errno = SFE_MALLOC_FAILED ; - return NULL ; - } ; - - psf_init_files (psf) ; - - psf_set_file (psf, fd) ; - psf->is_pipe = psf_is_pipe (psf) ; - psf->fileoffset = psf_ftell (psf) ; - - if (! close_desc) - psf->do_not_close_descriptor = SF_TRUE ; - - error = psf_open_file (psf, mode, sfinfo) ; - - if (error) - { sf_errno = error ; - if (error == SFE_SYSTEM) - LSF_SNPRINTF (sf_syserr, sizeof (sf_syserr), "%s", psf->syserr) ; - LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "%s", psf->logbuffer) ; - psf_close (psf) ; - return NULL ; - } ; - - memcpy (sfinfo, &(psf->sf), sizeof (SF_INFO)) ; - - return (SNDFILE*) psf ; -} /* sf_open_fd */ - -SNDFILE* -sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) -{ SF_PRIVATE *psf ; - int error = 0 ; - - /* Make sure we have a valid set ot virtual pointers. */ - if (sfvirtual->get_filelen == NULL || sfvirtual->seek == NULL || sfvirtual->tell == NULL) - { sf_errno = SFE_BAD_VIRTUAL_IO ; - LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "Bad vio_get_filelen / vio_seek / vio_tell in SF_VIRTUAL_IO struct.\n") ; - return NULL ; - } ; - - if ((mode == SFM_READ || mode == SFM_RDWR) && sfvirtual->read == NULL) - { sf_errno = SFE_BAD_VIRTUAL_IO ; - LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "Bad vio_read in SF_VIRTUAL_IO struct.\n") ; - return NULL ; - } ; - - if ((mode == SFM_WRITE || mode == SFM_RDWR) && sfvirtual->write == NULL) - { sf_errno = SFE_BAD_VIRTUAL_IO ; - LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "Bad vio_write in SF_VIRTUAL_IO struct.\n") ; - return NULL ; - } ; - - if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL) - { sf_errno = SFE_MALLOC_FAILED ; - return NULL ; - } ; - - psf_init_files (psf) ; - - psf->virtual_io = SF_TRUE ; - psf->vio = *sfvirtual ; - psf->vio_user_data = user_data ; - - psf->mode = mode ; - - error = psf_open_file (psf, mode, sfinfo) ; - - if (error) - { sf_errno = error ; - if (error == SFE_SYSTEM) - LSF_SNPRINTF (sf_syserr, sizeof (sf_syserr), "%s", psf->syserr) ; - LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "%s", psf->logbuffer) ; - psf_close (psf) ; - return NULL ; - } ; - - memcpy (sfinfo, &(psf->sf), sizeof (SF_INFO)) ; - - return (SNDFILE*) psf ; -} /* sf_open_virtual */ - -int -sf_close (SNDFILE *sndfile) -{ SF_PRIVATE *psf ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - return psf_close (psf) ; -} /* sf_close */ - -void -sf_write_sync (SNDFILE *sndfile) -{ SF_PRIVATE *psf ; - - if ((psf = (SF_PRIVATE *) sndfile) == NULL) - return ; - - psf_fsync (psf) ; - - return ; -} /* sf_write_sync */ - -/*============================================================================== -*/ - -const char* -sf_error_number (int errnum) -{ static const char *bad_errnum = - "No error defined for this error number. This is a bug in libsndfile." ; - int k ; - - if (errnum == SFE_MAX_ERROR) - return SndfileErrors [0].str ; - - if (errnum < 0 || errnum > SFE_MAX_ERROR) - { /* This really shouldn't happen in release versions. */ - printf ("Not a valid error number (%d).\n", errnum) ; - return bad_errnum ; - } ; - - for (k = 0 ; SndfileErrors [k].str ; k++) - if (errnum == SndfileErrors [k].error) - return SndfileErrors [k].str ; - - return bad_errnum ; -} /* sf_error_number */ - -const char* -sf_strerror (SNDFILE *sndfile) -{ SF_PRIVATE *psf = NULL ; - int errnum ; - - if (! sndfile) - { errnum = sf_errno ; - if (errnum == SFE_SYSTEM && sf_syserr [0]) - return sf_syserr ; - } - else - { psf = (SF_PRIVATE *) sndfile ; - - if (psf->Magick != SNDFILE_MAGICK) - return "sf_strerror : Bad magic number." ; - - errnum = psf->error ; - - if (errnum == SFE_SYSTEM && psf->syserr [0]) - return psf->syserr ; - } ; - - return sf_error_number (errnum) ; -} /* sf_strerror */ - -/*------------------------------------------------------------------------------ -*/ - -int -sf_error (SNDFILE *sndfile) -{ SF_PRIVATE *psf ; - - if (! sndfile) - { if (sf_error != 0) - return sf_errno ; - return 0 ; - } ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ; - - if (psf->error) - return psf->error ; - - return 0 ; -} /* sf_error */ - -/*------------------------------------------------------------------------------ -*/ - -int -sf_perror (SNDFILE *sndfile) -{ SF_PRIVATE *psf ; - int errnum ; - - if (! sndfile) - { errnum = sf_errno ; - } - else - { VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ; - errnum = psf->error ; - } ; - - fprintf (stderr, "%s\n", sf_error_number (errnum)) ; - return SFE_NO_ERROR ; -} /* sf_perror */ - - -/*------------------------------------------------------------------------------ -*/ - -int -sf_error_str (SNDFILE *sndfile, char *str, size_t maxlen) -{ SF_PRIVATE *psf ; - int errnum ; - - if (! str) - return SFE_INTERNAL ; - - if (! sndfile) - errnum = sf_errno ; - else - { VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ; - errnum = psf->error ; - } ; - - LSF_SNPRINTF (str, maxlen, "%s", sf_error_number (errnum)) ; - - return SFE_NO_ERROR ; -} /* sf_error_str */ - -/*============================================================================== -*/ - -int -sf_format_check (const SF_INFO *info) -{ int subformat, endian ; - - subformat = info->format & SF_FORMAT_SUBMASK ; - endian = info->format & SF_FORMAT_ENDMASK ; - - /* This is the place where each file format can check if the suppiled - ** SF_INFO struct is valid. - ** Return 0 on failure, 1 ons success. - */ - - if (info->channels < 1 || info->channels > 256) - return 0 ; - - if (info->samplerate < 0) - return 0 ; - - switch (info->format & SF_FORMAT_TYPEMASK) - { case SF_FORMAT_WAV : - case SF_FORMAT_WAVEX : - /* WAV now allows both endian, RIFF or RIFX (little or big respectively) */ - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2) - return 1 ; - if (subformat == SF_FORMAT_GSM610 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_G721_32 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - break ; - - case SF_FORMAT_AIFF : - /* AIFF does allow both endian-nesses for PCM data.*/ - if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - /* Other encodings. Check for endian-ness. */ - if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU) - return 0 ; - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - if ((subformat == SF_FORMAT_DWVW_12 || subformat == SF_FORMAT_DWVW_16 || - subformat == SF_FORMAT_DWVW_24) && info-> channels == 1) - return 1 ; - if (subformat == SF_FORMAT_GSM610 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_IMA_ADPCM && (info->channels == 1 || info->channels == 2)) - return 1 ; - break ; - - case SF_FORMAT_AU : - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - if (subformat == SF_FORMAT_G721_32 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_G723_24 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_G723_40 && info->channels == 1) - return 1 ; - break ; - - case SF_FORMAT_CAF : - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - break ; - - case SF_FORMAT_RAW : - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - if (subformat == SF_FORMAT_ALAW || subformat == SF_FORMAT_ULAW) - return 1 ; - if ((subformat == SF_FORMAT_DWVW_12 || subformat == SF_FORMAT_DWVW_16 || - subformat == SF_FORMAT_DWVW_24) && info-> channels == 1) - return 1 ; - if (subformat == SF_FORMAT_GSM610 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_VOX_ADPCM && info->channels == 1) - return 1 ; - break ; - - case SF_FORMAT_PAF : - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - break ; - - case SF_FORMAT_SVX : - /* SVX currently does not support more than one channel for write. - ** Read will allow more than one channel but only allow one here. - */ - if (info->channels != 1) - return 0 ; - /* Always big endian. */ - if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU) - return 0 ; - - if ((subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) && info->channels == 1) - return 1 ; - break ; - - case SF_FORMAT_NIST : - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - break ; - - case SF_FORMAT_IRCAM : - if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW || subformat == SF_FORMAT_FLOAT) - return 1 ; - break ; - - case SF_FORMAT_VOC : - /* VOC is strictly little endian. */ - if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU) - return 0 ; - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - break ; - - case SF_FORMAT_W64 : - /* W64 is strictly little endian. */ - if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU) - return 0 ; - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2) - return 1 ; - if (subformat == SF_FORMAT_GSM610 && info->channels == 1) - return 1 ; - if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - break ; - - case SF_FORMAT_MAT4 : - if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - break ; - - case SF_FORMAT_MAT5 : - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32) - return 1 ; - if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE) - return 1 ; - break ; - - case SF_FORMAT_PVF : - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32) - return 1 ; - break ; - - case SF_FORMAT_XI : - if (info->channels != 1) - return 0 ; - if (subformat == SF_FORMAT_DPCM_8 || subformat == SF_FORMAT_DPCM_16) - return 1 ; - break ; - - case SF_FORMAT_HTK : - /* HTK is strictly big endian. */ - if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU) - return 0 ; - if (info->channels != 1) - return 0 ; - if (subformat == SF_FORMAT_PCM_16) - return 1 ; - break ; - - case SF_FORMAT_SDS : - /* SDS is strictly big endian. */ - if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU) - return 0 ; - if (info->channels != 1) - return 0 ; - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24) - return 1 ; - break ; - - case SF_FORMAT_AVR : - /* SDS is strictly big endian. */ - if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU) - return 0 ; - if (info->channels > 2) - return 0 ; - if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16) - return 1 ; - break ; - - case SF_FORMAT_FLAC : - /* FLAC can't do more than 8 channels. */ - if (info->channels > 8) - return 0 ; - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24) - return 1 ; - break ; - - case SF_FORMAT_SD2 : - /* SD2 is strictly big endian. */ - if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU) - return 0 ; - if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24) - return 1 ; - break ; - - default : break ; - } ; - - return 0 ; -} /* sf_format_check */ - -/*------------------------------------------------------------------------------ -*/ - -int -sf_command (SNDFILE *sndfile, int command, void *data, int datasize) -{ SF_PRIVATE *psf = NULL ; - int old_value ; - - /* This set of commands do not need the sndfile parameter. */ - switch (command) - { case SFC_GET_LIB_VERSION : - if (data == NULL) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - if (ENABLE_EXPERIMENTAL_CODE) - LSF_SNPRINTF (data, datasize, "%s-%s-exp", PACKAGE_NAME, PACKAGE_VERSION) ; - else - LSF_SNPRINTF (data, datasize, "%s-%s", PACKAGE_NAME, PACKAGE_VERSION) ; - return strlen (data) ; - - case SFC_GET_SIMPLE_FORMAT_COUNT : - if (data == NULL || datasize != SIGNED_SIZEOF (int)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - *((int*) data) = psf_get_format_simple_count () ; - return 0 ; - - case SFC_GET_SIMPLE_FORMAT : - if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - return psf_get_format_simple (data) ; - - case SFC_GET_FORMAT_MAJOR_COUNT : - if (data == NULL || datasize != SIGNED_SIZEOF (int)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - *((int*) data) = psf_get_format_major_count () ; - return 0 ; - - case SFC_GET_FORMAT_MAJOR : - if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - return psf_get_format_major (data) ; - - case SFC_GET_FORMAT_SUBTYPE_COUNT : - if (data == NULL || datasize != SIGNED_SIZEOF (int)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - *((int*) data) = psf_get_format_subtype_count () ; - return 0 ; - - case SFC_GET_FORMAT_SUBTYPE : - if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - return psf_get_format_subtype (data) ; - - case SFC_GET_FORMAT_INFO : - if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO)) - return (sf_errno = SFE_BAD_CONTROL_CMD) ; - return psf_get_format_info (data) ; - } ; - - if (sndfile == NULL && command == SFC_GET_LOG_INFO) - { if (data == NULL) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - LSF_SNPRINTF (data, datasize, "%s", sf_logbuffer) ; - return strlen (data) ; - } ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - switch (command) - { case SFC_SET_NORM_FLOAT : - old_value = psf->norm_float ; - psf->norm_float = (datasize) ? SF_TRUE : SF_FALSE ; - return old_value ; - - case SFC_SET_NORM_DOUBLE : - old_value = psf->norm_double ; - psf->norm_double = (datasize) ? SF_TRUE : SF_FALSE ; - return old_value ; - - case SFC_GET_NORM_FLOAT : - return psf->norm_float ; - - case SFC_GET_NORM_DOUBLE : - return psf->norm_double ; - - case SFC_SET_SCALE_FLOAT_INT_READ : - old_value = psf->float_int_mult ; - - psf->float_int_mult = (datasize != 0) ? SF_TRUE : SF_FALSE ; - if (psf->float_int_mult && psf->float_max < 0.0) - psf->float_max = psf_calc_signal_max (psf, SF_FALSE) ; - return old_value ; - - case SFC_SET_ADD_PEAK_CHUNK : - { int format = psf->sf.format & SF_FORMAT_TYPEMASK ; - - /* Only WAV and AIFF support the PEAK chunk. */ - if (format != SF_FORMAT_WAV && format != SF_FORMAT_WAVEX && format != SF_FORMAT_AIFF) - return SF_FALSE ; - - format = psf->sf.format & SF_FORMAT_SUBMASK ; - - /* Only files containg the following data types support the PEAK chunk. */ - if (format != SF_FORMAT_FLOAT && format != SF_FORMAT_DOUBLE) - return SF_FALSE ; - - } ; - /* Can only do this is in SFM_WRITE mode. */ - if (psf->mode != SFM_WRITE) - return SF_FALSE ; - /* If data has already been written this must fail. */ - if (psf->have_written) - return SF_FALSE ; - /* Everything seems OK, so set psf->has_peak and re-write header. */ - if (datasize == SF_FALSE) - { if (psf->peak_info) - { free (psf->peak_info) ; - psf->peak_info = NULL ; - } ; - return SF_FALSE ; - } ; - if (psf->peak_info == NULL) - psf->peak_info = peak_info_calloc (psf->sf.channels) ; - - if (psf->write_header) - psf->write_header (psf, SF_TRUE) ; - return SF_TRUE ; - - case SFC_GET_LOG_INFO : - if (data == NULL) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - LSF_SNPRINTF (data, datasize, "%s", psf->logbuffer) ; - break ; - - case SFC_CALC_SIGNAL_MAX : - if (data == NULL || datasize != sizeof (double)) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - *((double*) data) = psf_calc_signal_max (psf, SF_FALSE) ; - break ; - - case SFC_CALC_NORM_SIGNAL_MAX : - if (data == NULL || datasize != sizeof (double)) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - *((double*) data) = psf_calc_signal_max (psf, SF_TRUE) ; - break ; - - case SFC_CALC_MAX_ALL_CHANNELS : - if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - return psf_calc_max_all_channels (psf, (double*) data, SF_FALSE) ; - - case SFC_CALC_NORM_MAX_ALL_CHANNELS : - if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - return psf_calc_max_all_channels (psf, (double*) data, SF_TRUE) ; - - case SFC_UPDATE_HEADER_NOW : - if (psf->write_header) - psf->write_header (psf, SF_TRUE) ; - break ; - - case SFC_SET_UPDATE_HEADER_AUTO : - psf->auto_header = datasize ? SF_TRUE : SF_FALSE ; - return psf->auto_header ; - break ; - - case SFC_SET_ADD_DITHER_ON_WRITE : - case SFC_SET_ADD_DITHER_ON_READ : - /* - ** FIXME ! - ** These are obsolete. Just return. - ** Remove some time after version 1.0.8. - */ - break ; - - case SFC_SET_DITHER_ON_WRITE : - if (data == NULL || datasize != SIGNED_SIZEOF (SF_DITHER_INFO)) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - memcpy (&psf->write_dither, data, sizeof (psf->write_dither)) ; - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - dither_init (psf, SFM_WRITE) ; - break ; - - case SFC_SET_DITHER_ON_READ : - if (data == NULL || datasize != SIGNED_SIZEOF (SF_DITHER_INFO)) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - memcpy (&psf->read_dither, data, sizeof (psf->read_dither)) ; - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - dither_init (psf, SFM_READ) ; - break ; - - case SFC_FILE_TRUNCATE : - if (psf->mode != SFM_WRITE && psf->mode != SFM_RDWR) - return SF_TRUE ; - if (datasize != sizeof (sf_count_t)) - return SF_TRUE ; - { sf_count_t position ; - - position = *((sf_count_t*) data) ; - - if (sf_seek (sndfile, position, SEEK_SET) != position) - return SF_TRUE ; - - psf->sf.frames = position ; - - position = psf_fseek (psf, 0, SEEK_CUR) ; - - return psf_ftruncate (psf, position) ; - } ; - break ; - - case SFC_SET_RAW_START_OFFSET : - if (data == NULL || datasize != sizeof (sf_count_t)) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - - psf->dataoffset = *((sf_count_t*) data) ; - sf_seek (sndfile, 0, SEEK_CUR) ; - break ; - - case SFC_GET_EMBED_FILE_INFO : - if (data == NULL || datasize != sizeof (SF_EMBED_FILE_INFO)) - return (psf->error = SFE_BAD_CONTROL_CMD) ; - - ((SF_EMBED_FILE_INFO*) data)->offset = psf->fileoffset ; - ((SF_EMBED_FILE_INFO*) data)->length = psf->filelength ; - break ; - - /* Lite remove start */ - case SFC_TEST_IEEE_FLOAT_REPLACE : - psf->ieee_replace = (datasize) ? SF_TRUE : SF_FALSE ; - if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_FLOAT) - float32_init (psf) ; - else if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_DOUBLE) - double64_init (psf) ; - else - return (psf->error = SFE_BAD_CONTROL_CMD) ; - break ; - /* Lite remove end */ - - case SFC_SET_CLIPPING : - psf->add_clipping = (datasize) ? SF_TRUE : SF_FALSE ; - return psf->add_clipping ; - - case SFC_GET_CLIPPING : - return psf->add_clipping ; - - case SFC_GET_LOOP_INFO : - if (datasize != sizeof (SF_LOOP_INFO) || data == NULL) - return SF_FALSE ; - if (psf->loop_info == NULL) - return SF_FALSE ; - memcpy (data, psf->loop_info, sizeof (SF_LOOP_INFO)) ; - return SF_TRUE ; - - case SFC_GET_INSTRUMENT : - if (datasize != sizeof (SF_INSTRUMENT) || data == NULL) - return SF_FALSE ; - if (psf->instrument == NULL) - return SF_FALSE ; - memcpy (data, psf->instrument, sizeof (SF_INSTRUMENT)) ; - return SF_TRUE ; - - case SFC_SET_INSTRUMENT : - if (datasize != sizeof (SF_INSTRUMENT) || data == NULL) - return SF_FALSE ; - if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL) - { psf->error = SFE_MALLOC_FAILED ; - return SF_FALSE ; - } ; - memcpy (psf->instrument, data, sizeof (SF_INSTRUMENT)) ; - return SF_TRUE ; - - default : - /* Must be a file specific command. Pass it on. */ - if (psf->command) - return psf->command (psf, command, data, datasize) ; - - psf_log_printf (psf, "*** sf_command : cmd = 0x%X\n", command) ; - return (psf->error = SFE_BAD_CONTROL_CMD) ; - } ; - - return 0 ; -} /* sf_command */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_seek (SNDFILE *sndfile, sf_count_t offset, int whence) -{ SF_PRIVATE *psf ; - sf_count_t seek_from_start = 0, retval ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (! psf->sf.seekable) - { psf->error = SFE_NOT_SEEKABLE ; - return PSF_SEEK_ERROR ; - } ; - - /* If the whence parameter has a mode ORed in, check to see that - ** it makes sense. - */ - if (((whence & SFM_MASK) == SFM_WRITE && psf->mode == SFM_READ) || - ((whence & SFM_MASK) == SFM_WRITE && psf->mode == SFM_WRITE)) - { psf->error = SFE_WRONG_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - /* Convert all SEEK_CUR and SEEK_END into seek_from_start to be - ** used with SEEK_SET. - */ - switch (whence) - { /* The SEEK_SET behaviour is independant of mode. */ - case SEEK_SET : - case SEEK_SET | SFM_READ : - case SEEK_SET | SFM_WRITE : - case SEEK_SET | SFM_RDWR : - seek_from_start = offset ; - break ; - - /* The SEEK_CUR is a little more tricky. */ - case SEEK_CUR : - if (offset == 0) - { if (psf->mode == SFM_READ) - return psf->read_current ; - if (psf->mode == SFM_WRITE) - return psf->write_current ; - } ; - if (psf->mode == SFM_READ) - seek_from_start = psf->read_current + offset ; - else if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - seek_from_start = psf->write_current + offset ; - else - psf->error = SFE_AMBIGUOUS_SEEK ; - break ; - - case SEEK_CUR | SFM_READ : - if (offset == 0) - return psf->read_current ; - seek_from_start = psf->read_current + offset ; - break ; - - case SEEK_CUR | SFM_WRITE : - if (offset == 0) - return psf->write_current ; - seek_from_start = psf->write_current + offset ; - break ; - - /* The SEEK_END */ - case SEEK_END : - case SEEK_END | SFM_READ : - case SEEK_END | SFM_WRITE : - seek_from_start = psf->sf.frames + offset ; - break ; - - default : - psf->error = SFE_BAD_SEEK ; - break ; - } ; - - if (psf->error) - return PSF_SEEK_ERROR ; - - if (seek_from_start < 0 || seek_from_start > psf->sf.frames) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (psf->seek) - { int new_mode = (whence & SFM_MASK) ? (whence & SFM_MASK) : psf->mode ; - - retval = psf->seek (psf, new_mode, seek_from_start) ; - - switch (new_mode) - { case SFM_READ : - psf->read_current = retval ; - break ; - case SFM_WRITE : - psf->write_current = retval ; - break ; - case SFM_RDWR : - psf->read_current = retval ; - psf->write_current = retval ; - new_mode = SFM_READ ; - break ; - } ; - - psf->last_op = new_mode ; - - return retval ; - } ; - - psf->error = SFE_AMBIGUOUS_SEEK ; - return PSF_SEEK_ERROR ; -} /* sf_seek */ - -/*------------------------------------------------------------------------------ -*/ - -const char* -sf_get_string (SNDFILE *sndfile, int str_type) -{ SF_PRIVATE *psf ; - - if ((psf = (SF_PRIVATE*) sndfile) == NULL) - return NULL ; - if (psf->Magick != SNDFILE_MAGICK) - return NULL ; - - return psf_get_string (psf, str_type) ; -} /* sf_get_string */ - -int -sf_set_string (SNDFILE *sndfile, int str_type, const char* str) -{ SF_PRIVATE *psf ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - return psf_set_string (psf, str_type, str) ; -} /* sf_get_string */ - -/*============================================================================== -*/ - -sf_count_t -sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) -{ SF_PRIVATE *psf ; - sf_count_t count ; - int bytewidth, blockwidth ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - bytewidth = (psf->bytewidth > 0) ? psf->bytewidth : 1 ; - blockwidth = (psf->blockwidth > 0) ? psf->blockwidth : 1 ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (bytes < 0 || psf->read_current >= psf->datalength) - { psf_memset (ptr, 0, bytes) ; - return 0 ; - } ; - - if (bytes % (psf->sf.channels * bytewidth)) - { psf->error = SFE_BAD_READ_ALIGN ; - return 0 ; - } ; - - count = psf_fread (ptr, 1, bytes, psf) ; - - if (count < bytes) - psf_memset (((char*) ptr) + count, 0, bytes - count) ; - - psf->read_current += count / blockwidth ; - - psf->last_op = SFM_READ ; - - return count ; -} /* sf_read_raw */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_READ_ALIGN ; - return 0 ; - } ; - - if (len <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, len * sizeof (short)) ; - return 0 ; /* End of file. */ - } ; - - if (! psf->read_short || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_short (psf, ptr, len) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = len - count ; - psf_memset (ptr + count, 0, extra * sizeof (short)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count ; -} /* sf_read_short */ - -sf_count_t -sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (frames <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (short)) ; - return 0 ; /* End of file. */ - } ; - - if (! psf->read_short || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_short (psf, ptr, frames * psf->sf.channels) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = frames * psf->sf.channels - count ; - psf_memset (ptr + count, 0, extra * sizeof (short)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count / psf->sf.channels ; -} /* sf_readf_short */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_READ_ALIGN ; - return 0 ; - } ; - - if (len <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, len * sizeof (int)) ; - return 0 ; - } ; - - if (! psf->read_int || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_int (psf, ptr, len) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = len - count ; - psf_memset (ptr + count, 0, extra * sizeof (int)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count ; -} /* sf_read_int */ - -sf_count_t -sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (frames <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (int)) ; - return 0 ; - } ; - - if (! psf->read_int || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_int (psf, ptr, frames * psf->sf.channels) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = frames * psf->sf.channels - count ; - psf_memset (ptr + count, 0, extra * sizeof (int)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count / psf->sf.channels ; -} /* sf_readf_int */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_READ_ALIGN ; - return 0 ; - } ; - - if (len <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, len * sizeof (float)) ; - return 0 ; - } ; - - if (! psf->read_float || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_float (psf, ptr, len) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = len - count ; - psf_memset (ptr + count, 0, extra * sizeof (float)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count ; -} /* sf_read_float */ - -sf_count_t -sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (frames <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (float)) ; - return 0 ; - } ; - - if (! psf->read_float || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_float (psf, ptr, frames * psf->sf.channels) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = frames * psf->sf.channels - count ; - psf_memset (ptr + count, 0, extra * sizeof (float)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count / psf->sf.channels ; -} /* sf_readf_float */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_READ_ALIGN ; - return 0 ; - } ; - - if (len <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, len * sizeof (double)) ; - return 0 ; - } ; - - if (! psf->read_double || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_double (psf, ptr, len) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = len - count ; - psf_memset (ptr + count, 0, extra * sizeof (double)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count ; -} /* sf_read_double */ - -sf_count_t -sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count, extra ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_WRITE) - { psf->error = SFE_NOT_READMODE ; - return 0 ; - } ; - - if (frames <= 0 || psf->read_current >= psf->sf.frames) - { psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (double)) ; - return 0 ; - } ; - - if (! psf->read_double || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_READ) - if (psf->seek (psf, SFM_READ, psf->read_current) < 0) - return 0 ; - - count = psf->read_double (psf, ptr, frames * psf->sf.channels) ; - - if (psf->read_current + count / psf->sf.channels > psf->sf.frames) - { count = (psf->sf.frames - psf->read_current) * psf->sf.channels ; - extra = frames * psf->sf.channels - count ; - psf_memset (ptr + count, 0, extra * sizeof (double)) ; - psf->read_current = psf->sf.frames ; - } ; - - psf->read_current += count / psf->sf.channels ; - - psf->last_op = SFM_READ ; - - if (psf->read_current > psf->sf.frames) - { count = psf->sf.channels * (psf->read_current - psf->sf.frames) ; - psf->read_current = psf->sf.frames ; - } ; - - return count / psf->sf.channels ; -} /* sf_readf_double */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count ; - int bytewidth, blockwidth ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - bytewidth = (psf->bytewidth > 0) ? psf->bytewidth : 1 ; - blockwidth = (psf->blockwidth > 0) ? psf->blockwidth : 1 ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (len % (psf->sf.channels * bytewidth)) - { psf->error = SFE_BAD_WRITE_ALIGN ; - return 0 ; - } ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf_fwrite (ptr, 1, len, psf) ; - - psf->write_current += count / blockwidth ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - psf->last_op = SFM_WRITE ; - - return count ; -} /* sf_write_raw */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_WRITE_ALIGN ; - return 0 ; - } ; - - if (! psf->write_short || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_short (psf, ptr, len) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count ; -} /* sf_write_short */ - -sf_count_t -sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (! psf->write_short || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_short (psf, ptr, frames * psf->sf.channels) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count / psf->sf.channels ; -} /* sf_writef_short */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_WRITE_ALIGN ; - return 0 ; - } ; - - if (! psf->write_int || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_int (psf, ptr, len) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count ; -} /* sf_write_int */ - -sf_count_t -sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (! psf->write_int || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_int (psf, ptr, frames * psf->sf.channels) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count / psf->sf.channels ; -} /* sf_writef_int */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_WRITE_ALIGN ; - return 0 ; - } ; - - if (! psf->write_float || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_float (psf, ptr, len) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count ; -} /* sf_write_float */ - -sf_count_t -sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (! psf->write_float || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_float (psf, ptr, frames * psf->sf.channels) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count / psf->sf.channels ; -} /* sf_writef_float */ - -/*------------------------------------------------------------------------------ -*/ - -sf_count_t -sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t len) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (len % psf->sf.channels) - { psf->error = SFE_BAD_WRITE_ALIGN ; - return 0 ; - } ; - - if (! psf->write_double || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_double (psf, ptr, len) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count ; -} /* sf_write_double */ - -sf_count_t -sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) -{ SF_PRIVATE *psf ; - sf_count_t count ; - - VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ; - - if (psf->mode == SFM_READ) - { psf->error = SFE_NOT_WRITEMODE ; - return 0 ; - } ; - - if (! psf->write_double || psf->seek == NULL) - { psf->error = SFE_UNIMPLEMENTED ; - return 0 ; - } ; - - if (psf->last_op != SFM_WRITE) - if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0) - return 0 ; - - if (psf->have_written == SF_FALSE && psf->write_header != NULL) - psf->write_header (psf, SF_FALSE) ; - psf->have_written = SF_TRUE ; - - count = psf->write_double (psf, ptr, frames * psf->sf.channels) ; - - psf->write_current += count / psf->sf.channels ; - - psf->last_op = SFM_WRITE ; - - if (psf->auto_header && psf->write_header != NULL) - psf->write_header (psf, SF_TRUE) ; - - if (psf->write_current > psf->sf.frames) - psf->sf.frames = psf->write_current ; - - return count / psf->sf.channels ; -} /* sf_writef_double */ - -/*========================================================================= -** Private functions. -*/ - -static int -try_resource_fork (SF_PRIVATE * psf, int mode) -{ - if (psf_open_rsrc (psf, mode) != 0) - return 0 ; - - /* More checking here. */ - psf_log_printf (psf, "Resource fork : %s\n", psf->rsrcpath) ; - - return SF_FORMAT_SD2 ; -} /* try_resource_fork */ - -static int -format_from_extension (SF_PRIVATE *psf) -{ char *cptr ; - char buffer [16] ; - - if (psf->filename == NULL) - return 0 ; - - if ((cptr = strrchr (psf->filename, '.')) == NULL) - return 0 ; - - cptr ++ ; - if (strlen (cptr) > sizeof (buffer) - 1) - return 0 ; - - strncpy (buffer, cptr, sizeof (buffer)) ; - buffer [sizeof (buffer) - 1] = 0 ; - - /* Convert everything in the buffer to lower case. */ - cptr = buffer ; - while (*cptr) - { *cptr = tolower (*cptr) ; - cptr ++ ; - } ; - - cptr = buffer ; - - if (strcmp (cptr, "au") == 0) - { psf->sf.channels = 1 ; - psf->sf.samplerate = 8000 ; - return SF_FORMAT_RAW | SF_FORMAT_ULAW ; - } ; - - if (strcmp (cptr, "snd") == 0) - { psf->sf.channels = 1 ; - psf->sf.samplerate = 8000 ; - return SF_FORMAT_RAW | SF_FORMAT_ULAW ; - } ; - - if (strcmp (cptr, "vox") == 0) - { psf->sf.channels = 1 ; - psf->sf.samplerate = 8000 ; - return SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ; - } ; - - if (strcmp (cptr, "gsm") == 0) - { psf->sf.channels = 1 ; - psf->sf.samplerate = 8000 ; - return SF_FORMAT_RAW | SF_FORMAT_GSM610 ; - } ; - - return 0 ; -} /* format_from_extension */ - -static int -guess_file_type (SF_PRIVATE *psf) -{ int buffer [3], format ; - - if (psf_binheader_readf (psf, "b", &buffer, SIGNED_SIZEOF (buffer)) != SIGNED_SIZEOF (buffer)) - { psf->error = SFE_BAD_FILE_READ ; - return 0 ; - } ; - - if ((buffer [0] == MAKE_MARKER ('R', 'I', 'F', 'F') || buffer [0] == MAKE_MARKER ('R', 'I', 'F', 'X')) - && buffer [2] == MAKE_MARKER ('W', 'A', 'V', 'E')) - return SF_FORMAT_WAV ; - - if (buffer [0] == MAKE_MARKER ('F', 'O', 'R', 'M')) - { if (buffer [2] == MAKE_MARKER ('A', 'I', 'F', 'F') || buffer [2] == MAKE_MARKER ('A', 'I', 'F', 'C')) - return SF_FORMAT_AIFF ; - if (buffer [2] == MAKE_MARKER ('8', 'S', 'V', 'X') || buffer [2] == MAKE_MARKER ('1', '6', 'S', 'V')) - return SF_FORMAT_SVX ; - return 0 ; - } ; - - if (buffer [0] == MAKE_MARKER ('.', 's', 'n', 'd') || buffer [0] == MAKE_MARKER ('d', 'n', 's', '.')) - return SF_FORMAT_AU ; - - if ((buffer [0] == MAKE_MARKER ('f', 'a', 'p', ' ') || buffer [0] == MAKE_MARKER (' ', 'p', 'a', 'f'))) - return SF_FORMAT_PAF ; - - if (buffer [0] == MAKE_MARKER ('N', 'I', 'S', 'T')) - return SF_FORMAT_NIST ; - - if (buffer [0] == MAKE_MARKER ('C', 'r', 'e', 'a') && buffer [1] == MAKE_MARKER ('t', 'i', 'v', 'e')) - return SF_FORMAT_VOC ; - - if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0xF8, 0xFF)) == MAKE_MARKER (0x64, 0xA3, 0x00, 0x00) || - (buffer [0] & MAKE_MARKER (0xFF, 0xF8, 0xFF, 0xFF)) == MAKE_MARKER (0x00, 0x00, 0xA3, 0x64)) - return SF_FORMAT_IRCAM ; - - if (buffer [0] == MAKE_MARKER ('r', 'i', 'f', 'f')) - return SF_FORMAT_W64 ; - - if (buffer [0] == MAKE_MARKER (0, 0, 0x03, 0xE8) && buffer [1] == MAKE_MARKER (0, 0, 0, 1) && - buffer [2] == MAKE_MARKER (0, 0, 0, 1)) - return SF_FORMAT_MAT4 ; - - if (buffer [0] == MAKE_MARKER (0, 0, 0, 0) && buffer [1] == MAKE_MARKER (1, 0, 0, 0) && - buffer [2] == MAKE_MARKER (1, 0, 0, 0)) - return SF_FORMAT_MAT4 ; - - if (buffer [0] == MAKE_MARKER ('M', 'A', 'T', 'L') && buffer [1] == MAKE_MARKER ('A', 'B', ' ', '5')) - return SF_FORMAT_MAT5 ; - - if (buffer [0] == MAKE_MARKER ('P', 'V', 'F', '1')) - return SF_FORMAT_PVF ; - - if (buffer [0] == MAKE_MARKER ('E', 'x', 't', 'e') && buffer [1] == MAKE_MARKER ('n', 'd', 'e', 'd') && - buffer [2] == MAKE_MARKER (' ', 'I', 'n', 's')) - return SF_FORMAT_XI ; - - if (buffer [0] == MAKE_MARKER ('c', 'a', 'f', 'f') && buffer [2] == MAKE_MARKER ('d', 'e', 's', 'c')) - return SF_FORMAT_CAF ; - - if (ENABLE_EXPERIMENTAL_CODE && buffer [0] == MAKE_MARKER ('O', 'g', 'g', 'S')) - return SF_FORMAT_OGG ; - - if (buffer [0] == MAKE_MARKER ('A', 'L', 'a', 'w') && buffer [1] == MAKE_MARKER ('S', 'o', 'u', 'n') - && buffer [2] == MAKE_MARKER ('d', 'F', 'i', 'l')) - return SF_FORMAT_WVE ; - - if (buffer [0] == MAKE_MARKER ('D', 'i', 'a', 'm') && buffer [1] == MAKE_MARKER ('o', 'n', 'd', 'W') - && buffer [2] == MAKE_MARKER ('a', 'r', 'e', ' ')) - return SF_FORMAT_DWD ; - - if (buffer [0] == MAKE_MARKER ('L', 'M', '8', '9') || buffer [0] == MAKE_MARKER ('5', '3', 0, 0)) - return SF_FORMAT_TXW ; - - if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0x80, 0xFF)) == MAKE_MARKER (0xF0, 0x7E, 0, 0x01)) - return SF_FORMAT_SDS ; - - if (buffer [0] == MAKE_MARKER ('C', 'A', 'T', ' ') && buffer [2] == MAKE_MARKER ('R', 'E', 'X', '2')) - return SF_FORMAT_REX2 ; - - if (buffer [0] == MAKE_MARKER (0x30, 0x26, 0xB2, 0x75) && buffer [1] == MAKE_MARKER (0x8E, 0x66, 0xCF, 0x11)) - return 0 /*-SF_FORMAT_WMA-*/ ; - - /* HMM (Hidden Markov Model) Tool Kit. */ - if (2 * BEI2H_INT (buffer [0]) + 12 == psf->filelength && buffer [2] == MAKE_MARKER (0, 2, 0, 0)) - return SF_FORMAT_HTK ; - - if (buffer [0] == MAKE_MARKER ('f', 'L', 'a', 'C')) - return SF_FORMAT_FLAC ; - - /* Turtle Beach SMP 16-bit */ - if (buffer [0] == MAKE_MARKER ('S', 'O', 'U', 'N') && buffer [1] == MAKE_MARKER ('D', ' ', 'S', 'A')) - return 0 ; - - if (buffer [0] == MAKE_MARKER ('S', 'Y', '8', '0') || buffer [0] == MAKE_MARKER ('S', 'Y', '8', '5')) - return 0 ; - - if (buffer [0] == MAKE_MARKER ('a', 'j', 'k', 'g')) - return 0 /*-SF_FORMAT_SHN-*/ ; - - if (buffer [0] == MAKE_MARKER ('2', 'B', 'I', 'T')) - return SF_FORMAT_AVR ; - - /* This must be the second last one. */ - if (psf->filelength > 0 && (format = try_resource_fork (psf, SFM_READ)) != 0) - return format ; - - return 0 ; -} /* guess_file_type */ - - -static int -validate_sfinfo (SF_INFO *sfinfo) -{ if (sfinfo->samplerate < 1) - return 0 ; - if (sfinfo->frames < 0) - return 0 ; - if (sfinfo->channels < 1) - return 0 ; - if ((sfinfo->format & SF_FORMAT_TYPEMASK) == 0) - return 0 ; - if ((sfinfo->format & SF_FORMAT_SUBMASK) == 0) - return 0 ; - if (sfinfo->sections < 1) - return 0 ; - return 1 ; -} /* validate_sfinfo */ - -static int -validate_psf (SF_PRIVATE *psf) -{ - if (psf->datalength < 0) - { psf_log_printf (psf, "Invalid SF_PRIVATE field : datalength == %D.\n", psf->datalength) ; - return 0 ; - } ; - if (psf->dataoffset < 0) - { psf_log_printf (psf, "Invalid SF_PRIVATE field : dataoffset == %D.\n", psf->dataoffset) ; - return 0 ; - } ; - if (psf->blockwidth && psf->blockwidth != psf->sf.channels * psf->bytewidth) - { psf_log_printf (psf, "Invalid SF_PRIVATE field : channels * bytewidth == %d.\n", - psf->sf.channels * psf->bytewidth) ; - return 0 ; - } ; - return 1 ; -} /* validate_psf */ - -static void -save_header_info (SF_PRIVATE *psf) -{ LSF_SNPRINTF (sf_logbuffer, sizeof (sf_logbuffer), "%s", psf->logbuffer) ; -} /* save_header_info */ - -static void -copy_filename (SF_PRIVATE *psf, const char *path) -{ const char *ccptr ; - char *cptr ; - - LSF_SNPRINTF (psf->filepath, sizeof (psf->filepath), "%s", path) ; - if ((ccptr = strrchr (path, '/')) || (ccptr = strrchr (path, '\\'))) - ccptr ++ ; - else - ccptr = path ; - - LSF_SNPRINTF (psf->filename, sizeof (psf->filename), "%s", ccptr) ; - - /* Now grab the directory. */ - LSF_SNPRINTF (psf->directory, sizeof (psf->directory), "%s", path) ; - if ((cptr = strrchr (psf->directory, '/')) || (cptr = strrchr (psf->directory, '\\'))) - cptr [1] = 0 ; - else - psf->directory [0] = 0 ; - - return ; -} /* copy_filename */ - -/*============================================================================== -*/ - -static int -psf_close (SF_PRIVATE *psf) -{ int error ; - - if (psf->codec_close) - error = psf->codec_close (psf) ; - if (psf->container_close) - error = psf->container_close (psf) ; - - psf_fclose (psf) ; - psf_close_rsrc (psf) ; - - if (psf->fdata) - free (psf->fdata) ; - - if (psf->interleave) - free (psf->interleave) ; - - if (psf->dither) - free (psf->dither) ; - - if (psf->peak_info) - free (psf->peak_info) ; - - if (psf->loop_info) - free (psf->loop_info) ; - - if (psf->instrument) - free (psf->instrument) ; - - if (psf->format_desc) - { memset (psf->format_desc, 0, strlen (psf->format_desc)) ; - free (psf->format_desc) ; - } ; - - memset (psf, 0, sizeof (SF_PRIVATE)) ; - free (psf) ; - - return 0 ; -} /* psf_close */ - -static int -psf_open_file (SF_PRIVATE *psf, int mode, SF_INFO *sfinfo) -{ int error, format ; - - if (mode != SFM_READ && mode != SFM_WRITE && mode != SFM_RDWR) - return SFE_BAD_OPEN_MODE ; - - if (sfinfo == NULL) - return SFE_BAD_SF_INFO_PTR ; - - /* Zero out these fields. */ - sfinfo->frames = 0 ; - sfinfo->sections = 0 ; - sfinfo->seekable = 0 ; - - if (mode == SFM_READ) - { if ((sfinfo->format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW) - { if (sf_format_check (sfinfo) == 0) - return SFE_RAW_BAD_FORMAT ; - } - else - memset (sfinfo, 0, sizeof (SF_INFO)) ; - } ; - - sf_errno = error = 0 ; - sf_logbuffer [0] = 0 ; - - memcpy (&(psf->sf), sfinfo, sizeof (SF_INFO)) ; - - psf->Magick = SNDFILE_MAGICK ; - psf->norm_float = SF_TRUE ; - psf->norm_double = SF_TRUE ; - psf->mode = mode ; - psf->dataoffset = -1 ; - psf->datalength = -1 ; - psf->read_current = -1 ; - psf->write_current = -1 ; - psf->auto_header = SF_FALSE ; - psf->rwf_endian = SF_ENDIAN_LITTLE ; - psf->seek = psf_default_seek ; - psf->float_int_mult = 0 ; - psf->float_max = -1.0 ; - - psf->sf.sections = 1 ; - - psf->is_pipe = psf_is_pipe (psf) ; - - if (psf->is_pipe) - { psf->sf.seekable = SF_FALSE ; - psf->filelength = SF_COUNT_MAX ; - } - else - { psf->sf.seekable = SF_TRUE ; - - /* File is open, so get the length. */ - psf->filelength = psf_get_filelen (psf) ; - } ; - - if (psf->fileoffset > 0) - { switch (psf->mode) - { case SFM_READ : - if (psf->filelength < 44) - { psf_log_printf (psf, "Short filelength: %D (fileoffset: %D)\n", psf->filelength, psf->fileoffset) ; - return SFE_BAD_OFFSET ; - } ; - break ; - - case SFM_WRITE : - psf->fileoffset = 0 ; - psf_fseek (psf, 0, SEEK_END) ; - psf->fileoffset = psf_ftell (psf) ; - break ; - - case SFM_RDWR : - return SFE_NO_EMBEDDED_RDWR ; - } ; - - psf_log_printf (psf, "Embedded file offset : %D\n", psf->fileoffset) ; - } ; - - if (psf->filelength == SF_COUNT_MAX) - psf_log_printf (psf, "Length : unknown\n") ; - else - psf_log_printf (psf, "Length : %D\n", psf->filelength) ; - - if (mode == SFM_WRITE || (mode == SFM_RDWR && psf->filelength == 0)) - { /* If the file is being opened for write or RDWR and the file is currently - ** empty, then the SF_INFO struct must contain valid data. - */ - if (sf_format_check (&(psf->sf)) == 0) - return SFE_BAD_OPEN_FORMAT ; - } - else if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW) - { /* If type RAW has not been specified then need to figure out file type. */ - psf->sf.format = guess_file_type (psf) ; - - if (psf->sf.format == 0) - psf->sf.format = format_from_extension (psf) ; - } ; - - /* Prevent unnecessary seeks */ - psf->last_op = psf->mode ; - - /* Set bytewidth if known. */ - switch (psf->sf.format & SF_FORMAT_SUBMASK) - { case SF_FORMAT_PCM_S8 : - case SF_FORMAT_PCM_U8 : - case SF_FORMAT_ULAW : - case SF_FORMAT_ALAW : - case SF_FORMAT_DPCM_8 : - psf->bytewidth = 1 ; - break ; - - case SF_FORMAT_PCM_16 : - case SF_FORMAT_DPCM_16 : - psf->bytewidth = 2 ; - break ; - - case SF_FORMAT_PCM_24 : - psf->bytewidth = 3 ; - break ; - - case SF_FORMAT_PCM_32 : - case SF_FORMAT_FLOAT : - psf->bytewidth = 4 ; - break ; - - case SF_FORMAT_DOUBLE : - psf->bytewidth = 8 ; - break ; - } ; - - /* Call the initialisation function for the relevant file type. */ - switch (psf->sf.format & SF_FORMAT_TYPEMASK) - { case SF_FORMAT_WAV : - case SF_FORMAT_WAVEX : - error = wav_open (psf) ; - break ; - - case SF_FORMAT_AIFF : - error = aiff_open (psf) ; - break ; - - case SF_FORMAT_AU : - error = au_open (psf) ; - break ; - - case SF_FORMAT_RAW : - error = raw_open (psf) ; - break ; - - case SF_FORMAT_W64 : - error = w64_open (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_PAF : - error = paf_open (psf) ; - break ; - - case SF_FORMAT_SVX : - error = svx_open (psf) ; - break ; - - case SF_FORMAT_NIST : - error = nist_open (psf) ; - break ; - - case SF_FORMAT_IRCAM : - error = ircam_open (psf) ; - break ; - - case SF_FORMAT_VOC : - error = voc_open (psf) ; - break ; - - case SF_FORMAT_SDS : - error = sds_open (psf) ; - break ; - - case SF_FORMAT_OGG : - error = ogg_open (psf) ; - break ; - - case SF_FORMAT_TXW : - error = txw_open (psf) ; - break ; - - case SF_FORMAT_WVE : - error = wve_open (psf) ; - break ; - - case SF_FORMAT_DWD : - error = dwd_open (psf) ; - break ; - - case SF_FORMAT_MAT4 : - error = mat4_open (psf) ; - break ; - - case SF_FORMAT_MAT5 : - error = mat5_open (psf) ; - break ; - - case SF_FORMAT_PVF : - error = pvf_open (psf) ; - break ; - - case SF_FORMAT_XI : - error = xi_open (psf) ; - break ; - - case SF_FORMAT_HTK : - error = htk_open (psf) ; - break ; - - case SF_FORMAT_SD2 : - error = sd2_open (psf) ; - break ; - - case SF_FORMAT_REX2 : - error = rx2_open (psf) ; - break ; - - case SF_FORMAT_AVR : - error = avr_open (psf) ; - break ; - - case SF_FORMAT_FLAC : - error = flac_open (psf) ; - break ; - - case SF_FORMAT_CAF : - error = caf_open (psf) ; - break ; - - /* Lite remove end */ - - default : - error = SFE_UNKNOWN_FORMAT ; - } ; - - if (error) - { if (error != SF_ERR_SYSTEM && error != SF_ERR_UNSUPPORTED_ENCODING) - { psf_log_printf (psf, "Parse error : %s\n", sf_error_number (error)) ; - error = SF_ERR_MALFORMED_FILE ; - } ; - - return error ; - } ; - - /* For now, check whether embedding is supported. */ - format = psf->sf.format & SF_FORMAT_TYPEMASK ; - if (psf->fileoffset > 0 && - (format != SF_FORMAT_WAV) && (format != SF_FORMAT_WAVEX) && - (format != SF_FORMAT_AIFF) && (format != SF_FORMAT_AU) - ) - return SFE_NO_EMBED_SUPPORT ; - - if (psf->fileoffset > 0) - psf_log_printf (psf, "Embedded file length : %D\n", psf->filelength) ; - - if (mode == SFM_RDWR && sf_format_check (&(psf->sf)) == 0) - return SFE_BAD_RDWR_FORMAT ; - - if (validate_sfinfo (&(psf->sf)) == 0) - { psf_log_SF_INFO (psf) ; - save_header_info (psf) ; - return SFE_BAD_SF_INFO ; - } ; - - if (validate_psf (psf) == 0) - { save_header_info (psf) ; - return SFE_INTERNAL ; - } ; - - psf->read_current = 0 ; - psf->write_current = (psf->mode == SFM_RDWR) ? psf->sf.frames : 0 ; - - memcpy (sfinfo, &(psf->sf), sizeof (SF_INFO)) ; - - return 0 ; -} /* psf_open_file */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: cd4f9e91-a8ec-4154-9bf6-fe4b8c69a615 -*/ diff --git a/Libraries/SndFile/Files/src/sndfile.h b/Libraries/SndFile/Files/src/sndfile.h deleted file mode 100644 index ef52fe541..000000000 --- a/Libraries/SndFile/Files/src/sndfile.h +++ /dev/null @@ -1,530 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** sndfile.h -- system-wide definitions -** -** API documentation is in the doc/ directory of the source code tarball -** and at http://www.mega-nerd.com/libsndfile/api.html. -*/ - -#ifndef SNDFILE_H -#define SNDFILE_H - -/* This is the version 1.0.X header file. */ -#define SNDFILE_1 - -#include - -/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */ - -#if (defined (__MWERKS__)) -#include -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* The following file types can be read and written. -** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise -** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and -** SF_FORMAT_SUBMASK can be used to separate the major and minor file -** types. -*/ - -enum -{ /* Major formats. */ - SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */ - SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ - SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ - SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ - SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ - SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ - SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ - SF_FORMAT_VOC = 0x080000, /* VOC files. */ - SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ - SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ - SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ - SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ - SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ - SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ - SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ - SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ - SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ - SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ - SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ - SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ - SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ - - /* Subtypes from here on. */ - - SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ - SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ - SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ - SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ - - SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */ - - SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */ - SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */ - - SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */ - SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */ - SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */ - SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */ - - SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */ - SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */ - - SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */ - SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */ - SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */ - - SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */ - - SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */ - SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */ - - /* Endian-ness options. */ - - SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */ - SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */ - SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */ - SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */ - - SF_FORMAT_SUBMASK = 0x0000FFFF, - SF_FORMAT_TYPEMASK = 0x0FFF0000, - SF_FORMAT_ENDMASK = 0x30000000 -} ; - -/* -** The following are the valid command numbers for the sf_command() -** interface. The use of these commands is documented in the file -** command.html in the doc directory of the source code distribution. -*/ - -enum -{ SFC_GET_LIB_VERSION = 0x1000, - SFC_GET_LOG_INFO = 0x1001, - - SFC_GET_NORM_DOUBLE = 0x1010, - SFC_GET_NORM_FLOAT = 0x1011, - SFC_SET_NORM_DOUBLE = 0x1012, - SFC_SET_NORM_FLOAT = 0x1013, - SFC_SET_SCALE_FLOAT_INT_READ = 0x1014, - - SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020, - SFC_GET_SIMPLE_FORMAT = 0x1021, - - SFC_GET_FORMAT_INFO = 0x1028, - - SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, - SFC_GET_FORMAT_MAJOR = 0x1031, - SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032, - SFC_GET_FORMAT_SUBTYPE = 0x1033, - - SFC_CALC_SIGNAL_MAX = 0x1040, - SFC_CALC_NORM_SIGNAL_MAX = 0x1041, - SFC_CALC_MAX_ALL_CHANNELS = 0x1042, - SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043, - - SFC_SET_ADD_PEAK_CHUNK = 0x1050, - - SFC_UPDATE_HEADER_NOW = 0x1060, - SFC_SET_UPDATE_HEADER_AUTO = 0x1061, - - SFC_FILE_TRUNCATE = 0x1080, - - SFC_SET_RAW_START_OFFSET = 0x1090, - - SFC_SET_DITHER_ON_WRITE = 0x10A0, - SFC_SET_DITHER_ON_READ = 0x10A1, - - SFC_GET_DITHER_INFO_COUNT = 0x10A2, - SFC_GET_DITHER_INFO = 0x10A3, - - SFC_GET_EMBED_FILE_INFO = 0x10B0, - - SFC_SET_CLIPPING = 0x10C0, - SFC_GET_CLIPPING = 0x10C1, - - SFC_GET_INSTRUMENT = 0x10D0, - SFC_SET_INSTRUMENT = 0x10D1, - - SFC_GET_LOOP_INFO = 0x10E0, - - /* Following commands for testing only. */ - SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001, - - /* - ** SFC_SET_ADD_* values are deprecated and will disappear at some - ** time in the future. They are guaranteed to be here up to and - ** including version 1.0.8 to avoid breakage of existng software. - ** They currently do nothing and will continue to do nothing. - */ - SFC_SET_ADD_DITHER_ON_WRITE = 0x1070, - SFC_SET_ADD_DITHER_ON_READ = 0x1071 -} ; - - -/* -** String types that can be set and read from files. Not all file types -** support this and even the file types which support one, may not support -** all string types. -*/ - -enum -{ SF_STR_TITLE = 0x01, - SF_STR_COPYRIGHT = 0x02, - SF_STR_SOFTWARE = 0x03, - SF_STR_ARTIST = 0x04, - SF_STR_COMMENT = 0x05, - SF_STR_DATE = 0x06 -} ; - -/* -** Use the following as the start and end index when doing metadata -** transcoding. -*/ - -#define SF_STR_FIRST SF_STR_TITLE -#define SF_STR_LAST SF_STR_DATE - -enum -{ /* True and false */ - SF_FALSE = 0, - SF_TRUE = 1, - - /* Modes for opening files. */ - SFM_READ = 0x10, - SFM_WRITE = 0x20, - SFM_RDWR = 0x30 -} ; - -/* Public error values. These are guaranteed to remain unchanged for the duration -** of the library major version number. -** There are also a large number of private error numbers which are internal to -** the library which can change at any time. -*/ - -enum -{ SF_ERR_NO_ERROR = 0, - SF_ERR_UNRECOGNISED_FORMAT = 1, - SF_ERR_SYSTEM = 2, - SF_ERR_MALFORMED_FILE = 3, - SF_ERR_UNSUPPORTED_ENCODING = 4 -} ; - -/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */ - -typedef struct SNDFILE_tag SNDFILE ; - -/* The following typedef is system specific and is defined when libsndfile is. -** compiled. sf_count_t can be one of loff_t (Linux), off_t (*BSD), -** off64_t (Solaris), __int64_t (Win32) etc. -*/ - -typedef off_t sf_count_t ; - -#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL - -/* A pointer to a SF_INFO structure is passed to sf_open_read () and filled in. -** On write, the SF_INFO structure is filled in by the user and passed into -** sf_open_write (). -*/ - -struct SF_INFO -{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */ - int samplerate ; - int channels ; - int format ; - int sections ; - int seekable ; -} ; - -typedef struct SF_INFO SF_INFO ; - -/* The SF_FORMAT_INFO struct is used to retrieve information about the sound -** file formats libsndfile supports using the sf_command () interface. -** -** Using this interface will allow applications to support new file formats -** and encoding types when libsndfile is upgraded, without requiring -** re-compilation of the application. -** -** Please consult the libsndfile documentation (particularly the information -** on the sf_command () interface) for examples of its use. -*/ - -typedef struct -{ int format ; - const char *name ; - const char *extension ; -} SF_FORMAT_INFO ; - -/* -** Enums and typedefs for adding dither on read and write. -** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE -** and SFC_SET_DITHER_ON_READ. -*/ - -enum -{ SFD_DEFAULT_LEVEL = 0, - SFD_CUSTOM_LEVEL = 0x40000000, - - SFD_NO_DITHER = 500, - SFD_WHITE = 501, - SFD_TRIANGULAR_PDF = 502 -} ; - -typedef struct -{ int type ; - double level ; - const char *name ; -} SF_DITHER_INFO ; - -/* Struct used to retrieve information about a file embedded within a -** larger file. See SFC_GET_EMBED_FILE_INFO. -*/ - -typedef struct -{ sf_count_t offset ; - sf_count_t length ; -} SF_EMBED_FILE_INFO ; - -/* -** Structs used to retrieve music sample information from a file. -*/ - -enum -{ /* - ** The loop mode field in SF_INSTRUMENT will be one of the following. - */ - SF_LOOP_NONE = 800, - SF_LOOP_FORWARD, - SF_LOOP_BACKWARD, - SF_LOOP_ALTERNATING -} ; - -typedef struct -{ int gain ; - char basenote, detune ; - char velocity_lo, velocity_hi ; - char key_lo, key_hi ; - int loop_count ; - - struct - { int mode ; - unsigned int start ; - unsigned int end ; - unsigned int count ; - } loops [16] ; /* make variable in a sensible way */ -} SF_INSTRUMENT ; - - - -/* Struct used to retrieve loop information from a file.*/ -typedef struct -{ - short time_sig_num ; /* any positive integer > 0 */ - short time_sig_den ; /* any positive power of 2 > 0 */ - int loop_mode ; /* see SF_LOOP enum */ - - int num_beats ; /* this is NOT the amount of quarter notes !!!*/ - /* a full bar of 4/4 is 4 beats */ - /* a full bar of 7/8 is 7 beats */ - - float bpm ; /* suggestion, as it can be calculated using other fields:*/ - /* file's lenght, file's sampleRate and our time_sig_den*/ - /* -> bpms are always the amount of _quarter notes_ per minute */ - - int root_key ; /* MIDI note, or -1 for None */ - int future [6] ; -} SF_LOOP_INFO ; - -typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; -typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; -typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; -typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; -typedef sf_count_t (*sf_vio_tell) (void *user_data) ; - -struct SF_VIRTUAL_IO -{ sf_vio_get_filelen get_filelen ; - sf_vio_seek seek ; - sf_vio_read read ; - sf_vio_write write ; - sf_vio_tell tell ; -} ; - -typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ; - -/* Open the specified file for read, write or both. On error, this will -** return a NULL pointer. To find the error number, pass a NULL SNDFILE -** to sf_perror () or sf_error_str (). -** All calls to sf_open() should be matched with a call to sf_close(). -*/ - -SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; - -/* Use the existing file descriptor to create a SNDFILE object. If close_desc -** is TRUE, the file descriptor will be closed when sf_close() is called. If -** it is FALSE, the descritor will not be closed. -** When passed a descriptor like this, the library will assume that the start -** of file header is at the current file offset. This allows sound files within -** larger container files to be read and/or written. -** On error, this will return a NULL pointer. To find the error number, pass a -** NULL SNDFILE to sf_perror () or sf_error_str (). -** All calls to sf_open_fd() should be matched with a call to sf_close(). - -*/ - -SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; - -SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; - -/* sf_error () returns a error number which can be translated to a text -** string using sf_error_number(). -*/ - -int sf_error (SNDFILE *sndfile) ; - -/* sf_strerror () returns to the caller a pointer to the current error message for -** the given SNDFILE. -*/ - -const char* sf_strerror (SNDFILE *sndfile) ; - -/* sf_error_number () allows the retrieval of the error string for each internal -** error number. -** -*/ - -const char* sf_error_number (int errnum) ; - -/* The following three error functions are deprecated but they will remain in the -** library for the forseeable future. The function sf_strerror() should be used -** in their place. -*/ - -int sf_perror (SNDFILE *sndfile) ; -int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; - - -/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ - -int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ; - -/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ - -int sf_format_check (const SF_INFO *info) ; - -/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses -** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as -** stdio.h function fseek (). -** An offset of zero with whence set to SEEK_SET will position the -** read / write pointer to the first data sample. -** On success sf_seek returns the current position in (multi-channel) -** samples from the start of the file. -** Please see the libsndfile documentation for moving the read pointer -** separately from the write pointer on files open in mode SFM_RDWR. -** On error all of these functions return -1. -*/ - -sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; - -/* Functions for retrieving and setting string data within sound files. -** Not all file types support this features; AIFF and WAV do. For both -** functions, the str_type parameter must be one of the SF_STR_* values -** defined above. -** On error, sf_set_string() returns non-zero while sf_get_string() -** returns NULL. -*/ - -int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; - -const char* sf_get_string (SNDFILE *sndfile, int str_type) ; - -/* Functions for reading/writing the waveform data of a sound file. -*/ - -sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; -sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ; - -/* Functions for reading and writing the data chunk in terms of frames. -** The number of items actually read/written = frames * number of channels. -** sf_xxxx_raw read/writes the raw data bytes from/to the file -** sf_xxxx_short passes data in the native short format -** sf_xxxx_int passes data in the native int format -** sf_xxxx_float passes data in the native float format -** sf_xxxx_double passes data in the native double format -** All of these read/write function return number of frames read/written. -*/ - -sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; -sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; -sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; -sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; -sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ; - -/* Functions for reading and writing the data chunk in terms of items. -** Otherwise similar to above. -** All of these read/write function return number of items read/written. -*/ - -sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; -sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ; - -sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; -sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ; - -sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; -sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ; - -sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; -sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ; - -/* Close the SNDFILE and clean up all memory allocations associated with this -** file. -** Returns 0 on success, or an error number. -*/ - -int sf_close (SNDFILE *sndfile) ; - -/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file -** to force the writing of data to disk. If the file is opened SFM_READ -** no action is taken. -*/ - -void sf_write_sync (SNDFILE *sndfile) ; - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* __cplusplus */ - -#endif /* SNDFILE_H */ diff --git a/Libraries/SndFile/Files/src/sndfile.h.in b/Libraries/SndFile/Files/src/sndfile.h.in deleted file mode 100644 index 9e098df41..000000000 --- a/Libraries/SndFile/Files/src/sndfile.h.in +++ /dev/null @@ -1,530 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** sndfile.h -- system-wide definitions -** -** API documentation is in the doc/ directory of the source code tarball -** and at http://www.mega-nerd.com/libsndfile/api.html. -*/ - -#ifndef SNDFILE_H -#define SNDFILE_H - -/* This is the version 1.0.X header file. */ -#define SNDFILE_1 - -#include - -/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */ - -#if (defined (__MWERKS__)) -#include -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* The following file types can be read and written. -** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise -** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and -** SF_FORMAT_SUBMASK can be used to separate the major and minor file -** types. -*/ - -enum -{ /* Major formats. */ - SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */ - SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ - SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ - SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ - SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ - SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ - SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ - SF_FORMAT_VOC = 0x080000, /* VOC files. */ - SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ - SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ - SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ - SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ - SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ - SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ - SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ - SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ - SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ - SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ - SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ - SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ - SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ - - /* Subtypes from here on. */ - - SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ - SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ - SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ - SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ - - SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */ - - SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */ - SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */ - - SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */ - SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */ - SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */ - SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */ - - SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */ - SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */ - - SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */ - SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */ - SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */ - - SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */ - - SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */ - SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */ - - /* Endian-ness options. */ - - SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */ - SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */ - SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */ - SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */ - - SF_FORMAT_SUBMASK = 0x0000FFFF, - SF_FORMAT_TYPEMASK = 0x0FFF0000, - SF_FORMAT_ENDMASK = 0x30000000 -} ; - -/* -** The following are the valid command numbers for the sf_command() -** interface. The use of these commands is documented in the file -** command.html in the doc directory of the source code distribution. -*/ - -enum -{ SFC_GET_LIB_VERSION = 0x1000, - SFC_GET_LOG_INFO = 0x1001, - - SFC_GET_NORM_DOUBLE = 0x1010, - SFC_GET_NORM_FLOAT = 0x1011, - SFC_SET_NORM_DOUBLE = 0x1012, - SFC_SET_NORM_FLOAT = 0x1013, - SFC_SET_SCALE_FLOAT_INT_READ = 0x1014, - - SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020, - SFC_GET_SIMPLE_FORMAT = 0x1021, - - SFC_GET_FORMAT_INFO = 0x1028, - - SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, - SFC_GET_FORMAT_MAJOR = 0x1031, - SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032, - SFC_GET_FORMAT_SUBTYPE = 0x1033, - - SFC_CALC_SIGNAL_MAX = 0x1040, - SFC_CALC_NORM_SIGNAL_MAX = 0x1041, - SFC_CALC_MAX_ALL_CHANNELS = 0x1042, - SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043, - - SFC_SET_ADD_PEAK_CHUNK = 0x1050, - - SFC_UPDATE_HEADER_NOW = 0x1060, - SFC_SET_UPDATE_HEADER_AUTO = 0x1061, - - SFC_FILE_TRUNCATE = 0x1080, - - SFC_SET_RAW_START_OFFSET = 0x1090, - - SFC_SET_DITHER_ON_WRITE = 0x10A0, - SFC_SET_DITHER_ON_READ = 0x10A1, - - SFC_GET_DITHER_INFO_COUNT = 0x10A2, - SFC_GET_DITHER_INFO = 0x10A3, - - SFC_GET_EMBED_FILE_INFO = 0x10B0, - - SFC_SET_CLIPPING = 0x10C0, - SFC_GET_CLIPPING = 0x10C1, - - SFC_GET_INSTRUMENT = 0x10D0, - SFC_SET_INSTRUMENT = 0x10D1, - - SFC_GET_LOOP_INFO = 0x10E0, - - /* Following commands for testing only. */ - SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001, - - /* - ** SFC_SET_ADD_* values are deprecated and will disappear at some - ** time in the future. They are guaranteed to be here up to and - ** including version 1.0.8 to avoid breakage of existng software. - ** They currently do nothing and will continue to do nothing. - */ - SFC_SET_ADD_DITHER_ON_WRITE = 0x1070, - SFC_SET_ADD_DITHER_ON_READ = 0x1071 -} ; - - -/* -** String types that can be set and read from files. Not all file types -** support this and even the file types which support one, may not support -** all string types. -*/ - -enum -{ SF_STR_TITLE = 0x01, - SF_STR_COPYRIGHT = 0x02, - SF_STR_SOFTWARE = 0x03, - SF_STR_ARTIST = 0x04, - SF_STR_COMMENT = 0x05, - SF_STR_DATE = 0x06 -} ; - -/* -** Use the following as the start and end index when doing metadata -** transcoding. -*/ - -#define SF_STR_FIRST SF_STR_TITLE -#define SF_STR_LAST SF_STR_DATE - -enum -{ /* True and false */ - SF_FALSE = 0, - SF_TRUE = 1, - - /* Modes for opening files. */ - SFM_READ = 0x10, - SFM_WRITE = 0x20, - SFM_RDWR = 0x30 -} ; - -/* Public error values. These are guaranteed to remain unchanged for the duration -** of the library major version number. -** There are also a large number of private error numbers which are internal to -** the library which can change at any time. -*/ - -enum -{ SF_ERR_NO_ERROR = 0, - SF_ERR_UNRECOGNISED_FORMAT = 1, - SF_ERR_SYSTEM = 2, - SF_ERR_MALFORMED_FILE = 3, - SF_ERR_UNSUPPORTED_ENCODING = 4 -} ; - -/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */ - -typedef struct SNDFILE_tag SNDFILE ; - -/* The following typedef is system specific and is defined when libsndfile is. -** compiled. sf_count_t can be one of loff_t (Linux), off_t (*BSD), -** off64_t (Solaris), __int64_t (Win32) etc. -*/ - -typedef @TYPEOF_SF_COUNT_T@ sf_count_t ; - -#define SF_COUNT_MAX @SF_COUNT_MAX@ - -/* A pointer to a SF_INFO structure is passed to sf_open_read () and filled in. -** On write, the SF_INFO structure is filled in by the user and passed into -** sf_open_write (). -*/ - -struct SF_INFO -{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */ - int samplerate ; - int channels ; - int format ; - int sections ; - int seekable ; -} ; - -typedef struct SF_INFO SF_INFO ; - -/* The SF_FORMAT_INFO struct is used to retrieve information about the sound -** file formats libsndfile supports using the sf_command () interface. -** -** Using this interface will allow applications to support new file formats -** and encoding types when libsndfile is upgraded, without requiring -** re-compilation of the application. -** -** Please consult the libsndfile documentation (particularly the information -** on the sf_command () interface) for examples of its use. -*/ - -typedef struct -{ int format ; - const char *name ; - const char *extension ; -} SF_FORMAT_INFO ; - -/* -** Enums and typedefs for adding dither on read and write. -** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE -** and SFC_SET_DITHER_ON_READ. -*/ - -enum -{ SFD_DEFAULT_LEVEL = 0, - SFD_CUSTOM_LEVEL = 0x40000000, - - SFD_NO_DITHER = 500, - SFD_WHITE = 501, - SFD_TRIANGULAR_PDF = 502 -} ; - -typedef struct -{ int type ; - double level ; - const char *name ; -} SF_DITHER_INFO ; - -/* Struct used to retrieve information about a file embedded within a -** larger file. See SFC_GET_EMBED_FILE_INFO. -*/ - -typedef struct -{ sf_count_t offset ; - sf_count_t length ; -} SF_EMBED_FILE_INFO ; - -/* -** Structs used to retrieve music sample information from a file. -*/ - -enum -{ /* - ** The loop mode field in SF_INSTRUMENT will be one of the following. - */ - SF_LOOP_NONE = 800, - SF_LOOP_FORWARD, - SF_LOOP_BACKWARD, - SF_LOOP_ALTERNATING -} ; - -typedef struct -{ int gain ; - char basenote, detune ; - char velocity_lo, velocity_hi ; - char key_lo, key_hi ; - int loop_count ; - - struct - { int mode ; - unsigned int start ; - unsigned int end ; - unsigned int count ; - } loops [16] ; /* make variable in a sensible way */ -} SF_INSTRUMENT ; - - - -/* Struct used to retrieve loop information from a file.*/ -typedef struct -{ - short time_sig_num ; /* any positive integer > 0 */ - short time_sig_den ; /* any positive power of 2 > 0 */ - int loop_mode ; /* see SF_LOOP enum */ - - int num_beats ; /* this is NOT the amount of quarter notes !!!*/ - /* a full bar of 4/4 is 4 beats */ - /* a full bar of 7/8 is 7 beats */ - - float bpm ; /* suggestion, as it can be calculated using other fields:*/ - /* file's lenght, file's sampleRate and our time_sig_den*/ - /* -> bpms are always the amount of _quarter notes_ per minute */ - - int root_key ; /* MIDI note, or -1 for None */ - int future [6] ; -} SF_LOOP_INFO ; - -typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; -typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; -typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; -typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; -typedef sf_count_t (*sf_vio_tell) (void *user_data) ; - -struct SF_VIRTUAL_IO -{ sf_vio_get_filelen get_filelen ; - sf_vio_seek seek ; - sf_vio_read read ; - sf_vio_write write ; - sf_vio_tell tell ; -} ; - -typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ; - -/* Open the specified file for read, write or both. On error, this will -** return a NULL pointer. To find the error number, pass a NULL SNDFILE -** to sf_perror () or sf_error_str (). -** All calls to sf_open() should be matched with a call to sf_close(). -*/ - -SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; - -/* Use the existing file descriptor to create a SNDFILE object. If close_desc -** is TRUE, the file descriptor will be closed when sf_close() is called. If -** it is FALSE, the descritor will not be closed. -** When passed a descriptor like this, the library will assume that the start -** of file header is at the current file offset. This allows sound files within -** larger container files to be read and/or written. -** On error, this will return a NULL pointer. To find the error number, pass a -** NULL SNDFILE to sf_perror () or sf_error_str (). -** All calls to sf_open_fd() should be matched with a call to sf_close(). - -*/ - -SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; - -SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; - -/* sf_error () returns a error number which can be translated to a text -** string using sf_error_number(). -*/ - -int sf_error (SNDFILE *sndfile) ; - -/* sf_strerror () returns to the caller a pointer to the current error message for -** the given SNDFILE. -*/ - -const char* sf_strerror (SNDFILE *sndfile) ; - -/* sf_error_number () allows the retrieval of the error string for each internal -** error number. -** -*/ - -const char* sf_error_number (int errnum) ; - -/* The following three error functions are deprecated but they will remain in the -** library for the forseeable future. The function sf_strerror() should be used -** in their place. -*/ - -int sf_perror (SNDFILE *sndfile) ; -int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; - - -/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ - -int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ; - -/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ - -int sf_format_check (const SF_INFO *info) ; - -/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses -** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as -** stdio.h function fseek (). -** An offset of zero with whence set to SEEK_SET will position the -** read / write pointer to the first data sample. -** On success sf_seek returns the current position in (multi-channel) -** samples from the start of the file. -** Please see the libsndfile documentation for moving the read pointer -** separately from the write pointer on files open in mode SFM_RDWR. -** On error all of these functions return -1. -*/ - -sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; - -/* Functions for retrieving and setting string data within sound files. -** Not all file types support this features; AIFF and WAV do. For both -** functions, the str_type parameter must be one of the SF_STR_* values -** defined above. -** On error, sf_set_string() returns non-zero while sf_get_string() -** returns NULL. -*/ - -int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; - -const char* sf_get_string (SNDFILE *sndfile, int str_type) ; - -/* Functions for reading/writing the waveform data of a sound file. -*/ - -sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; -sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ; - -/* Functions for reading and writing the data chunk in terms of frames. -** The number of items actually read/written = frames * number of channels. -** sf_xxxx_raw read/writes the raw data bytes from/to the file -** sf_xxxx_short passes data in the native short format -** sf_xxxx_int passes data in the native int format -** sf_xxxx_float passes data in the native float format -** sf_xxxx_double passes data in the native double format -** All of these read/write function return number of frames read/written. -*/ - -sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; -sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; -sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; -sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; -sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ; - -/* Functions for reading and writing the data chunk in terms of items. -** Otherwise similar to above. -** All of these read/write function return number of items read/written. -*/ - -sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; -sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ; - -sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; -sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ; - -sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; -sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ; - -sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; -sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ; - -/* Close the SNDFILE and clean up all memory allocations associated with this -** file. -** Returns 0 on success, or an error number. -*/ - -int sf_close (SNDFILE *sndfile) ; - -/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file -** to force the writing of data to disk. If the file is opened SFM_READ -** no action is taken. -*/ - -void sf_write_sync (SNDFILE *sndfile) ; - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* __cplusplus */ - -#endif /* SNDFILE_H */ diff --git a/Libraries/SndFile/Files/src/stamp-h1 b/Libraries/SndFile/Files/src/stamp-h1 deleted file mode 100644 index 57ea58e40..000000000 --- a/Libraries/SndFile/Files/src/stamp-h1 +++ /dev/null @@ -1 +0,0 @@ -timestamp for src/config.h diff --git a/Libraries/SndFile/Files/src/strings.c b/Libraries/SndFile/Files/src/strings.c deleted file mode 100644 index 2433f9b06..000000000 --- a/Libraries/SndFile/Files/src/strings.c +++ /dev/null @@ -1,204 +0,0 @@ -/* -** Copyright (C) 2001-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "common.h" - -#define STRINGS_DEBUG 0 -#if STRINGS_DEBUG -static void hexdump (void *data, int len) ; -#endif - -int -psf_store_string (SF_PRIVATE *psf, int str_type, const char *str) -{ static char lsf_name [] = PACKAGE "-" VERSION ; - static char bracket_name [] = " (" PACKAGE "-" VERSION ")" ; - int k, str_len, len_remaining, str_flags ; - - if (str == NULL) - return SFE_STR_BAD_STRING ; - - str_len = strlen (str) ; - - /* A few extra checks for write mode. */ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->str_flags & SF_STR_ALLOW_START) == 0) - return SFE_STR_NO_SUPPORT ; - if ((psf->str_flags & SF_STR_ALLOW_END) == 0) - return SFE_STR_NO_SUPPORT ; - /* Only allow zero length strings for software. */ - if (str_type != SF_STR_SOFTWARE && str_len == 0) - return SFE_STR_BAD_STRING ; - } ; - - /* Determine flags */ - str_flags = SF_STR_LOCATE_START ; - if (psf->have_written) - { if ((psf->str_flags & SF_STR_ALLOW_END) == 0) - return SFE_STR_NO_ADD_END ; - str_flags = SF_STR_LOCATE_END ; - } ; - - /* Find next free slot in table. */ - for (k = 0 ; k < SF_MAX_STRINGS ; k++) - if (psf->strings [k].type == 0) - break ; - - /* More sanity checking. */ - if (k >= SF_MAX_STRINGS) - return SFE_STR_MAX_COUNT ; - - if (k == 0 && psf->str_end != NULL) - { psf_log_printf (psf, "SFE_STR_WEIRD : k == 0 && psf->str_end != NULL\n") ; - return SFE_STR_WEIRD ; - } ; - - if (k != 0 && psf->str_end == NULL) - { psf_log_printf (psf, "SFE_STR_WEIRD : k != 0 && psf->str_end == NULL\n") ; - return SFE_STR_WEIRD ; - } ; - - /* Special case for the first string. */ - if (k == 0) - psf->str_end = psf->str_storage ; - - -#if STRINGS_DEBUG - psf_log_printf (psf, "str_storage : %X\n", (int) psf->str_storage) ; - psf_log_printf (psf, "str_end : %X\n", (int) psf->str_end) ; - psf_log_printf (psf, "sizeof (str_storage) : %d\n", SIGNED_SIZEOF (psf->str_storage)) ; -#endif - - len_remaining = SIGNED_SIZEOF (psf->str_storage) - (psf->str_end - psf->str_storage) ; - - if (len_remaining < str_len + 2) - return SFE_STR_MAX_DATA ; - - switch (str_type) - { case SF_STR_SOFTWARE : - /* In write mode, want to append libsndfile-version to string. */ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->strings [k].type = str_type ; - psf->strings [k].str = psf->str_end ; - psf->strings [k].flags = str_flags ; - - memcpy (psf->str_end, str, str_len + 1) ; - psf->str_end += str_len ; - - /* - ** If the supplied string does not already contain a - ** libsndfile-X.Y.Z component, then add it. - */ - if (strstr (str, PACKAGE) == NULL && len_remaining > (int) (strlen (bracket_name) + str_len + 2)) - { if (strlen (str) == 0) - strncat (psf->str_end, lsf_name, len_remaining) ; - else - strncat (psf->str_end, bracket_name, len_remaining) ; - psf->str_end += strlen (psf->str_end) ; - } ; - - /* Plus one to catch string terminator. */ - psf->str_end += 1 ; - break ; - } ; - - /* Fall though if not write mode. */ - - case SF_STR_TITLE : - case SF_STR_COPYRIGHT : - case SF_STR_ARTIST : - case SF_STR_COMMENT : - case SF_STR_DATE : - psf->strings [k].type = str_type ; - psf->strings [k].str = psf->str_end ; - psf->strings [k].flags = str_flags ; - - /* Plus one to catch string terminator. */ - memcpy (psf->str_end, str, str_len + 1) ; - psf->str_end += str_len + 1 ; - break ; - - default : - return SFE_STR_BAD_TYPE ; - } ; - - psf->str_flags |= (psf->have_written) ? SF_STR_LOCATE_END : SF_STR_LOCATE_START ; - -#if STRINGS_DEBUG - hexdump (psf->str_storage, 300) ; -#endif - - return 0 ; -} /* psf_store_string */ - -int -psf_set_string (SF_PRIVATE *psf, int str_type, const char *str) -{ if (psf->mode == SFM_READ) - return SFE_STR_NOT_WRITE ; - - return psf_store_string (psf, str_type, str) ; -} /* psf_set_string */ - -const char* -psf_get_string (SF_PRIVATE *psf, int str_type) -{ int k ; - - for (k = 0 ; k < SF_MAX_STRINGS ; k++) - if (str_type == psf->strings [k].type) - return psf->strings [k].str ; - - return NULL ; -} /* psf_get_string */ - -#if STRINGS_DEBUG - -#include -static void -hexdump (void *data, int len) -{ unsigned char *ptr ; - int k ; - - ptr = data ; - - puts ("---------------------------------------------------------") ; - while (len >= 16) - { for (k = 0 ; k < 16 ; k++) - printf ("%02X ", ptr [k] & 0xFF) ; - printf (" ") ; - for (k = 0 ; k < 16 ; k++) - printf ("%c", isprint (ptr [k]) ? ptr [k] : '.') ; - puts ("") ; - ptr += 16 ; - len -= 16 ; - } ; -} /* hexdump */ - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 04393aa1-9389-46fe-baf2-58a7bd544fd6 -*/ diff --git a/Libraries/SndFile/Files/src/svx.c b/Libraries/SndFile/Files/src/svx.c deleted file mode 100644 index 3ef461dde..000000000 --- a/Libraries/SndFile/Files/src/svx.c +++ /dev/null @@ -1,410 +0,0 @@ -/* -** Copyright (C) 1999-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - - -/*------------------------------------------------------------------------------ - * Macros to handle big/little endian issues. -*/ - -#define FORM_MARKER (MAKE_MARKER ('F', 'O', 'R', 'M')) -#define SVX8_MARKER (MAKE_MARKER ('8', 'S', 'V', 'X')) -#define SV16_MARKER (MAKE_MARKER ('1', '6', 'S', 'V')) -#define VHDR_MARKER (MAKE_MARKER ('V', 'H', 'D', 'R')) -#define BODY_MARKER (MAKE_MARKER ('B', 'O', 'D', 'Y')) - -#define ATAK_MARKER (MAKE_MARKER ('A', 'T', 'A', 'K')) -#define RLSE_MARKER (MAKE_MARKER ('R', 'L', 'S', 'E')) - -#define c_MARKER (MAKE_MARKER ('(', 'c', ')', ' ')) -#define NAME_MARKER (MAKE_MARKER ('N', 'A', 'M', 'E')) -#define AUTH_MARKER (MAKE_MARKER ('A', 'U', 'T', 'H')) -#define ANNO_MARKER (MAKE_MARKER ('A', 'N', 'N', 'O')) -#define CHAN_MARKER (MAKE_MARKER ('C', 'H', 'A', 'N')) - -/*------------------------------------------------------------------------------ - * Typedefs for file chunks. -*/ - -typedef struct -{ unsigned int oneShotHiSamples, repeatHiSamples, samplesPerHiCycle ; - unsigned short samplesPerSec ; - unsigned char octave, compression ; - unsigned int volume ; -} VHDR_CHUNK ; - -enum { - HAVE_FORM = 0x01, - - HAVE_SVX = 0x02, - HAVE_VHDR = 0x04, - HAVE_BODY = 0x08 -} ; - -/*------------------------------------------------------------------------------ - * Private static functions. -*/ - -static int svx_close (SF_PRIVATE *psf) ; -static int svx_write_header (SF_PRIVATE *psf, int calc_length) ; -static int svx_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -svx_open (SF_PRIVATE *psf) -{ int error ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = svx_read_header (psf))) - return error ; - - psf->endian = SF_ENDIAN_BIG ; /* All SVX files are big endian. */ - - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - if (psf->blockwidth) - psf->sf.frames = psf->datalength / psf->blockwidth ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SVX) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - - if (psf->endian == SF_ENDIAN_LITTLE || (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU)) - return SFE_BAD_ENDIAN ; - - psf->endian = SF_ENDIAN_BIG ; /* All SVX files are big endian. */ - - error = svx_write_header (psf, SF_FALSE) ; - if (error) - return error ; - - psf->write_header = svx_write_header ; - } ; - - psf->container_close = svx_close ; - - if ((error = pcm_init (psf))) - return error ; - - return 0 ; -} /* svx_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -svx_read_header (SF_PRIVATE *psf) -{ VHDR_CHUNK vhdr ; - unsigned int FORMsize, vhdrsize, dword, marker ; - int filetype = 0, parsestage = 0, done = 0 ; - int bytecount = 0, channels ; - - memset (&vhdr, 0, sizeof (vhdr)) ; - psf_binheader_readf (psf, "p", 0) ; - - /* Set default number of channels. Currently can't handle stereo SVX files. */ - psf->sf.channels = 1 ; - - psf->sf.format = SF_FORMAT_SVX ; - - while (! done) - { psf_binheader_readf (psf, "m", &marker) ; - switch (marker) - { case FORM_MARKER : - if (parsestage) - return SFE_SVX_NO_FORM ; - - psf_binheader_readf (psf, "E4", &FORMsize) ; - - if (FORMsize != psf->filelength - 2 * sizeof (dword)) - { dword = psf->filelength - 2 * sizeof (dword) ; - psf_log_printf (psf, "FORM : %d (should be %d)\n", FORMsize, dword) ; - FORMsize = dword ; - } - else - psf_log_printf (psf, "FORM : %d\n", FORMsize) ; - parsestage |= HAVE_FORM ; - break ; - - case SVX8_MARKER : - case SV16_MARKER : - if (! (parsestage & HAVE_FORM)) - return SFE_SVX_NO_FORM ; - filetype = marker ; - psf_log_printf (psf, " %M\n", marker) ; - parsestage |= HAVE_SVX ; - break ; - - case VHDR_MARKER : - if (! (parsestage & (HAVE_FORM | HAVE_SVX))) - return SFE_SVX_NO_FORM ; - - psf_binheader_readf (psf, "E4", &vhdrsize) ; - - psf_log_printf (psf, " VHDR : %d\n", vhdrsize) ; - - psf_binheader_readf (psf, "E4442114", &(vhdr.oneShotHiSamples), &(vhdr.repeatHiSamples), - &(vhdr.samplesPerHiCycle), &(vhdr.samplesPerSec), &(vhdr.octave), &(vhdr.compression), - &(vhdr.volume)) ; - - psf_log_printf (psf, " OneShotHiSamples : %d\n", vhdr.oneShotHiSamples) ; - psf_log_printf (psf, " RepeatHiSamples : %d\n", vhdr.repeatHiSamples) ; - psf_log_printf (psf, " samplesPerHiCycle : %d\n", vhdr.samplesPerHiCycle) ; - psf_log_printf (psf, " Sample Rate : %d\n", vhdr.samplesPerSec) ; - psf_log_printf (psf, " Octave : %d\n", vhdr.octave) ; - - psf_log_printf (psf, " Compression : %d => ", vhdr.compression) ; - - switch (vhdr.compression) - { case 0 : psf_log_printf (psf, "None.\n") ; - break ; - case 1 : psf_log_printf (psf, "Fibonacci delta\n") ; - break ; - case 2 : psf_log_printf (psf, "Exponential delta\n") ; - break ; - } ; - - psf_log_printf (psf, " Volume : %d\n", vhdr.volume) ; - - psf->sf.samplerate = vhdr.samplesPerSec ; - - if (filetype == SVX8_MARKER) - { psf->sf.format |= SF_FORMAT_PCM_S8 ; - psf->bytewidth = 1 ; - } - else if (filetype == SV16_MARKER) - { psf->sf.format |= SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - } ; - - parsestage |= HAVE_VHDR ; - break ; - - case BODY_MARKER : - if (! (parsestage & HAVE_VHDR)) - return SFE_SVX_NO_BODY ; - - psf_binheader_readf (psf, "E4", &dword) ; - psf->datalength = dword ; - - psf->dataoffset = psf_ftell (psf) ; - - if (psf->datalength > psf->filelength - psf->dataoffset) - { psf_log_printf (psf, " BODY : %D (should be %D)\n", psf->datalength, psf->filelength - psf->dataoffset) ; - psf->datalength = psf->filelength - psf->dataoffset ; - } - else - psf_log_printf (psf, " BODY : %D\n", psf->datalength) ; - - parsestage |= HAVE_BODY ; - - if (! psf->sf.seekable) - break ; - - psf_fseek (psf, psf->datalength, SEEK_CUR) ; - break ; - - case NAME_MARKER : - if (! (parsestage & HAVE_SVX)) - return SFE_SVX_NO_FORM ; - - psf_binheader_readf (psf, "E4", &dword) ; - - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - - if (strlen (psf->filename) != dword) - { if (dword > sizeof (psf->filename) - 1) - return SFE_SVX_BAD_NAME_LENGTH ; - - psf_binheader_readf (psf, "b", psf->filename, dword) ; - psf->filename [dword] = 0 ; - } - else - psf_binheader_readf (psf, "j", dword) ; - break ; - - case ANNO_MARKER : - if (! (parsestage & HAVE_SVX)) - return SFE_SVX_NO_FORM ; - - psf_binheader_readf (psf, "E4", &dword) ; - - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - - psf_binheader_readf (psf, "j", dword) ; - break ; - - case CHAN_MARKER : - if (! (parsestage & HAVE_SVX)) - return SFE_SVX_NO_FORM ; - - psf_binheader_readf (psf, "E4", &dword) ; - - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - - bytecount += psf_binheader_readf (psf, "E4", &channels) ; - psf->sf.channels = channels ; - - psf_log_printf (psf, " Channels : %d\n", channels) ; - - psf_binheader_readf (psf, "j", dword - bytecount) ; - break ; - - - case AUTH_MARKER : - case c_MARKER : - if (! (parsestage & HAVE_SVX)) - return SFE_SVX_NO_FORM ; - - psf_binheader_readf (psf, "E4", &dword) ; - - psf_log_printf (psf, " %M : %d\n", marker, dword) ; - - psf_binheader_readf (psf, "j", dword) ; - break ; - - default : - if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF) - && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF)) - { psf_binheader_readf (psf, "E4", &dword) ; - - psf_log_printf (psf, "%M : %d (unknown marker)\n", marker, dword) ; - - psf_binheader_readf (psf, "j", dword) ; - break ; - } ; - if ((dword = psf_ftell (psf)) & 0x03) - { psf_log_printf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ; - - psf_binheader_readf (psf, "j", -3) ; - break ; - } ; - psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ; - done = 1 ; - } ; /* switch (marker) */ - - if (! psf->sf.seekable && (parsestage & HAVE_BODY)) - break ; - - if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (dword)) - break ; - } ; /* while (1) */ - - if (vhdr.compression) - return SFE_SVX_BAD_COMP ; - - if (psf->dataoffset <= 0) - return SFE_SVX_NO_DATA ; - - return 0 ; -} /* svx_read_header */ - -static int -svx_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - svx_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* svx_close */ - -static int -svx_write_header (SF_PRIVATE *psf, int calc_length) -{ static char annotation [] = "libsndfile by Erik de Castro Lopo\0\0\0" ; - sf_count_t current ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* FORM marker and FORM size. */ - psf_binheader_writef (psf, "Etm8", FORM_MARKER, (psf->filelength < 8) ? - psf->filelength * 0 : psf->filelength - 8) ; - - psf_binheader_writef (psf, "m", (psf->bytewidth == 1) ? SVX8_MARKER : SV16_MARKER) ; - - /* VHDR chunk. */ - psf_binheader_writef (psf, "Em4", VHDR_MARKER, sizeof (VHDR_CHUNK)) ; - /* VHDR : oneShotHiSamples, repeatHiSamples, samplesPerHiCycle */ - psf_binheader_writef (psf, "E444", psf->sf.frames, 0, 0) ; - /* VHDR : samplesPerSec, octave, compression */ - psf_binheader_writef (psf, "E211", psf->sf.samplerate, 1, 0) ; - /* VHDR : volume */ - psf_binheader_writef (psf, "E4", (psf->bytewidth == 1) ? 0xFF : 0xFFFF) ; - - /* Filename and annotation strings. */ - psf_binheader_writef (psf, "Emsms", NAME_MARKER, psf->filename, ANNO_MARKER, annotation) ; - - /* BODY marker and size. */ - psf_binheader_writef (psf, "Etm8", BODY_MARKER, (psf->datalength < 0) ? - psf->datalength * 0 : psf->datalength) ; - - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* svx_write_header */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: a80ab6fb-7d75-4d32-a6b0-0061a3f05d95 -*/ diff --git a/Libraries/SndFile/Files/src/test_endswap.c b/Libraries/SndFile/Files/src/test_endswap.c deleted file mode 100644 index 364d0dd59..000000000 --- a/Libraries/SndFile/Files/src/test_endswap.c +++ /dev/null @@ -1,233 +0,0 @@ -/* -** Copyright (C) 2002-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include - -#if HAVE_UNISTD_H -#include -#endif - -#include -#include - -#include "common.h" -#include "sfendian.h" - -static void test_endswap_short (void) ; -static void test_endswap_int (void) ; -static void test_endswap_int64_t (void) ; - - -int -main (void) -{ - test_endswap_short () ; - test_endswap_int () ; - test_endswap_int64_t () ; - - return 0 ; -} /* main */ - -/*============================================================================== -** Actual test functions. -*/ - -static void -dump_short_array (const char * name, short * data, int datalen) -{ int k ; - - printf ("%-6s : ", name) ; - for (k = 0 ; k < datalen ; k++) - printf ("0x%04x ", data [k]) ; - putchar ('\n') ; -} /* dump_short_array */ - -static void -test_endswap_short (void) -{ short orig [4], first [4], second [4] ; - int k ; - - printf (" %-24s : ", "test_endswap_short") ; - fflush (stdout) ; - - for (k = 0 ; k < ARRAY_LEN (orig) ; k++) - orig [k] = 0x3210 + k ; - - endswap_short_copy (first, orig, ARRAY_LEN (first)) ; - endswap_short_copy (second, first, ARRAY_LEN (second)) ; - - if (memcmp (orig, first, sizeof (orig)) == 0) - { printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ; - dump_short_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_short_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - if (memcmp (orig, second, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ; - dump_short_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_short_array ("second", second, ARRAY_LEN (second)) ; - exit (1) ; - } ; - - endswap_short_array (first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ; - dump_short_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_short_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - endswap_short_copy (first, orig, ARRAY_LEN (first)) ; - endswap_short_copy (first, first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ; - dump_short_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_short_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - puts ("ok") ; -} /* test_endswap_short */ -static void -dump_int_array (const char * name, int * data, int datalen) -{ int k ; - - printf ("%-6s : ", name) ; - for (k = 0 ; k < datalen ; k++) - printf ("0x%08x ", data [k]) ; - putchar ('\n') ; -} /* dump_int_array */ - -static void -test_endswap_int (void) -{ int orig [4], first [4], second [4] ; - int k ; - - printf (" %-24s : ", "test_endswap_int") ; - fflush (stdout) ; - - for (k = 0 ; k < ARRAY_LEN (orig) ; k++) - orig [k] = 0x76543210 + k ; - - endswap_int_copy (first, orig, ARRAY_LEN (first)) ; - endswap_int_copy (second, first, ARRAY_LEN (second)) ; - - if (memcmp (orig, first, sizeof (orig)) == 0) - { printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ; - dump_int_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - if (memcmp (orig, second, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ; - dump_int_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int_array ("second", second, ARRAY_LEN (second)) ; - exit (1) ; - } ; - - endswap_int_array (first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ; - dump_int_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - endswap_int_copy (first, orig, ARRAY_LEN (first)) ; - endswap_int_copy (first, first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ; - dump_int_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - puts ("ok") ; -} /* test_endswap_int */ -static void -dump_int64_t_array (const char * name, int64_t * data, int datalen) -{ int k ; - - printf ("%-6s : ", name) ; - for (k = 0 ; k < datalen ; k++) - printf ("0x%016llx ", data [k]) ; - putchar ('\n') ; -} /* dump_int64_t_array */ - -static void -test_endswap_int64_t (void) -{ int64_t orig [4], first [4], second [4] ; - int k ; - - printf (" %-24s : ", "test_endswap_int64_t") ; - fflush (stdout) ; - - for (k = 0 ; k < ARRAY_LEN (orig) ; k++) - orig [k] = 0x0807050540302010LL + k ; - - endswap_int64_t_copy (first, orig, ARRAY_LEN (first)) ; - endswap_int64_t_copy (second, first, ARRAY_LEN (second)) ; - - if (memcmp (orig, first, sizeof (orig)) == 0) - { printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ; - dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int64_t_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - if (memcmp (orig, second, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ; - dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int64_t_array ("second", second, ARRAY_LEN (second)) ; - exit (1) ; - } ; - - endswap_int64_t_array (first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ; - dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int64_t_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - endswap_int64_t_copy (first, orig, ARRAY_LEN (first)) ; - endswap_int64_t_copy (first, first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ; - dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_int64_t_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - puts ("ok") ; -} /* test_endswap_int64_t */ - - - - diff --git a/Libraries/SndFile/Files/src/test_endswap.def b/Libraries/SndFile/Files/src/test_endswap.def deleted file mode 100644 index 68efe6d75..000000000 --- a/Libraries/SndFile/Files/src/test_endswap.def +++ /dev/null @@ -1,28 +0,0 @@ -autogen definitions test_endswap.tpl; - -int_type = { - name = short ; - value = 0x3210 ; - format = "0x%04x" ; - } ; - -int_type = { - name = int ; - value = 0x76543210 ; - format = "0x%08x" ; - } ; - -int_type = { - name = int64_t ; - value = "0x0807050540302010LL" ; - format = "0x%016llx" ; - } ; - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 098c07e0-2d3f-4f62-ad93-f3f4b91c5211 -*/ - diff --git a/Libraries/SndFile/Files/src/test_endswap.tpl b/Libraries/SndFile/Files/src/test_endswap.tpl deleted file mode 100644 index 33d647293..000000000 --- a/Libraries/SndFile/Files/src/test_endswap.tpl +++ /dev/null @@ -1,126 +0,0 @@ -[+ AutoGen5 template c +] -/* -** Copyright (C) 2002-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include - -#if HAVE_UNISTD_H -#include -#endif - -#include -#include - -#include "common.h" -#include "sfendian.h" - -[+ FOR int_type -+]static void test_endswap_[+ (get "name") +] (void) ; -[+ ENDFOR int_type -+] - -int -main (void) -{ -[+ FOR int_type -+] test_endswap_[+ (get "name") +] () ; -[+ ENDFOR int_type -+] - return 0 ; -} /* main */ - -/*============================================================================== -** Actual test functions. -*/ - -[+ FOR int_type -+]static void -dump_[+ (get "name") +]_array (const char * name, [+ (get "name") +] * data, int datalen) -{ int k ; - - printf ("%-6s : ", name) ; - for (k = 0 ; k < datalen ; k++) - printf ("[+ (get "format") +] ", data [k]) ; - putchar ('\n') ; -} /* dump_[+ (get "name") +]_array */ - -static void -test_endswap_[+ (get "name") +] (void) -{ [+ (get "name") +] orig [4], first [4], second [4] ; - int k ; - - printf (" %-24s : ", "test_endswap_[+ (get "name") +]") ; - fflush (stdout) ; - - for (k = 0 ; k < ARRAY_LEN (orig) ; k++) - orig [k] = [+ (get "value") +] + k ; - - endswap_[+ (get "name") +]_copy (first, orig, ARRAY_LEN (first)) ; - endswap_[+ (get "name") +]_copy (second, first, ARRAY_LEN (second)) ; - - if (memcmp (orig, first, sizeof (orig)) == 0) - { printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ; - dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - if (memcmp (orig, second, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ; - dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_[+ (get "name") +]_array ("second", second, ARRAY_LEN (second)) ; - exit (1) ; - } ; - - endswap_[+ (get "name") +]_array (first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ; - dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - endswap_[+ (get "name") +]_copy (first, orig, ARRAY_LEN (first)) ; - endswap_[+ (get "name") +]_copy (first, first, ARRAY_LEN (first)) ; - - if (memcmp (orig, first, sizeof (orig)) != 0) - { printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ; - dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ; - dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ; - exit (1) ; - } ; - - puts ("ok") ; -} /* test_endswap_[+ (get "name") +] */ -[+ ENDFOR int_type -+] - - -[+ COMMENT -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: fd8887e8-8202-4f30-a419-0cf01a0e799b -*/ -+] diff --git a/Libraries/SndFile/Files/src/test_file_io.c b/Libraries/SndFile/Files/src/test_file_io.c deleted file mode 100644 index fa7b45203..000000000 --- a/Libraries/SndFile/Files/src/test_file_io.c +++ /dev/null @@ -1,448 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include - -#if HAVE_UNISTD_H -#include -#endif - -#include -#include - -#include "common.h" - -static void make_data (int *data, int len, int seed) ; - -static void file_open_test (const char *filename) ; -static void file_read_write_test (const char *filename) ; -static void file_truncate_test (const char *filename) ; - -static void test_open_or_die (SF_PRIVATE *psf, int linenum) ; -static void test_close_or_die (SF_PRIVATE *psf, int linenum) ; - -static void test_write_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) ; -static void test_read_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) ; -static void test_equal_or_die (int *array1, int *array2, int len, int linenum) ; -static void test_seek_or_die (SF_PRIVATE *psf, sf_count_t offset, int whence, sf_count_t new_position, int linenum) ; - - - -int -main (void) -{ const char *filename = "file_io.dat" ; - - file_open_test (filename) ; - file_read_write_test (filename) ; - file_truncate_test (filename) ; - - unlink (filename) ; - - return 0 ; -} /* main */ - -/*============================================================================== -** Actual test functions. -*/ - -static void -file_open_test (const char *filename) -{ SF_PRIVATE sf_data, *psf ; - int error ; - - printf (" %-24s : ", "file_open_test") ; - fflush (stdout) ; - - memset (&sf_data, 0, sizeof (sf_data)) ; - psf = &sf_data ; - - /* Ensure that the file doesn't already exist. */ - if (unlink (filename) != 0 && errno != ENOENT) - { printf ("\n\nLine %d: unlink failed (%d) : %s\n\n", __LINE__, errno, strerror (errno)) ; - exit (1) ; - } ; - - strncpy (psf->filename, filename, sizeof (psf->filename)) ; - - /* Test that open for read fails if the file doesn't exist. */ - error = psf_fopen (psf, psf->filename, SFM_READ) ; - if (error == 0) - { printf ("\n\nLine %d: psf_fopen() should have failed.\n\n", __LINE__) ; - exit (1) ; - } ; - - /* Reset error to zero. */ - psf->error = SFE_NO_ERROR ; - - /* Test file open in write mode. */ - psf->mode = SFM_WRITE ; - test_open_or_die (psf, __LINE__) ; - - test_close_or_die (psf, __LINE__) ; - - unlink (psf->filename) ; - - /* Test file open in read/write mode for a non-existant file. */ - psf->mode = SFM_RDWR ; - test_open_or_die (psf, __LINE__) ; - - test_close_or_die (psf, __LINE__) ; - - /* Test file open in read/write mode for an existing file. */ - psf->mode = SFM_RDWR ; - test_open_or_die (psf, __LINE__) ; - - test_close_or_die (psf, __LINE__) ; - - unlink (psf->filename) ; - puts ("ok") ; -} /* file_open_test */ - -static void -file_read_write_test (const char *filename) -{ static int data_out [512] ; - static int data_in [512] ; - - SF_PRIVATE sf_data, *psf ; - sf_count_t retval ; - - /* - ** Open a new file and write two blocks of data to the file. After each - ** write, test that psf_get_filelen() returns the new length. - */ - - printf (" %-24s : ", "file_write_test") ; - fflush (stdout) ; - - memset (&sf_data, 0, sizeof (sf_data)) ; - psf = &sf_data ; - strncpy (psf->filename, filename, sizeof (psf->filename)) ; - - /* Test file open in write mode. */ - psf->mode = SFM_WRITE ; - test_open_or_die (psf, __LINE__) ; - - make_data (data_out, ARRAY_LEN (data_out), 1) ; - test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), sizeof (data_out), __LINE__) ; - - if ((retval = psf_get_filelen (psf)) != sizeof (data_out)) - { printf ("\n\nLine %d: file length after write is not correct (%ld should be %d).\n\n", __LINE__, (long) retval, (int) sizeof (data_out)) ; - if (retval == 0) - printf ("An fsync() may be necessary before fstat() in psf_get_filelen().\n\n") ; - exit (1) ; - } ; - - make_data (data_out, ARRAY_LEN (data_out), 2) ; - test_write_or_die (psf, data_out, ARRAY_LEN (data_out), sizeof (data_out [0]), 2 * sizeof (data_out), __LINE__) ; - - if ((retval = psf_get_filelen (psf)) != 2 * sizeof (data_out)) - { printf ("\n\nLine %d: file length after write is not correct. (%ld should be %d)\n\n", __LINE__, (long) retval, 2 * ((int) sizeof (data_out))) ; - exit (1) ; - } ; - - test_close_or_die (psf, __LINE__) ; - puts ("ok") ; - - /* - ** Now open the file in read mode, check the file length and check - ** that the data is correct. - */ - - printf (" %-24s : ", "file_read_test") ; - fflush (stdout) ; - - /* Test file open in write mode. */ - psf->mode = SFM_READ ; - test_open_or_die (psf, __LINE__) ; - - make_data (data_out, ARRAY_LEN (data_out), 1) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - make_data (data_out, ARRAY_LEN (data_out), 2) ; - test_read_or_die (psf, data_in, sizeof (data_in [0]), ARRAY_LEN (data_in), 2 * sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - test_close_or_die (psf, __LINE__) ; - - puts ("ok") ; - - /* - ** Open the file in read/write mode, seek around a bit and then seek to - ** the end of the file and write another block of data (3rd block). Then - ** go back and check that all three blocks are correct. - */ - - printf (" %-24s : ", "file_seek_test") ; - fflush (stdout) ; - - /* Test file open in read/write mode. */ - psf->mode = SFM_RDWR ; - test_open_or_die (psf, __LINE__) ; - - test_seek_or_die (psf, 0, SEEK_SET, 0, __LINE__) ; - test_seek_or_die (psf, 0, SEEK_END, 2 * SIGNED_SIZEOF (data_out), __LINE__) ; - test_seek_or_die (psf, -1 * SIGNED_SIZEOF (data_out), SEEK_CUR, (sf_count_t) sizeof (data_out), __LINE__) ; - - test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_CUR, 2 * SIGNED_SIZEOF (data_out), __LINE__) ; - make_data (data_out, ARRAY_LEN (data_out), 3) ; - test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), 3 * sizeof (data_out), __LINE__) ; - - test_seek_or_die (psf, 0, SEEK_SET, 0, __LINE__) ; - make_data (data_out, ARRAY_LEN (data_out), 1) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - test_seek_or_die (psf, 2 * SIGNED_SIZEOF (data_out), SEEK_SET, 2 * SIGNED_SIZEOF (data_out), __LINE__) ; - make_data (data_out, ARRAY_LEN (data_out), 3) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), 3 * sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_SET, SIGNED_SIZEOF (data_out), __LINE__) ; - make_data (data_out, ARRAY_LEN (data_out), 2) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), 2 * sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - test_close_or_die (psf, __LINE__) ; - puts ("ok") ; - - /* - ** Now test operations with a non-zero psf->fileoffset field. This field - ** sets an artificial file start positions so that a seek to the start of - ** the file will actually be a seek to the value given by psf->fileoffset. - */ - - printf (" %-24s : ", "file_offset_test") ; - fflush (stdout) ; - - /* Test file open in read/write mode. */ - psf->mode = SFM_RDWR ; - psf->fileoffset = sizeof (data_out [0]) * ARRAY_LEN (data_out) ; - test_open_or_die (psf, __LINE__) ; - - if ((retval = psf_get_filelen (psf)) != 3 * sizeof (data_out)) - { printf ("\n\nLine %d: file length after write is not correct. (%ld should be %d)\n\n", __LINE__, (long) retval, 3 * ((int) sizeof (data_out))) ; - exit (1) ; - } ; - - test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_SET, SIGNED_SIZEOF (data_out), __LINE__) ; - make_data (data_out, ARRAY_LEN (data_out), 5) ; - test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), 2 * sizeof (data_out), __LINE__) ; - test_close_or_die (psf, __LINE__) ; - - /* final test with psf->fileoffset == 0. */ - - psf->mode = SFM_RDWR ; - psf->fileoffset = 0 ; - test_open_or_die (psf, __LINE__) ; - - if ((retval = psf_get_filelen (psf)) != 3 * sizeof (data_out)) - { printf ("\n\nLine %d: file length after write is not correct. (%ld should be %d)\n\n", __LINE__, (long) retval, 3 * ((int) sizeof (data_out))) ; - exit (1) ; - } ; - - make_data (data_out, ARRAY_LEN (data_out), 1) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - make_data (data_out, ARRAY_LEN (data_out), 2) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), 2 * sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - make_data (data_out, ARRAY_LEN (data_out), 5) ; - test_read_or_die (psf, data_in, 1, sizeof (data_in), 3 * sizeof (data_in), __LINE__) ; - test_equal_or_die (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ; - - test_close_or_die (psf, __LINE__) ; - - puts ("ok") ; -} /* file_read_write_test */ - -static void -file_truncate_test (const char *filename) -{ SF_PRIVATE sf_data, *psf ; - unsigned char buffer [256] ; - int k ; - - /* - ** Open a new file and write two blocks of data to the file. After each - ** write, test that psf_get_filelen() returns the new length. - */ - - printf (" %-24s : ", "file_truncate_test") ; - fflush (stdout) ; - - memset (&sf_data, 0, sizeof (sf_data)) ; - memset (buffer, 0xEE, sizeof (buffer)) ; - - psf = &sf_data ; - strncpy (psf->filename, filename, sizeof (psf->filename)) ; - - /* - ** Open the file write mode, write 0xEE data and then extend the file - ** using truncate (the extended data should be 0x00). - */ - psf->mode = SFM_WRITE ; - test_open_or_die (psf, __LINE__) ; - test_write_or_die (psf, buffer, sizeof (buffer) / 2, 1, sizeof (buffer) / 2, __LINE__) ; - psf_ftruncate (psf, sizeof (buffer)) ; - test_close_or_die (psf, __LINE__) ; - - /* Open the file in read mode and check the data. */ - psf->mode = SFM_READ ; - test_open_or_die (psf, __LINE__) ; - test_read_or_die (psf, buffer, sizeof (buffer), 1, sizeof (buffer), __LINE__) ; - test_close_or_die (psf, __LINE__) ; - - for (k = 0 ; k < SIGNED_SIZEOF (buffer) / 2 ; k++) - if (buffer [k] != 0xEE) - { printf ("\n\nLine %d : buffer [%d] = %d (should be 0xEE)\n\n", __LINE__, k, buffer [k]) ; - exit (1) ; - } ; - - for (k = SIGNED_SIZEOF (buffer) / 2 ; k < SIGNED_SIZEOF (buffer) ; k++) - if (buffer [k] != 0) - { printf ("\n\nLine %d : buffer [%d] = %d (should be 0)\n\n", __LINE__, k, buffer [k]) ; - exit (1) ; - } ; - - /* Open the file in read/write and shorten the file using truncate. */ - psf->mode = SFM_RDWR ; - test_open_or_die (psf, __LINE__) ; - psf_ftruncate (psf, sizeof (buffer) / 4) ; - test_close_or_die (psf, __LINE__) ; - - /* Check the file length. */ - psf->mode = SFM_READ ; - test_open_or_die (psf, __LINE__) ; - test_seek_or_die (psf, 0, SEEK_END, SIGNED_SIZEOF (buffer) / 4, __LINE__) ; - test_close_or_die (psf, __LINE__) ; - - puts ("ok") ; -} /* file_truncate_test */ - -/*============================================================================== -** Testing helper functions. -*/ - -static void -test_open_or_die (SF_PRIVATE *psf, int linenum) -{ int error ; - - /* Test that open for read fails if the file doesn't exist. */ - error = psf_fopen (psf, psf->filename, psf->mode) ; - if (error) - { printf ("\n\nLine %d: psf_fopen() failed : %s\n\n", linenum, strerror (errno)) ; - exit (1) ; - } ; - -} /* test_open_or_die */ - -static void -test_close_or_die (SF_PRIVATE *psf, int linenum) -{ - psf_fclose (psf) ; - if (psf_file_valid (psf)) - { printf ("\n\nLine %d: psf->filedes should not be valid.\n\n", linenum) ; - exit (1) ; - } ; - -} /* test_close_or_die */ - -static void -test_write_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) -{ sf_count_t retval ; - - retval = psf_fwrite (data, bytes, items, psf) ; - if (retval != items) - { printf ("\n\nLine %d: psf_write() returned %ld (should be %ld)\n\n", linenum, (long) retval, (long) items) ; - exit (1) ; - } ; - - if ((retval = psf_ftell (psf)) != new_position) - { printf ("\n\nLine %d: file length after write is not correct. (%ld should be %ld)\n\n", linenum, (long) retval, (long) new_position) ; - exit (1) ; - } ; - - return ; -} /* test_write_or_die */ - -static void -test_read_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) -{ sf_count_t retval ; - - retval = psf_fread (data, bytes, items, psf) ; - if (retval != items) - { printf ("\n\nLine %d: psf_write() returned %ld (should be %ld)\n\n", linenum, (long) retval, (long) items) ; - exit (1) ; - } ; - - if ((retval = psf_ftell (psf)) != new_position) - { printf ("\n\nLine %d: file length after write is not correct. (%ld should be %ld)\n\n", linenum, (long) retval, (long) new_position) ; - exit (1) ; - } ; - - return ; -} /* test_write_or_die */ - -static void -test_seek_or_die (SF_PRIVATE *psf, sf_count_t offset, int whence, sf_count_t new_position, int linenum) -{ sf_count_t retval ; - - retval = psf_fseek (psf, offset, whence) ; - - if (retval != new_position) - { printf ("\n\nLine %d: psf_fseek() failed. New position is %ld (should be %ld).\n\n", - linenum, (long) retval, (long) new_position) ; - exit (1) ; - } ; - -} /* test_seek_or_die */ - -static void -test_equal_or_die (int *array1, int *array2, int len, int linenum) -{ int k ; - - for (k = 0 ; k < len ; k++) - if (array1 [k] != array2 [k]) - printf ("\n\nLine %d: error at index %d (%d != %d).\n\n", - linenum, k, array1 [k], array2 [k]) ; - - return ; -} /* test_equal_or_die */ - -static void -make_data (int *data, int len, int seed) -{ int k ; - - srand (seed * 3333333 + 14756123) ; - - for (k = 0 ; k < len ; k++) - data [k] = rand () ; - -} /* make_data */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 0a21fb93-78dd-4f72-8338-4bca9e77b8c8 -*/ diff --git a/Libraries/SndFile/Files/src/test_log_printf.c b/Libraries/SndFile/Files/src/test_log_printf.c deleted file mode 100644 index 2628dcfef..000000000 --- a/Libraries/SndFile/Files/src/test_log_printf.c +++ /dev/null @@ -1,138 +0,0 @@ -/* -** Copyright (C) 2003-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include -#include -#include - -#include "sfconfig.h" - -/* -** This is a bit rough, but it is the nicest way to do it. -*/ -#define PSF_LOG_PRINTF_ONLY -#include "common.c" - - -#define CMP_0_ARGS(line,err,fmt) \ - { psf->logindex = 0 ; \ - LSF_SNPRINTF (buffer, sizeof (buffer), (fmt)) ; \ - psf_log_printf (psf, (fmt)) ; \ - err += compare_strings_or_die (line, fmt, buffer, psf->logbuffer) ; \ - } - -#define CMP_2_ARGS(line,err,fmt,a) \ - { psf->logindex = 0 ; \ - LSF_SNPRINTF (buffer, sizeof (buffer), (fmt), (a), (a)) ; \ - psf_log_printf (psf, (fmt), (a), (a)) ; \ - err += compare_strings_or_die (line, fmt, buffer, psf->logbuffer) ; \ - } - -#define CMP_4_ARGS(line,err,fmt,a) \ - { psf->logindex = 0 ; \ - LSF_SNPRINTF (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a)) ; \ - psf_log_printf (psf, (fmt), (a), (a), (a), (a)) ; \ - err += compare_strings_or_die (line, fmt, buffer, psf->logbuffer) ; \ - } - -#define CMP_5_ARGS(line,err,fmt,a) \ - { psf->logindex = 0 ; \ - LSF_SNPRINTF (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a), (a)) ; \ - psf_log_printf (psf, (fmt), (a), (a), (a), (a), (a)) ; \ - err += compare_strings_or_die (line, fmt, buffer, psf->logbuffer) ; \ - } - -#define CMP_6_ARGS(line,err,fmt,a) \ - { psf->logindex = 0 ; \ - LSF_SNPRINTF (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a), (a), (a)) ; \ - psf_log_printf (psf, (fmt), (a), (a), (a), (a), (a), (a)) ; \ - err += compare_strings_or_die (line, fmt, buffer, psf->logbuffer) ; \ - } - -static int compare_strings_or_die (int linenum, const char *fmt, const char* s1, const char* s3) ; - -int -main (void) -{ static char buffer [2048] ; - SF_PRIVATE sf_private, *psf ; - int k, errors = 0 ; - int int_values [] = { 0, 1, 12, 123, 1234, 123456, -1, -12, -123, -1234, -123456 } ; - - printf (" %-24s : ", "psf_log_printf_test") ; - fflush (stdout) ; - - psf = &sf_private ; - memset (psf, 0, sizeof (sf_private)) ; - - CMP_0_ARGS (__LINE__, errors, " ->%%<- ") ; - - /* Test printing of ints. */ - for (k = 0 ; k < ARRAY_LEN (int_values) ; k++) - CMP_6_ARGS (__LINE__, errors, "int A : %d, % d, %4d, % 4d, %04d, % 04d", int_values [k]) ; - - for (k = 0 ; k < ARRAY_LEN (int_values) ; k++) - CMP_5_ARGS (__LINE__, errors, "int B : %+d, %+4d, %+04d, %-d, %-4d", int_values [k]) ; - - for (k = 0 ; k < ARRAY_LEN (int_values) ; k++) - CMP_2_ARGS (__LINE__, errors, "int C : %- d, %- 4d", int_values [k]) ; - - /* Test printing of unsigned ints. */ - for (k = 0 ; k < ARRAY_LEN (int_values) ; k++) - CMP_4_ARGS (__LINE__, errors, "D : %u, %4u, %04u, %0u", int_values [k]) ; - - /* Test printing of hex ints. */ - for (k = 0 ; k < ARRAY_LEN (int_values) ; k++) - CMP_4_ARGS (__LINE__, errors, "E : %X, %4X, %04X, %0X", int_values [k]) ; - - /* Test printing of strings. */ - CMP_4_ARGS (__LINE__, errors, "B %s, %3s, %8s, %-8s", "str") ; - - if (errors) - { puts ("\nExiting due to errors.\n") ; - exit (1) ; - } ; - - puts ("ok") ; - - return 0 ; -} /* main */ - -static int -compare_strings_or_die (int linenum, const char *fmt, const char* s1, const char* s2) -{ int errors = 0 ; -/*-puts (s1) ;puts (s2) ;-*/ - - if (strcmp (s1, s2) != 0) - { printf ("\n\nLine %d: string compare mismatch:\n\t", linenum) ; - printf ("\"%s\"\n", fmt) ; - printf ("\t\"%s\"\n\t\"%s\"\n", s1, s2) ; - errors ++ ; - } ; - - return errors ; -} /* compare_strings_or_die */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 45147310-868b-400a-97e8-cc0a572a6270 -*/ diff --git a/Libraries/SndFile/Files/src/txw.c b/Libraries/SndFile/Files/src/txw.c deleted file mode 100644 index 0f0add673..000000000 --- a/Libraries/SndFile/Files/src/txw.c +++ /dev/null @@ -1,379 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/*=========================================================================== -** Yamaha TX16 Sampler Files. -** -** This header parser was written using information from the SoX source code -** and trial and error experimentation. The code here however is all original. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#if (ENABLE_EXPERIMENTAL_CODE == 0) - -int -txw_open (SF_PRIVATE *psf) -{ if (psf) - return SFE_UNIMPLEMENTED ; - return (psf && 0) ; -} /* txw_open */ - -#else - -/*------------------------------------------------------------------------------ -** Markers. -*/ - -#define TXW_DATA_OFFSET 32 - -#define TXW_LOOPED 0x49 -#define TXW_NO_LOOP 0xC9 - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int txw_read_header (SF_PRIVATE *psf) ; - -static sf_count_t txw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t txw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t txw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t txw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t txw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -/*------------------------------------------------------------------------------ -** Public functions. -*/ - -/* - * ftp://ftp.t0.or.at/pub/sound/tx16w/samples.yamaha - * ftp://ftp.t0.or.at/pub/sound/tx16w/faq/tx16w.tec - * http://www.t0.or.at/~mpakesch/tx16w/ - * - * from tx16w.c sox 12.15: (7-Oct-98) (Mark Lakata and Leigh Smith) - * char filetype[6] "LM8953" - * nulls[10], - * dummy_aeg[6] - * format 0x49 = looped, 0xC9 = non-looped - * sample_rate 1 = 33 kHz, 2 = 50 kHz, 3 = 16 kHz - * atc_length[3] if sample rate 0, [2]&0xfe = 6: 33kHz, 0x10:50, 0xf6: 16, - * depending on [5] but to heck with it - * rpt_length[3] (these are for looped samples, attack and loop lengths) - * unused[2] - */ - -typedef struct -{ unsigned char format, srate, sr2, sr3 ; - unsigned short srhash ; - unsigned int attacklen, repeatlen ; -} TXW_HEADER ; - -#define ERROR_666 666 - -int -txw_open (SF_PRIVATE *psf) -{ int error ; - - if (psf->mode != SFM_READ) - return SFE_UNIMPLEMENTED ; - - if ((error = txw_read_header (psf))) - return error ; - - if (psf_fseek (psf, psf->dataoffset, SEEK_SET) != psf->dataoffset) - return SFE_BAD_SEEK ; - - psf->read_short = txw_read_s ; - psf->read_int = txw_read_i ; - psf->read_float = txw_read_f ; - psf->read_double = txw_read_d ; - - psf->seek = txw_seek ; - - return 0 ; -} /* txw_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -txw_read_header (SF_PRIVATE *psf) -{ TXW_HEADER txwh ; - char *strptr ; - - memset (&txwh, 0, sizeof (txwh)) ; - memset (psf->u.cbuf, 0, sizeof (psf->u.cbuf)) ; - psf_binheader_readf (psf, "pb", 0, psf->u.cbuf, 16) ; - - if (memcmp (psf->u.cbuf, "LM8953\0\0\0\0\0\0\0\0\0\0", 16) != 0) - return ERROR_666 ; - - psf_log_printf (psf, "Read only : Yamaha TX-16 Sampler (.txw)\nLM8953\n") ; - - /* Jump 6 bytes (dummp_aeg), read format, read sample rate. */ - psf_binheader_readf (psf, "j11", 6, &txwh.format, &txwh.srate) ; - - /* 8 bytes (atc_length[3], rpt_length[3], unused[2]). */ - psf_binheader_readf (psf, "e33j", &txwh.attacklen, &txwh.repeatlen, 2) ; - txwh.sr2 = (txwh.attacklen >> 16) & 0xFE ; - txwh.sr3 = (txwh.repeatlen >> 16) & 0xFE ; - txwh.attacklen &= 0x1FFFF ; - txwh.repeatlen &= 0x1FFFF ; - - switch (txwh.format) - { case TXW_LOOPED : - strptr = "looped" ; - break ; - - case TXW_NO_LOOP : - strptr = "non-looped" ; - break ; - - default : - psf_log_printf (psf, " Format : 0x%02x => ?????\n", txwh.format) ; - return ERROR_666 ; - } ; - - psf_log_printf (psf, " Format : 0x%02X => %s\n", txwh.format, strptr) ; - - strptr = NULL ; - - switch (txwh.srate) - { case 1 : - psf->sf.samplerate = 33333 ; - break ; - - case 2 : - psf->sf.samplerate = 50000 ; - break ; - - case 3 : - psf->sf.samplerate = 16667 ; - break ; - - default : - /* This is ugly and braindead. */ - txwh.srhash = ((txwh.sr2 & 0xFE) << 8) | (txwh.sr3 & 0xFE) ; - switch (txwh.srhash) - { case ((0x6 << 8) | 0x52) : - psf->sf.samplerate = 33333 ; - break ; - - case ((0x10 << 8) | 0x52) : - psf->sf.samplerate = 50000 ; - break ; - - case ((0xF6 << 8) | 0x52) : - psf->sf.samplerate = 166667 ; - break ; - - default : - strptr = " Sample Rate : Unknown : forcing to 33333\n" ; - psf->sf.samplerate = 33333 ; - break ; - } ; - } ; - - - if (strptr) - psf_log_printf (psf, strptr) ; - else if (txwh.srhash) - psf_log_printf (psf, " Sample Rate : %d (0x%X) => %d\n", txwh.srate, txwh.srhash, psf->sf.samplerate) ; - else - psf_log_printf (psf, " Sample Rate : %d => %d\n", txwh.srate, psf->sf.samplerate) ; - - if (txwh.format == TXW_LOOPED) - { psf_log_printf (psf, " Attack Len : %d\n", txwh.attacklen) ; - psf_log_printf (psf, " Repeat Len : %d\n", txwh.repeatlen) ; - } ; - - psf->dataoffset = TXW_DATA_OFFSET ; - psf->datalength = psf->filelength - TXW_DATA_OFFSET ; - psf->sf.frames = 2 * psf->datalength / 3 ; - - - if (psf->datalength % 3 == 1) - psf_log_printf (psf, "*** File seems to be truncated, %d extra bytes.\n", - (int) (psf->datalength % 3)) ; - - if (txwh.attacklen + txwh.repeatlen > psf->sf.frames) - psf_log_printf (psf, "*** File has been truncated.\n") ; - - psf->sf.format = SF_FORMAT_TXW | SF_FORMAT_PCM_16 ; - psf->sf.channels = 1 ; - psf->sf.sections = 1 ; - psf->sf.seekable = SF_TRUE ; - - return 0 ; -} /* txw_read_header */ - -static sf_count_t -txw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ unsigned char *ucptr ; - short sample ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.cbuf) / 3 ; - bufferlen -= (bufferlen & 1) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = psf_fread (psf->u.cbuf, 3, readcount, psf) ; - - ucptr = psf->u.ucbuf ; - for (k = 0 ; k < readcount ; k += 2) - { sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ; - ptr [total + k] = sample ; - sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ; - ptr [total + k + 1] = sample ; - ucptr += 3 ; - } ; - - total += count ; - len -= readcount ; - } ; - - return total ; -} /* txw_read_s */ - -static sf_count_t -txw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ unsigned char *ucptr ; - short sample ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - - bufferlen = sizeof (psf->u.cbuf) / 3 ; - bufferlen -= (bufferlen & 1) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = psf_fread (psf->u.cbuf, 3, readcount, psf) ; - - ucptr = psf->u.ucbuf ; - for (k = 0 ; k < readcount ; k += 2) - { sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ; - ptr [total + k] = sample << 16 ; - sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ; - ptr [total + k + 1] = sample << 16 ; - ucptr += 3 ; - } ; - - total += count ; - len -= readcount ; - } ; - - return total ; -} /* txw_read_i */ - -static sf_count_t -txw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ unsigned char *ucptr ; - short sample ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (psf->norm_float == SF_TRUE) - normfact = 1.0 / 0x8000 ; - else - normfact = 1.0 / 0x10 ; - - bufferlen = sizeof (psf->u.cbuf) / 3 ; - bufferlen -= (bufferlen & 1) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = psf_fread (psf->u.cbuf, 3, readcount, psf) ; - - ucptr = psf->u.ucbuf ; - for (k = 0 ; k < readcount ; k += 2) - { sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ; - ptr [total + k] = normfact * sample ; - sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ; - ptr [total + k + 1] = normfact * sample ; - ucptr += 3 ; - } ; - - total += count ; - len -= readcount ; - } ; - - return total ; -} /* txw_read_f */ - -static sf_count_t -txw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ unsigned char *ucptr ; - short sample ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (psf->norm_double == SF_TRUE) - normfact = 1.0 / 0x8000 ; - else - normfact = 1.0 / 0x10 ; - - bufferlen = sizeof (psf->u.cbuf) / 3 ; - bufferlen -= (bufferlen & 1) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : len ; - count = psf_fread (psf->u.cbuf, 3, readcount, psf) ; - - ucptr = psf->u.ucbuf ; - for (k = 0 ; k < readcount ; k += 2) - { sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ; - ptr [total + k] = normfact * sample ; - sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ; - ptr [total + k + 1] = normfact * sample ; - ucptr += 3 ; - } ; - - total += count ; - len -= readcount ; - } ; - - return total ; -} /* txw_read_d */ - -static sf_count_t -txw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ if (psf && mode) - return offset ; - - return 0 ; -} /* txw_seek */ - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 4d0ba7af-b1c5-46b4-a900-7c6f59fd9a89 -*/ diff --git a/Libraries/SndFile/Files/src/ulaw.c b/Libraries/SndFile/Files/src/ulaw.c deleted file mode 100644 index e476c0a78..000000000 --- a/Libraries/SndFile/Files/src/ulaw.c +++ /dev/null @@ -1,1047 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sndfile.h" -#include "float_cast.h" -#include "common.h" - -static sf_count_t ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t ulaw_write_s2ulaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t ulaw_write_i2ulaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t ulaw_write_f2ulaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t ulaw_write_d2ulaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -int -ulaw_init (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { psf->read_short = ulaw_read_ulaw2s ; - psf->read_int = ulaw_read_ulaw2i ; - psf->read_float = ulaw_read_ulaw2f ; - psf->read_double = ulaw_read_ulaw2d ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { psf->write_short = ulaw_write_s2ulaw ; - psf->write_int = ulaw_write_i2ulaw ; - psf->write_float = ulaw_write_f2ulaw ; - psf->write_double = ulaw_write_d2ulaw ; - } ; - - psf->bytewidth = 1 ; - psf->blockwidth = psf->sf.channels ; - - if (psf->filelength > psf->dataoffset) - psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : - psf->filelength - psf->dataoffset ; - else - psf->datalength = 0 ; - - psf->sf.frames = psf->datalength / psf->blockwidth ; - - return 0 ; -} /* ulaw_init */ - -/*============================================================================== -*/ - -static short ulaw_decode [256] = -{ -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956, - -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764, - -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412, - -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316, - -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140, - -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092, - -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004, - -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980, - -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436, - -1372, -1308, -1244, -1180, -1116, -1052, -988, -924, - -876, -844, -812, -780, -748, -716, -684, -652, - -620, -588, -556, -524, -492, -460, -428, -396, - -372, -356, -340, -324, -308, -292, -276, -260, - -244, -228, -212, -196, -180, -164, -148, -132, - -120, -112, -104, -96, -88, -80, -72, -64, - -56, -48, -40, -32, -24, -16, -8, 0, - - 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956, - 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764, - 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412, - 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316, - 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140, - 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092, - 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004, - 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980, - 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436, - 1372, 1308, 1244, 1180, 1116, 1052, 988, 924, - 876, 844, 812, 780, 748, 716, 684, 652, - 620, 588, 556, 524, 492, 460, 428, 396, - 372, 356, 340, 324, 308, 292, 276, 260, - 244, 228, 212, 196, 180, 164, 148, 132, - 120, 112, 104, 96, 88, 80, 72, 64, - 56, 48, 40, 32, 24, 16, 8, 0 -} ; - -static -unsigned char ulaw_encode [8193] = -{ 0xff, 0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9, - 0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3, - 0xf3, 0xf2, 0xf2, 0xf1, 0xf1, 0xf0, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xee, - 0xee, 0xee, 0xee, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xeb, - 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8, - 0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5, - 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, - 0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, - 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xde, 0xde, 0xde, - 0xde, 0xde, 0xde, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, - 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, - 0xdb, 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd9, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, - 0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd6, - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, - 0xd5, 0xd5, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd3, - 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, - 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0, - 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, - 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce, - 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, - 0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, - 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, - 0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, - 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0xc8, 0xc8, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, - 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, - 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, - 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbf, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, - 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, - 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, - 0xbe, 0xbe, 0xbe, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, - 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, - 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, - 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, - 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, - 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xb9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xb8, 0xb8, 0xb8, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, - 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, - 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb3, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xb2, 0xb2, 0xb2, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, - 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, - 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb0, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xae, 0xae, 0xae, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00 -} ; - -static inline void -ulaw2s_array (unsigned char *buffer, int count, short *ptr) -{ while (--count >= 0) - ptr [count] = ulaw_decode [(int) buffer [count]] ; -} /* ulaw2s_array */ - -static inline void -ulaw2i_array (unsigned char *buffer, int count, int *ptr) -{ while (--count >= 0) - ptr [count] = ulaw_decode [buffer [count]] << 16 ; -} /* ulaw2i_array */ - -static inline void -ulaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact) -{ while (--count >= 0) - ptr [count] = normfact * ulaw_decode [(int) buffer [count]] ; -} /* ulaw2f_array */ - -static inline void -ulaw2d_array (const unsigned char *buffer, int count, double *ptr, double normfact) -{ while (--count >= 0) - ptr [count] = normfact * ulaw_decode [(int) buffer [count]] ; -} /* ulaw2d_array */ - -static inline void -s2ulaw_array (const short *ptr, int count, unsigned char *buffer) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = ulaw_encode [ptr [count] / 4] ; - else - buffer [count] = 0x7F & ulaw_encode [ptr [count] / -4] ; - } ; -} /* s2ulaw_array */ - -static inline void -i2ulaw_array (const int *ptr, int count, unsigned char *buffer) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = ulaw_encode [ptr [count] >> (16 + 2)] ; - else - buffer [count] = 0x7F & ulaw_encode [-ptr [count] >> (16 + 2)] ; - } ; -} /* i2ulaw_array */ - -static inline void -f2ulaw_array (const float *ptr, int count, unsigned char *buffer, float normfact) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = ulaw_encode [lrintf (normfact * ptr [count])] ; - else - buffer [count] = 0x7F & ulaw_encode [- lrintf (normfact * ptr [count])] ; - } ; -} /* f2ulaw_array */ - -static inline void -d2ulaw_array (const double *ptr, int count, unsigned char *buffer, double normfact) -{ while (--count >= 0) - { if (ptr [count] >= 0) - buffer [count] = ulaw_encode [lrint (normfact * ptr [count])] ; - else - buffer [count] = 0x7F & ulaw_encode [- lrint (normfact * ptr [count])] ; - } ; -} /* d2ulaw_array */ - -/*============================================================================== -*/ - -static sf_count_t -ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - ulaw2s_array (psf->u.ucbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* ulaw_read_ulaw2s */ - -static sf_count_t -ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - ulaw2i_array (psf->u.ucbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* ulaw_read_ulaw2i */ - -static sf_count_t -ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - ulaw2f_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* ulaw_read_ulaw2f */ - -static sf_count_t -ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ; - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; - ulaw2d_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* ulaw_read_ulaw2d */ - -/*============================================================================================= -*/ - -static sf_count_t -ulaw_write_s2ulaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2ulaw_array (ptr + total, bufferlen, psf->u.ucbuf) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* ulaw_write_s2ulaw */ - -static sf_count_t -ulaw_write_i2ulaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2ulaw_array (ptr + total, bufferlen, psf->u.ucbuf) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* ulaw_write_i2ulaw */ - -static sf_count_t -ulaw_write_f2ulaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - float normfact ; - - /* Factor in a divide by 4. */ - normfact = (psf->norm_float == SF_TRUE) ? (0.25 * 0x7FFF) : 0.25 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - f2ulaw_array (ptr + total, bufferlen, psf->u.ucbuf, normfact) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* ulaw_write_f2ulaw */ - -static sf_count_t -ulaw_write_d2ulaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ int bufferlen, writecount ; - sf_count_t total = 0 ; - double normfact ; - - /* Factor in a divide by 4. */ - normfact = (psf->norm_double) ? (0.25 * 0x7FFF) : 0.25 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - d2ulaw_array (ptr + total, bufferlen, psf->u.ucbuf, normfact) ; - writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* ulaw_write_d2ulaw */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 655cc790-f058-45e8-89c9-86967cccc37e -*/ diff --git a/Libraries/SndFile/Files/src/voc.c b/Libraries/SndFile/Files/src/voc.c deleted file mode 100644 index e1388c454..000000000 --- a/Libraries/SndFile/Files/src/voc.c +++ /dev/null @@ -1,878 +0,0 @@ -/* -** Copyright (C) 2001-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* RANT: -** The VOC file format is the most brain damaged format I have yet had to deal -** with. No one programmer could have bee stupid enough to put this together. -** Instead it looks like a series of manic, dyslexic assembly language programmers -** hacked it to fit their needs. -** Utterly woeful. -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - - -/*------------------------------------------------------------------------------ - * Typedefs for file chunks. -*/ - -#define VOC_MAX_SECTIONS 200 - -enum -{ VOC_TERMINATOR = 0, - VOC_SOUND_DATA = 1, - VOC_SOUND_CONTINUE = 2, - VOC_SILENCE = 3, - VOC_MARKER = 4, - VOC_ASCII = 5, - VOC_REPEAT = 6, - VOC_END_REPEAT = 7, - VOC_EXTENDED = 8, - VOC_EXTENDED_II = 9 -} ; - -typedef struct -{ int samples ; - int offset ; /* Offset of zero => silence. */ -} SND_DATA_BLOCKS ; - -typedef struct -{ unsigned int sections, section_types ; - int samplerate, channels, bitwidth ; - SND_DATA_BLOCKS blocks [VOC_MAX_SECTIONS] ; -} VOC_DATA ; - -/*------------------------------------------------------------------------------ - * Private static functions. -*/ - -static int voc_close (SF_PRIVATE *psf) ; -static int voc_write_header (SF_PRIVATE *psf, int calc_length) ; -static int voc_read_header (SF_PRIVATE *psf) ; - -static const char* voc_encoding2str (int encoding) ; - -#if 0 - -/* These functions would be required for files with more than one VOC_SOUND_DATA -** segment. Not sure whether to bother implementing this. -*/ - -static int voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc) ; - -static int voc_multi_read_uc2s (SF_PRIVATE *psf, short *ptr, int len) ; -static int voc_multi_read_les2s (SF_PRIVATE *psf, short *ptr, int len) ; - -static int voc_multi_read_uc2i (SF_PRIVATE *psf, int *ptr, int len) ; -static int voc_multi_read_les2i (SF_PRIVATE *psf, int *ptr, int len) ; - -static int voc_multi_read_uc2f (SF_PRIVATE *psf, float *ptr, int len) ; -static int voc_multi_read_les2f (SF_PRIVATE *psf, float *ptr, int len) ; - -static int voc_multi_read_uc2d (SF_PRIVATE *psf, double *ptr, int len) ; -static int voc_multi_read_les2d (SF_PRIVATE *psf, double *ptr, int len) ; -#endif - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -voc_open (SF_PRIVATE *psf) -{ int subformat, error = 0 ; - - if (psf->is_pipe) - return SFE_VOC_NO_PIPE ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = voc_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = SF_ENDIAN_LITTLE ; - - if ((error = voc_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = voc_write_header ; - } ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - psf->container_close = voc_close ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - return error ; -} /* voc_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -voc_read_header (SF_PRIVATE *psf) -{ VOC_DATA *pvoc ; - char creative [20] ; - unsigned char block_type, rate_byte ; - short version, checksum, encoding, dataoffset ; - int offset ; - - /* Set position to start of file to begin reading header. */ - offset = psf_binheader_readf (psf, "pb", 0, creative, SIGNED_SIZEOF (creative)) ; - - if (creative [sizeof (creative) - 1] != 0x1A) - return SFE_VOC_NO_CREATIVE ; - - /* Terminate the string. */ - creative [sizeof (creative) - 1] = 0 ; - - if (strcmp ("Creative Voice File", creative)) - return SFE_VOC_NO_CREATIVE ; - - psf_log_printf (psf, "%s\n", creative) ; - - offset += psf_binheader_readf (psf, "e222", &dataoffset, &version, &checksum) ; - - psf->dataoffset = dataoffset ; - - psf_log_printf (psf, "dataoffset : %d\n" - "version : 0x%X\n" - "checksum : 0x%X\n", psf->dataoffset, version, checksum) ; - - if (version != 0x010A && version != 0x0114) - return SFE_VOC_BAD_VERSION ; - - if (! (psf->fdata = malloc (sizeof (VOC_DATA)))) - return SFE_MALLOC_FAILED ; - - pvoc = (VOC_DATA*) psf->fdata ; - - memset (pvoc, 0, sizeof (VOC_DATA)) ; - - /* Set the default encoding now. */ - psf->sf.format = SF_FORMAT_VOC ; /* Major format */ - encoding = SF_FORMAT_PCM_U8 ; /* Minor format */ - psf->endian = SF_ENDIAN_LITTLE ; - - while (1) - { offset += psf_binheader_readf (psf, "1", &block_type) ; - - switch (block_type) - { case VOC_ASCII : - { int size ; - - offset += psf_binheader_readf (psf, "e3", &size) ; - - psf_log_printf (psf, " ASCII : %d\n", size) ; - - offset += psf_binheader_readf (psf, "b", psf->header, size) ; - psf->header [size] = 0 ; - psf_log_printf (psf, " text : %s\n", psf->header) ; - } ; - continue ; - - case VOC_SOUND_DATA : - case VOC_EXTENDED : - case VOC_EXTENDED_II : - break ; - - default : psf_log_printf (psf, "*** Weird block marker (%d)\n", block_type) ; - } ; - - break ; - } ; - - if (block_type == VOC_SOUND_DATA) - { unsigned char compression ; - int size ; - - offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ; - - psf->sf.samplerate = 1000000 / (256 - (rate_byte & 0xFF)) ; - - psf_log_printf (psf, " Sound Data : %d\n sr : %d => %dHz\n comp : %d\n", - size, rate_byte, psf->sf.samplerate, compression) ; - - if (offset + size - 1 > psf->filelength) - { psf_log_printf (psf, "Seems to be a truncated file.\n") ; - psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ; - return SFE_VOC_BAD_SECTIONS ; - } - else if (offset + size - 1 < psf->filelength) - { psf_log_printf (psf, "Seems to be a multi-segment file (#1).\n") ; - psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ; - return SFE_VOC_BAD_SECTIONS ; - } ; - - psf->dataoffset = offset ; - psf->dataend = psf->filelength - 1 ; - - psf->sf.channels = 1 ; - psf->bytewidth = 1 ; - - psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ; - - return 0 ; - } ; - - if (block_type == VOC_EXTENDED) - { unsigned char pack, stereo, compression ; - unsigned short rate_short ; - int size ; - - offset += psf_binheader_readf (psf, "e3211", &size, &rate_short, &pack, &stereo) ; - - psf_log_printf (psf, " Extended : %d\n", size) ; - if (size == 4) - psf_log_printf (psf, " size : 4\n") ; - else - psf_log_printf (psf, " size : %d (should be 4)\n", size) ; - - psf_log_printf (psf, " pack : %d\n" - " stereo : %s\n", pack, (stereo ? "yes" : "no")) ; - - if (stereo) - { psf->sf.channels = 2 ; - psf->sf.samplerate = 128000000 / (65536 - rate_short) ; - } - else - { psf->sf.channels = 1 ; - psf->sf.samplerate = 256000000 / (65536 - rate_short) ; - } ; - - psf_log_printf (psf, " sr : %d => %dHz\n", (rate_short & 0xFFFF), psf->sf.samplerate) ; - - offset += psf_binheader_readf (psf, "1", &block_type) ; - - if (block_type != VOC_SOUND_DATA) - { psf_log_printf (psf, "*** Expecting VOC_SOUND_DATA section.\n") ; - return SFE_VOC_BAD_FORMAT ; - } ; - - offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ; - - psf_log_printf (psf, " Sound Data : %d\n" - " sr : %d\n" - " comp : %d\n", size, rate_byte, compression) ; - - - if (offset + size - 1 > psf->filelength) - { psf_log_printf (psf, "Seems to be a truncated file.\n") ; - psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ; - return SFE_VOC_BAD_SECTIONS ; - } - else if (offset + size - 1 < psf->filelength) - { psf_log_printf (psf, "Seems to be a multi-segment file (#2).\n") ; - psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ; - return SFE_VOC_BAD_SECTIONS ; - } ; - - psf->dataoffset = offset ; - psf->dataend = psf->filelength - 1 ; - - psf->bytewidth = 1 ; - - psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ; - - return 0 ; - } - - if (block_type == VOC_EXTENDED_II) - { unsigned char bitwidth, channels ; - int size, fourbytes ; - - offset += psf_binheader_readf (psf, "e341124", &size, &psf->sf.samplerate, - &bitwidth, &channels, &encoding, &fourbytes) ; - - if (size * 2 == psf->filelength - 39) - { int temp_size = psf->filelength - 31 ; - - psf_log_printf (psf, " Extended II : %d (SoX bug: should be %d)\n", size, temp_size) ; - size = temp_size ; - } - else - psf_log_printf (psf, " Extended II : %d\n", size) ; - - psf_log_printf (psf, " sample rate : %d\n" - " bit width : %d\n" - " channels : %d\n", psf->sf.samplerate, bitwidth, channels) ; - - if (bitwidth == 16 && encoding == 0) - { encoding = 4 ; - psf_log_printf (psf, " encoding : 0 (SoX bug: should be 4 for 16 bit signed PCM)\n") ; - } - else - psf_log_printf (psf, " encoding : %d => %s\n", encoding, voc_encoding2str (encoding)) ; - - - psf_log_printf (psf, " fourbytes : %X\n", fourbytes) ; - - psf->sf.channels = channels ; - - psf->dataoffset = offset ; - psf->dataend = psf->filelength - 1 ; - - if (size + 31 == psf->filelength + 1) - { /* Hack for reading files produced using - ** sf_command (SFC_UPDATE_HEADER_NOW). - */ - psf_log_printf (psf, "Missing zero byte at end of file.\n") ; - size = psf->filelength - 30 ; - psf->dataend = 0 ; - } - else if (size + 31 > psf->filelength) - { psf_log_printf (psf, "Seems to be a truncated file.\n") ; - size = psf->filelength - 31 ; - } - else if (size + 31 < psf->filelength) - psf_log_printf (psf, "Seems to be a multi-segment file (#3).\n") ; - - switch (encoding) - { case 0 : - psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ; - psf->bytewidth = 1 ; - break ; - - case 4 : - psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_16 ; - psf->bytewidth = 2 ; - break ; - - case 6 : - psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ALAW ; - psf->bytewidth = 1 ; - break ; - - case 7 : - psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ULAW ; - psf->bytewidth = 1 ; - break ; - - default : /* Unknown */ - return SFE_UNKNOWN_FORMAT ; - break ; - } ; - - } ; - - return 0 ; -} /* voc_read_header */ - -/*==================================================================================== -*/ - -static int -voc_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int rate_const, subformat ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* VOC marker and 0x1A byte. */ - psf_binheader_writef (psf, "eb1", "Creative Voice File", 19, 0x1A) ; - - /* Data offset, version and other. */ - psf_binheader_writef (psf, "e222", 26, 0x0114, 0x111F) ; - - /* Use same logic as SOX. - ** If the file is mono 8 bit data, use VOC_SOUND_DATA. - ** If the file is mono 16 bit data, use VOC_EXTENED. - ** Otherwise use VOC_EXTENED_2. - */ - - if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 1) - { /* samplerate = 1000000 / (256 - rate_const) ; */ - rate_const = 256 - 1000000 / psf->sf.samplerate ; - - /* First type marker, length, rate_const and compression */ - psf_binheader_writef (psf, "e1311", VOC_SOUND_DATA, (int) (psf->datalength + 1), rate_const, 0) ; - } - else if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 2) - { /* sample_rate = 128000000 / (65536 - rate_short) ; */ - rate_const = 65536 - 128000000 / psf->sf.samplerate ; - - /* First write the VOC_EXTENDED section - ** marker, length, rate_const and compression - */ - psf_binheader_writef (psf, "e13211", VOC_EXTENDED, 4, rate_const, 0, 1) ; - - /* samplerate = 1000000 / (256 - rate_const) ; */ - rate_const = 256 - 1000000 / psf->sf.samplerate ; - - /* Now write the VOC_SOUND_DATA section - ** marker, length, rate_const and compression - */ - psf_binheader_writef (psf, "e1311", VOC_SOUND_DATA, (int) (psf->datalength + 1), rate_const, 0) ; - } - else - { int length ; - - if (psf->sf.channels < 1 || psf->sf.channels > 2) - return SFE_CHANNEL_COUNT ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - psf->bytewidth = 1 ; - length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ; - /* Marker, length, sample rate, bitwidth, stereo flag, encoding and fourt zero bytes. */ - psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 16, psf->sf.channels, 4, 0) ; - break ; - - case SF_FORMAT_PCM_16 : - psf->bytewidth = 2 ; - length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ; - /* Marker, length, sample rate, bitwidth, stereo flag, encoding and fourt zero bytes. */ - psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 16, psf->sf.channels, 4, 0) ; - break ; - - case SF_FORMAT_ALAW : - psf->bytewidth = 1 ; - length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ; - psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 8, psf->sf.channels, 6, 0) ; - break ; - - case SF_FORMAT_ULAW : - psf->bytewidth = 1 ; - length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ; - psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 8, psf->sf.channels, 7, 0) ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - } ; - - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* voc_write_header */ - -static int -voc_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { /* Now we know for certain the length of the file we can re-write - ** correct values for the FORM, 8SVX and BODY chunks. - */ - unsigned byte = VOC_TERMINATOR ; - - - psf_fseek (psf, 0, SEEK_END) ; - - /* Write terminator */ - psf_fwrite (&byte, 1, 1, psf) ; - - voc_write_header (psf, SF_TRUE) ; - } ; - - return 0 ; -} /* voc_close */ - -static const char* -voc_encoding2str (int encoding) -{ - switch (encoding) - { case 0 : return "8 bit unsigned PCM" ; - case 4 : return "16 bit signed PCM" ; - case 6 : return "A-law" ; - case 7 : return "u-law" ; - default : break ; - } - return "*** Unknown ***" ; -} /* voc_encoding2str */ - -/*==================================================================================== -*/ - -#if 0 -static int -voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc) -{ - psf->sf.frames = 0 ; - - if (pvoc->bitwidth == 8) - { psf->read_short = voc_multi_read_uc2s ; - psf->read_int = voc_multi_read_uc2i ; - psf->read_float = voc_multi_read_uc2f ; - psf->read_double = voc_multi_read_uc2d ; - return 0 ; - } ; - - if (pvoc->bitwidth == 16) - { psf->read_short = voc_multi_read_les2s ; - psf->read_int = voc_multi_read_les2i ; - psf->read_float = voc_multi_read_les2f ; - psf->read_double = voc_multi_read_les2d ; - return 0 ; - } ; - - psf_log_printf (psf, "Error : bitwith != 8 && bitwidth != 16.\n") ; - - return SFE_UNIMPLEMENTED ; -} /* voc_multi_read_int */ - -/*------------------------------------------------------------------------------------ -*/ - -static int -voc_multi_read_uc2s (SF_PRIVATE *psf, short *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_uc2s */ - -static int -voc_multi_read_les2s (SF_PRIVATE *psf, short *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_les2s */ - - -static int -voc_multi_read_uc2i (SF_PRIVATE *psf, int *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_uc2i */ - -static int -voc_multi_read_les2i (SF_PRIVATE *psf, int *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_les2i */ - - -static int -voc_multi_read_uc2f (SF_PRIVATE *psf, float *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_uc2f */ - -static int -voc_multi_read_les2f (SF_PRIVATE *psf, float *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_les2f */ - - -static int -voc_multi_read_uc2d (SF_PRIVATE *psf, double *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_uc2d */ - -static int -voc_multi_read_les2d (SF_PRIVATE *psf, double *ptr, int len) -{ - - return 0 ; -} /* voc_multi_read_les2d */ - -#endif - -/*------------------------------------------------------------------------------------ - -Creative Voice (VOC) file format --------------------------------- - -~From: galt@dsd.es.com - -(byte numbers are hex!) - - HEADER (bytes 00-19) - Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block] - -- --------------------------------------------------------------- - -HEADER: -======= - byte # Description - ------ ------------------------------------------ - 00-12 "Creative Voice File" - 13 1A (eof to abort printing of file) - 14-15 Offset of first datablock in .voc file (std 1A 00 - in Intel Notation) - 16-17 Version number (minor,major) (VOC-HDR puts 0A 01) - 18-19 1's Comp of Ver. # + 1234h (VOC-HDR puts 29 11) - -- --------------------------------------------------------------- - -DATA BLOCK: -=========== - - Data Block: TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes) - NOTE: Terminator Block is an exception -- it has only the TYPE byte. - - TYPE Description Size (3-byte int) Info - ---- ----------- ----------------- ----------------------- - 00 Terminator (NONE) (NONE) - 01 Sound data 2+length of data * - 02 Sound continue length of data Voice Data - 03 Silence 3 ** - 04 Marker 2 Marker# (2 bytes) - 05 ASCII length of string null terminated string - 06 Repeat 2 Count# (2 bytes) - 07 End repeat 0 (NONE) - 08 Extended 4 *** - - *Sound Info Format: - --------------------- - 00 Sample Rate - 01 Compression Type - 02+ Voice Data - - **Silence Info Format: - ---------------------------- - 00-01 Length of silence - 1 - 02 Sample Rate - - - ***Extended Info Format: - --------------------- - 00-01 Time Constant: Mono: 65536 - (256000000/sample_rate) - Stereo: 65536 - (25600000/(2*sample_rate)) - 02 Pack - 03 Mode: 0 = mono - 1 = stereo - - - Marker# -- Driver keeps the most recent marker in a status byte - Count# -- Number of repetitions + 1 - Count# may be 1 to FFFE for 0 - FFFD repetitions - or FFFF for endless repetitions - Sample Rate -- SR byte = 256-(1000000/sample_rate) - Length of silence -- in units of sampling cycle - Compression Type -- of voice data - 8-bits = 0 - 4-bits = 1 - 2.6-bits = 2 - 2-bits = 3 - Multi DAC = 3+(# of channels) [interesting-- - this isn't in the developer's manual] - - ---------------------------------------------------------------------------------- -Addendum submitted by Votis Kokavessis: - -After some experimenting with .VOC files I found out that there is a Data Block -Type 9, which is not covered in the VOC.TXT file. Here is what I was able to discover -about this block type: - - -TYPE: 09 -SIZE: 12 + length of data -INFO: 12 (twelve) bytes - -INFO STRUCTURE: - -Bytes 0-1: (Word) Sample Rate (e.g. 44100) -Bytes 2-3: zero (could be that bytes 0-3 are a DWord for Sample Rate) -Byte 4: Sample Size in bits (e.g. 16) -Byte 5: Number of channels (e.g. 1 for mono, 2 for stereo) -Byte 6: Unknown (equal to 4 in all files I examined) -Bytes 7-11: zero - - --------------------------------------------------------------------------------------*/ - -/*===================================================================================== -**===================================================================================== -**===================================================================================== -**===================================================================================== -*/ - -/*------------------------------------------------------------------------ -The following is taken from the Audio File Formats FAQ dated 2-Jan-1995 -and submitted by Guido van Rossum . --------------------------------------------------------------------------- -Creative Voice (VOC) file format --------------------------------- - -From: galt@dsd.es.com - -(byte numbers are hex!) - - HEADER (bytes 00-19) - Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block] - -- --------------------------------------------------------------- - -HEADER: -------- - byte # Description - ------ ------------------------------------------ - 00-12 "Creative Voice File" - 13 1A (eof to abort printing of file) - 14-15 Offset of first datablock in .voc file (std 1A 00 - in Intel Notation) - 16-17 Version number (minor,major) (VOC-HDR puts 0A 01) - 18-19 2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11) - -- --------------------------------------------------------------- - -DATA BLOCK: ------------ - - Data Block: TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes) - NOTE: Terminator Block is an exception -- it has only the TYPE byte. - - TYPE Description Size (3-byte int) Info - ---- ----------- ----------------- ----------------------- - 00 Terminator (NONE) (NONE) - 01 Sound data 2+length of data * - 02 Sound continue length of data Voice Data - 03 Silence 3 ** - 04 Marker 2 Marker# (2 bytes) - 05 ASCII length of string null terminated string - 06 Repeat 2 Count# (2 bytes) - 07 End repeat 0 (NONE) - 08 Extended 4 *** - - *Sound Info Format: **Silence Info Format: - --------------------- ---------------------------- - 00 Sample Rate 00-01 Length of silence - 1 - 01 Compression Type 02 Sample Rate - 02+ Voice Data - - ***Extended Info Format: - --------------------- - 00-01 Time Constant: Mono: 65536 - (256000000/sample_rate) - Stereo: 65536 - (25600000/(2*sample_rate)) - 02 Pack - 03 Mode: 0 = mono - 1 = stereo - - - Marker# -- Driver keeps the most recent marker in a status byte - Count# -- Number of repetitions + 1 - Count# may be 1 to FFFE for 0 - FFFD repetitions - or FFFF for endless repetitions - Sample Rate -- SR byte = 256-(1000000/sample_rate) - Length of silence -- in units of sampling cycle - Compression Type -- of voice data - 8-bits = 0 - 4-bits = 1 - 2.6-bits = 2 - 2-bits = 3 - Multi DAC = 3+(# of channels) [interesting-- - this isn't in the developer's manual] - -Detailed description of new data blocks (VOC files version 1.20 and above): - - (Source is fax from Barry Boone at Creative Labs, 405/742-6622) - -BLOCK 8 - digitized sound attribute extension, must preceed block 1. - Used to define stereo, 8 bit audio - BYTE bBlockID; // = 8 - BYTE nBlockLen[3]; // 3 byte length - WORD wTimeConstant; // time constant = same as block 1 - BYTE bPackMethod; // same as in block 1 - BYTE bVoiceMode; // 0-mono, 1-stereo - - Data is stored left, right - -BLOCK 9 - data block that supersedes blocks 1 and 8. - Used for stereo, 16 bit. - - BYTE bBlockID; // = 9 - BYTE nBlockLen[3]; // length 12 plus length of sound - DWORD dwSamplesPerSec; // samples per second, not time const. - BYTE bBitsPerSample; // e.g., 8 or 16 - BYTE bChannels; // 1 for mono, 2 for stereo - WORD wFormat; // see below - BYTE reserved[4]; // pad to make block w/o data - // have a size of 16 bytes - - Valid values of wFormat are: - - 0x0000 8-bit unsigned PCM - 0x0001 Creative 8-bit to 4-bit ADPCM - 0x0002 Creative 8-bit to 3-bit ADPCM - 0x0003 Creative 8-bit to 2-bit ADPCM - 0x0004 16-bit signed PCM - 0x0006 CCITT a-Law - 0x0007 CCITT u-Law - 0x02000 Creative 16-bit to 4-bit ADPCM - - Data is stored left, right - -------------------------------------------------------------------------*/ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 40a50167-a81c-463a-9e1d-3282ff84e09d -*/ diff --git a/Libraries/SndFile/Files/src/vox_adpcm.c b/Libraries/SndFile/Files/src/vox_adpcm.c deleted file mode 100644 index f743a7291..000000000 --- a/Libraries/SndFile/Files/src/vox_adpcm.c +++ /dev/null @@ -1,537 +0,0 @@ -/* -** Copyright (C) 2002-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** This is the OKI / Dialogic ADPCM encoder/decoder. It converts from -** 12 bit linear sample data to a 4 bit ADPCM. -** -** Implemented from the description found here: -** -** http://www.comptek.ru:8100/telephony/tnotes/tt1-13.html -** -** and compared against the encoder/decoder found here: -** -** http://ibiblio.org/pub/linux/apps/sound/convert/vox.tar.gz -*/ - -#include "sfconfig.h" - -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "float_cast.h" -#include "common.h" - -#define VOX_DATA_LEN 2048 -#define PCM_DATA_LEN (VOX_DATA_LEN *2) - -typedef struct -{ short last ; - short step_index ; - - int vox_bytes, pcm_samples ; - - unsigned char vox_data [VOX_DATA_LEN] ; - short pcm_data [PCM_DATA_LEN] ; -} VOX_ADPCM_PRIVATE ; - -static int vox_adpcm_encode_block (VOX_ADPCM_PRIVATE *pvox) ; -static int vox_adpcm_decode_block (VOX_ADPCM_PRIVATE *pvox) ; - -static short vox_adpcm_decode (char code, VOX_ADPCM_PRIVATE *pvox) ; -static char vox_adpcm_encode (short samp, VOX_ADPCM_PRIVATE *pvox) ; - -static sf_count_t vox_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t vox_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t vox_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t vox_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t vox_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t vox_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t vox_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t vox_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static int vox_read_block (SF_PRIVATE *psf, VOX_ADPCM_PRIVATE *pvox, short *ptr, int len) ; - -/*============================================================================================ -** Predefined OKI ADPCM encoder/decoder tables. -*/ - -static short step_size_table [49] = -{ 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, - 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, - 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, - 724, 796, 876, 963, 1060, 1166, 1282, 1408, 1552 -} ; /* step_size_table */ - -static short step_adjust_table [8] = -{ -1, -1, -1, -1, 2, 4, 6, 8 -} ; /* step_adjust_table */ - -/*------------------------------------------------------------------------------ -*/ - -int -vox_adpcm_init (SF_PRIVATE *psf) -{ VOX_ADPCM_PRIVATE *pvox = NULL ; - - if (psf->mode == SFM_RDWR) - return SFE_BAD_MODE_RW ; - - if (psf->mode == SFM_WRITE && psf->sf.channels != 1) - return SFE_CHANNEL_COUNT ; - - if ((pvox = malloc (sizeof (VOX_ADPCM_PRIVATE))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->fdata = (void*) pvox ; - memset (pvox, 0, sizeof (VOX_ADPCM_PRIVATE)) ; - - if (psf->mode == SFM_WRITE) - { psf->write_short = vox_write_s ; - psf->write_int = vox_write_i ; - psf->write_float = vox_write_f ; - psf->write_double = vox_write_d ; - } - else - { psf_log_printf (psf, "Header-less OKI Dialogic ADPCM encoded file.\n") ; - psf_log_printf (psf, "Setting up for 8kHz, mono, Vox ADPCM.\n") ; - - psf->read_short = vox_read_s ; - psf->read_int = vox_read_i ; - psf->read_float = vox_read_f ; - psf->read_double = vox_read_d ; - } ; - - /* Standard sample rate chennels etc. */ - if (psf->sf.samplerate < 1) - psf->sf.samplerate = 8000 ; - psf->sf.channels = 1 ; - - psf->sf.frames = psf->filelength * 2 ; - - psf->sf.seekable = SF_FALSE ; - - /* Seek back to start of data. */ - if (psf_fseek (psf, 0 , SEEK_SET) == -1) - return SFE_BAD_SEEK ; - - return 0 ; -} /* vox_adpcm_init */ - -/*------------------------------------------------------------------------------ -*/ - -static char -vox_adpcm_encode (short samp, VOX_ADPCM_PRIVATE *pvox) -{ short code ; - short diff, error, stepsize ; - - stepsize = step_size_table [pvox->step_index] ; - code = 0 ; - - diff = samp - pvox->last ; - if (diff < 0) - { code = 0x08 ; - error = -diff ; - } - else - error = diff ; - - if (error >= stepsize) - { code = code | 0x04 ; - error -= stepsize ; - } ; - - if (error >= stepsize / 2) - { code = code | 0x02 ; - error -= stepsize / 2 ; - } ; - - if (error >= stepsize / 4) - code = code | 0x01 ; - - /* - ** To close the feedback loop, the deocder is used to set the - ** estimate of last sample and in doing so, also set the step_index. - */ - pvox->last = vox_adpcm_decode (code, pvox) ; - - return code ; -} /* vox_adpcm_encode */ - -static short -vox_adpcm_decode (char code, VOX_ADPCM_PRIVATE *pvox) -{ short diff, error, stepsize, samp ; - - stepsize = step_size_table [pvox->step_index] ; - - error = stepsize / 8 ; - - if (code & 0x01) - error += stepsize / 4 ; - - if (code & 0x02) - error += stepsize / 2 ; - - if (code & 0x04) - error += stepsize ; - - diff = (code & 0x08) ? -error : error ; - samp = pvox->last + diff ; - - /* - ** Apply clipping. - */ - if (samp > 2048) - samp = 2048 ; - if (samp < -2048) - samp = -2048 ; - - pvox->last = samp ; - pvox->step_index += step_adjust_table [code & 0x7] ; - - if (pvox->step_index < 0) - pvox->step_index = 0 ; - if (pvox->step_index > 48) - pvox->step_index = 48 ; - - return samp ; -} /* vox_adpcm_decode */ - -static int -vox_adpcm_encode_block (VOX_ADPCM_PRIVATE *pvox) -{ unsigned char code ; - int j, k ; - - /* If data_count is odd, add an extra zero valued sample. */ - if (pvox->pcm_samples & 1) - pvox->pcm_data [pvox->pcm_samples++] = 0 ; - - for (j = k = 0 ; k < pvox->pcm_samples ; j++) - { code = vox_adpcm_encode (pvox->pcm_data [k++] / 16, pvox) << 4 ; - code |= vox_adpcm_encode (pvox->pcm_data [k++] / 16, pvox) ; - pvox->vox_data [j] = code ; - } ; - - pvox->vox_bytes = j ; - - return 0 ; -} /* vox_adpcm_encode_block */ - -static int -vox_adpcm_decode_block (VOX_ADPCM_PRIVATE *pvox) -{ unsigned char code ; - int j, k ; - - for (j = k = 0 ; j < pvox->vox_bytes ; j++) - { code = pvox->vox_data [j] ; - pvox->pcm_data [k++] = 16 * vox_adpcm_decode ((code >> 4) & 0x0f, pvox) ; - pvox->pcm_data [k++] = 16 * vox_adpcm_decode (code & 0x0f, pvox) ; - } ; - - pvox->pcm_samples = k ; - - return 0 ; -} /* vox_adpcm_decode_block */ - -/*============================================================================== -*/ - -static int -vox_read_block (SF_PRIVATE *psf, VOX_ADPCM_PRIVATE *pvox, short *ptr, int len) -{ int indx = 0, k ; - - while (indx < len) - { pvox->vox_bytes = (len - indx > PCM_DATA_LEN) ? VOX_DATA_LEN : (len - indx + 1) / 2 ; - - if ((k = psf_fread (pvox->vox_data, 1, pvox->vox_bytes, psf)) != pvox->vox_bytes) - { if (psf_ftell (psf) + k != psf->filelength) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pvox->vox_bytes) ; - if (k == 0) - break ; - } ; - - pvox->vox_bytes = k ; - - vox_adpcm_decode_block (pvox) ; - - memcpy (&(ptr [indx]), pvox->pcm_data, pvox->pcm_samples * sizeof (short)) ; - indx += pvox->pcm_samples ; - } ; - - return indx ; -} /* vox_read_block */ - - -static sf_count_t -vox_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - int readcount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - while (len > 0) - { readcount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = vox_read_block (psf, pvox, ptr, readcount) ; - - total += count ; - len -= count ; - if (count != readcount) - break ; - } ; - - return total ; -} /* vox_read_s */ - -static sf_count_t -vox_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - short *sptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : (int) len ; - count = vox_read_block (psf, pvox, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = ((int) sptr [k]) << 16 ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* vox_read_i */ - -static sf_count_t -vox_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - short *sptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : (int) len ; - count = vox_read_block (psf, pvox, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (float) (sptr [k]) ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* vox_read_f */ - -static sf_count_t -vox_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - short *sptr ; - int k, bufferlen, readcount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { readcount = (len >= bufferlen) ? bufferlen : (int) len ; - count = vox_read_block (psf, pvox, sptr, readcount) ; - for (k = 0 ; k < readcount ; k++) - ptr [total + k] = normfact * (double) (sptr [k]) ; - total += count ; - len -= readcount ; - if (count != readcount) - break ; - } ; - - return total ; -} /* vox_read_d */ - -/*------------------------------------------------------------------------------ -*/ - -static int -vox_write_block (SF_PRIVATE *psf, VOX_ADPCM_PRIVATE *pvox, const short *ptr, int len) -{ int indx = 0, k ; - - while (indx < len) - { pvox->pcm_samples = (len - indx > PCM_DATA_LEN) ? PCM_DATA_LEN : len - indx ; - - memcpy (pvox->pcm_data, &(ptr [indx]), pvox->pcm_samples * sizeof (short)) ; - - vox_adpcm_encode_block (pvox) ; - - if ((k = psf_fwrite (pvox->vox_data, 1, pvox->vox_bytes, psf)) != pvox->vox_bytes) - psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pvox->vox_bytes) ; - - indx += pvox->pcm_samples ; - } ; - - return indx ; -} /* vox_write_block */ - -static sf_count_t -vox_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - int writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - while (len) - { writecount = (len > 0x10000000) ? 0x10000000 : (int) len ; - - count = vox_write_block (psf, pvox, ptr, writecount) ; - - total += count ; - len -= count ; - if (count != writecount) - break ; - } ; - - return total ; -} /* vox_write_s */ - -static sf_count_t -vox_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = ptr [total + k] >> 16 ; - count = vox_write_block (psf, pvox, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* vox_write_i */ - -static sf_count_t -vox_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - float normfact ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrintf (normfact * ptr [total + k]) ; - count = vox_write_block (psf, pvox, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* vox_write_f */ - -static sf_count_t -vox_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ VOX_ADPCM_PRIVATE *pvox ; - short *sptr ; - int k, bufferlen, writecount, count ; - sf_count_t total = 0 ; - double normfact ; - - if (! psf->fdata) - return 0 ; - pvox = (VOX_ADPCM_PRIVATE*) psf->fdata ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - sptr = psf->u.sbuf ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (len > 0) - { writecount = (len >= bufferlen) ? bufferlen : (int) len ; - for (k = 0 ; k < writecount ; k++) - sptr [k] = lrint (normfact * ptr [total + k]) ; - count = vox_write_block (psf, pvox, sptr, writecount) ; - total += count ; - len -= writecount ; - if (count != writecount) - break ; - } ; - - return total ; -} /* vox_write_d */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: e15e97fe-ff9d-4b46-a489-7059fb2d0b1e -*/ diff --git a/Libraries/SndFile/Files/src/w64.c b/Libraries/SndFile/Files/src/w64.c deleted file mode 100644 index 756b09315..000000000 --- a/Libraries/SndFile/Files/src/w64.c +++ /dev/null @@ -1,578 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "wav_w64.h" - -/*------------------------------------------------------------------------------ -** W64 files use 16 byte markers as opposed to the four byte marker of -** WAV files. -** For comparison purposes, an integer is required, so make an integer -** hash for the 16 bytes using MAKE_HASH16 macro, but also create a 16 -** byte array containing the complete 16 bytes required when writing the -** header. -*/ - -#define MAKE_HASH16(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc,xd,xe,xf) \ - ( (x0) ^ ((x1) << 1) ^ ((x2) << 2) ^ ((x3) << 3) ^ \ - ((x4) << 4) ^ ((x5) << 5) ^ ((x6) << 6) ^ ((x7) << 7) ^ \ - ((x8) << 8) ^ ((x9) << 9) ^ ((xa) << 10) ^ ((xb) << 11) ^ \ - ((xc) << 12) ^ ((xd) << 13) ^ ((xe) << 14) ^ ((xf) << 15) ) - -#define MAKE_MARKER16(name,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc,xd,xe,xf) \ - static unsigned char name [16] = { (x0), (x1), (x2), (x3), (x4), (x5), \ - (x6), (x7), (x8), (x9), (xa), (xb), (xc), (xd), (xe), (xf) } - -#define riff_HASH16 MAKE_HASH16 ('r', 'i', 'f', 'f', 0x2E, 0x91, 0xCF, 0x11, 0xA5, \ - 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00) - -#define wave_HASH16 MAKE_HASH16 ('w', 'a', 'v', 'e', 0xF3, 0xAC, 0xD3, 0x11, \ - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) - -#define fmt_HASH16 MAKE_HASH16 ('f', 'm', 't', ' ', 0xF3, 0xAC, 0xD3, 0x11, \ - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) - -#define fact_HASH16 MAKE_HASH16 ('f', 'a', 'c', 't', 0xF3, 0xAC, 0xD3, 0x11, \ - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) - -#define data_HASH16 MAKE_HASH16 ('d', 'a', 't', 'a', 0xF3, 0xAC, 0xD3, 0x11, \ - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) - -#define ACID_HASH16 MAKE_HASH16 (0x6D, 0x07, 0x1C, 0xEA, 0xA3, 0xEF, 0x78, 0x4C, \ - 0x90, 0x57, 0x7F, 0x79, 0xEE, 0x25, 0x2A, 0xAE) - -MAKE_MARKER16 (riff_MARKER16, 'r', 'i', 'f', 'f', 0x2E, 0x91, 0xCF, 0x11, - 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00) ; - - -MAKE_MARKER16 (wave_MARKER16, 'w', 'a', 'v', 'e', 0xF3, 0xAC, 0xD3, 0x11, - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ; - -MAKE_MARKER16 (fmt_MARKER16, 'f', 'm', 't', ' ', 0xF3, 0xAC, 0xD3, 0x11, - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ; - -MAKE_MARKER16 (fact_MARKER16, 'f', 'a', 'c', 't', 0xF3, 0xAC, 0xD3, 0x11, - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ; - -MAKE_MARKER16 (data_MARKER16, 'd', 'a', 't', 'a', 0xF3, 0xAC, 0xD3, 0x11, - 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ; - -enum -{ HAVE_riff = 0x01, - HAVE_wave = 0x02, - HAVE_fmt = 0x04, - HAVE_fact = 0x08, - HAVE_data = 0x20 -} ; - -/*------------------------------------------------------------------------------ - * Private static functions. - */ - -static int w64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ; -static int w64_write_header (SF_PRIVATE *psf, int calc_length) ; -static int w64_close (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -w64_open (SF_PRIVATE *psf) -{ int subformat, error, blockalign = 0, framesperblock = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR &&psf->filelength > 0)) - { if ((error = w64_read_header (psf, &blockalign, &framesperblock))) - return error ; - } ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_W64) - return SFE_BAD_OPEN_FORMAT ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - psf->endian = SF_ENDIAN_LITTLE ; /* All W64 files are little endian. */ - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - if (subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) - { blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ; - framesperblock = -1 ; - - /* FIXME : This block must go */ - psf->filelength = SF_COUNT_MAX ; - psf->datalength = psf->filelength ; - if (psf->sf.frames <= 0) - psf->sf.frames = (psf->blockwidth) ? psf->filelength / psf->blockwidth : psf->filelength ; - /* EMXIF : This block must go */ - } ; - - if ((error = w64_write_header (psf, SF_FALSE))) - return error ; - - psf->write_header = w64_write_header ; - } ; - - psf->container_close = w64_close ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - - case SF_FORMAT_IMA_ADPCM : - error = wav_w64_ima_init (psf, blockalign, framesperblock) ; - break ; - - case SF_FORMAT_MS_ADPCM : - error = wav_w64_msadpcm_init (psf, blockalign, framesperblock) ; - break ; - /* Lite remove end */ - - case SF_FORMAT_GSM610 : - error = gsm610_init (psf) ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - return error ; -} /* w64_open */ - -/*========================================================================= -** Private functions. -*/ - -static int -w64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) -{ WAV_FMT wav_fmt ; - int dword = 0, marker, format = 0 ; - sf_count_t chunk_size, bytesread = 0 ; - int parsestage = 0, error, done = 0 ; - - /* Set position to start of file to begin reading header. */ - memset (&wav_fmt, 0, sizeof (wav_fmt)) ; - psf_binheader_readf (psf, "p", 0) ; - - while (! done) - { /* Read the 4 byte marker and jump 12 bytes. */ - bytesread += psf_binheader_readf (psf, "h", &marker) ; - chunk_size = 0 ; - - switch (marker) - { case riff_HASH16 : - if (parsestage) - return SFE_W64_NO_RIFF ; - - bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ; - - if (psf->filelength < chunk_size) - psf_log_printf (psf, "riff : %D (should be %D)\n", chunk_size, psf->filelength) ; - else - psf_log_printf (psf, "riff : %D\n", chunk_size) ; - - parsestage |= HAVE_riff ; - break ; - - case ACID_HASH16: - psf_log_printf (psf, "Looks like an ACID file. Exiting.\n") ; - return SFE_UNIMPLEMENTED ; - - case wave_HASH16 : - if ((parsestage & HAVE_riff) != HAVE_riff) - return SFE_W64_NO_WAVE ; - psf_log_printf (psf, "wave\n") ; - parsestage |= HAVE_wave ; - break ; - - case fmt_HASH16 : - if ((parsestage & (HAVE_riff | HAVE_wave)) != (HAVE_riff | HAVE_wave)) - return SFE_W64_NO_FMT ; - - bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ; - psf_log_printf (psf, " fmt : %D\n", chunk_size) ; - - /* size of 16 byte marker and 8 byte chunk_size value. */ - chunk_size -= 24 ; - - if ((error = wav_w64_read_fmt_chunk (psf, &wav_fmt, (int) chunk_size))) - return error ; - - if (chunk_size % 8) - psf_binheader_readf (psf, "j", 8 - (chunk_size % 8)) ; - - format = wav_fmt.format ; - parsestage |= HAVE_fmt ; - break ; - - case fact_HASH16: - { sf_count_t frames ; - - psf_binheader_readf (psf, "e88", &chunk_size, &frames) ; - psf_log_printf (psf, " fact : %D\n frames : %D\n", - chunk_size, frames) ; - } ; - break ; - - - case data_HASH16 : - if ((parsestage & (HAVE_riff | HAVE_wave | HAVE_fmt)) != (HAVE_riff | HAVE_wave | HAVE_fmt)) - return SFE_W64_NO_DATA ; - - psf_binheader_readf (psf, "e8", &chunk_size) ; - - psf->dataoffset = psf_ftell (psf) ; - - psf->datalength = chunk_size - 24 ; - - if (chunk_size % 8) - chunk_size += 8 - (chunk_size % 8) ; - - psf_log_printf (psf, "data : %D\n", chunk_size) ; - - parsestage |= HAVE_data ; - - if (! psf->sf.seekable) - break ; - - /* Seek past data and continue reading header. */ - psf_fseek (psf, chunk_size, SEEK_CUR) ; - break ; - - default : - if (psf_ftell (psf) & 0x0F) - { psf_log_printf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ; - psf_binheader_readf (psf, "j", -3) ; - break ; - } ; - psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ; - done = SF_TRUE ; - break ; - } ; /* switch (dword) */ - - if (psf->sf.seekable == 0 && (parsestage & HAVE_data)) - break ; - - if (psf_ftell (psf) >= (psf->filelength - (2 * SIGNED_SIZEOF (dword)))) - break ; - } ; /* while (1) */ - - if (! psf->dataoffset) - return SFE_W64_NO_DATA ; - - psf->endian = SF_ENDIAN_LITTLE ; /* All WAV files are little endian. */ - - if (psf_ftell (psf) != psf->dataoffset) - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - - if (psf->blockwidth) - { if (psf->filelength - psf->dataoffset < psf->datalength) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - else - psf->sf.frames = psf->datalength / psf->blockwidth ; - } ; - - switch (format) - { case WAVE_FORMAT_PCM : - case WAVE_FORMAT_EXTENSIBLE : - /* extensible might be FLOAT, MULAW, etc as well! */ - psf->sf.format = SF_FORMAT_W64 | u_bitwidth_to_subformat (psf->bytewidth * 8) ; - break ; - - case WAVE_FORMAT_MULAW : - psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ULAW) ; - break ; - - case WAVE_FORMAT_ALAW : - psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ALAW) ; - break ; - - case WAVE_FORMAT_MS_ADPCM : - psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM) ; - *blockalign = wav_fmt.msadpcm.blockalign ; - *framesperblock = wav_fmt.msadpcm.samplesperblock ; - break ; - - case WAVE_FORMAT_IMA_ADPCM : - psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM) ; - *blockalign = wav_fmt.ima.blockalign ; - *framesperblock = wav_fmt.ima.samplesperblock ; - break ; - - case WAVE_FORMAT_GSM610 : - psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_GSM610) ; - break ; - - case WAVE_FORMAT_IEEE_FLOAT : - psf->sf.format = SF_FORMAT_W64 ; - psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - return 0 ; -} /* w64_read_header */ - -static int -w64_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t fmt_size, current ; - size_t fmt_pad = 0 ; - int subformat, add_fact_chunk = SF_FALSE ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->bytewidth) - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* riff marker, length, wave and 'fmt ' markers. */ - psf_binheader_writef (psf, "eh8hh", riff_MARKER16, psf->filelength - 8, wave_MARKER16, fmt_MARKER16) ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ; - break ; - - case SF_FORMAT_FLOAT : - case SF_FORMAT_DOUBLE : - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ; - - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_ULAW : - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_MULAW, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, 8) ; - - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_ALAW : - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_ALAW, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, 8) ; - - add_fact_chunk = SF_TRUE ; - break ; - - /* Lite remove start */ - case SF_FORMAT_IMA_ADPCM : - { int blockalign, framesperblock, bytespersec ; - - blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ; - framesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ; - bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ; - - /* fmt chunk. */ - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : size, WAV format type, channels. */ - psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_IMA_ADPCM, psf->sf.channels) ; - - /* fmt : samplerate, bytespersec. */ - psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ; - - /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */ - psf_binheader_writef (psf, "e2222", blockalign, 4, 2, framesperblock) ; - } ; - - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_MS_ADPCM : - { int blockalign, framesperblock, bytespersec, extrabytes ; - - blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ; - framesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ; - bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ; - - /* fmt chunk. */ - extrabytes = 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ; - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : size, W64 format type, channels. */ - psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ; - - /* fmt : samplerate, bytespersec. */ - psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ; - - /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */ - psf_binheader_writef (psf, "e22222", blockalign, 4, extrabytes, framesperblock, 7) ; - - msadpcm_write_adapt_coeffs (psf) ; - } ; - - add_fact_chunk = SF_TRUE ; - break ; - /* Lite remove end */ - - case SF_FORMAT_GSM610 : - { int bytespersec ; - - bytespersec = (psf->sf.samplerate * WAV_W64_GSM610_BLOCKSIZE) / WAV_W64_GSM610_SAMPLES ; - - /* fmt chunk. */ - fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ; - fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ; - fmt_size += fmt_pad ; - - /* fmt : size, WAV format type, channels. */ - psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ; - - /* fmt : samplerate, bytespersec. */ - psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ; - - /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */ - psf_binheader_writef (psf, "e2222", WAV_W64_GSM610_BLOCKSIZE, 0, 2, WAV_W64_GSM610_SAMPLES) ; - } ; - - add_fact_chunk = SF_TRUE ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - /* Pad to 8 bytes with zeros. */ - if (fmt_pad > 0) - psf_binheader_writef (psf, "z", fmt_pad) ; - - if (add_fact_chunk) - psf_binheader_writef (psf, "eh88", fact_MARKER16, (sf_count_t) (16 + 8 + 8), psf->sf.frames) ; - - psf_binheader_writef (psf, "eh8", data_MARKER16, psf->datalength + 24) ; - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* w64_write_header */ - -static int -w64_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - w64_write_header (psf, SF_TRUE) ; - - return 0 ; -} /* w64_close */ - - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 9aa4e141-538a-4dd9-99c9-b3f0f2dd4f4a -*/ diff --git a/Libraries/SndFile/Files/src/wav.c b/Libraries/SndFile/Files/src/wav.c deleted file mode 100644 index 8f4be1cd7..000000000 --- a/Libraries/SndFile/Files/src/wav.c +++ /dev/null @@ -1,1543 +0,0 @@ -/* -** Copyright (C) 1999-2006 Erik de Castro Lopo -** Copyright (C) 2004-2005 David Viens -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "wav_w64.h" - -/*------------------------------------------------------------------------------ - * Macros to handle big/little endian issues. - */ - -#define RIFF_MARKER (MAKE_MARKER ('R', 'I', 'F', 'F')) -#define RIFX_MARKER (MAKE_MARKER ('R', 'I', 'F', 'X')) -#define WAVE_MARKER (MAKE_MARKER ('W', 'A', 'V', 'E')) -#define fmt_MARKER (MAKE_MARKER ('f', 'm', 't', ' ')) -#define data_MARKER (MAKE_MARKER ('d', 'a', 't', 'a')) -#define fact_MARKER (MAKE_MARKER ('f', 'a', 'c', 't')) -#define PEAK_MARKER (MAKE_MARKER ('P', 'E', 'A', 'K')) - -#define cue_MARKER (MAKE_MARKER ('c', 'u', 'e', ' ')) -#define LIST_MARKER (MAKE_MARKER ('L', 'I', 'S', 'T')) -#define slnt_MARKER (MAKE_MARKER ('s', 'l', 'n', 't')) -#define wavl_MARKER (MAKE_MARKER ('w', 'a', 'v', 'l')) -#define INFO_MARKER (MAKE_MARKER ('I', 'N', 'F', 'O')) -#define plst_MARKER (MAKE_MARKER ('p', 'l', 's', 't')) -#define adtl_MARKER (MAKE_MARKER ('a', 'd', 't', 'l')) -#define labl_MARKER (MAKE_MARKER ('l', 'a', 'b', 'l')) -#define ltxt_MARKER (MAKE_MARKER ('l', 't', 'x', 't')) -#define note_MARKER (MAKE_MARKER ('n', 'o', 't', 'e')) -#define smpl_MARKER (MAKE_MARKER ('s', 'm', 'p', 'l')) -#define bext_MARKER (MAKE_MARKER ('b', 'e', 'x', 't')) -#define MEXT_MARKER (MAKE_MARKER ('M', 'E', 'X', 'T')) -#define DISP_MARKER (MAKE_MARKER ('D', 'I', 'S', 'P')) -#define acid_MARKER (MAKE_MARKER ('a', 'c', 'i', 'd')) -#define strc_MARKER (MAKE_MARKER ('s', 't', 'r', 'c')) -#define PAD_MARKER (MAKE_MARKER ('P', 'A', 'D', ' ')) -#define afsp_MARKER (MAKE_MARKER ('a', 'f', 's', 'p')) -#define clm_MARKER (MAKE_MARKER ('c', 'l', 'm', ' ')) -#define elmo_MARKER (MAKE_MARKER ('e', 'l', 'm', 'o')) - -#define ISFT_MARKER (MAKE_MARKER ('I', 'S', 'F', 'T')) -#define ICRD_MARKER (MAKE_MARKER ('I', 'C', 'R', 'D')) -#define ICOP_MARKER (MAKE_MARKER ('I', 'C', 'O', 'P')) -#define IARL_MARKER (MAKE_MARKER ('I', 'A', 'R', 'L')) -#define IART_MARKER (MAKE_MARKER ('I', 'A', 'R', 'T')) -#define INAM_MARKER (MAKE_MARKER ('I', 'N', 'A', 'M')) -#define IENG_MARKER (MAKE_MARKER ('I', 'E', 'N', 'G')) -#define IART_MARKER (MAKE_MARKER ('I', 'A', 'R', 'T')) -#define ICOP_MARKER (MAKE_MARKER ('I', 'C', 'O', 'P')) -#define IPRD_MARKER (MAKE_MARKER ('I', 'P', 'R', 'D')) -#define ISRC_MARKER (MAKE_MARKER ('I', 'S', 'R', 'C')) -#define ISBJ_MARKER (MAKE_MARKER ('I', 'S', 'B', 'J')) -#define ICMT_MARKER (MAKE_MARKER ('I', 'C', 'M', 'T')) - -/* Weird WAVPACK marker which can show up at the start of the DATA section. */ -#define wvpk_MARKER (MAKE_MARKER ('w', 'v', 'p', 'k')) -#define OggS_MARKER (MAKE_MARKER ('O', 'g', 'g', 'S')) - -#define WAV_PEAK_CHUNK_SIZE(ch) (2 * sizeof (int) + ch * (sizeof (float) + sizeof (int))) - -enum -{ HAVE_RIFF = 0x01, - HAVE_WAVE = 0x02, - HAVE_fmt = 0x04, - HAVE_fact = 0x08, - HAVE_PEAK = 0x10, - HAVE_data = 0x20, - HAVE_other = 0x80000000 -} ; - - - -/* known WAVEFORMATEXTENSIBLE GUIDS */ -static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM = -{ 0x00000001, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM = -{ 0x00000002, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT = -{ 0x00000003, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW = -{ 0x00000006, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW = -{ 0x00000007, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -/* -** the next two are from -** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html -*/ -static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM = -{ 0x00000001, 0x0721, 0x11d3, { 0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT = -{ 0x00000003, 0x0721, 0x11d3, { 0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 } -} ; - - -#if 0 -/* maybe interesting one day to read the following through sf_read_raw */ -/* http://www.bath.ac.uk/~masrwd/pvocex/pvocex.html */ -static const EXT_SUBFORMAT MSGUID_SUBTYPE_PVOCEX = -{ 0x8312B9C2, 0x2E6E, 0x11d4, { 0xA8, 0x24, 0xDE, 0x5B, 0x96, 0xC3, 0xAB, 0x21 } -} ; -#endif - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int wav_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ; -static int wav_write_header (SF_PRIVATE *psf, int calc_length) ; - -static int wavex_write_header (SF_PRIVATE *psf, int calc_length) ; - -static int wav_write_tailer (SF_PRIVATE *psf) ; -static void wav_write_strings (SF_PRIVATE *psf, int location) ; -static int wav_command (SF_PRIVATE *psf, int command, void *data, int datasize) ; -static int wav_close (SF_PRIVATE *psf) ; - -static int wav_subchunk_parse (SF_PRIVATE *psf, int chunk) ; -static int wav_read_smpl_chunk (SF_PRIVATE *psf, unsigned int chunklen) ; -static int wav_read_acid_chunk (SF_PRIVATE *psf, unsigned int chunklen) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -wav_open (SF_PRIVATE *psf) -{ int format, subformat, error, blockalign = 0, framesperblock = 0 ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = wav_read_header (psf, &blockalign, &framesperblock))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if (psf->is_pipe) - return SFE_NO_PIPE_WRITE ; - - format = psf->sf.format & SF_FORMAT_TYPEMASK ; - if (format != SF_FORMAT_WAV && format != SF_FORMAT_WAVEX) - return SFE_BAD_OPEN_FORMAT ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - /* RIFF WAVs are little-endian, RIFX WAVs are big-endian, default to little */ - psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ; - if (CPU_IS_BIG_ENDIAN && psf->endian == SF_ENDIAN_CPU) - psf->endian = SF_ENDIAN_BIG ; - else if (psf->endian != SF_ENDIAN_BIG) - psf->endian = SF_ENDIAN_LITTLE ; - - if (psf->mode != SFM_RDWR || psf->filelength < 44) - { psf->filelength = 0 ; - psf->datalength = 0 ; - psf->dataoffset = 0 ; - psf->sf.frames = 0 ; - } ; - - if (subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) - { blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ; - framesperblock = -1 ; /* Corrected later. */ - } ; - - psf->str_flags = SF_STR_ALLOW_START | SF_STR_ALLOW_END ; - - /* By default, add the peak chunk to floating point files. Default behaviour - ** can be switched off using sf_command (SFC_SET_PEAK_CHUNK, SF_FALSE). - */ - if (psf->mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)) - { if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL) - return SFE_MALLOC_FAILED ; - psf->peak_info->peak_loc = SF_PEAK_START ; - } ; - - psf->write_header = (format == SF_FORMAT_WAV) ? wav_write_header : wavex_write_header ; - } ; - - psf->container_close = wav_close ; - psf->command = wav_command ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - error = pcm_init (psf) ; - break ; - - case SF_FORMAT_ULAW : - error = ulaw_init (psf) ; - break ; - - case SF_FORMAT_ALAW : - error = alaw_init (psf) ; - break ; - - /* Lite remove start */ - case SF_FORMAT_FLOAT : - error = float32_init (psf) ; - break ; - - case SF_FORMAT_DOUBLE : - error = double64_init (psf) ; - break ; - - case SF_FORMAT_IMA_ADPCM : - error = wav_w64_ima_init (psf, blockalign, framesperblock) ; - break ; - - case SF_FORMAT_MS_ADPCM : - error = wav_w64_msadpcm_init (psf, blockalign, framesperblock) ; - break ; - - case SF_FORMAT_G721_32 : - error = g72x_init (psf) ; - break ; - /* Lite remove end */ - - case SF_FORMAT_GSM610 : - error = gsm610_init (psf) ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - if (psf->mode == SFM_WRITE || (psf->mode == SFM_RDWR && psf->filelength == 0)) - return psf->write_header (psf, SF_FALSE) ; - - return error ; -} /* wav_open */ - -/*========================================================================= -** Private functions. -*/ - -static int -wav_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) -{ WAV_FMT wav_fmt ; - FACT_CHUNK fact_chunk ; - unsigned dword = 0, marker, RIFFsize, done = 0 ; - int parsestage = 0, error, format = 0 ; - char *cptr ; - - memset (&wav_fmt, 0, sizeof (wav_fmt)) ; - /* Set position to start of file to begin reading header. */ - psf_binheader_readf (psf, "p", 0) ; - - while (! done) - { psf_binheader_readf (psf, "m", &marker) ; - - switch (marker) - { case RIFF_MARKER : - case RIFX_MARKER : - if (parsestage) - return SFE_WAV_NO_RIFF ; - - parsestage |= HAVE_RIFF ; - - /* RIFX signifies big-endian format for all header and data - ** to prevent lots of code copying here, we'll set the psf->rwf_endian - ** flag once here, and never specify endian-ness for all other header ops - */ - if (marker == RIFF_MARKER) - psf->rwf_endian = SF_ENDIAN_LITTLE ; - else - psf->rwf_endian = SF_ENDIAN_BIG ; - - psf_binheader_readf (psf, "4", &RIFFsize) ; - - if (psf->fileoffset > 0 && psf->filelength > RIFFsize + 8) - { /* Set file length. */ - psf->filelength = RIFFsize + 8 ; - if (marker == RIFF_MARKER) - psf_log_printf (psf, "RIFF : %u\n", RIFFsize) ; - else - psf_log_printf (psf, "RIFX : %u\n", RIFFsize) ; - } - else if (psf->filelength < RIFFsize + 2 * SIGNED_SIZEOF (dword)) - { if (marker == RIFF_MARKER) - psf_log_printf (psf, "RIFF : %u (should be %D)\n", RIFFsize, psf->filelength - 2 * SIGNED_SIZEOF (dword)) ; - else - psf_log_printf (psf, "RIFX : %u (should be %D)\n", RIFFsize, psf->filelength - 2 * SIGNED_SIZEOF (dword)) ; - - RIFFsize = dword ; - } - else - { if (marker == RIFF_MARKER) - psf_log_printf (psf, "RIFF : %u\n", RIFFsize) ; - else - psf_log_printf (psf, "RIFX : %u\n", RIFFsize) ; - } ; - break ; - - case WAVE_MARKER : - if ((parsestage & HAVE_RIFF) != HAVE_RIFF) - return SFE_WAV_NO_WAVE ; - parsestage |= HAVE_WAVE ; - - psf_log_printf (psf, "WAVE\n") ; - break ; - - case fmt_MARKER : - if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE)) - return SFE_WAV_NO_FMT ; - - /* If this file has a SECOND fmt chunk, I don't want to know about it. */ - if (parsestage & HAVE_fmt) - break ; - - parsestage |= HAVE_fmt ; - - psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, "fmt : %d\n", dword) ; - - if ((error = wav_w64_read_fmt_chunk (psf, &wav_fmt, dword))) - return error ; - - format = wav_fmt.format ; - break ; - - case data_MARKER : - if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) - return SFE_WAV_NO_DATA ; - - if (psf->mode == SFM_RDWR && (parsestage & HAVE_other) != 0) - return SFE_RDWR_BAD_HEADER ; - - parsestage |= HAVE_data ; - - psf_binheader_readf (psf, "4", &dword) ; - - psf->datalength = dword ; - psf->dataoffset = psf_ftell (psf) ; - - if (dword == 0 && RIFFsize == 8 && psf->filelength > 44) - { psf_log_printf (psf, "*** Looks like a WAV file which wasn't closed properly. Fixing it.\n") ; - psf->datalength = dword = psf->filelength - psf->dataoffset ; - } ; - - if (psf->datalength > psf->filelength - psf->dataoffset) - { psf_log_printf (psf, "data : %D (should be %D)\n", psf->datalength, psf->filelength - psf->dataoffset) ; - psf->datalength = psf->filelength - psf->dataoffset ; - } - else - psf_log_printf (psf, "data : %D\n", psf->datalength) ; - - /* Only set dataend if there really is data at the end. */ - if (psf->datalength + psf->dataoffset < psf->filelength) - psf->dataend = psf->datalength + psf->dataoffset ; - - if (format == WAVE_FORMAT_MS_ADPCM && psf->datalength % 2) - { psf->datalength ++ ; - psf_log_printf (psf, "*** Data length odd. Increasing it by 1.\n") ; - } ; - - if (! psf->sf.seekable) - break ; - - /* Seek past data and continue reading header. */ - psf_fseek (psf, psf->datalength, SEEK_CUR) ; - - dword = psf_ftell (psf) ; - if (dword != (sf_count_t) (psf->dataoffset + psf->datalength)) - psf_log_printf (psf, "*** psf_fseek past end error ***\n", dword, psf->dataoffset + psf->datalength) ; - break ; - - case fact_MARKER : - if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE)) - return SFE_WAV_BAD_FACT ; - - parsestage |= HAVE_fact ; - - if ((parsestage & HAVE_fmt) != HAVE_fmt) - psf_log_printf (psf, "*** Should have 'fmt ' chunk before 'fact'\n") ; - - psf_binheader_readf (psf, "44", &dword, & (fact_chunk.frames)) ; - - if (dword > SIGNED_SIZEOF (fact_chunk)) - psf_binheader_readf (psf, "j", (int) (dword - SIGNED_SIZEOF (fact_chunk))) ; - - if (dword) - psf_log_printf (psf, "%M : %d\n", marker, dword) ; - else - psf_log_printf (psf, "%M : %d (should not be zero)\n", marker, dword) ; - - psf_log_printf (psf, " frames : %d\n", fact_chunk.frames) ; - break ; - - case PEAK_MARKER : - if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) - return SFE_WAV_PEAK_B4_FMT ; - - parsestage |= HAVE_PEAK ; - - psf_binheader_readf (psf, "4", &dword) ; - - psf_log_printf (psf, "%M : %d\n", marker, dword) ; - if (dword != WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) - { psf_binheader_readf (psf, "j", dword) ; - psf_log_printf (psf, "*** File PEAK chunk size doesn't fit with number of channels (%d).\n", psf->sf.channels) ; - return SFE_WAV_BAD_PEAK ; - } ; - - if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL) - return SFE_MALLOC_FAILED ; - - /* read in rest of PEAK chunk. */ - psf_binheader_readf (psf, "44", & (psf->peak_info->version), & (psf->peak_info->timestamp)) ; - - if (psf->peak_info->version != 1) - psf_log_printf (psf, " version : %d *** (should be version 1)\n", psf->peak_info->version) ; - else - psf_log_printf (psf, " version : %d\n", psf->peak_info->version) ; - - psf_log_printf (psf, " time stamp : %d\n", psf->peak_info->timestamp) ; - psf_log_printf (psf, " Ch Position Value\n") ; - - cptr = psf->u.cbuf ; - for (dword = 0 ; dword < (unsigned) psf->sf.channels ; dword++) - { float value ; - unsigned int position ; - psf_binheader_readf (psf, "f4", &value, &position) ; - psf->peak_info->peaks [dword].value = value ; - psf->peak_info->peaks [dword].position = position ; - - LSF_SNPRINTF (cptr, sizeof (psf->u.cbuf), " %2d %-12ld %g\n", - dword, (long) psf->peak_info->peaks [dword].position, psf->peak_info->peaks [dword].value) ; - cptr [sizeof (psf->u.cbuf) - 1] = 0 ; - psf_log_printf (psf, cptr) ; - } ; - - psf->peak_info->peak_loc = ((parsestage & HAVE_data) == 0) ? SF_PEAK_START : SF_PEAK_END ; - break ; - - case cue_MARKER : - parsestage |= HAVE_other ; - - { unsigned bytesread, cue_count ; - int id, position, chunk_id, chunk_start, block_start, offset ; - - bytesread = psf_binheader_readf (psf, "44", &dword, &cue_count) ; - bytesread -= 4 ; /* Remove bytes for first dword. */ - psf_log_printf (psf, "%M : %u\n", marker, dword) ; - - if (cue_count > 10) - { psf_log_printf (psf, " Count : %d (skipping)\n", cue_count) ; - psf_binheader_readf (psf, "j", cue_count * 24) ; - break ; - } ; - - psf_log_printf (psf, " Count : %d\n", cue_count) ; - - while (cue_count) - { bytesread += psf_binheader_readf (psf, "444444", &id, &position, - &chunk_id, &chunk_start, &block_start, &offset) ; - psf_log_printf (psf, " Cue ID : %2d" - " Pos : %5u Chunk : %M" - " Chk Start : %d Blk Start : %d" - " Offset : %5d\n", - id, position, chunk_id, chunk_start, block_start, offset) ; - cue_count -- ; - } ; - - if (bytesread != dword) - { psf_log_printf (psf, "**** Chunk size weirdness (%d != %d)\n", dword, bytesread) ; - psf_binheader_readf (psf, "j", dword - bytesread) ; - } ; - } ; - break ; - - case smpl_MARKER : - parsestage |= HAVE_other ; - - psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, "smpl : %u\n", dword) ; - - if ((error = wav_read_smpl_chunk (psf, dword))) - return error ; - break ; - - case acid_MARKER : - parsestage |= HAVE_other ; - - psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, "acid : %u\n", dword) ; - - if ((error = wav_read_acid_chunk (psf, dword))) - return error ; - break ; - - case INFO_MARKER : - case LIST_MARKER : - parsestage |= HAVE_other ; - - if ((error = wav_subchunk_parse (psf, marker)) != 0) - return error ; - break ; - - case strc_MARKER : /* Multiple of 32 bytes. */ - - case afsp_MARKER : - case bext_MARKER : - case clm_MARKER : - case elmo_MARKER : - case plst_MARKER : - case DISP_MARKER : - case MEXT_MARKER : - case PAD_MARKER : - parsestage |= HAVE_other ; - - psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, "%M : %u\n", marker, dword) ; - dword += (dword & 1) ; - psf_binheader_readf (psf, "j", dword) ; - break ; - - default : - parsestage |= HAVE_other ; - if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF) - && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF)) - { psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, "*** %M : %d (unknown marker)\n", marker, dword) ; - psf_binheader_readf (psf, "j", dword) ; - break ; - } ; - if (psf_ftell (psf) & 0x03) - { psf_log_printf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ; - psf_binheader_readf (psf, "j", -3) ; - break ; - } ; - psf_log_printf (psf, "*** Unknown chunk marker (%X) at position %D. Exiting parser.\n", marker, psf_ftell (psf) - 4) ; - done = SF_TRUE ; - break ; - } ; /* switch (dword) */ - - if (! psf->sf.seekable && (parsestage & HAVE_data)) - break ; - - if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (dword)) - { psf_log_printf (psf, "End\n") ; - break ; - } ; - } ; /* while (1) */ - - if (! psf->dataoffset) - return SFE_WAV_NO_DATA ; - - /* WAVs can be little or big endian */ - psf->endian = psf->rwf_endian ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - - if (psf->is_pipe == 0) - { /* - ** Check for 'wvpk' at the start of the DATA section. Not able to - ** handle this. - */ - psf_binheader_readf (psf, "4", &marker) ; - if (marker == wvpk_MARKER || marker == OggS_MARKER) - return SFE_WAV_WVPK_DATA ; - } ; - - /* Seek to start of DATA section. */ - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - - if (psf->blockwidth) - { if (psf->filelength - psf->dataoffset < psf->datalength) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - else - psf->sf.frames = psf->datalength / psf->blockwidth ; - } ; - - switch (format) - { case WAVE_FORMAT_EXTENSIBLE : - if (psf->sf.format == (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM)) - { *blockalign = wav_fmt.msadpcm.blockalign ; - *framesperblock = wav_fmt.msadpcm.samplesperblock ; - } ; - break ; - - case WAVE_FORMAT_PCM : - psf->sf.format = SF_FORMAT_WAV | u_bitwidth_to_subformat (psf->bytewidth * 8) ; - break ; - - case WAVE_FORMAT_MULAW : - case IBM_FORMAT_MULAW : - psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ULAW) ; - break ; - - case WAVE_FORMAT_ALAW : - case IBM_FORMAT_ALAW : - psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ALAW) ; - break ; - - case WAVE_FORMAT_MS_ADPCM : - psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ; - *blockalign = wav_fmt.msadpcm.blockalign ; - *framesperblock = wav_fmt.msadpcm.samplesperblock ; - break ; - - case WAVE_FORMAT_IMA_ADPCM : - psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ; - *blockalign = wav_fmt.ima.blockalign ; - *framesperblock = wav_fmt.ima.samplesperblock ; - break ; - - case WAVE_FORMAT_GSM610 : - psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_GSM610) ; - break ; - - case WAVE_FORMAT_IEEE_FLOAT : - psf->sf.format = SF_FORMAT_WAV ; - psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ; - break ; - - case WAVE_FORMAT_G721_ADPCM : - psf->sf.format = SF_FORMAT_WAV | SF_FORMAT_G721_32 ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - /* Only set the format endian-ness if its non-standard big-endian. */ - if (psf->endian == SF_ENDIAN_BIG) - psf->sf.format |= SF_ENDIAN_BIG ; - - return 0 ; -} /* wav_read_header */ - -static int -wav_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int fmt_size, k, subformat, add_fact_chunk = SF_FALSE ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->bytewidth > 0) - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* RIFX signifies big-endian format for all header and data - ** to prevent lots of code copying here, we'll set the psf->rwf_endian - ** flag once here, and never specify endian-ness for all other header ops - */ - - /* RIFF/RIFX marker, length, WAVE and 'fmt ' markers. */ - - if (psf->endian == SF_ENDIAN_LITTLE) - psf_binheader_writef (psf, "etm8", RIFF_MARKER, (psf->filelength < 8) ? 8 : psf->filelength - 8) ; - else - psf_binheader_writef (psf, "Etm8", RIFX_MARKER, (psf->filelength < 8) ? 8 : psf->filelength - 8) ; - - /* WAVE and 'fmt ' markers. */ - psf_binheader_writef (psf, "mm", WAVE_MARKER, fmt_MARKER) ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ; - break ; - - case SF_FORMAT_FLOAT : - case SF_FORMAT_DOUBLE : - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ; - - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_ULAW : - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_MULAW, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, 8) ; - - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_ALAW : - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_ALAW, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, 8) ; - - add_fact_chunk = SF_TRUE ; - break ; - - /* Lite remove start */ - case SF_FORMAT_IMA_ADPCM : - { int blockalign, framesperblock, bytespersec ; - - blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ; - framesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ; - bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ; - - /* fmt chunk. */ - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ; - - /* fmt : size, WAV format type, channels, samplerate, bytespersec */ - psf_binheader_writef (psf, "42244", fmt_size, WAVE_FORMAT_IMA_ADPCM, - psf->sf.channels, psf->sf.samplerate, bytespersec) ; - - /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */ - psf_binheader_writef (psf, "2222", blockalign, 4, 2, framesperblock) ; - } ; - - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_MS_ADPCM : - { int blockalign, framesperblock, bytespersec, extrabytes ; - - blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ; - framesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ; - bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ; - - /* fmt chunk. */ - extrabytes = 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ; - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ; - - /* fmt : size, WAV format type, channels. */ - psf_binheader_writef (psf, "422", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ; - - /* fmt : samplerate, bytespersec. */ - psf_binheader_writef (psf, "44", psf->sf.samplerate, bytespersec) ; - - /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */ - psf_binheader_writef (psf, "22222", blockalign, 4, extrabytes, framesperblock, 7) ; - - msadpcm_write_adapt_coeffs (psf) ; - } ; - - add_fact_chunk = SF_TRUE ; - break ; - - - case SF_FORMAT_G721_32 : - /* fmt chunk. */ - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ; - - /* fmt : size, WAV format type, channels, samplerate, bytespersec */ - psf_binheader_writef (psf, "42244", fmt_size, WAVE_FORMAT_G721_ADPCM, - psf->sf.channels, psf->sf.samplerate, psf->sf.samplerate * psf->sf.channels / 2) ; - - /* fmt : blockalign, bitwidth, extrabytes, auxblocksize. */ - psf_binheader_writef (psf, "2222", 64, 4, 2, 0) ; - - add_fact_chunk = SF_TRUE ; - break ; - - /* Lite remove end */ - - case SF_FORMAT_GSM610 : - { int blockalign, framesperblock, bytespersec ; - - blockalign = WAV_W64_GSM610_BLOCKSIZE ; - framesperblock = WAV_W64_GSM610_SAMPLES ; - bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ; - - /* fmt chunk. */ - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ; - - /* fmt : size, WAV format type, channels. */ - psf_binheader_writef (psf, "422", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ; - - /* fmt : samplerate, bytespersec. */ - psf_binheader_writef (psf, "44", psf->sf.samplerate, bytespersec) ; - - /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */ - psf_binheader_writef (psf, "2222", blockalign, 0, 2, framesperblock) ; - } ; - - add_fact_chunk = SF_TRUE ; - break ; - - default : return SFE_UNIMPLEMENTED ; - } ; - - if (add_fact_chunk) - psf_binheader_writef (psf, "tm48", fact_MARKER, 4, psf->sf.frames) ; - - if (psf->str_flags & SF_STR_LOCATE_START) - wav_write_strings (psf, SF_STR_LOCATE_START) ; - - if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START) - { psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ; - psf_binheader_writef (psf, "44", 1, time (NULL)) ; - for (k = 0 ; k < psf->sf.channels ; k++) - psf_binheader_writef (psf, "ft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ; - } ; - - if (psf->instrument != NULL) - { int tmp ; - double dtune = (double) (0x40000000) / 25.0 ; - - psf_binheader_writef (psf, "m4", smpl_MARKER, 9 * 4 + psf->instrument->loop_count * 6 * 4) ; - psf_binheader_writef (psf, "44", 0, 0) ; /* Manufacturer zero is everyone */ - tmp = (int) (1.0e9 / psf->sf.samplerate) ; /* Sample period in nano seconds */ - psf_binheader_writef (psf, "44", tmp, psf->instrument->basenote) ; - tmp = (unsigned int) (psf->instrument->detune * dtune + 0.5) ; - psf_binheader_writef (psf, "4", tmp) ; - psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */ - psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ; - - for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++) - { int type ; - - type = psf->instrument->loops [tmp].mode ; - type = (type == SF_LOOP_FORWARD ? 0 : type==SF_LOOP_BACKWARD ? 2 : type == SF_LOOP_ALTERNATING ? 1 : 32) ; - - psf_binheader_writef (psf, "44", tmp, type) ; - psf_binheader_writef (psf, "44", psf->instrument->loops [tmp].start, psf->instrument->loops [tmp].end) ; - psf_binheader_writef (psf, "44", 0, psf->instrument->loops [tmp].count) ; - } ; - } ; - - psf_binheader_writef (psf, "tm8", data_MARKER, psf->datalength) ; - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current < psf->dataoffset) - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - else if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* wav_write_header */ - - - -static int -wavex_write_header (SF_PRIVATE *psf, int calc_length) -{ sf_count_t current ; - int fmt_size, k, subformat, add_fact_chunk = SF_FALSE ; - - current = psf_ftell (psf) ; - - if (calc_length) - { psf->filelength = psf_get_filelen (psf) ; - - psf->datalength = psf->filelength - psf->dataoffset ; - - if (psf->dataend) - psf->datalength -= psf->filelength - psf->dataend ; - - if (psf->bytewidth > 0) - psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ; - } ; - - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - /* RIFX signifies big-endian format for all header and data - ** to prevent lots of code copying here, we'll set the psf->rwf_endian - ** flag once here, and never specify endian-ness for all other header ops - */ - - /* RIFF marker, length, WAVE and 'fmt ' markers. */ - - if (psf->endian == SF_ENDIAN_LITTLE) - { if (psf->filelength < 8) - psf_binheader_writef (psf, "tm8", RIFF_MARKER, 8) ; - else - psf_binheader_writef (psf, "tm8", RIFF_MARKER, psf->filelength - 8) ; - } - else - { if (psf->filelength < 8) - psf_binheader_writef (psf, "Etm8", RIFX_MARKER, 8) ; - else - psf_binheader_writef (psf, "Etm8", RIFX_MARKER, psf->filelength - 8) ; - } ; - - /* WAVE and 'fmt ' markers. */ - psf_binheader_writef (psf, "mm", WAVE_MARKER, fmt_MARKER) ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - /* initial section (same for all, it appears) */ - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - case SF_FORMAT_FLOAT : - case SF_FORMAT_DOUBLE : - case SF_FORMAT_ULAW : - case SF_FORMAT_ALAW : - fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2 + 2 + 8 ; - - /* fmt : format, channels, samplerate */ - psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_EXTENSIBLE, psf->sf.channels, psf->sf.samplerate) ; - /* fmt : bytespersec */ - psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ; - /* fmt : blockalign, bitwidth */ - psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ; - - /* cbSize 22 is sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) */ - psf_binheader_writef (psf, "2", 22) ; - - /* wValidBitsPerSample, for our use same as bitwidth as we use it fully */ - psf_binheader_writef (psf, "2", psf->bytewidth * 8) ; - - /* - ** Ok some liberty is taken here to use the most commonly used channel masks - ** instead of "no mapping". If you really want to use "no mapping" for 8 channels and less - ** please don't use wavex. (otherwise we'll have to create a new SF_COMMAND) - */ - switch (psf->sf.channels) - { case 1 : /* center channel mono */ - psf_binheader_writef (psf, "4", 0x4) ; - break ; - - case 2 : /* front left and right */ - psf_binheader_writef (psf, "4", 0x1 | 0x2) ; - break ; - - case 4 : /* Quad */ - psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x10 | 0x20) ; - break ; - - case 6 : /* 5.1 */ - psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20) ; - break ; - - case 8 : /* 7.1 */ - psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80) ; - break ; - - default : /* 0 when in doubt , use direct out, ie NO mapping*/ - psf_binheader_writef (psf, "4", 0x0) ; - break ; - } - - break ; - - case SF_FORMAT_MS_ADPCM : /* Todo, GUID exists might have different header as per wav_write_header */ - default : - return SFE_UNIMPLEMENTED ; - } ; - - /* GUID section, different for each */ - - switch (subformat) - { case SF_FORMAT_PCM_U8 : - case SF_FORMAT_PCM_16 : - case SF_FORMAT_PCM_24 : - case SF_FORMAT_PCM_32 : - wavex_write_guid (psf, &MSGUID_SUBTYPE_PCM) ; - break ; - - case SF_FORMAT_FLOAT : - case SF_FORMAT_DOUBLE : - wavex_write_guid (psf, &MSGUID_SUBTYPE_IEEE_FLOAT) ; - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_ULAW : - wavex_write_guid (psf, &MSGUID_SUBTYPE_MULAW) ; - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_ALAW : - wavex_write_guid (psf, &MSGUID_SUBTYPE_ALAW) ; - add_fact_chunk = SF_TRUE ; - break ; - - case SF_FORMAT_MS_ADPCM : /* todo, GUID exists */ - - default : return SFE_UNIMPLEMENTED ; - } ; - - if (add_fact_chunk) - psf_binheader_writef (psf, "tm48", fact_MARKER, 4, psf->sf.frames) ; - - if (psf->str_flags & SF_STR_LOCATE_START) - wav_write_strings (psf, SF_STR_LOCATE_START) ; - - if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START) - { psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ; - psf_binheader_writef (psf, "44", 1, time (NULL)) ; - for (k = 0 ; k < psf->sf.channels ; k++) - psf_binheader_writef (psf, "ft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ; - } ; - - psf_binheader_writef (psf, "tm8", data_MARKER, psf->datalength) ; - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current < psf->dataoffset) - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - else if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* wavex_write_header */ - - - -static int -wav_write_tailer (SF_PRIVATE *psf) -{ int k ; - - /* Reset the current header buffer length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - - psf->dataend = psf_fseek (psf, 0, SEEK_END) ; - - /* Add a PEAK chunk if requested. */ - if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_END) - { psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ; - psf_binheader_writef (psf, "44", 1, time (NULL)) ; - for (k = 0 ; k < psf->sf.channels ; k++) - psf_binheader_writef (psf, "f4", psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ; - } ; - - if (psf->str_flags & SF_STR_LOCATE_END) - wav_write_strings (psf, SF_STR_LOCATE_END) ; - - /* Write the tailer. */ - if (psf->headindex > 0) - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - return 0 ; -} /* wav_write_tailer */ - -static void -wav_write_strings (SF_PRIVATE *psf, int location) -{ int k, prev_head_index, saved_head_index ; - - prev_head_index = psf->headindex + 4 ; - - psf_binheader_writef (psf, "m4m", LIST_MARKER, 0xBADBAD, INFO_MARKER) ; - - for (k = 0 ; k < SF_MAX_STRINGS ; k++) - { if (psf->strings [k].type == 0) - break ; - if (psf->strings [k].flags != location) - continue ; - - switch (psf->strings [k].type) - { case SF_STR_SOFTWARE : - psf_binheader_writef (psf, "ms", ISFT_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_TITLE : - psf_binheader_writef (psf, "ms", INAM_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_COPYRIGHT : - psf_binheader_writef (psf, "ms", ICOP_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_ARTIST : - psf_binheader_writef (psf, "ms", IART_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_COMMENT : - psf_binheader_writef (psf, "ms", ICMT_MARKER, psf->strings [k].str) ; - break ; - - case SF_STR_DATE : - psf_binheader_writef (psf, "ms", ICRD_MARKER, psf->strings [k].str) ; - break ; - } ; - } ; - - saved_head_index = psf->headindex ; - psf->headindex = prev_head_index ; - psf_binheader_writef (psf, "4", saved_head_index - prev_head_index - 4) ; - psf->headindex = saved_head_index ; - -} /* wav_write_strings */ - -static int -wav_close (SF_PRIVATE *psf) -{ - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { wav_write_tailer (psf) ; - - psf->write_header (psf, SF_TRUE) ; - } ; - - return 0 ; -} /* wav_close */ - -static int -wav_command (SF_PRIVATE *psf, int command, void *data, int datasize) -{ - /* Avoid compiler warnings. */ - psf = psf ; - data = data ; - datasize = datasize ; - - switch (command) - { default : break ; - } ; - - return 0 ; -} /* wav_command */ - -static int -wav_subchunk_parse (SF_PRIVATE *psf, int chunk) -{ sf_count_t current_pos ; - char *cptr ; - int dword, bytesread, length ; - - current_pos = psf_fseek (psf, 0, SEEK_CUR) ; - - bytesread = psf_binheader_readf (psf, "4", &length) ; - - if (length <= 8) - { /* This case is for broken files generated by PEAK. */ - psf_log_printf (psf, "%M : %d (weird length)\n", chunk, length) ; - psf_binheader_readf (psf, "mj", &chunk, length - 4) ; - psf_log_printf (psf, " %M\n", chunk) ; - return 0 ; - } ; - - if (psf->headindex + length > SIGNED_SIZEOF (psf->header)) - { psf_log_printf (psf, "%M : %d (too long)\n", chunk, length) ; - psf_binheader_readf (psf, "j", length) ; - return 0 ; - } ; - - if (current_pos + length > psf->filelength) - { psf_log_printf (psf, "%M : %d (should be %d)\n", chunk, length, (int) (psf->filelength - current_pos)) ; - length = psf->filelength - current_pos ; - } - else - psf_log_printf (psf, "%M : %d\n", chunk, length) ; - - while (bytesread < length) - { bytesread += psf_binheader_readf (psf, "m", &chunk) ; - - switch (chunk) - { case adtl_MARKER : - case INFO_MARKER : - /* These markers don't contain anything. */ - psf_log_printf (psf, " %M\n", chunk) ; - break ; - - case data_MARKER: - psf_log_printf (psf, " %M inside a LIST block??? Backing out.\n", chunk) ; - /* Jump back four bytes and return to caller. */ - psf_binheader_readf (psf, "j", -4) ; - return 0 ; - - case ISFT_MARKER : - case ICOP_MARKER : - case IARL_MARKER : - case IART_MARKER : - case ICMT_MARKER : - case ICRD_MARKER : - case IENG_MARKER : - - case INAM_MARKER : - case IPRD_MARKER : - case ISBJ_MARKER : - case ISRC_MARKER : - bytesread += psf_binheader_readf (psf, "4", &dword) ; - dword += (dword & 1) ; - if (dword < 0 || dword > SIGNED_SIZEOF (psf->u.cbuf)) - { psf_log_printf (psf, " *** %M : %d (too big)\n", chunk, dword) ; - psf_binheader_readf (psf, "j", dword) ; - break ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword) ; - bytesread += dword ; - cptr [dword - 1] = 0 ; - psf_log_printf (psf, " %M : %s\n", chunk, cptr) ; - break ; - - case labl_MARKER : - { int mark_id ; - - bytesread += psf_binheader_readf (psf, "44", &dword, &mark_id) ; - dword -= 4 ; - dword += (dword & 1) ; - if (dword < 1 || dword > SIGNED_SIZEOF (psf->u.cbuf)) - { psf_log_printf (psf, " *** %M : %d (too big)\n", chunk, dword) ; - psf_binheader_readf (psf, "j", dword) ; - break ; - } ; - - cptr = psf->u.cbuf ; - psf_binheader_readf (psf, "b", cptr, dword) ; - bytesread += dword ; - cptr [dword - 1] = 0 ; - psf_log_printf (psf, " %M : %d : %s\n", chunk, mark_id, cptr) ; - } ; - break ; - - - case DISP_MARKER : - case ltxt_MARKER : - case note_MARKER : - bytesread += psf_binheader_readf (psf, "4", &dword) ; - dword += (dword & 1) ; - psf_binheader_readf (psf, "j", dword) ; - bytesread += dword ; - psf_log_printf (psf, " %M : %d\n", chunk, dword) ; - break ; - - default : - psf_binheader_readf (psf, "4", &dword) ; - bytesread += sizeof (dword) ; - dword += (dword & 1) ; - psf_binheader_readf (psf, "j", dword) ; - bytesread += dword ; - psf_log_printf (psf, " *** %M : %d\n", chunk, dword) ; - if (dword > length) - return 0 ; - break ; - } ; - - switch (chunk) - { case ISFT_MARKER : - psf_store_string (psf, SF_STR_SOFTWARE, psf->u.cbuf) ; - break ; - case ICOP_MARKER : - psf_store_string (psf, SF_STR_COPYRIGHT, psf->u.cbuf) ; - break ; - case INAM_MARKER : - psf_store_string (psf, SF_STR_TITLE, psf->u.cbuf) ; - break ; - case IART_MARKER : - psf_store_string (psf, SF_STR_ARTIST, psf->u.cbuf) ; - break ; - case ICMT_MARKER : - psf_store_string (psf, SF_STR_COMMENT, psf->u.cbuf) ; - break ; - case ICRD_MARKER : - psf_store_string (psf, SF_STR_DATE, psf->u.cbuf) ; - break ; - } ; - } ; - - current_pos = psf_fseek (psf, 0, SEEK_CUR) - current_pos ; - - if (current_pos - 4 != length) - psf_log_printf (psf, "**** Bad chunk length %d sbould be %D\n", length, current_pos - 4) ; - - return 0 ; -} /* wav_subchunk_parse */ - -static int -wav_read_smpl_chunk (SF_PRIVATE *psf, unsigned int chunklen) -{ unsigned int bytesread = 0, dword, sampler_data, loop_count ; - unsigned int note, start, end, type = -1, count ; - int j, k ; - - chunklen += (chunklen & 1) ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, " Manufacturer : %X\n", dword) ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, " Product : %u\n", dword) ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, " Period : %u nsec\n", dword) ; - - bytesread += psf_binheader_readf (psf, "4", ¬e) ; - psf_log_printf (psf, " Midi Note : %u\n", note) ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - if (dword != 0) - { LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), "%f", - (1.0 * 0x80000000) / ((unsigned int) dword)) ; - psf_log_printf (psf, " Pitch Fract. : %s\n", psf->u.cbuf) ; - } - else - psf_log_printf (psf, " Pitch Fract. : 0\n") ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, " SMPTE Format : %u\n", dword) ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), "%02d:%02d:%02d %02d", - (dword >> 24) & 0x7F, (dword >> 16) & 0x7F, (dword >> 8) & 0x7F, dword & 0x7F) ; - psf_log_printf (psf, " SMPTE Offset : %s\n", psf->u.cbuf) ; - - bytesread += psf_binheader_readf (psf, "4", &loop_count) ; - psf_log_printf (psf, " Loop Count : %u\n", loop_count) ; - - /* Sampler Data holds the number of data bytes after the CUE chunks which - ** is not actually CUE data. Display value after CUE data. - */ - bytesread += psf_binheader_readf (psf, "4", &sampler_data) ; - - if ((psf->instrument = psf_instrument_alloc ()) == NULL) - return SFE_MALLOC_FAILED ; - - psf->instrument->loop_count = loop_count ; - - for (j = 0 ; loop_count > 0 && chunklen - bytesread >= 24 ; j ++) - { bytesread += psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, " Cue ID : %2u", dword) ; - - bytesread += psf_binheader_readf (psf, "4", &type) ; - psf_log_printf (psf, " Type : %2u", type) ; - - bytesread += psf_binheader_readf (psf, "4", &start) ; - psf_log_printf (psf, " Start : %5u", start) ; - - bytesread += psf_binheader_readf (psf, "4", &end) ; - psf_log_printf (psf, " End : %5u", end) ; - - bytesread += psf_binheader_readf (psf, "4", &dword) ; - psf_log_printf (psf, " Fraction : %5u", dword) ; - - bytesread += psf_binheader_readf (psf, "4", &count) ; - psf_log_printf (psf, " Count : %5u\n", count) ; - - if (j < ARRAY_LEN (psf->instrument->loops)) - { psf->instrument->loops [j].start = start ; - psf->instrument->loops [j].end = end ; - psf->instrument->loops [j].count = count ; - - switch (type) - { case 0 : - psf->instrument->loops [j].mode = SF_LOOP_FORWARD ; - break ; - case 1 : - psf->instrument->loops [j].mode = SF_LOOP_ALTERNATING ; - break ; - case 2 : - psf->instrument->loops [j].mode = SF_LOOP_BACKWARD ; - break ; - default: - psf->instrument->loops [j].mode = SF_LOOP_NONE ; - break ; - } ; - } ; - - loop_count -- ; - } ; - - if (chunklen - bytesread == 0) - { if (sampler_data != 0) - psf_log_printf (psf, " Sampler Data : %u (should be 0)\n", sampler_data) ; - else - psf_log_printf (psf, " Sampler Data : %u\n", sampler_data) ; - } - else - { if (sampler_data != chunklen - bytesread) - { psf_log_printf (psf, " Sampler Data : %u (should have been %u)\n", sampler_data, chunklen - bytesread) ; - sampler_data = chunklen - bytesread ; - } - else - psf_log_printf (psf, " Sampler Data : %u\n", sampler_data) ; - - psf_log_printf (psf, " ") ; - for (k = 0 ; k < (int) sampler_data ; k++) - { char ch ; - - if (k > 0 && (k % 20) == 0) - psf_log_printf (psf, "\n ") ; - - bytesread += psf_binheader_readf (psf, "1", &ch) ; - psf_log_printf (psf, "%02X ", ch & 0xFF) ; - } ; - - psf_log_printf (psf, "\n") ; - } ; - - psf->instrument->basenote = note ; - psf->instrument->gain = 1 ; - psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ; - psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ; - - return 0 ; -} /* wav_read_smpl_chunk */ - -/* -** The acid chunk goes a little something like this: -** -** 4 bytes 'acid' -** 4 bytes (int) length of chunk starting at next byte -** -** 4 bytes (int) type of file: -** this appears to be a bit mask,however some combinations -** are probably impossible and/or qualified as "errors" -** -** 0x01 On: One Shot Off: Loop -** 0x02 On: Root note is Set Off: No root -** 0x04 On: Stretch is On, Off: Strech is OFF -** 0x08 On: Disk Based Off: Ram based -** 0x10 On: ?????????? Off: ????????? (Acidizer puts that ON) -** -** 2 bytes (short) root note -** if type 0x10 is OFF : [C,C#,(...),B] -> [0x30 to 0x3B] -** if type 0x10 is ON : [C,C#,(...),B] -> [0x3C to 0x47] -** (both types fit on same MIDI pitch albeit different octaves, so who cares) -** -** 2 bytes (short) ??? always set to 0x8000 -** 4 bytes (float) ??? seems to be always 0 -** 4 bytes (int) number of beats -** 2 bytes (short) meter denominator //always 4 in SF/ACID -** 2 bytes (short) meter numerator //always 4 in SF/ACID -** //are we sure about the order?? usually its num/denom -** 4 bytes (float) tempo -** -*/ - -static int -wav_read_acid_chunk (SF_PRIVATE *psf, unsigned int chunklen) -{ unsigned int bytesread = 0 ; - int beats, flags ; - short rootnote, q1, meter_denom, meter_numer ; - float q2, tempo ; - - chunklen += (chunklen & 1) ; - - bytesread += psf_binheader_readf (psf, "422f", &flags, &rootnote, &q1, &q2) ; - - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), "%f", q2) ; - - psf_log_printf (psf, " Flags : 0x%04x (%s,%s,%s,%s,%s)\n", flags, - (flags & 0x01) ? "OneShot" : "Loop", - (flags & 0x02) ? "RootNoteValid" : "RootNoteInvalid", - (flags & 0x04) ? "StretchOn" : "StretchOff", - (flags & 0x08) ? "DiskBased" : "RAMBased", - (flags & 0x10) ? "??On" : "??Off") ; - - psf_log_printf (psf, " Root note : 0x%x\n ???? : 0x%04x\n ???? : %s\n", - rootnote, q1, psf->u.cbuf) ; - - bytesread += psf_binheader_readf (psf, "422f", &beats, &meter_denom, &meter_numer, &tempo) ; - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), "%f", tempo) ; - psf_log_printf (psf, " Beats : %d\n Meter : %d/%d\n Tempo : %s\n", - beats, meter_numer, meter_denom, psf->u.cbuf) ; - - psf_binheader_readf (psf, "j", chunklen - bytesread) ; - - if ((psf->loop_info = calloc (1, sizeof (SF_LOOP_INFO))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->loop_info->time_sig_num = meter_numer ; - psf->loop_info->time_sig_den = meter_denom ; - psf->loop_info->loop_mode = (flags & 0x01) ? SF_LOOP_NONE : SF_LOOP_FORWARD ; - psf->loop_info->num_beats = beats ; - psf->loop_info->bpm = tempo ; - psf->loop_info->root_key = (flags & 0x02) ? rootnote : -1 ; - - return 0 ; -} /* wav_read_acid_chunk */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 9c551689-a1d8-4905-9f56-26a204374f18 -*/ diff --git a/Libraries/SndFile/Files/src/wav_w64.c b/Libraries/SndFile/Files/src/wav_w64.c deleted file mode 100644 index 85cb1323e..000000000 --- a/Libraries/SndFile/Files/src/wav_w64.c +++ /dev/null @@ -1,494 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** Copyright (C) 2004-2005 David Viens -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "wav_w64.h" - -/* Known WAVEFORMATEXTENSIBLE GUIDS. */ -static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM = -{ 0x00000001, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM = -{ 0x00000002, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT = -{ 0x00000003, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW = -{ 0x00000006, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW = -{ 0x00000007, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } -} ; - -/* -** the next two are from -** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html -*/ - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM = -{ 0x00000001, 0x0721, 0x11d3, { 0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 } -} ; - -static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT = -{ 0x00000003, 0x0721, 0x11d3, { 0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 } -} ; - - -#if 0 -/* maybe interesting one day to read the following through sf_read_raw */ -/* http://www.bath.ac.uk/~masrwd/pvocex/pvocex.html */ -static const EXT_SUBFORMAT MSGUID_SUBTYPE_PVOCEX = -{ 0x8312B9C2, 0x2E6E, 0x11d4, { 0xA8, 0x24, 0xDE, 0x5B, 0x96, 0xC3, 0xAB, 0x21 } -} ; -#endif - -/*------------------------------------------------------------------------------ - * Private static functions. - */ - -static int -wavex_write_guid_equal (const EXT_SUBFORMAT * first, const EXT_SUBFORMAT * second) -{ return !memcmp (first, second, sizeof (EXT_SUBFORMAT)) ; -} /* wavex_write_guid_equal */ - - - -int -wav_w64_read_fmt_chunk (SF_PRIVATE *psf, WAV_FMT *wav_fmt, int structsize) -{ int bytesread, k, bytespersec = 0 ; - - memset (wav_fmt, 0, sizeof (WAV_FMT)) ; - - if (structsize < 16) - return SFE_WAV_FMT_SHORT ; - - /* assume psf->rwf_endian is already properly set */ - - /* Read the minimal WAV file header here. */ - bytesread = - psf_binheader_readf (psf, "224422", &(wav_fmt->format), &(wav_fmt->min.channels), - &(wav_fmt->min.samplerate), &(wav_fmt->min.bytespersec), - &(wav_fmt->min.blockalign), &(wav_fmt->min.bitwidth)) ; - - psf_log_printf (psf, " Format : 0x%X => %s\n", wav_fmt->format, wav_w64_format_str (wav_fmt->format)) ; - psf_log_printf (psf, " Channels : %d\n", wav_fmt->min.channels) ; - psf_log_printf (psf, " Sample Rate : %d\n", wav_fmt->min.samplerate) ; - psf_log_printf (psf, " Block Align : %d\n", wav_fmt->min.blockalign) ; - - if (wav_fmt->format == WAVE_FORMAT_PCM && wav_fmt->min.bitwidth == 24 && - wav_fmt->min.blockalign == 4 * wav_fmt->min.channels) - { - psf_log_printf (psf, "\nInvalid file generated by Syntrillium's Cooledit!\n" - "Treating as WAVE_FORMAT_IEEE_FLOAT 32 bit floating point file.\n\n") ; - psf_log_printf (psf, " Bit Width : 24 (should be 32)\n") ; - wav_fmt->min.bitwidth = 32 ; - wav_fmt->format = WAVE_FORMAT_IEEE_FLOAT ; - } - else if (wav_fmt->format != WAVE_FORMAT_GSM610 && wav_fmt->min.bitwidth == 0) - psf_log_printf (psf, " Bit Width : %d (should not be 0)\n", wav_fmt->min.bitwidth) ; - else if (wav_fmt->format == WAVE_FORMAT_GSM610 && wav_fmt->min.bitwidth != 0) - psf_log_printf (psf, " Bit Width : %d (should be 0)\n", wav_fmt->min.bitwidth) ; - else - psf_log_printf (psf, " Bit Width : %d\n", wav_fmt->min.bitwidth) ; - - psf->sf.samplerate = wav_fmt->min.samplerate ; - psf->sf.frames = 0 ; /* Correct this when reading data chunk. */ - psf->sf.channels = wav_fmt->min.channels ; - - switch (wav_fmt->format) - { case WAVE_FORMAT_PCM : - case WAVE_FORMAT_IEEE_FLOAT : - bytespersec = wav_fmt->min.samplerate * wav_fmt->min.blockalign ; - if (wav_fmt->min.bytespersec != (unsigned) bytespersec) - psf_log_printf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ; - else - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->min.bytespersec) ; - - psf->bytewidth = BITWIDTH2BYTES (wav_fmt->min.bitwidth) ; - break ; - - case WAVE_FORMAT_ALAW : - case WAVE_FORMAT_MULAW : - if (wav_fmt->min.bytespersec / wav_fmt->min.blockalign != wav_fmt->min.samplerate) - psf_log_printf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->min.bytespersec, wav_fmt->min.samplerate * wav_fmt->min.blockalign) ; - else - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->min.bytespersec) ; - - psf->bytewidth = 1 ; - if (structsize >= 18) - { bytesread += psf_binheader_readf (psf, "2", &(wav_fmt->size20.extrabytes)) ; - psf_log_printf (psf, " Extra Bytes : %d\n", wav_fmt->size20.extrabytes) ; - } ; - break ; - - case WAVE_FORMAT_IMA_ADPCM : - if (wav_fmt->min.bitwidth != 4) - return SFE_WAV_ADPCM_NOT4BIT ; - if (wav_fmt->min.channels < 1 || wav_fmt->min.channels > 2) - return SFE_WAV_ADPCM_CHANNELS ; - - bytesread += - psf_binheader_readf (psf, "22", &(wav_fmt->ima.extrabytes), &(wav_fmt->ima.samplesperblock)) ; - - bytespersec = (wav_fmt->ima.samplerate * wav_fmt->ima.blockalign) / wav_fmt->ima.samplesperblock ; - if (wav_fmt->ima.bytespersec != (unsigned) bytespersec) - psf_log_printf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->ima.bytespersec, bytespersec) ; - else - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->ima.bytespersec) ; - - psf->bytewidth = 2 ; - psf_log_printf (psf, " Extra Bytes : %d\n", wav_fmt->ima.extrabytes) ; - psf_log_printf (psf, " Samples/Block : %d\n", wav_fmt->ima.samplesperblock) ; - break ; - - case WAVE_FORMAT_MS_ADPCM : - if (wav_fmt->msadpcm.bitwidth != 4) - return SFE_WAV_ADPCM_NOT4BIT ; - if (wav_fmt->msadpcm.channels < 1 || wav_fmt->msadpcm.channels > 2) - return SFE_WAV_ADPCM_CHANNELS ; - - bytesread += - psf_binheader_readf (psf, "222", &(wav_fmt->msadpcm.extrabytes), - &(wav_fmt->msadpcm.samplesperblock), &(wav_fmt->msadpcm.numcoeffs)) ; - - bytespersec = (wav_fmt->min.samplerate * wav_fmt->min.blockalign) / wav_fmt->msadpcm.samplesperblock ; - if (wav_fmt->min.bytespersec == (unsigned) bytespersec) - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->min.bytespersec) ; - else if (wav_fmt->min.bytespersec == (wav_fmt->min.samplerate / wav_fmt->msadpcm.samplesperblock) * wav_fmt->min.blockalign) - psf_log_printf (psf, " Bytes/sec : %d (should be %d (MS BUG!))\n", wav_fmt->min.bytespersec, bytespersec) ; - else - psf_log_printf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ; - - - psf->bytewidth = 2 ; - psf_log_printf (psf, " Extra Bytes : %d\n", wav_fmt->msadpcm.extrabytes) ; - psf_log_printf (psf, " Samples/Block : %d\n", wav_fmt->msadpcm.samplesperblock) ; - if (wav_fmt->msadpcm.numcoeffs > SIGNED_SIZEOF (MS_ADPCM_WAV_FMT) / SIGNED_SIZEOF (int)) - { psf_log_printf (psf, " No. of Coeffs : %d ****\n", wav_fmt->msadpcm.numcoeffs) ; - wav_fmt->msadpcm.numcoeffs = SIGNED_SIZEOF (MS_ADPCM_WAV_FMT) / SIGNED_SIZEOF (int) ; - } - else - psf_log_printf (psf, " No. of Coeffs : %d\n", wav_fmt->msadpcm.numcoeffs) ; - - psf_log_printf (psf, " Index Coeffs1 Coeffs2\n") ; - for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++) - { bytesread += - psf_binheader_readf (psf, "22", &(wav_fmt->msadpcm.coeffs [k].coeff1), &(wav_fmt->msadpcm.coeffs [k].coeff2)) ; - LSF_SNPRINTF (psf->u.cbuf, sizeof (psf->u.cbuf), " %2d %7d %7d\n", k, wav_fmt->msadpcm.coeffs [k].coeff1, wav_fmt->msadpcm.coeffs [k].coeff2) ; - psf_log_printf (psf, psf->u.cbuf) ; - } ; - break ; - - case WAVE_FORMAT_GSM610 : - if (wav_fmt->gsm610.channels != 1 || wav_fmt->gsm610.blockalign != 65) - return SFE_WAV_GSM610_FORMAT ; - - bytesread += - psf_binheader_readf (psf, "22", &(wav_fmt->gsm610.extrabytes), &(wav_fmt->gsm610.samplesperblock)) ; - - if (wav_fmt->gsm610.samplesperblock != 320) - return SFE_WAV_GSM610_FORMAT ; - - bytespersec = (wav_fmt->gsm610.samplerate * wav_fmt->gsm610.blockalign) / wav_fmt->gsm610.samplesperblock ; - if (wav_fmt->gsm610.bytespersec != (unsigned) bytespersec) - psf_log_printf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->gsm610.bytespersec, bytespersec) ; - else - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->gsm610.bytespersec) ; - - psf->bytewidth = 2 ; - psf_log_printf (psf, " Extra Bytes : %d\n", wav_fmt->gsm610.extrabytes) ; - psf_log_printf (psf, " Samples/Block : %d\n", wav_fmt->gsm610.samplesperblock) ; - break ; - - case WAVE_FORMAT_EXTENSIBLE : - if (wav_fmt->ext.bytespersec / wav_fmt->ext.blockalign != wav_fmt->ext.samplerate) - psf_log_printf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->ext.bytespersec, wav_fmt->ext.samplerate * wav_fmt->ext.blockalign) ; - else - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->ext.bytespersec) ; - - bytesread += - psf_binheader_readf (psf, "224", &(wav_fmt->ext.extrabytes), &(wav_fmt->ext.validbits), - &(wav_fmt->ext.channelmask)) ; - - psf_log_printf (psf, " Valid Bits : %d\n", wav_fmt->ext.validbits) ; - psf_log_printf (psf, " Channel Mask : 0x%X\n", wav_fmt->ext.channelmask) ; - - bytesread += - psf_binheader_readf (psf, "422", &(wav_fmt->ext.esf.esf_field1), &(wav_fmt->ext.esf.esf_field2), - &(wav_fmt->ext.esf.esf_field3)) ; - - /* compare the esf_fields with each known GUID? and print? */ - psf_log_printf (psf, " Subformat\n") ; - psf_log_printf (psf, " esf_field1 : 0x%X\n", wav_fmt->ext.esf.esf_field1) ; - psf_log_printf (psf, " esf_field2 : 0x%X\n", wav_fmt->ext.esf.esf_field2) ; - psf_log_printf (psf, " esf_field3 : 0x%X\n", wav_fmt->ext.esf.esf_field3) ; - psf_log_printf (psf, " esf_field4 : ") ; - for (k = 0 ; k < 8 ; k++) - { bytesread += psf_binheader_readf (psf, "1", &(wav_fmt->ext.esf.esf_field4 [k])) ; - psf_log_printf (psf, "0x%X ", wav_fmt->ext.esf.esf_field4 [k] & 0xFF) ; - } ; - psf_log_printf (psf, "\n") ; - psf->bytewidth = BITWIDTH2BYTES (wav_fmt->ext.bitwidth) ; - - /* Compare GUIDs for known ones. */ - if (wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_PCM) - || wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM)) - { psf->sf.format = SF_FORMAT_WAVEX | u_bitwidth_to_subformat (psf->bytewidth * 8) ; - psf_log_printf (psf, " format : pcm\n") ; - } - else if (wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_MS_ADPCM)) - { psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM) ; - psf_log_printf (psf, " format : ms adpcm\n") ; - } - else if (wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_IEEE_FLOAT) - || wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM)) - { psf->sf.format = SF_FORMAT_WAVEX | ((psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT) ; - psf_log_printf (psf, " format : IEEE float\n") ; - } - else if (wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_ALAW)) - { psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_ALAW) ; - psf_log_printf (psf, " format : A-law\n") ; - } - else if (wavex_write_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_MULAW)) - { psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_ULAW) ; - psf_log_printf (psf, " format : u-law\n") ; - } - else - return SFE_UNIMPLEMENTED ; - break ; - - case WAVE_FORMAT_G721_ADPCM : - psf_log_printf (psf, " Bytes/sec : %d\n", wav_fmt->g72x.bytespersec) ; - if (structsize >= 20) - { bytesread += psf_binheader_readf (psf, "22", &(wav_fmt->g72x.extrabytes), &(wav_fmt->g72x.auxblocksize)) ; - if (wav_fmt->g72x.extrabytes == 0) - psf_log_printf (psf, " Extra Bytes : %d (should be 2)\n", wav_fmt->g72x.extrabytes) ; - else - psf_log_printf (psf, " Extra Bytes : %d\n", wav_fmt->g72x.extrabytes) ; - psf_log_printf (psf, " Aux Blk Size : %d\n", wav_fmt->g72x.auxblocksize) ; - } - else if (structsize == 18) - { bytesread += psf_binheader_readf (psf, "2", &(wav_fmt->g72x.extrabytes)) ; - psf_log_printf (psf, " Extra Bytes : %d%s\n", wav_fmt->g72x.extrabytes, wav_fmt->g72x.extrabytes != 0 ? " (should be 0)" : "") ; - } - else - psf_log_printf (psf, "*** 'fmt ' chunk should be bigger than this!\n") ; - break ; - - default : - psf_log_printf (psf, "*** No 'fmt ' chunk dumper for this format!\n") ; - break ; - } ; - - if (bytesread > structsize) - { psf_log_printf (psf, "*** wav_w64_read_fmt_chunk (bytesread > structsize)\n") ; - return SFE_W64_FMT_SHORT ; - } - else - psf_binheader_readf (psf, "j", structsize - bytesread) ; - - psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ; - - return 0 ; -} /* wav_w64_read_fmt_chunk */ - -void -wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat) -{ - psf_binheader_writef (psf, "422b", subformat->esf_field1, - subformat->esf_field2, subformat->esf_field3, - subformat->esf_field4, 8) ; -} /* wavex_write_guid */ - - -/*============================================================================== -*/ - -typedef struct -{ int ID ; - const char *name ; -} WAV_FORMAT_DESC ; - -#define STR(x) #x -#define FORMAT_TYPE(x) { x, STR (x) } - -static WAV_FORMAT_DESC wave_descs [] = -{ FORMAT_TYPE (WAVE_FORMAT_PCM), - FORMAT_TYPE (WAVE_FORMAT_MS_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_IEEE_FLOAT), - FORMAT_TYPE (WAVE_FORMAT_VSELP), - FORMAT_TYPE (WAVE_FORMAT_IBM_CVSD), - FORMAT_TYPE (WAVE_FORMAT_ALAW), - FORMAT_TYPE (WAVE_FORMAT_MULAW), - FORMAT_TYPE (WAVE_FORMAT_OKI_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_IMA_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_MEDIASPACE_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_SIERRA_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_G723_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_DIGISTD), - FORMAT_TYPE (WAVE_FORMAT_DIGIFIX), - FORMAT_TYPE (WAVE_FORMAT_DIALOGIC_OKI_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_MEDIAVISION_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_CU_CODEC), - FORMAT_TYPE (WAVE_FORMAT_YAMAHA_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_SONARC), - FORMAT_TYPE (WAVE_FORMAT_DSPGROUP_TRUESPEECH), - FORMAT_TYPE (WAVE_FORMAT_ECHOSC1), - FORMAT_TYPE (WAVE_FORMAT_AUDIOFILE_AF36), - FORMAT_TYPE (WAVE_FORMAT_APTX), - FORMAT_TYPE (WAVE_FORMAT_AUDIOFILE_AF10), - FORMAT_TYPE (WAVE_FORMAT_PROSODY_1612), - FORMAT_TYPE (WAVE_FORMAT_LRC), - FORMAT_TYPE (WAVE_FORMAT_DOLBY_AC2), - FORMAT_TYPE (WAVE_FORMAT_GSM610), - FORMAT_TYPE (WAVE_FORMAT_MSNAUDIO), - FORMAT_TYPE (WAVE_FORMAT_ANTEX_ADPCME), - FORMAT_TYPE (WAVE_FORMAT_CONTROL_RES_VQLPC), - FORMAT_TYPE (WAVE_FORMAT_DIGIREAL), - FORMAT_TYPE (WAVE_FORMAT_DIGIADPCM), - FORMAT_TYPE (WAVE_FORMAT_CONTROL_RES_CR10), - FORMAT_TYPE (WAVE_FORMAT_NMS_VBXADPCM), - FORMAT_TYPE (WAVE_FORMAT_ROLAND_RDAC), - FORMAT_TYPE (WAVE_FORMAT_ECHOSC3), - FORMAT_TYPE (WAVE_FORMAT_ROCKWELL_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_ROCKWELL_DIGITALK), - FORMAT_TYPE (WAVE_FORMAT_XEBEC), - FORMAT_TYPE (WAVE_FORMAT_G721_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_G728_CELP), - FORMAT_TYPE (WAVE_FORMAT_MSG723), - FORMAT_TYPE (WAVE_FORMAT_MPEG), - FORMAT_TYPE (WAVE_FORMAT_RT24), - FORMAT_TYPE (WAVE_FORMAT_PAC), - FORMAT_TYPE (WAVE_FORMAT_MPEGLAYER3), - FORMAT_TYPE (WAVE_FORMAT_LUCENT_G723), - FORMAT_TYPE (WAVE_FORMAT_CIRRUS), - FORMAT_TYPE (WAVE_FORMAT_ESPCM), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE), - FORMAT_TYPE (WAVE_FORMAT_CANOPUS_ATRAC), - FORMAT_TYPE (WAVE_FORMAT_G726_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_G722_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_DSAT), - FORMAT_TYPE (WAVE_FORMAT_DSAT_DISPLAY), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_BYTE_ALIGNED), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC8), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC10), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC16), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC20), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT24), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT29), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT29HW), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_VR12), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_VR18), - FORMAT_TYPE (WAVE_FORMAT_VOXWARE_TQ40), - FORMAT_TYPE (WAVE_FORMAT_SOFTSOUND), - FORMAT_TYPE (WAVE_FORMAT_VOXARE_TQ60), - FORMAT_TYPE (WAVE_FORMAT_MSRT24), - FORMAT_TYPE (WAVE_FORMAT_G729A), - FORMAT_TYPE (WAVE_FORMAT_MVI_MV12), - FORMAT_TYPE (WAVE_FORMAT_DF_G726), - FORMAT_TYPE (WAVE_FORMAT_DF_GSM610), - FORMAT_TYPE (WAVE_FORMAT_ONLIVE), - FORMAT_TYPE (WAVE_FORMAT_SBC24), - FORMAT_TYPE (WAVE_FORMAT_DOLBY_AC3_SPDIF), - FORMAT_TYPE (WAVE_FORMAT_ZYXEL_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_PHILIPS_LPCBB), - FORMAT_TYPE (WAVE_FORMAT_PACKED), - FORMAT_TYPE (WAVE_FORMAT_RHETOREX_ADPCM), - FORMAT_TYPE (IBM_FORMAT_MULAW), - FORMAT_TYPE (IBM_FORMAT_ALAW), - FORMAT_TYPE (IBM_FORMAT_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_VIVO_G723), - FORMAT_TYPE (WAVE_FORMAT_VIVO_SIREN), - FORMAT_TYPE (WAVE_FORMAT_DIGITAL_G723), - FORMAT_TYPE (WAVE_FORMAT_CREATIVE_ADPCM), - FORMAT_TYPE (WAVE_FORMAT_CREATIVE_FASTSPEECH8), - FORMAT_TYPE (WAVE_FORMAT_CREATIVE_FASTSPEECH10), - FORMAT_TYPE (WAVE_FORMAT_QUARTERDECK), - FORMAT_TYPE (WAVE_FORMAT_FM_TOWNS_SND), - FORMAT_TYPE (WAVE_FORMAT_BZV_DIGITAL), - FORMAT_TYPE (WAVE_FORMAT_VME_VMPCM), - FORMAT_TYPE (WAVE_FORMAT_OLIGSM), - FORMAT_TYPE (WAVE_FORMAT_OLIADPCM), - FORMAT_TYPE (WAVE_FORMAT_OLICELP), - FORMAT_TYPE (WAVE_FORMAT_OLISBC), - FORMAT_TYPE (WAVE_FORMAT_OLIOPR), - FORMAT_TYPE (WAVE_FORMAT_LH_CODEC), - FORMAT_TYPE (WAVE_FORMAT_NORRIS), - FORMAT_TYPE (WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS), - FORMAT_TYPE (WAVE_FORMAT_DVM), - FORMAT_TYPE (WAVE_FORMAT_INTERWAV_VSC112), - FORMAT_TYPE (WAVE_FORMAT_EXTENSIBLE), -} ; - -char const* -wav_w64_format_str (int k) -{ int lower, upper, mid ; - - lower = -1 ; - upper = sizeof (wave_descs) / sizeof (WAV_FORMAT_DESC) ; - - /* binary search */ - if ((wave_descs [0].ID <= k) & (k <= wave_descs [upper - 1].ID)) - { - while (lower + 1 < upper) - { mid = (upper + lower) / 2 ; - - if (k == wave_descs [mid].ID) - return wave_descs [mid].name ; - if (k < wave_descs [mid].ID) - upper = mid ; - else - lower = mid ; - } ; - } ; - - return "Unknown format" ; -} /* wav_w64_format_str */ - -int -wav_w64_srate2blocksize (int srate_chan_product) -{ if (srate_chan_product < 12000) - return 256 ; - if (srate_chan_product < 23000) - return 512 ; - if (srate_chan_product < 44000) - return 1024 ; - return 2048 ; -} /* srate2blocksize */ -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 43c1b1dd-8abd-43da-a8cd-44da914b64a5 -*/ diff --git a/Libraries/SndFile/Files/src/wav_w64.h b/Libraries/SndFile/Files/src/wav_w64.h deleted file mode 100644 index 3f33f1b80..000000000 --- a/Libraries/SndFile/Files/src/wav_w64.h +++ /dev/null @@ -1,283 +0,0 @@ -/* -** Copyright (C) 1999-2005 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* This file contains definitions commong to WAV and W64 files. */ - - -#ifndef WAV_W64_H_INCLUDED -#define WAV_W64_H_INCLUDED - -/*------------------------------------------------------------------------------ -** List of known WAV format tags -*/ - -enum -{ - /* keep sorted for wav_w64_format_str() */ - WAVE_FORMAT_UNKNOWN = 0x0000, /* Microsoft Corporation */ - WAVE_FORMAT_PCM = 0x0001, /* Microsoft PCM format */ - WAVE_FORMAT_MS_ADPCM = 0x0002, /* Microsoft ADPCM */ - WAVE_FORMAT_IEEE_FLOAT = 0x0003, /* Micrososft 32 bit float format */ - WAVE_FORMAT_VSELP = 0x0004, /* Compaq Computer Corporation */ - WAVE_FORMAT_IBM_CVSD = 0x0005, /* IBM Corporation */ - WAVE_FORMAT_ALAW = 0x0006, /* Microsoft Corporation */ - WAVE_FORMAT_MULAW = 0x0007, /* Microsoft Corporation */ - WAVE_FORMAT_OKI_ADPCM = 0x0010, /* OKI */ - WAVE_FORMAT_IMA_ADPCM = 0x0011, /* Intel Corporation */ - WAVE_FORMAT_MEDIASPACE_ADPCM = 0x0012, /* Videologic */ - WAVE_FORMAT_SIERRA_ADPCM = 0x0013, /* Sierra Semiconductor Corp */ - WAVE_FORMAT_G723_ADPCM = 0x0014, /* Antex Electronics Corporation */ - WAVE_FORMAT_DIGISTD = 0x0015, /* DSP Solutions, Inc. */ - WAVE_FORMAT_DIGIFIX = 0x0016, /* DSP Solutions, Inc. */ - WAVE_FORMAT_DIALOGIC_OKI_ADPCM = 0x0017, /* Dialogic Corporation */ - WAVE_FORMAT_MEDIAVISION_ADPCM = 0x0018, /* Media Vision, Inc. */ - WAVE_FORMAT_CU_CODEC = 0x0019, /* Hewlett-Packard Company */ - WAVE_FORMAT_YAMAHA_ADPCM = 0x0020, /* Yamaha Corporation of America */ - WAVE_FORMAT_SONARC = 0x0021, /* Speech Compression */ - WAVE_FORMAT_DSPGROUP_TRUESPEECH = 0x0022, /* DSP Group, Inc */ - WAVE_FORMAT_ECHOSC1 = 0x0023, /* Echo Speech Corporation */ - WAVE_FORMAT_AUDIOFILE_AF36 = 0x0024, /* Audiofile, Inc. */ - WAVE_FORMAT_APTX = 0x0025, /* Audio Processing Technology */ - WAVE_FORMAT_AUDIOFILE_AF10 = 0x0026, /* Audiofile, Inc. */ - WAVE_FORMAT_PROSODY_1612 = 0x0027, /* Aculab plc */ - WAVE_FORMAT_LRC = 0x0028, /* Merging Technologies S.A. */ - WAVE_FORMAT_DOLBY_AC2 = 0x0030, /* Dolby Laboratories */ - WAVE_FORMAT_GSM610 = 0x0031, /* Microsoft Corporation */ - WAVE_FORMAT_MSNAUDIO = 0x0032, /* Microsoft Corporation */ - WAVE_FORMAT_ANTEX_ADPCME = 0x0033, /* Antex Electronics Corporation */ - WAVE_FORMAT_CONTROL_RES_VQLPC = 0x0034, /* Control Resources Limited */ - WAVE_FORMAT_DIGIREAL = 0x0035, /* DSP Solutions, Inc. */ - WAVE_FORMAT_DIGIADPCM = 0x0036, /* DSP Solutions, Inc. */ - WAVE_FORMAT_CONTROL_RES_CR10 = 0x0037, /* Control Resources Limited */ - WAVE_FORMAT_NMS_VBXADPCM = 0x0038, /* Natural MicroSystems */ - WAVE_FORMAT_ROLAND_RDAC = 0x0039, /* Roland */ - WAVE_FORMAT_ECHOSC3 = 0x003A, /* Echo Speech Corporation */ - WAVE_FORMAT_ROCKWELL_ADPCM = 0x003B, /* Rockwell International */ - WAVE_FORMAT_ROCKWELL_DIGITALK = 0x003C, /* Rockwell International */ - WAVE_FORMAT_XEBEC = 0x003D, /* Xebec Multimedia Solutions Limited */ - WAVE_FORMAT_G721_ADPCM = 0x0040, /* Antex Electronics Corporation */ - WAVE_FORMAT_G728_CELP = 0x0041, /* Antex Electronics Corporation */ - WAVE_FORMAT_MSG723 = 0x0042, /* Microsoft Corporation */ - WAVE_FORMAT_MPEG = 0x0050, /* Microsoft Corporation */ - WAVE_FORMAT_RT24 = 0x0052, /* InSoft Inc. */ - WAVE_FORMAT_PAC = 0x0053, /* InSoft Inc. */ - WAVE_FORMAT_MPEGLAYER3 = 0x0055, /* MPEG 3 Layer 1 */ - WAVE_FORMAT_LUCENT_G723 = 0x0059, /* Lucent Technologies */ - WAVE_FORMAT_CIRRUS = 0x0060, /* Cirrus Logic */ - WAVE_FORMAT_ESPCM = 0x0061, /* ESS Technology */ - WAVE_FORMAT_VOXWARE = 0x0062, /* Voxware Inc */ - WAVE_FORMAT_CANOPUS_ATRAC = 0x0063, /* Canopus, Co., Ltd. */ - WAVE_FORMAT_G726_ADPCM = 0x0064, /* APICOM */ - WAVE_FORMAT_G722_ADPCM = 0x0065, /* APICOM */ - WAVE_FORMAT_DSAT = 0x0066, /* Microsoft Corporation */ - WAVE_FORMAT_DSAT_DISPLAY = 0x0067, /* Microsoft Corporation */ - WAVE_FORMAT_VOXWARE_BYTE_ALIGNED = 0x0069, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_AC8 = 0x0070, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_AC10 = 0x0071, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_AC16 = 0x0072, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_AC20 = 0x0073, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_RT24 = 0x0074, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_RT29 = 0x0075, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_RT29HW = 0x0076, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_VR12 = 0x0077, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_VR18 = 0x0078, /* Voxware Inc. */ - WAVE_FORMAT_VOXWARE_TQ40 = 0x0079, /* Voxware Inc. */ - WAVE_FORMAT_SOFTSOUND = 0x0080, /* Softsound, Ltd. */ - WAVE_FORMAT_VOXARE_TQ60 = 0x0081, /* Voxware Inc. */ - WAVE_FORMAT_MSRT24 = 0x0082, /* Microsoft Corporation */ - WAVE_FORMAT_G729A = 0x0083, /* AT&T Laboratories */ - WAVE_FORMAT_MVI_MV12 = 0x0084, /* Motion Pixels */ - WAVE_FORMAT_DF_G726 = 0x0085, /* DataFusion Systems (Pty) (Ltd) */ - WAVE_FORMAT_DF_GSM610 = 0x0086, /* DataFusion Systems (Pty) (Ltd) */ - /* removed because duplicate */ - /* WAVE_FORMAT_ISIAUDIO = 0x0088, */ /* Iterated Systems, Inc. */ - WAVE_FORMAT_ONLIVE = 0x0089, /* OnLive! Technologies, Inc. */ - WAVE_FORMAT_SBC24 = 0x0091, /* Siemens Business Communications Systems */ - WAVE_FORMAT_DOLBY_AC3_SPDIF = 0x0092, /* Sonic Foundry */ - WAVE_FORMAT_ZYXEL_ADPCM = 0x0097, /* ZyXEL Communications, Inc. */ - WAVE_FORMAT_PHILIPS_LPCBB = 0x0098, /* Philips Speech Processing */ - WAVE_FORMAT_PACKED = 0x0099, /* Studer Professional Audio AG */ - WAVE_FORMAT_RHETOREX_ADPCM = 0x0100, /* Rhetorex, Inc. */ - - /* removed because of the following */ - /* WAVE_FORMAT_IRAT = 0x0101,*/ /* BeCubed Software Inc. */ - - /* these three are unofficial */ - IBM_FORMAT_MULAW = 0x0101, /* IBM mu-law format */ - IBM_FORMAT_ALAW = 0x0102, /* IBM a-law format */ - IBM_FORMAT_ADPCM = 0x0103, /* IBM AVC Adaptive Differential PCM format */ - - WAVE_FORMAT_VIVO_G723 = 0x0111, /* Vivo Software */ - WAVE_FORMAT_VIVO_SIREN = 0x0112, /* Vivo Software */ - WAVE_FORMAT_DIGITAL_G723 = 0x0123, /* Digital Equipment Corporation */ - WAVE_FORMAT_CREATIVE_ADPCM = 0x0200, /* Creative Labs, Inc */ - WAVE_FORMAT_CREATIVE_FASTSPEECH8 = 0x0202, /* Creative Labs, Inc */ - WAVE_FORMAT_CREATIVE_FASTSPEECH10 = 0x0203, /* Creative Labs, Inc */ - WAVE_FORMAT_QUARTERDECK = 0x0220, /* Quarterdeck Corporation */ - WAVE_FORMAT_FM_TOWNS_SND = 0x0300, /* Fujitsu Corporation */ - WAVE_FORMAT_BZV_DIGITAL = 0x0400, /* Brooktree Corporation */ - WAVE_FORMAT_VME_VMPCM = 0x0680, /* AT&T Labs, Inc. */ - WAVE_FORMAT_OLIGSM = 0x1000, /* Ing C. Olivetti & C., S.p.A. */ - WAVE_FORMAT_OLIADPCM = 0x1001, /* Ing C. Olivetti & C., S.p.A. */ - WAVE_FORMAT_OLICELP = 0x1002, /* Ing C. Olivetti & C., S.p.A. */ - WAVE_FORMAT_OLISBC = 0x1003, /* Ing C. Olivetti & C., S.p.A. */ - WAVE_FORMAT_OLIOPR = 0x1004, /* Ing C. Olivetti & C., S.p.A. */ - WAVE_FORMAT_LH_CODEC = 0x1100, /* Lernout & Hauspie */ - WAVE_FORMAT_NORRIS = 0x1400, /* Norris Communications, Inc. */ - /* removed because duplicate */ - /* WAVE_FORMAT_ISIAUDIO = 0x1401, */ /* AT&T Labs, Inc. */ - WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS = 0x1500, /* AT&T Labs, Inc. */ - WAVE_FORMAT_DVM = 0x2000, /* FAST Multimedia AG */ - WAVE_FORMAT_INTERWAV_VSC112 = 0x7150, /* ????? */ - WAVE_FORMAT_EXTENSIBLE = 0xFFFE -} ; - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; -} MIN_WAV_FMT ; - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; - unsigned short extrabytes ; - unsigned short dummy ; -} WAV_FMT_SIZE20 ; - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; - unsigned short extrabytes ; - unsigned short samplesperblock ; - unsigned short numcoeffs ; - struct - { short coeff1 ; - short coeff2 ; - } coeffs [7] ; -} MS_ADPCM_WAV_FMT ; - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; - unsigned short extrabytes ; - unsigned short samplesperblock ; -} IMA_ADPCM_WAV_FMT ; - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; - unsigned short extrabytes ; - unsigned short auxblocksize ; -} G72x_ADPCM_WAV_FMT ; - - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; - unsigned short extrabytes ; - unsigned short samplesperblock ; -} GSM610_WAV_FMT ; - -typedef struct -{ unsigned int esf_field1 ; - unsigned short esf_field2 ; - unsigned short esf_field3 ; - char esf_field4 [8] ; -} EXT_SUBFORMAT ; - -typedef struct -{ unsigned short format ; - unsigned short channels ; - unsigned int samplerate ; - unsigned int bytespersec ; - unsigned short blockalign ; - unsigned short bitwidth ; - unsigned short extrabytes ; - unsigned short validbits ; - unsigned int channelmask ; - EXT_SUBFORMAT esf ; -} EXTENSIBLE_WAV_FMT ; - -typedef union -{ unsigned short format ; - MIN_WAV_FMT min ; - IMA_ADPCM_WAV_FMT ima ; - MS_ADPCM_WAV_FMT msadpcm ; - G72x_ADPCM_WAV_FMT g72x ; - EXTENSIBLE_WAV_FMT ext ; - GSM610_WAV_FMT gsm610 ; - WAV_FMT_SIZE20 size20 ; - char padding [512] ; -} WAV_FMT ; - -typedef struct -{ int frames ; -} FACT_CHUNK ; - -#define WAV_W64_GSM610_BLOCKSIZE 65 -#define WAV_W64_GSM610_SAMPLES 320 - -/*------------------------------------------------------------------------------------ -** Functions defined in wav_ms_adpcm.c -*/ - -#define MSADPCM_ADAPT_COEFF_COUNT 7 - -void msadpcm_write_adapt_coeffs (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------------ -** Functions defined in wav_w64.c -*/ - -int wav_w64_srate2blocksize (int srate_chan_product) ; -char const* wav_w64_format_str (int k) ; -int wav_w64_read_fmt_chunk (SF_PRIVATE *psf, WAV_FMT *wav_fmt, int structsize) ; -void wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat) ; - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 877fde12-9be3-4a31-8a5a-fdae39958613 -*/ diff --git a/Libraries/SndFile/Files/src/wve.c b/Libraries/SndFile/Files/src/wve.c deleted file mode 100644 index 54a08336c..000000000 --- a/Libraries/SndFile/Files/src/wve.c +++ /dev/null @@ -1,125 +0,0 @@ -/* -** Copyright (C) 2002-2004 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" - -#if (ENABLE_EXPERIMENTAL_CODE == 0) - -int -wve_open (SF_PRIVATE *psf) -{ if (psf) - return SFE_UNIMPLEMENTED ; - return (psf && 0) ; -} /* wve_open */ - -#else - -#define SFE_WVE_NOT_WVE 666 - -/*------------------------------------------------------------------------------ -** Macros to handle big/little endian issues. -*/ - -#define ALAW_MARKER MAKE_MARKER ('A', 'L', 'a', 'w') -#define SOUN_MARKER MAKE_MARKER ('S', 'o', 'u', 'n') -#define DFIL_MARKER MAKE_MARKER ('d', 'F', 'i', 'l') - -/*------------------------------------------------------------------------------ -** Private static functions. -*/ - -static int wve_read_header (SF_PRIVATE *psf) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -wve_open (SF_PRIVATE *psf) -{ int subformat, error = 0 ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - return SFE_UNIMPLEMENTED ; - - if ((error = wve_read_header (psf))) - return error ; - - if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_WVE) - return SFE_BAD_OPEN_FORMAT ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - return error ; -} /* wve_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -wve_read_header (SF_PRIVATE *psf) -{ int marker ; - - /* Set position to start of file to begin reading header. */ - psf_binheader_readf (psf, "pm", 0, &marker) ; - if (marker != ALAW_MARKER) - return SFE_WVE_NOT_WVE ; - - psf_binheader_readf (psf, "m", &marker) ; - if (marker != SOUN_MARKER) - return SFE_WVE_NOT_WVE ; - - psf_binheader_readf (psf, "m", &marker) ; - if (marker != DFIL_MARKER) - return SFE_WVE_NOT_WVE ; - - psf_log_printf (psf, "Read only : Psion Palmtop Alaw (.wve)\n" - " Sample Rate : 8000\n" - " Channels : 1\n" - " Encoding : A-law\n") ; - - psf->dataoffset = 0x20 ; - psf->datalength = psf->filelength - psf->dataoffset ; - - psf->sf.format = SF_FORMAT_WVE | SF_FORMAT_ALAW ; - psf->sf.samplerate = 8000 ; - psf->sf.frames = psf->datalength ; - psf->sf.channels = 1 ; - - return alaw_init (psf) ; -} /* wve_read_header */ - -/*------------------------------------------------------------------------------ -*/ - -#endif -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: ba368cb5-523f-45e4-98c1-5b99a102f73f -*/ diff --git a/Libraries/SndFile/Files/src/xi.c b/Libraries/SndFile/Files/src/xi.c deleted file mode 100644 index dcd8120b1..000000000 --- a/Libraries/SndFile/Files/src/xi.c +++ /dev/null @@ -1,1204 +0,0 @@ -/* -** Copyright (C) 2003-2006 Erik de Castro Lopo -** -** This program 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 program 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 program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "sfconfig.h" - -#include -#include -#include -#include -#include - -#include "sndfile.h" -#include "sfendian.h" -#include "common.h" -#include "float_cast.h" - -#define MAX_XI_SAMPLES 16 - -/*------------------------------------------------------------------------------ -** Private static functions and tyepdefs. -*/ - -typedef struct -{ /* Warning, this filename is NOT nul terminated. */ - char filename [22] ; - char software [20] ; - char sample_name [22] ; - - int loop_begin, loop_end ; - int sample_flags ; - - /* Data for encoder and decoder. */ - short last_16 ; -} XI_PRIVATE ; - -static int xi_close (SF_PRIVATE *psf) ; -static int xi_write_header (SF_PRIVATE *psf, int calc_length) ; -static int xi_read_header (SF_PRIVATE *psf) ; -static int dpcm_init (SF_PRIVATE *psf) ; - - -static sf_count_t dpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ; - -/*------------------------------------------------------------------------------ -** Public function. -*/ - -int -xi_open (SF_PRIVATE *psf) -{ XI_PRIVATE *pxi ; - int subformat, error = 0 ; - - if (psf->is_pipe) - return SFE_XI_NO_PIPE ; - - if (psf->fdata) - pxi = psf->fdata ; - else if ((pxi = calloc (1, sizeof (XI_PRIVATE))) == NULL) - return SFE_MALLOC_FAILED ; - - psf->fdata = pxi ; - - if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0)) - { if ((error = xi_read_header (psf))) - return error ; - } ; - - subformat = psf->sf.format & SF_FORMAT_SUBMASK ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_XI) - return SFE_BAD_OPEN_FORMAT ; - - psf->endian = SF_ENDIAN_LITTLE ; - psf->sf.channels = 1 ; /* Always mono */ - psf->sf.samplerate = 44100 ; /* Always */ - - /* Set up default instrument and software name. */ - memcpy (pxi->filename, "Default Name ", sizeof (pxi->filename)) ; - memcpy (pxi->software, PACKAGE "-" VERSION " ", sizeof (pxi->software)) ; - - memset (pxi->sample_name, 0, sizeof (pxi->sample_name)) ; - LSF_SNPRINTF (pxi->sample_name, sizeof (pxi->sample_name), "%s", "Sample #1") ; - - pxi->sample_flags = (subformat == SF_FORMAT_DPCM_16) ? 16 : 0 ; - - if (xi_write_header (psf, SF_FALSE)) - return psf->error ; - - psf->write_header = xi_write_header ; - } ; - - psf->container_close = xi_close ; - psf->seek = dpcm_seek ; - - psf->sf.seekable = SF_FALSE ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - switch (subformat) - { case SF_FORMAT_DPCM_8 : /* 8-bit differential PCM. */ - case SF_FORMAT_DPCM_16 : /* 16-bit differential PCM. */ - error = dpcm_init (psf) ; - break ; - - default : break ; - } ; - - return error ; -} /* xi_open */ - -/*------------------------------------------------------------------------------ -*/ - -static int -xi_close (SF_PRIVATE *psf) -{ - psf = psf ; - - return 0 ; -} /* xi_close */ - -/*============================================================================== -*/ - -static sf_count_t dpcm_read_dsc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t dpcm_read_dsc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t dpcm_read_dsc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t dpcm_read_dsc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t dpcm_write_s2dsc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t dpcm_write_i2dsc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t dpcm_write_f2dsc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t dpcm_write_d2dsc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static sf_count_t dpcm_read_dles2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ; -static sf_count_t dpcm_read_dles2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ; -static sf_count_t dpcm_read_dles2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ; -static sf_count_t dpcm_read_dles2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ; - -static sf_count_t dpcm_write_s2dles (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ; -static sf_count_t dpcm_write_i2dles (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ; -static sf_count_t dpcm_write_f2dles (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ; -static sf_count_t dpcm_write_d2dles (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ; - -static int -dpcm_init (SF_PRIVATE *psf) -{ if (psf->bytewidth == 0 || psf->sf.channels == 0) - return SFE_INTERNAL ; - - psf->blockwidth = psf->bytewidth * psf->sf.channels ; - - if (psf->mode == SFM_READ || psf->mode == SFM_RDWR) - { switch (psf->bytewidth) - { case 1 : - psf->read_short = dpcm_read_dsc2s ; - psf->read_int = dpcm_read_dsc2i ; - psf->read_float = dpcm_read_dsc2f ; - psf->read_double = dpcm_read_dsc2d ; - break ; - case 2 : - psf->read_short = dpcm_read_dles2s ; - psf->read_int = dpcm_read_dles2i ; - psf->read_float = dpcm_read_dles2f ; - psf->read_double = dpcm_read_dles2d ; - break ; - default : - psf_log_printf (psf, "dpcm_init() returning SFE_UNIMPLEMENTED\n") ; - return SFE_UNIMPLEMENTED ; - } ; - } ; - - if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR) - { switch (psf->bytewidth) - { case 1 : - psf->write_short = dpcm_write_s2dsc ; - psf->write_int = dpcm_write_i2dsc ; - psf->write_float = dpcm_write_f2dsc ; - psf->write_double = dpcm_write_d2dsc ; - break ; - case 2 : - psf->write_short = dpcm_write_s2dles ; - psf->write_int = dpcm_write_i2dles ; - psf->write_float = dpcm_write_f2dles ; - psf->write_double = dpcm_write_d2dles ; - break ; - default : - psf_log_printf (psf, "dpcm_init() returning SFE_UNIMPLEMENTED\n") ; - return SFE_UNIMPLEMENTED ; - } ; - } ; - - psf->filelength = psf_get_filelen (psf) ; - psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : - psf->filelength - psf->dataoffset ; - psf->sf.frames = psf->datalength / psf->blockwidth ; - - return 0 ; -} /* dpcm_init */ - -/*============================================================================== -*/ - -static sf_count_t -dpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) -{ XI_PRIVATE *pxi ; - int total, bufferlen, len ; - - if ((pxi = psf->fdata) == NULL) - return SFE_INTERNAL ; - - if (psf->datalength < 0 || psf->dataoffset < 0) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (offset == 0) - { psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - pxi->last_16 = 0 ; - return 0 ; - } ; - - if (offset < 0 || offset > psf->sf.frames) - { psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - if (mode != SFM_READ) - { /* What to do about write??? */ - psf->error = SFE_BAD_SEEK ; - return PSF_SEEK_ERROR ; - } ; - - psf_fseek (psf, psf->dataoffset, SEEK_SET) ; - - if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_DPCM_16) - { total = offset ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (total > 0) - { len = (total > bufferlen) ? bufferlen : total ; - total -= dpcm_read_dles2s (psf, psf->u.sbuf, len) ; - } ; - } - else - { total = offset ; - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - while (total > 0) - { len = (total > bufferlen) ? bufferlen : total ; - total -= dpcm_read_dsc2s (psf, psf->u.sbuf, len) ; - } ; - } ; - - return offset ; -} /* dpcm_seek */ - - -static int -xi_write_header (SF_PRIVATE *psf, int calc_length) -{ XI_PRIVATE *pxi ; - sf_count_t current ; - const char *string ; - - if ((pxi = psf->fdata) == NULL) - return SFE_INTERNAL ; - - calc_length = calc_length ; /* Avoid a compiler warning. */ - - current = psf_ftell (psf) ; - - /* Reset the current header length to zero. */ - psf->header [0] = 0 ; - psf->headindex = 0 ; - psf_fseek (psf, 0, SEEK_SET) ; - - string = "Extended Instrument: " ; - psf_binheader_writef (psf, "b", string, strlen (string)) ; - psf_binheader_writef (psf, "b1", pxi->filename, sizeof (pxi->filename), 0x1A) ; - - /* Write software version and two byte XI version. */ - psf_binheader_writef (psf, "eb2", pxi->software, sizeof (pxi->software), (1 << 8) + 2) ; - - /* - ** Jump note numbers (96), volume envelope (48), pan envelope (48), - ** volume points (1), pan points (1) - */ - psf_binheader_writef (psf, "z", (size_t) (96 + 48 + 48 + 1 + 1)) ; - - /* Jump volume loop (3 bytes), pan loop (3), envelope flags (3), vibrato (3) - ** fade out (2), 22 unknown bytes, and then write sample_count (2 bytes). - */ - psf_binheader_writef (psf, "ez2z2", (size_t) (4 * 3), 0x1234, make_size_t (22), 1) ; - - pxi->loop_begin = 0 ; - pxi->loop_end = 0 ; - - psf_binheader_writef (psf, "et844", psf->sf.frames, pxi->loop_begin, pxi->loop_end) ; - - /* volume, fine tune, flags, pan, note, namelen */ - psf_binheader_writef (psf, "111111", 128, 0, pxi->sample_flags, 128, 0, strlen (pxi->sample_name)) ; - - psf_binheader_writef (psf, "b", pxi->sample_name, sizeof (pxi->sample_name)) ; - - - - - - /* Header construction complete so write it out. */ - psf_fwrite (psf->header, psf->headindex, 1, psf) ; - - if (psf->error) - return psf->error ; - - psf->dataoffset = psf->headindex ; - - if (current > 0) - psf_fseek (psf, current, SEEK_SET) ; - - return psf->error ; -} /* xi_write_header */ - -static int -xi_read_header (SF_PRIVATE *psf) -{ char buffer [64], name [32] ; - short version, fade_out, sample_count ; - int k, loop_begin, loop_end ; - int sample_sizes [MAX_XI_SAMPLES] ; - - psf_binheader_readf (psf, "pb", 0, buffer, 21) ; - - memset (sample_sizes, 0, sizeof (sample_sizes)) ; - - buffer [20] = 0 ; - if (strcmp (buffer, "Extended Instrument:") != 0) - return SFE_XI_BAD_HEADER ; - - memset (buffer, 0, sizeof (buffer)) ; - psf_binheader_readf (psf, "b", buffer, 23) ; - - if (buffer [22] != 0x1A) - return SFE_XI_BAD_HEADER ; - - buffer [22] = 0 ; - psf_log_printf (psf, "Extended Instrument : %s\n", buffer) ; - - psf_binheader_readf (psf, "be2", buffer, 20, &version) ; - buffer [19] = 0 ; - psf_log_printf (psf, "Software : %s\nVersion : %d.%02d\n", buffer, version / 256, version % 256) ; - - /* Jump note numbers (96), volume envelope (48), pan envelope (48), - ** volume points (1), pan points (1) - */ - psf_binheader_readf (psf, "j", 96 + 48 + 48 + 1 + 1) ; - - psf_binheader_readf (psf, "b", buffer, 12) ; - psf_log_printf (psf, "Volume Loop\n sustain : %u\n begin : %u\n end : %u\n", - buffer [0], buffer [1], buffer [2]) ; - psf_log_printf (psf, "Pan Loop\n sustain : %u\n begin : %u\n end : %u\n", - buffer [3], buffer [4], buffer [5]) ; - psf_log_printf (psf, "Envelope Flags\n volume : 0x%X\n pan : 0x%X\n", - buffer [6] & 0xFF, buffer [7] & 0xFF) ; - - psf_log_printf (psf, "Vibrato\n type : %u\n sweep : %u\n depth : %u\n rate : %u\n", - buffer [8], buffer [9], buffer [10], buffer [11]) ; - - /* - ** Read fade_out then jump reserved (2 bytes) and ???? (20 bytes) and - ** sample_count. - */ - psf_binheader_readf (psf, "e2j2", &fade_out, 2 + 20, &sample_count) ; - psf_log_printf (psf, "Fade out : %d\n", fade_out) ; - - /* XI file can contain up to 16 samples. */ - if (sample_count > MAX_XI_SAMPLES) - return SFE_XI_EXCESS_SAMPLES ; - - if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL) - return SFE_MALLOC_FAILED ; - - /* Log all data for each sample. */ - for (k = 0 ; k < sample_count ; k++) - { psf_binheader_readf (psf, "e444", &(sample_sizes [k]), &loop_begin, &loop_end) ; - - /* Read 5 know bytes, 1 unknown byte and 22 name bytes. */ - psf_binheader_readf (psf, "bb", buffer, 6, name, 22) ; - name [21] = 0 ; - - psf_log_printf (psf, "Sample #%d\n name : %s\n", k + 1, name) ; - - psf_log_printf (psf, " size : %d\n", sample_sizes [k]) ; - - - - psf_log_printf (psf, " loop\n begin : %d\n end : %d\n", loop_begin, loop_end) ; - - psf_log_printf (psf, " volume : %u\n f. tune : %d\n flags : 0x%02X ", - buffer [0] & 0xFF, buffer [1] & 0xFF, buffer [2] & 0xFF) ; - - psf_log_printf (psf, " (") ; - if (buffer [2] & 1) - psf_log_printf (psf, " Loop") ; - if (buffer [2] & 2) - psf_log_printf (psf, " PingPong") ; - psf_log_printf (psf, (buffer [2] & 16) ? " 16bit" : " 8bit") ; - psf_log_printf (psf, " )\n") ; - - psf_log_printf (psf, " pan : %u\n note : %d\n namelen : %d\n", - buffer [3] & 0xFF, buffer [4], buffer [5]) ; - - if (k != 0) - continue ; - - if (buffer [2] & 16) - { psf->sf.format = SF_FORMAT_XI | SF_FORMAT_DPCM_16 ; - psf->bytewidth = 2 ; - } - else - { psf->sf.format = SF_FORMAT_XI | SF_FORMAT_DPCM_8 ; - psf->bytewidth = 1 ; - } ; - } ; - - while (sample_count > 1 && sample_sizes [sample_count - 1] == 0) - sample_count -- ; - - /* Currently, we can only handle 1 sample per file. */ - - if (sample_count > 2) - { psf_log_printf (psf, "*** Sample count is less than 16 but more than 1.\n") ; - psf_log_printf (psf, " sample count : %d sample_sizes [%d] : %d\n", - sample_count, sample_count - 1, sample_sizes [sample_count - 1]) ; - return SFE_XI_EXCESS_SAMPLES ; - } ; - - psf->dataoffset = psf_fseek (psf, 0, SEEK_CUR) ; - psf_log_printf (psf, "Data Offset : %D\n", psf->dataoffset) ; - - psf->datalength = sample_sizes [0] ; - - if (psf->dataoffset + psf->datalength > psf->filelength) - { psf_log_printf (psf, "*** File seems to be truncated. Should be at least %D bytes long.\n", - psf->dataoffset + sample_sizes [0]) ; - psf->datalength = psf->filelength - psf->dataoffset ; - } ; - - if (psf_fseek (psf, psf->dataoffset, SEEK_SET) != psf->dataoffset) - return SFE_BAD_SEEK ; - - psf->endian = SF_ENDIAN_LITTLE ; - psf->sf.channels = 1 ; /* Always mono */ - psf->sf.samplerate = 44100 ; /* Always */ - - psf->blockwidth = psf->sf.channels * psf->bytewidth ; - - if (! psf->sf.frames && psf->blockwidth) - psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ; - - psf->instrument->basenote = 0 ; - psf->instrument->gain = 1 ; - psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ; - psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ; - - return 0 ; -} /* xi_read_header */ - -/*============================================================================== -*/ - -static void dsc2s_array (XI_PRIVATE *pxi, signed char *src, int count, short *dest) ; -static void dsc2i_array (XI_PRIVATE *pxi, signed char *src, int count, int *dest) ; -static void dsc2f_array (XI_PRIVATE *pxi, signed char *src, int count, float *dest, float normfact) ; -static void dsc2d_array (XI_PRIVATE *pxi, signed char *src, int count, double *dest, double normfact) ; - -static void dles2s_array (XI_PRIVATE *pxi, short *src, int count, short *dest) ; -static void dles2i_array (XI_PRIVATE *pxi, short *src, int count, int *dest) ; -static void dles2f_array (XI_PRIVATE *pxi, short *src, int count, float *dest, float normfact) ; -static void dles2d_array (XI_PRIVATE *pxi, short *src, int count, double *dest, double normfact) ; - -static sf_count_t -dpcm_read_dsc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - dsc2s_array (pxi, psf->u.scbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dsc2s */ - -static sf_count_t -dpcm_read_dsc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - dsc2i_array (pxi, psf->u.scbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dsc2i */ - -static sf_count_t -dpcm_read_dsc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - dsc2f_array (pxi, psf->u.scbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dsc2f */ - -static sf_count_t -dpcm_read_dsc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - dsc2d_array (pxi, psf->u.scbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dsc2d */ - -/*------------------------------------------------------------------------------ -*/ - -static sf_count_t -dpcm_read_dles2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - dles2s_array (pxi, psf->u.sbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dles2s */ - -static sf_count_t -dpcm_read_dles2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - dles2i_array (pxi, psf->u.sbuf, readcount, ptr + total) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dles2i */ - -static sf_count_t -dpcm_read_dles2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - float normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - dles2f_array (pxi, psf->u.sbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dles2f */ - -static sf_count_t -dpcm_read_dles2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, readcount ; - sf_count_t total = 0 ; - double normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - readcount = psf_fread (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - dles2d_array (pxi, psf->u.sbuf, readcount, ptr + total, normfact) ; - total += readcount ; - if (readcount < bufferlen) - break ; - len -= readcount ; - } ; - - return total ; -} /* dpcm_read_dles2d */ - -/*============================================================================== -*/ - -static void s2dsc_array (XI_PRIVATE *pxi, const short *src, signed char *dest, int count) ; -static void i2dsc_array (XI_PRIVATE *pxi, const int *src, signed char *dest, int count) ; -static void f2dsc_array (XI_PRIVATE *pxi, const float *src, signed char *dest, int count, float normfact) ; -static void d2dsc_array (XI_PRIVATE *pxi, const double *src, signed char *dest, int count, double normfact) ; - -static void s2dles_array (XI_PRIVATE *pxi, const short *src, short *dest, int count) ; -static void i2dles_array (XI_PRIVATE *pxi, const int *src, short *dest, int count) ; -static void f2dles_array (XI_PRIVATE *pxi, const float *src, short *dest, int count, float normfact) ; -static void d2dles_array (XI_PRIVATE *pxi, const double *src, short *dest, int count, double normfact) ; - - -static sf_count_t -dpcm_write_s2dsc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2dsc_array (pxi, ptr + total, psf->u.scbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_s2dsc */ - -static sf_count_t -dpcm_write_i2dsc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2dsc_array (pxi, ptr + total, psf->u.scbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_i2dsc */ - -static sf_count_t -dpcm_write_f2dsc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - float normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7F) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - f2dsc_array (pxi, ptr + total, psf->u.scbuf, bufferlen, normfact) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_f2dsc */ - -static sf_count_t -dpcm_write_d2dsc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - double normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7F) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.ucbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - d2dsc_array (pxi, ptr + total, psf->u.scbuf, bufferlen, normfact) ; - writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_d2dsc */ - - -static sf_count_t -dpcm_write_s2dles (SF_PRIVATE *psf, const short *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - s2dles_array (pxi, ptr + total, psf->u.sbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_s2dles */ - -static sf_count_t -dpcm_write_i2dles (SF_PRIVATE *psf, const int *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - i2dles_array (pxi, ptr + total, psf->u.sbuf, bufferlen) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_i2dles */ - -static sf_count_t -dpcm_write_f2dles (SF_PRIVATE *psf, const float *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - float normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - f2dles_array (pxi, ptr + total, psf->u.sbuf, bufferlen, normfact) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_f2dles */ - -static sf_count_t -dpcm_write_d2dles (SF_PRIVATE *psf, const double *ptr, sf_count_t len) -{ XI_PRIVATE *pxi ; - int bufferlen, writecount ; - sf_count_t total = 0 ; - double normfact ; - - if ((pxi = psf->fdata) == NULL) - return 0 ; - - normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ; - - bufferlen = ARRAY_LEN (psf->u.sbuf) ; - - while (len > 0) - { if (len < bufferlen) - bufferlen = (int) len ; - d2dles_array (pxi, ptr + total, psf->u.sbuf, bufferlen, normfact) ; - writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; - total += writecount ; - if (writecount < bufferlen) - break ; - len -= writecount ; - } ; - - return total ; -} /* dpcm_write_d2dles */ - - -/*============================================================================== -*/ - -static void -dsc2s_array (XI_PRIVATE *pxi, signed char *src, int count, short *dest) -{ signed char last_val ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { last_val += src [k] ; - dest [k] = last_val << 8 ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* dsc2s_array */ - -static void -dsc2i_array (XI_PRIVATE *pxi, signed char *src, int count, int *dest) -{ signed char last_val ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { last_val += src [k] ; - dest [k] = last_val << 24 ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* dsc2i_array */ - -static void -dsc2f_array (XI_PRIVATE *pxi, signed char *src, int count, float *dest, float normfact) -{ signed char last_val ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { last_val += src [k] ; - dest [k] = last_val * normfact ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* dsc2f_array */ - -static void -dsc2d_array (XI_PRIVATE *pxi, signed char *src, int count, double *dest, double normfact) -{ signed char last_val ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { last_val += src [k] ; - dest [k] = last_val * normfact ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* dsc2d_array */ - -/*------------------------------------------------------------------------------ -*/ - -static void -s2dsc_array (XI_PRIVATE *pxi, const short *src, signed char *dest, int count) -{ signed char last_val, current ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { current = src [k] >> 8 ; - dest [k] = current - last_val ; - last_val = current ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* s2dsc_array */ - -static void -i2dsc_array (XI_PRIVATE *pxi, const int *src, signed char *dest, int count) -{ signed char last_val, current ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { current = src [k] >> 24 ; - dest [k] = current - last_val ; - last_val = current ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* i2dsc_array */ - -static void -f2dsc_array (XI_PRIVATE *pxi, const float *src, signed char *dest, int count, float normfact) -{ signed char last_val, current ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { current = lrintf (src [k] * normfact) ; - dest [k] = current - last_val ; - last_val = current ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* f2dsc_array */ - -static void -d2dsc_array (XI_PRIVATE *pxi, const double *src, signed char *dest, int count, double normfact) -{ signed char last_val, current ; - int k ; - - last_val = pxi->last_16 >> 8 ; - - for (k = 0 ; k < count ; k++) - { current = lrint (src [k] * normfact) ; - dest [k] = current - last_val ; - last_val = current ; - } ; - - pxi->last_16 = last_val << 8 ; -} /* d2dsc_array */ - -/*============================================================================== -*/ - -static void -dles2s_array (XI_PRIVATE *pxi, short *src, int count, short *dest) -{ short last_val ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { last_val += LES2H_SHORT (src [k]) ; - dest [k] = last_val ; - } ; - - pxi->last_16 = last_val ; -} /* dles2s_array */ - -static void -dles2i_array (XI_PRIVATE *pxi, short *src, int count, int *dest) -{ short last_val ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { last_val += LES2H_SHORT (src [k]) ; - dest [k] = last_val << 16 ; - } ; - - pxi->last_16 = last_val ; -} /* dles2i_array */ - -static void -dles2f_array (XI_PRIVATE *pxi, short *src, int count, float *dest, float normfact) -{ short last_val ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { last_val += LES2H_SHORT (src [k]) ; - dest [k] = last_val * normfact ; - } ; - - pxi->last_16 = last_val ; -} /* dles2f_array */ - -static void -dles2d_array (XI_PRIVATE *pxi, short *src, int count, double *dest, double normfact) -{ short last_val ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { last_val += LES2H_SHORT (src [k]) ; - dest [k] = last_val * normfact ; - } ; - - pxi->last_16 = last_val ; -} /* dles2d_array */ - -/*------------------------------------------------------------------------------ -*/ - -static void -s2dles_array (XI_PRIVATE *pxi, const short *src, short *dest, int count) -{ short diff, last_val ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { diff = src [k] - last_val ; - dest [k] = LES2H_SHORT (diff) ; - last_val = src [k] ; - } ; - - pxi->last_16 = last_val ; -} /* s2dles_array */ - -static void -i2dles_array (XI_PRIVATE *pxi, const int *src, short *dest, int count) -{ short diff, last_val ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { diff = (src [k] >> 16) - last_val ; - dest [k] = LES2H_SHORT (diff) ; - last_val = src [k] >> 16 ; - } ; - - pxi->last_16 = last_val ; -} /* i2dles_array */ - -static void -f2dles_array (XI_PRIVATE *pxi, const float *src, short *dest, int count, float normfact) -{ short diff, last_val, current ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { current = lrintf (src [k] * normfact) ; - diff = current - last_val ; - dest [k] = LES2H_SHORT (diff) ; - last_val = current ; - } ; - - pxi->last_16 = last_val ; -} /* f2dles_array */ - -static void -d2dles_array (XI_PRIVATE *pxi, const double *src, short *dest, int count, double normfact) -{ short diff, last_val, current ; - int k ; - - last_val = pxi->last_16 ; - - for (k = 0 ; k < count ; k++) - { current = lrint (src [k] * normfact) ; - diff = current - last_val ; - dest [k] = LES2H_SHORT (diff) ; - last_val = current ; - } ; - - pxi->last_16 = last_val ; -} /* d2dles_array */ - -/* -** Do not edit or modify anything in this comment block. -** The arch-tag line is a file identity tag for the GNU Arch -** revision control system. -** -** arch-tag: 1ab2dbe0-29af-4d80-9c6f-cb21b67521bc -*/ diff --git a/Libraries/SndFile/SndFile.xcodeproj/project.pbxproj b/Libraries/SndFile/SndFile.xcodeproj/project.pbxproj deleted file mode 100644 index 8f576c648..000000000 --- a/Libraries/SndFile/SndFile.xcodeproj/project.pbxproj +++ /dev/null @@ -1,611 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 42; - objects = { - -/* Begin PBXBuildFile section */ - 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; - 8EF6C98509FB14730045E26A /* aiff.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C91A09FB14720045E26A /* aiff.c */; }; - 8EF6C98609FB14730045E26A /* alaw.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C91B09FB14720045E26A /* alaw.c */; }; - 8EF6C98809FB14730045E26A /* au.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C91D09FB14720045E26A /* au.c */; }; - 8EF6C98A09FB14730045E26A /* avr.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C91F09FB14720045E26A /* avr.c */; }; - 8EF6C98B09FB14730045E26A /* caf.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92009FB14720045E26A /* caf.c */; }; - 8EF6C98C09FB14730045E26A /* command.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92109FB14720045E26A /* command.c */; }; - 8EF6C98D09FB14730045E26A /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92209FB14720045E26A /* common.c */; }; - 8EF6C98E09FB14730045E26A /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C92309FB14720045E26A /* common.h */; }; - 8EF6C98F09FB14730045E26A /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C92409FB14720045E26A /* config.h */; }; - 8EF6C99309FB14730045E26A /* dither.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92809FB14720045E26A /* dither.c */; }; - 8EF6C99409FB14730045E26A /* double64.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92909FB14720045E26A /* double64.c */; }; - 8EF6C99509FB14730045E26A /* dwd.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92A09FB14720045E26A /* dwd.c */; }; - 8EF6C99609FB14730045E26A /* dwvw.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92B09FB14720045E26A /* dwvw.c */; }; - 8EF6C99709FB14730045E26A /* file_io.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92C09FB14720045E26A /* file_io.c */; }; - 8EF6C99809FB14730045E26A /* flac.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92D09FB14720045E26A /* flac.c */; }; - 8EF6C99909FB14730045E26A /* float_cast.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C92E09FB14720045E26A /* float_cast.h */; }; - 8EF6C99A09FB14730045E26A /* float32.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C92F09FB14720045E26A /* float32.c */; }; - 8EF6C99C09FB14730045E26A /* g721.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C93209FB14720045E26A /* g721.c */; }; - 8EF6C99D09FB14730045E26A /* g723_16.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C93309FB14720045E26A /* g723_16.c */; }; - 8EF6C99E09FB14730045E26A /* g723_24.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C93409FB14720045E26A /* g723_24.c */; }; - 8EF6C99F09FB14730045E26A /* g723_40.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C93509FB14720045E26A /* g723_40.c */; }; - 8EF6C9A009FB14730045E26A /* g72x.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C93609FB14720045E26A /* g72x.c */; }; - 8EF6C9A109FB14730045E26A /* g72x.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C93709FB14720045E26A /* g72x.h */; }; - 8EF6C9A209FB14730045E26A /* g72x_priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C93809FB14720045E26A /* g72x_priv.h */; }; - 8EF6C9A809FB14730045E26A /* g72x.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C93E09FB14720045E26A /* g72x.c */; }; - 8EF6C9A909FB14730045E26A /* add.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94009FB14720045E26A /* add.c */; }; - 8EF6C9AB09FB14730045E26A /* code.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94209FB14720045E26A /* code.c */; }; - 8EF6C9AC09FB14730045E26A /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C94309FB14720045E26A /* config.h */; }; - 8EF6C9AE09FB14730045E26A /* decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94509FB14720045E26A /* decode.c */; }; - 8EF6C9AF09FB14730045E26A /* gsm.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C94609FB14730045E26A /* gsm.h */; }; - 8EF6C9B009FB14730045E26A /* gsm610_priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C94709FB14730045E26A /* gsm610_priv.h */; }; - 8EF6C9B109FB14730045E26A /* gsm_create.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94809FB14730045E26A /* gsm_create.c */; }; - 8EF6C9B209FB14730045E26A /* gsm_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94909FB14730045E26A /* gsm_decode.c */; }; - 8EF6C9B309FB14730045E26A /* gsm_destroy.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94A09FB14730045E26A /* gsm_destroy.c */; }; - 8EF6C9B409FB14730045E26A /* gsm_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94B09FB14730045E26A /* gsm_encode.c */; }; - 8EF6C9B509FB14730045E26A /* gsm_option.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94C09FB14730045E26A /* gsm_option.c */; }; - 8EF6C9B609FB14730045E26A /* long_term.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94D09FB14730045E26A /* long_term.c */; }; - 8EF6C9B709FB14730045E26A /* lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C94E09FB14730045E26A /* lpc.c */; }; - 8EF6C9BA09FB14730045E26A /* preprocess.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95109FB14730045E26A /* preprocess.c */; }; - 8EF6C9BC09FB14730045E26A /* rpe.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95309FB14730045E26A /* rpe.c */; }; - 8EF6C9BD09FB14730045E26A /* short_term.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95409FB14730045E26A /* short_term.c */; }; - 8EF6C9BE09FB14730045E26A /* table.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95509FB14730045E26A /* table.c */; }; - 8EF6C9BF09FB14730045E26A /* gsm610.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95609FB14730045E26A /* gsm610.c */; }; - 8EF6C9C009FB14730045E26A /* htk.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95709FB14730045E26A /* htk.c */; }; - 8EF6C9C109FB14730045E26A /* ima_adpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95809FB14730045E26A /* ima_adpcm.c */; }; - 8EF6C9C209FB14730045E26A /* interleave.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95909FB14730045E26A /* interleave.c */; }; - 8EF6C9C309FB14730045E26A /* ircam.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95A09FB14730045E26A /* ircam.c */; }; - 8EF6C9C509FB14730045E26A /* macbinary3.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95C09FB14730045E26A /* macbinary3.c */; }; - 8EF6C9C609FB14730045E26A /* macos.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C95D09FB14730045E26A /* macos.c */; }; - 8EF6C9C909FB14730045E26A /* mat4.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96009FB14730045E26A /* mat4.c */; }; - 8EF6C9CA09FB14730045E26A /* mat5.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96109FB14730045E26A /* mat5.c */; }; - 8EF6C9CB09FB14730045E26A /* ms_adpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96209FB14730045E26A /* ms_adpcm.c */; }; - 8EF6C9CC09FB14730045E26A /* nist.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96309FB14730045E26A /* nist.c */; }; - 8EF6C9CD09FB14730045E26A /* ogg.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96409FB14730045E26A /* ogg.c */; }; - 8EF6C9CE09FB14730045E26A /* paf.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96509FB14730045E26A /* paf.c */; }; - 8EF6C9CF09FB14730045E26A /* pcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96609FB14730045E26A /* pcm.c */; }; - 8EF6C9D009FB14730045E26A /* pvf.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96709FB14730045E26A /* pvf.c */; }; - 8EF6C9D109FB14730045E26A /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96809FB14730045E26A /* raw.c */; }; - 8EF6C9D209FB14730045E26A /* rx2.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96909FB14730045E26A /* rx2.c */; }; - 8EF6C9D309FB14730045E26A /* sd2.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96A09FB14730045E26A /* sd2.c */; }; - 8EF6C9D409FB14730045E26A /* sds.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96B09FB14730045E26A /* sds.c */; }; - 8EF6C9D509FB14730045E26A /* sf_unistd.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C96C09FB14730045E26A /* sf_unistd.h */; }; - 8EF6C9D609FB14730045E26A /* sfconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C96D09FB14730045E26A /* sfconfig.h */; }; - 8EF6C9D709FB14730045E26A /* sfendian.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C96E09FB14730045E26A /* sfendian.h */; }; - 8EF6C9D809FB14730045E26A /* sndfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C96F09FB14730045E26A /* sndfile.c */; }; - 8EF6C9D909FB14730045E26A /* sndfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C97009FB14730045E26A /* sndfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8EF6C9DB09FB14730045E26A /* strings.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97209FB14730045E26A /* strings.c */; }; - 8EF6C9DC09FB14730045E26A /* svx.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97309FB14730045E26A /* svx.c */; }; - 8EF6C9E409FB14730045E26A /* txw.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97B09FB14730045E26A /* txw.c */; }; - 8EF6C9E509FB14730045E26A /* ulaw.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97C09FB14730045E26A /* ulaw.c */; }; - 8EF6C9E609FB14730045E26A /* voc.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97D09FB14730045E26A /* voc.c */; }; - 8EF6C9E709FB14730045E26A /* vox_adpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97E09FB14730045E26A /* vox_adpcm.c */; }; - 8EF6C9E809FB14730045E26A /* w64.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C97F09FB14730045E26A /* w64.c */; }; - 8EF6C9E909FB14730045E26A /* wav_w64.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C98009FB14730045E26A /* wav_w64.c */; }; - 8EF6C9EA09FB14730045E26A /* wav_w64.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6C98109FB14730045E26A /* wav_w64.h */; }; - 8EF6C9EB09FB14730045E26A /* wav.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C98209FB14730045E26A /* wav.c */; }; - 8EF6C9EC09FB14730045E26A /* wve.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C98309FB14730045E26A /* wve.c */; }; - 8EF6C9ED09FB14730045E26A /* xi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6C98409FB14730045E26A /* xi.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXBuildStyle section */ - 014CEA440018CDF011CA2923 /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 014CEA450018CDF011CA2923 /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - -/* Begin PBXFileReference section */ - 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 8DC2EF5B0486A6940098B216 /* SndFile.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SndFile.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8EF6C91A09FB14720045E26A /* aiff.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = aiff.c; path = Files/src/aiff.c; sourceTree = ""; }; - 8EF6C91B09FB14720045E26A /* alaw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = alaw.c; path = Files/src/alaw.c; sourceTree = ""; }; - 8EF6C91D09FB14720045E26A /* au.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = au.c; path = Files/src/au.c; sourceTree = ""; }; - 8EF6C91F09FB14720045E26A /* avr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = avr.c; path = Files/src/avr.c; sourceTree = ""; }; - 8EF6C92009FB14720045E26A /* caf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = caf.c; path = Files/src/caf.c; sourceTree = ""; }; - 8EF6C92109FB14720045E26A /* command.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = command.c; path = Files/src/command.c; sourceTree = ""; }; - 8EF6C92209FB14720045E26A /* common.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = common.c; path = Files/src/common.c; sourceTree = ""; }; - 8EF6C92309FB14720045E26A /* common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = common.h; path = Files/src/common.h; sourceTree = ""; }; - 8EF6C92409FB14720045E26A /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = config.h; path = Files/src/config.h; sourceTree = ""; }; - 8EF6C92809FB14720045E26A /* dither.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dither.c; path = Files/src/dither.c; sourceTree = ""; }; - 8EF6C92909FB14720045E26A /* double64.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = double64.c; path = Files/src/double64.c; sourceTree = ""; }; - 8EF6C92A09FB14720045E26A /* dwd.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dwd.c; path = Files/src/dwd.c; sourceTree = ""; }; - 8EF6C92B09FB14720045E26A /* dwvw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dwvw.c; path = Files/src/dwvw.c; sourceTree = ""; }; - 8EF6C92C09FB14720045E26A /* file_io.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = file_io.c; path = Files/src/file_io.c; sourceTree = ""; }; - 8EF6C92D09FB14720045E26A /* flac.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = flac.c; path = Files/src/flac.c; sourceTree = ""; }; - 8EF6C92E09FB14720045E26A /* float_cast.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = float_cast.h; path = Files/src/float_cast.h; sourceTree = ""; }; - 8EF6C92F09FB14720045E26A /* float32.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = float32.c; path = Files/src/float32.c; sourceTree = ""; }; - 8EF6C93209FB14720045E26A /* g721.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = g721.c; sourceTree = ""; }; - 8EF6C93309FB14720045E26A /* g723_16.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = g723_16.c; sourceTree = ""; }; - 8EF6C93409FB14720045E26A /* g723_24.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = g723_24.c; sourceTree = ""; }; - 8EF6C93509FB14720045E26A /* g723_40.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = g723_40.c; sourceTree = ""; }; - 8EF6C93609FB14720045E26A /* g72x.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = g72x.c; sourceTree = ""; }; - 8EF6C93709FB14720045E26A /* g72x.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = g72x.h; sourceTree = ""; }; - 8EF6C93809FB14720045E26A /* g72x_priv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = g72x_priv.h; sourceTree = ""; }; - 8EF6C93E09FB14720045E26A /* g72x.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = g72x.c; path = Files/src/g72x.c; sourceTree = ""; }; - 8EF6C94009FB14720045E26A /* add.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = add.c; sourceTree = ""; }; - 8EF6C94209FB14720045E26A /* code.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = code.c; sourceTree = ""; }; - 8EF6C94309FB14720045E26A /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - 8EF6C94509FB14720045E26A /* decode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = decode.c; sourceTree = ""; }; - 8EF6C94609FB14730045E26A /* gsm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gsm.h; sourceTree = ""; }; - 8EF6C94709FB14730045E26A /* gsm610_priv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gsm610_priv.h; sourceTree = ""; }; - 8EF6C94809FB14730045E26A /* gsm_create.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gsm_create.c; sourceTree = ""; }; - 8EF6C94909FB14730045E26A /* gsm_decode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gsm_decode.c; sourceTree = ""; }; - 8EF6C94A09FB14730045E26A /* gsm_destroy.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gsm_destroy.c; sourceTree = ""; }; - 8EF6C94B09FB14730045E26A /* gsm_encode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gsm_encode.c; sourceTree = ""; }; - 8EF6C94C09FB14730045E26A /* gsm_option.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gsm_option.c; sourceTree = ""; }; - 8EF6C94D09FB14730045E26A /* long_term.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = long_term.c; sourceTree = ""; }; - 8EF6C94E09FB14730045E26A /* lpc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = lpc.c; sourceTree = ""; }; - 8EF6C95109FB14730045E26A /* preprocess.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = preprocess.c; sourceTree = ""; }; - 8EF6C95309FB14730045E26A /* rpe.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = rpe.c; sourceTree = ""; }; - 8EF6C95409FB14730045E26A /* short_term.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = short_term.c; sourceTree = ""; }; - 8EF6C95509FB14730045E26A /* table.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = table.c; sourceTree = ""; }; - 8EF6C95609FB14730045E26A /* gsm610.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = gsm610.c; path = Files/src/gsm610.c; sourceTree = ""; }; - 8EF6C95709FB14730045E26A /* htk.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = htk.c; path = Files/src/htk.c; sourceTree = ""; }; - 8EF6C95809FB14730045E26A /* ima_adpcm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ima_adpcm.c; path = Files/src/ima_adpcm.c; sourceTree = ""; }; - 8EF6C95909FB14730045E26A /* interleave.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = interleave.c; path = Files/src/interleave.c; sourceTree = ""; }; - 8EF6C95A09FB14730045E26A /* ircam.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ircam.c; path = Files/src/ircam.c; sourceTree = ""; }; - 8EF6C95C09FB14730045E26A /* macbinary3.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = macbinary3.c; path = Files/src/macbinary3.c; sourceTree = ""; }; - 8EF6C95D09FB14730045E26A /* macos.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = macos.c; path = Files/src/macos.c; sourceTree = ""; }; - 8EF6C96009FB14730045E26A /* mat4.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = mat4.c; path = Files/src/mat4.c; sourceTree = ""; }; - 8EF6C96109FB14730045E26A /* mat5.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = mat5.c; path = Files/src/mat5.c; sourceTree = ""; }; - 8EF6C96209FB14730045E26A /* ms_adpcm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ms_adpcm.c; path = Files/src/ms_adpcm.c; sourceTree = ""; }; - 8EF6C96309FB14730045E26A /* nist.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = nist.c; path = Files/src/nist.c; sourceTree = ""; }; - 8EF6C96409FB14730045E26A /* ogg.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ogg.c; path = Files/src/ogg.c; sourceTree = ""; }; - 8EF6C96509FB14730045E26A /* paf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = paf.c; path = Files/src/paf.c; sourceTree = ""; }; - 8EF6C96609FB14730045E26A /* pcm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = pcm.c; path = Files/src/pcm.c; sourceTree = ""; }; - 8EF6C96709FB14730045E26A /* pvf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = pvf.c; path = Files/src/pvf.c; sourceTree = ""; }; - 8EF6C96809FB14730045E26A /* raw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = raw.c; path = Files/src/raw.c; sourceTree = ""; }; - 8EF6C96909FB14730045E26A /* rx2.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = rx2.c; path = Files/src/rx2.c; sourceTree = ""; }; - 8EF6C96A09FB14730045E26A /* sd2.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sd2.c; path = Files/src/sd2.c; sourceTree = ""; }; - 8EF6C96B09FB14730045E26A /* sds.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sds.c; path = Files/src/sds.c; sourceTree = ""; }; - 8EF6C96C09FB14730045E26A /* sf_unistd.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sf_unistd.h; path = Files/src/sf_unistd.h; sourceTree = ""; }; - 8EF6C96D09FB14730045E26A /* sfconfig.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sfconfig.h; path = Files/src/sfconfig.h; sourceTree = ""; }; - 8EF6C96E09FB14730045E26A /* sfendian.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sfendian.h; path = Files/src/sfendian.h; sourceTree = ""; }; - 8EF6C96F09FB14730045E26A /* sndfile.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sndfile.c; path = Files/src/sndfile.c; sourceTree = ""; }; - 8EF6C97009FB14730045E26A /* sndfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sndfile.h; path = Files/src/sndfile.h; sourceTree = ""; }; - 8EF6C97209FB14730045E26A /* strings.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = strings.c; path = Files/src/strings.c; sourceTree = ""; }; - 8EF6C97309FB14730045E26A /* svx.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = svx.c; path = Files/src/svx.c; sourceTree = ""; }; - 8EF6C97B09FB14730045E26A /* txw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = txw.c; path = Files/src/txw.c; sourceTree = ""; }; - 8EF6C97C09FB14730045E26A /* ulaw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ulaw.c; path = Files/src/ulaw.c; sourceTree = ""; }; - 8EF6C97D09FB14730045E26A /* voc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = voc.c; path = Files/src/voc.c; sourceTree = ""; }; - 8EF6C97E09FB14730045E26A /* vox_adpcm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = vox_adpcm.c; path = Files/src/vox_adpcm.c; sourceTree = ""; }; - 8EF6C97F09FB14730045E26A /* w64.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = w64.c; path = Files/src/w64.c; sourceTree = ""; }; - 8EF6C98009FB14730045E26A /* wav_w64.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = wav_w64.c; path = Files/src/wav_w64.c; sourceTree = ""; }; - 8EF6C98109FB14730045E26A /* wav_w64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = wav_w64.h; path = Files/src/wav_w64.h; sourceTree = ""; }; - 8EF6C98209FB14730045E26A /* wav.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = wav.c; path = Files/src/wav.c; sourceTree = ""; }; - 8EF6C98309FB14730045E26A /* wve.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = wve.c; path = Files/src/wve.c; sourceTree = ""; }; - 8EF6C98409FB14730045E26A /* xi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = xi.c; path = Files/src/xi.c; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8DC2EF560486A6940098B216 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 034768DFFF38A50411DB9C8B /* Products */ = { - isa = PBXGroup; - children = ( - 8DC2EF5B0486A6940098B216 /* SndFile.framework */, - ); - name = Products; - sourceTree = ""; - }; - 0867D691FE84028FC02AAC07 /* SndFile */ = { - isa = PBXGroup; - children = ( - 8E756DF009F318090080F1EE /* Source */, - 089C1665FE841158C02AAC07 /* Resources */, - 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, - 034768DFFF38A50411DB9C8B /* Products */, - ); - name = SndFile; - sourceTree = ""; - }; - 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */, - 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; - 089C1665FE841158C02AAC07 /* Resources */ = { - isa = PBXGroup; - children = ( - 8DC2EF5A0486A6940098B216 /* Info.plist */, - 089C1666FE841158C02AAC07 /* InfoPlist.strings */, - ); - name = Resources; - sourceTree = ""; - }; - 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = "Linked Frameworks"; - sourceTree = ""; - }; - 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - 8E756DF009F318090080F1EE /* Source */ = { - isa = PBXGroup; - children = ( - 8EF6C91A09FB14720045E26A /* aiff.c */, - 8EF6C91B09FB14720045E26A /* alaw.c */, - 8EF6C91D09FB14720045E26A /* au.c */, - 8EF6C91F09FB14720045E26A /* avr.c */, - 8EF6C92009FB14720045E26A /* caf.c */, - 8EF6C92109FB14720045E26A /* command.c */, - 8EF6C92209FB14720045E26A /* common.c */, - 8EF6C92309FB14720045E26A /* common.h */, - 8EF6C92409FB14720045E26A /* config.h */, - 8EF6C92809FB14720045E26A /* dither.c */, - 8EF6C92909FB14720045E26A /* double64.c */, - 8EF6C92A09FB14720045E26A /* dwd.c */, - 8EF6C92B09FB14720045E26A /* dwvw.c */, - 8EF6C92C09FB14720045E26A /* file_io.c */, - 8EF6C92D09FB14720045E26A /* flac.c */, - 8EF6C92E09FB14720045E26A /* float_cast.h */, - 8EF6C92F09FB14720045E26A /* float32.c */, - 8EF6C93009FB14720045E26A /* G72x */, - 8EF6C93E09FB14720045E26A /* g72x.c */, - 8EF6C93F09FB14720045E26A /* GSM610 */, - 8EF6C95609FB14730045E26A /* gsm610.c */, - 8EF6C95709FB14730045E26A /* htk.c */, - 8EF6C95809FB14730045E26A /* ima_adpcm.c */, - 8EF6C95909FB14730045E26A /* interleave.c */, - 8EF6C95A09FB14730045E26A /* ircam.c */, - 8EF6C95C09FB14730045E26A /* macbinary3.c */, - 8EF6C95D09FB14730045E26A /* macos.c */, - 8EF6C96009FB14730045E26A /* mat4.c */, - 8EF6C96109FB14730045E26A /* mat5.c */, - 8EF6C96209FB14730045E26A /* ms_adpcm.c */, - 8EF6C96309FB14730045E26A /* nist.c */, - 8EF6C96409FB14730045E26A /* ogg.c */, - 8EF6C96509FB14730045E26A /* paf.c */, - 8EF6C96609FB14730045E26A /* pcm.c */, - 8EF6C96709FB14730045E26A /* pvf.c */, - 8EF6C96809FB14730045E26A /* raw.c */, - 8EF6C96909FB14730045E26A /* rx2.c */, - 8EF6C96A09FB14730045E26A /* sd2.c */, - 8EF6C96B09FB14730045E26A /* sds.c */, - 8EF6C96C09FB14730045E26A /* sf_unistd.h */, - 8EF6C96D09FB14730045E26A /* sfconfig.h */, - 8EF6C96E09FB14730045E26A /* sfendian.h */, - 8EF6C96F09FB14730045E26A /* sndfile.c */, - 8EF6C97009FB14730045E26A /* sndfile.h */, - 8EF6C97209FB14730045E26A /* strings.c */, - 8EF6C97309FB14730045E26A /* svx.c */, - 8EF6C97B09FB14730045E26A /* txw.c */, - 8EF6C97C09FB14730045E26A /* ulaw.c */, - 8EF6C97D09FB14730045E26A /* voc.c */, - 8EF6C97E09FB14730045E26A /* vox_adpcm.c */, - 8EF6C97F09FB14730045E26A /* w64.c */, - 8EF6C98009FB14730045E26A /* wav_w64.c */, - 8EF6C98109FB14730045E26A /* wav_w64.h */, - 8EF6C98209FB14730045E26A /* wav.c */, - 8EF6C98309FB14730045E26A /* wve.c */, - 8EF6C98409FB14730045E26A /* xi.c */, - ); - name = Source; - sourceTree = ""; - }; - 8EF6C93009FB14720045E26A /* G72x */ = { - isa = PBXGroup; - children = ( - 8EF6C93209FB14720045E26A /* g721.c */, - 8EF6C93309FB14720045E26A /* g723_16.c */, - 8EF6C93409FB14720045E26A /* g723_24.c */, - 8EF6C93509FB14720045E26A /* g723_40.c */, - 8EF6C93609FB14720045E26A /* g72x.c */, - 8EF6C93709FB14720045E26A /* g72x.h */, - 8EF6C93809FB14720045E26A /* g72x_priv.h */, - ); - name = G72x; - path = Files/src/G72x; - sourceTree = ""; - }; - 8EF6C93F09FB14720045E26A /* GSM610 */ = { - isa = PBXGroup; - children = ( - 8EF6C94009FB14720045E26A /* add.c */, - 8EF6C94209FB14720045E26A /* code.c */, - 8EF6C94309FB14720045E26A /* config.h */, - 8EF6C94509FB14720045E26A /* decode.c */, - 8EF6C94609FB14730045E26A /* gsm.h */, - 8EF6C94709FB14730045E26A /* gsm610_priv.h */, - 8EF6C94809FB14730045E26A /* gsm_create.c */, - 8EF6C94909FB14730045E26A /* gsm_decode.c */, - 8EF6C94A09FB14730045E26A /* gsm_destroy.c */, - 8EF6C94B09FB14730045E26A /* gsm_encode.c */, - 8EF6C94C09FB14730045E26A /* gsm_option.c */, - 8EF6C94D09FB14730045E26A /* long_term.c */, - 8EF6C94E09FB14730045E26A /* lpc.c */, - 8EF6C95109FB14730045E26A /* preprocess.c */, - 8EF6C95309FB14730045E26A /* rpe.c */, - 8EF6C95409FB14730045E26A /* short_term.c */, - 8EF6C95509FB14730045E26A /* table.c */, - ); - name = GSM610; - path = Files/src/GSM610; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8DC2EF500486A6940098B216 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8EF6C98E09FB14730045E26A /* common.h in Headers */, - 8EF6C98F09FB14730045E26A /* config.h in Headers */, - 8EF6C99909FB14730045E26A /* float_cast.h in Headers */, - 8EF6C9A109FB14730045E26A /* g72x.h in Headers */, - 8EF6C9A209FB14730045E26A /* g72x_priv.h in Headers */, - 8EF6C9AC09FB14730045E26A /* config.h in Headers */, - 8EF6C9AF09FB14730045E26A /* gsm.h in Headers */, - 8EF6C9B009FB14730045E26A /* gsm610_priv.h in Headers */, - 8EF6C9D509FB14730045E26A /* sf_unistd.h in Headers */, - 8EF6C9D609FB14730045E26A /* sfconfig.h in Headers */, - 8EF6C9D709FB14730045E26A /* sfendian.h in Headers */, - 8EF6C9D909FB14730045E26A /* sndfile.h in Headers */, - 8EF6C9EA09FB14730045E26A /* wav_w64.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8DC2EF4F0486A6940098B216 /* SndFile */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "SndFile" */; - buildPhases = ( - 8DC2EF500486A6940098B216 /* Headers */, - 8DC2EF520486A6940098B216 /* Resources */, - 8DC2EF540486A6940098B216 /* Sources */, - 8DC2EF560486A6940098B216 /* Frameworks */, - ); - buildRules = ( - ); - buildSettings = { - }; - dependencies = ( - ); - name = SndFile; - productInstallPath = "$(HOME)/Library/Frameworks"; - productName = SndFile; - productReference = 8DC2EF5B0486A6940098B216 /* SndFile.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 0867D690FE84028FC02AAC07 /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "SndFile" */; - buildSettings = { - }; - buildStyles = ( - 014CEA440018CDF011CA2923 /* Debug */, - 014CEA450018CDF011CA2923 /* Release */, - ); - hasScannedForEncodings = 1; - mainGroup = 0867D691FE84028FC02AAC07 /* SndFile */; - productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; - projectDirPath = ""; - targets = ( - 8DC2EF4F0486A6940098B216 /* SndFile */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8DC2EF520486A6940098B216 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8DC2EF540486A6940098B216 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8EF6C98509FB14730045E26A /* aiff.c in Sources */, - 8EF6C98609FB14730045E26A /* alaw.c in Sources */, - 8EF6C98809FB14730045E26A /* au.c in Sources */, - 8EF6C98A09FB14730045E26A /* avr.c in Sources */, - 8EF6C98B09FB14730045E26A /* caf.c in Sources */, - 8EF6C98C09FB14730045E26A /* command.c in Sources */, - 8EF6C98D09FB14730045E26A /* common.c in Sources */, - 8EF6C99309FB14730045E26A /* dither.c in Sources */, - 8EF6C99409FB14730045E26A /* double64.c in Sources */, - 8EF6C99509FB14730045E26A /* dwd.c in Sources */, - 8EF6C99609FB14730045E26A /* dwvw.c in Sources */, - 8EF6C99709FB14730045E26A /* file_io.c in Sources */, - 8EF6C99809FB14730045E26A /* flac.c in Sources */, - 8EF6C99A09FB14730045E26A /* float32.c in Sources */, - 8EF6C99C09FB14730045E26A /* g721.c in Sources */, - 8EF6C99D09FB14730045E26A /* g723_16.c in Sources */, - 8EF6C99E09FB14730045E26A /* g723_24.c in Sources */, - 8EF6C99F09FB14730045E26A /* g723_40.c in Sources */, - 8EF6C9A009FB14730045E26A /* g72x.c in Sources */, - 8EF6C9A809FB14730045E26A /* g72x.c in Sources */, - 8EF6C9A909FB14730045E26A /* add.c in Sources */, - 8EF6C9AB09FB14730045E26A /* code.c in Sources */, - 8EF6C9AE09FB14730045E26A /* decode.c in Sources */, - 8EF6C9B109FB14730045E26A /* gsm_create.c in Sources */, - 8EF6C9B209FB14730045E26A /* gsm_decode.c in Sources */, - 8EF6C9B309FB14730045E26A /* gsm_destroy.c in Sources */, - 8EF6C9B409FB14730045E26A /* gsm_encode.c in Sources */, - 8EF6C9B509FB14730045E26A /* gsm_option.c in Sources */, - 8EF6C9B609FB14730045E26A /* long_term.c in Sources */, - 8EF6C9B709FB14730045E26A /* lpc.c in Sources */, - 8EF6C9BA09FB14730045E26A /* preprocess.c in Sources */, - 8EF6C9BC09FB14730045E26A /* rpe.c in Sources */, - 8EF6C9BD09FB14730045E26A /* short_term.c in Sources */, - 8EF6C9BE09FB14730045E26A /* table.c in Sources */, - 8EF6C9BF09FB14730045E26A /* gsm610.c in Sources */, - 8EF6C9C009FB14730045E26A /* htk.c in Sources */, - 8EF6C9C109FB14730045E26A /* ima_adpcm.c in Sources */, - 8EF6C9C209FB14730045E26A /* interleave.c in Sources */, - 8EF6C9C309FB14730045E26A /* ircam.c in Sources */, - 8EF6C9C509FB14730045E26A /* macbinary3.c in Sources */, - 8EF6C9C609FB14730045E26A /* macos.c in Sources */, - 8EF6C9C909FB14730045E26A /* mat4.c in Sources */, - 8EF6C9CA09FB14730045E26A /* mat5.c in Sources */, - 8EF6C9CB09FB14730045E26A /* ms_adpcm.c in Sources */, - 8EF6C9CC09FB14730045E26A /* nist.c in Sources */, - 8EF6C9CD09FB14730045E26A /* ogg.c in Sources */, - 8EF6C9CE09FB14730045E26A /* paf.c in Sources */, - 8EF6C9CF09FB14730045E26A /* pcm.c in Sources */, - 8EF6C9D009FB14730045E26A /* pvf.c in Sources */, - 8EF6C9D109FB14730045E26A /* raw.c in Sources */, - 8EF6C9D209FB14730045E26A /* rx2.c in Sources */, - 8EF6C9D309FB14730045E26A /* sd2.c in Sources */, - 8EF6C9D409FB14730045E26A /* sds.c in Sources */, - 8EF6C9D809FB14730045E26A /* sndfile.c in Sources */, - 8EF6C9DB09FB14730045E26A /* strings.c in Sources */, - 8EF6C9DC09FB14730045E26A /* svx.c in Sources */, - 8EF6C9E409FB14730045E26A /* txw.c in Sources */, - 8EF6C9E509FB14730045E26A /* ulaw.c in Sources */, - 8EF6C9E609FB14730045E26A /* voc.c in Sources */, - 8EF6C9E709FB14730045E26A /* vox_adpcm.c in Sources */, - 8EF6C9E809FB14730045E26A /* w64.c in Sources */, - 8EF6C9E909FB14730045E26A /* wav_w64.c in Sources */, - 8EF6C9EB09FB14730045E26A /* wav.c in Sources */, - 8EF6C9EC09FB14730045E26A /* wve.c in Sources */, - 8EF6C9ED09FB14730045E26A /* xi.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 089C1667FE841158C02AAC07 /* English */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 1DEB91AE08733DA50010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; - PRODUCT_NAME = SndFile; - WRAPPER_EXTENSION = framework; - ZERO_LINK = YES; - }; - name = Debug; - }; - 1DEB91AF08733DA50010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - ppc, - i386, - ); - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@executable_path/../Frameworks"; - OTHER_CFLAGS = ""; - PRODUCT_NAME = SndFile; - WRAPPER_EXTENSION = framework; - }; - name = Release; - }; - 1DEB91B208733DA50010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; - }; - name = Debug; - }; - 1DEB91B308733DA50010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "SndFile" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB91AE08733DA50010E9CD /* Debug */, - 1DEB91AF08733DA50010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "SndFile" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB91B208733DA50010E9CD /* Debug */, - 1DEB91B308733DA50010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 0867D690FE84028FC02AAC07 /* Project object */; -} diff --git a/Libraries/WavPack/English.lproj/InfoPlist.strings b/Libraries/WavPack/English.lproj/InfoPlist.strings deleted file mode 100644 index 7080cf949924e8817cb2121399f078b287079883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmW-ZOAf&R6h+Utt7r@xK@3d9$bMd*s%ZBv=Kme5Fyy^_xDn;J8+CjLwb{$gz->i_@% diff --git a/Old/Sound.h b/Old/Sound.h deleted file mode 100644 index 655f41a7d..000000000 --- a/Old/Sound.h +++ /dev/null @@ -1,134 +0,0 @@ -// -// Sound.h -// Cog -// -// Created by Vincent Spader on 5/11/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import - -#import -#import -#import - -#import "SoundFile/SoundFile.h" -#import "VirtualRingBuffer.h" - -//Inter thread messages -//Controller to sound messages -enum -{ - kCogPauseResumeMessage = 100, - kCogPauseMessage, - kCogResumeMessage, - kCogPlayFileMessage, - kCogChangeFileMessage, - kCogStopMessage, - kCogSeekMessage, - kCogEndOfPlaylistMessage, - kCogSetVolumeMessage, - - //sound to controller - kCogCheckinMessage, - kCogRequestNextFileMessage, - kCogBitrateUpdateMessage, - kCogLengthUpdateMessage, - kCogPositionUpdateMessage, - kCogFileChangedMessage, - kCogStatusUpdateMessage -}; - -enum -{ - kCogStatusPaused = 0, - kCogStatusStopped, - kCogStatusPlaying, - kCogStatusEndOfFile, - kCogStatusEndOfPlaylist, - kCogStatusPlaybackEnded -}; - -@interface Sound : NSObject { - //For communication with the soundcontroller - NSPort *sendPort; - NSPort *distantPort; - - SoundFile *soundFile; - unsigned long currentPosition; - unsigned long totalLength; - - //Whole lotta core audio fun - AudioUnit outputUnit; - AudioStreamBasicDescription deviceFormat; // info about the default device - AudioStreamBasicDescription sourceStreamFormat; - AURenderCallbackStruct renderCallback; - AudioConverterRef converter; - - void *conversionBuffer; - - int playbackStatus; - int oldPlaybackStatus; //For resuming - - NSTimer *fillTimer; //used to wake up the filler thread - //semaphore_t semaphore; //used to wake up the filler thread - NSTimer *positionTimer; - - VirtualRingBuffer *ringBuffer; - VirtualRingBuffer *auxRingBuffer; //For changing tracks - - VirtualRingBuffer *readRingBuffer; - VirtualRingBuffer *writeRingBuffer; - - //Track changing procedure...sound send changerequest to controller when it hits EOF, and sets writeringbuffer to the opposite buffer... - //when buffer is empty, sound sends changecomplete to controller, and sets readringbuffer to the opposite - - NSLock *readLock; - NSLock *writeLock; -} - -- (void)launchThreadWithPort:(id)inData; -- (void)sendPortMessage:(int)msgid; -- (void)sendPortMessage:(int)msgid withData:(void *)data ofSize:(int)size; -- (void)handlePortMessage:(NSPortMessage *)portMessage; - -- (void)scheduleFillTimer; -- (void)fireFillTimer; - -- (void)sendPositionUpdate:(id)sender; - -- (void)fillBuffer:(id)sender; -- (int)convert:(void *)destBuf packets:(int)numPackets; -- (void)resetBuffer; -- (VirtualRingBuffer *)oppositeBuffer:(VirtualRingBuffer *)buf; - -//private methods -- (BOOL)setupAudioOutput; -- (BOOL)startAudioOutput; -- (void)stopAudioOutput; -- (void)cleanUpAudioOutput; - -- (BOOL)prepareSoundFile; -- (void)cleanUpSoundFile; - -- (void)setThreadPolicy; - -- (void)setPlaybackStatus:(int)s; - -- (void)pause; -- (void)resume; -- (void)stop; - -- (void)playFile:(NSString *)filename; -- (void)changeFile:(NSString *)filename; - -- (BOOL)setSoundFile:(NSString *)filename; - -//helper function -- (double)calculateTime:(unsigned long) pos; -- (unsigned long)calculatePos:(double) time; - -- (void)setVolume:(float)v; - -@end - \ No newline at end of file diff --git a/Old/Sound.m b/Old/Sound.m deleted file mode 100644 index 000444410..000000000 --- a/Old/Sound.m +++ /dev/null @@ -1,768 +0,0 @@ -// -// Sound.m -// Cog -// -// Created by Vincent Spader on 5/11/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#include -#include -#include -#include - -#import "Sound.h" -#import "FlacFile.h" -#import "MonkeysFile.h" -#import "MPEGFile.h" -#import "MusepackFile.h" -#import "VorbisFile.h" -#import "WaveFile.h" - -#import "DBLog.h" - -//128kb of floating point data gives ya ~371 milliseconds...so 512kb should give us about 1.5 seconds -#define RING_BUFFER_SIZE (512 * 1024) -//this much data is about 56 milliseconds of floating point data -#define BUFFER_WRITE_CHUNK (16 * 1024) - -//#define RING_BUFFER_SIZE 1048576 -//#define BUFFER_WRITE_CHUNK 32768 -#define FEEDER_THREAD_IMPORTANCE 6 - -//timeout should be smaller than the time itd take for the buffer to run dry...looks like were ironclad -#define TIMEOUT 1 - -void PrintStreamDesc (AudioStreamBasicDescription *inDesc) -{ - if (!inDesc) { - printf ("Can't print a NULL desc!\n"); - return; - } - printf ("- - - - - - - - - - - - - - - - - - - -\n"); - printf (" Sample Rate:%f\n", inDesc->mSampleRate); - printf (" Format ID:%s\n", (char*)&inDesc->mFormatID); - printf (" Format Flags:%lX\n", inDesc->mFormatFlags); - printf (" Bytes per Packet:%ld\n", inDesc->mBytesPerPacket); - printf (" Frames per Packet:%ld\n", inDesc->mFramesPerPacket); - printf (" Bytes per Frame:%ld\n", inDesc->mBytesPerFrame); - printf (" Channels per Frame:%ld\n", inDesc->mChannelsPerFrame); - printf (" Bits per Channel:%ld\n", inDesc->mBitsPerChannel); - printf ("- - - - - - - - - - - - - - - - - - - -\n"); -} - -@implementation Sound - -//called from the complexfill when the audio is converted...good clean fun -static OSStatus Sound_ACInputProc(AudioConverterRef inAudioConverter, UInt32* ioNumberDataPackets, AudioBufferList* ioData, AudioStreamPacketDescription** outDataPacketDescription, void* inUserData) -{ - Sound *sound = (Sound *)inUserData; - OSStatus err = noErr; - - DBLog(@"Convert input proc"); - DBLog(@"Numpackets: %i %i", *ioNumberDataPackets, ioData->mNumberBuffers); - - int amountToWrite; - int amountWritten; - void *sourceBuf; - - amountToWrite = (*ioNumberDataPackets)*sound->sourceStreamFormat.mBytesPerPacket; - sourceBuf = malloc(amountToWrite); - sound->conversionBuffer = sourceBuf; - - DBLog(@"Requesting: %i", amountToWrite); - amountWritten = [sound->soundFile fillBuffer:sourceBuf ofSize:amountToWrite]; - - DBLog(@"PACKET NUMBER RECEIVED: %i", *ioNumberDataPackets); - ioData->mBuffers[0].mData = sourceBuf; - ioData->mBuffers[0].mDataByteSize = amountWritten; - ioData->mBuffers[0].mNumberChannels = sound->sourceStreamFormat.mChannelsPerFrame; - ioData->mNumberBuffers = 1; - - DBLog(@"Input complete"); - - return err; -} - -//called from coreaudio, just fill the bufferlist and thats all -static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) -{ - Sound *sound = (Sound *)inRefCon; - OSStatus err = noErr; - - int amountAvailable; - int amountToRead; - void *readPointer; - - [sound->readLock lock]; - - amountAvailable = [sound->readRingBuffer lengthAvailableToReadReturningPointer:&readPointer]; - if (sound->playbackStatus == kCogStatusEndOfFile && amountAvailable == 0) - { - DBLog(@"FILE CHANGED!!!!!"); - [sound sendPortMessage:kCogFileChangedMessage]; - sound->readRingBuffer = [sound oppositeBuffer:sound->readRingBuffer]; - - [sound setPlaybackStatus:kCogStatusPlaying]; - - sound->currentPosition = 0; - - double time = [sound calculateTime:sound->totalLength]; - int bitrate = [sound->soundFile bitRate]; - [sound sendPortMessage:kCogLengthUpdateMessage withData:&time ofSize:(sizeof(double))]; - [sound sendPortMessage:kCogBitrateUpdateMessage withData:&bitrate ofSize:(sizeof(int))]; - } - if (sound->playbackStatus == kCogStatusEndOfPlaylist && amountAvailable == 0) - { - //Stop playback - [sound setPlaybackStatus:kCogStatusStopped]; -// return err; - } - - if (amountAvailable < ([sound->readRingBuffer bufferLength] - BUFFER_WRITE_CHUNK)) - { -// DBLog(@"AVAILABLE: %i", amountAvailable); - [sound fireFillTimer]; - } - - if (amountAvailable > inNumberFrames*sound->deviceFormat.mBytesPerPacket) - amountToRead = inNumberFrames*sound->deviceFormat.mBytesPerPacket; - else - amountToRead = amountAvailable; - - memcpy(ioData->mBuffers[0].mData, readPointer, amountToRead); - ioData->mBuffers[0].mDataByteSize = amountToRead; - - [sound->readRingBuffer didReadLength:amountToRead]; - - sound->currentPosition += amountToRead; - - [sound->readLock unlock]; - - return err; -} - -- (id)init -{ - self = [super init]; - if (self) - { - readLock = [[NSLock alloc] init]; - writeLock = [[NSLock alloc] init]; - - ringBuffer = [(VirtualRingBuffer *)[VirtualRingBuffer alloc] initWithLength:RING_BUFFER_SIZE]; - auxRingBuffer = [(VirtualRingBuffer *)[VirtualRingBuffer alloc] initWithLength:RING_BUFFER_SIZE]; - - readRingBuffer = ringBuffer; - writeRingBuffer = ringBuffer; - } - - return self; -} - -- (void)launchThreadWithPort:(id)inData -{ - NSAutoreleasePool *pool; - pool = [[NSAutoreleasePool alloc] init]; - - distantPort = (NSPort *)inData; - - sendPort = [NSPort port]; - if (sendPort) - { - [sendPort setDelegate:self]; - - NSArray *modes = [NSArray arrayWithObjects:NSDefaultRunLoopMode, nil];//NSEventTrackingRunLoopMode, nil]; - NSEnumerator *enumerator; - NSString *mode; - - enumerator = [modes objectEnumerator]; - while ((mode = [enumerator nextObject])) - [[NSRunLoop currentRunLoop] addPort:sendPort forMode:mode]; - } -// DBLog(@"SENDING CHECKIN MESSAGE"); - [self sendPortMessage:kCogCheckinMessage]; - - [self setupAudioOutput]; - - [self setThreadPolicy]; - - [[NSRunLoop currentRunLoop] run]; - DBLog(@"THREAD EXIT!!!!!!!!!!!"); - [pool release]; -} - -/*- (void)printDebugInfo:(id)sender -{ - void *ptr; - - DBLog(@"Available r/w: %i/%i", [ringBuffer lengthAvailableToReadReturningPointer:&ptr], [ringBuffer lengthAvailableToWriteReturningPointer:&ptr]); -} -*/ -- (void)setThreadPolicy -{ - // Increase this thread's priority, and turn off timesharing. - - kern_return_t error; - thread_extended_policy_data_t extendedPolicy; - thread_precedence_policy_data_t precedencePolicy; - - extendedPolicy.timeshare = 0; - error = thread_policy_set(mach_thread_self(), THREAD_EXTENDED_POLICY, (thread_policy_t)&extendedPolicy, THREAD_EXTENDED_POLICY_COUNT); - - if (error != KERN_SUCCESS) { - DBLog(@"Couldnt set feeder thread's extended policy"); - } - - precedencePolicy.importance = FEEDER_THREAD_IMPORTANCE; - error = thread_policy_set(mach_thread_self(), THREAD_PRECEDENCE_POLICY, (thread_policy_t)&precedencePolicy, THREAD_PRECEDENCE_POLICY_COUNT); - - if (error != KERN_SUCCESS) { - DBLog(@"Couldn't set feeder thread's precedence policy"); - } -} - -- (void)sendPortMessage:(int)msgid -{ - NSPortMessage *portMessage = [[NSPortMessage alloc] initWithSendPort:distantPort receivePort:sendPort components:nil]; - - if (portMessage) - { - NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:20.0];//[[NSDate alloc] init]; - - [portMessage setMsgid:msgid]; - - [portMessage sendBeforeDate:date]; - - [date release]; - [portMessage release]; - } -} - -- (void)sendPortMessage:(int)msgid withData:(void *)data ofSize:(int)size -{ - NSPortMessage *portMessage; - NSData *d = [[NSData alloc] initWithBytes:data length:size]; - NSArray *a = [[NSArray alloc] initWithObjects:d,nil]; - portMessage = [[NSPortMessage alloc] initWithSendPort:distantPort receivePort:sendPort components:a]; - - [a release]; - [d release]; - - if (portMessage) - { - NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:20.0];//give shit a little time to send, just in case...may come back to bite me - - [portMessage setMsgid:msgid]; - - NS_DURING - [portMessage sendBeforeDate:date]; - NS_HANDLER - NSRunAlertPanel(@"Error Panel", @"%@", @"OK", nil, nil, localException); - NS_ENDHANDLER - - [date release]; - [portMessage release]; - } - else { - DBLog(@"DIDNT SEND! ERROR"); - } - -} - -// Worker thread message handler method. -- (void)handlePortMessage:(NSPortMessage *)portMessage -{ - unsigned int msgid = [portMessage msgid]; - - // Handle messages from the main thread. - if (msgid == kCogPauseResumeMessage) - { - if (playbackStatus == kCogStatusPaused) - { - [self resume]; - } - else - { - [self pause]; - } - } - else if (msgid == kCogPauseMessage) - { - [self pause]; - } - else if (msgid == kCogResumeMessage) - { - [self resume]; - } - else if (msgid == kCogStopMessage) - { - [self stop]; - } - else if (msgid == kCogPlayFileMessage || msgid == kCogChangeFileMessage) - { - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - - if (msgid == kCogPlayFileMessage) //PLAY THE FARKING FILE NOW - { - [self playFile:s]; - } - else if (msgid == kCogChangeFileMessage) //change the file, usually in response to a nexttrack request - { - [self changeFile:s]; - } - - [s release]; - } - else if (msgid == kCogSeekMessage) - { -// DBLog(@"MESAGE RECEIVED"); - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - double time; - double newTime; - unsigned long pos; - - time = (*(double *)[data bytes]); - pos = [self calculatePos:time]; - - newTime = [soundFile seekToTime:time]; - if (newTime >= 0.0) - { - [self resetBuffer]; - - pos = [self calculatePos:newTime]; - - [readLock lock]; - currentPosition = pos; - [readLock unlock]; - } - else - { - DBLog(@"Not resetting: %f", newTime); - newTime = [self calculateTime:currentPosition]; - } - //send a message with newTime - DBLog(@"RESETING TIME TO: %f", newTime); - [self sendPortMessage:kCogPositionUpdateMessage withData:&newTime ofSize:(sizeof(double))]; - } - else if (msgid == kCogEndOfPlaylistMessage) - { - [self setPlaybackStatus:kCogStatusEndOfPlaylist]; - } - else if (msgid == kCogSetVolumeMessage) - { - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - float vol; - - vol = (*(float *)[data bytes]); - - [self setVolume:vol]; - } -} - -- (void)startPositionTimer -{ - positionTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(sendPositionUpdate:) userInfo:nil repeats:YES]; -} - -- (void)stopPositionTimer -{ - [positionTimer invalidate]; - positionTimer = nil; -} - -- (void)scheduleFillTimer -{ - fillTimer = [NSTimer scheduledTimerWithTimeInterval:TIMEOUT target:self selector:@selector(fillBuffer:) userInfo:nil repeats:NO]; -} - -//the only method in the whole fucking thing that should be called by an outside thread -- (void)fireFillTimer -{ - NSDate *date = [[NSDate alloc] init]; -// DBLog(@"FIRED"); - [fillTimer setFireDate:date]; - - [date release]; -} - -- (void)fillBuffer:(id)sender -{ - int amountAvailable; - int convertedSize; - void *writePointer; - - if (playbackStatus == kCogStatusStopped) - { - DBLog(@"STOPPING"); - [self stop]; - return; - } - - [writeLock lock]; - - //We do this so uhm, newly started songs dont have to wait for the entire buffer to fill for data to become available. - amountAvailable = [writeRingBuffer lengthAvailableToWriteReturningPointer:&writePointer]; - - int i; - for (i = 0; i < amountAvailable; i =+ BUFFER_WRITE_CHUNK) - { - int amountToWrite; - if (amountAvailable > BUFFER_WRITE_CHUNK) - amountToWrite = BUFFER_WRITE_CHUNK; - else - amountToWrite = amountAvailable; - - convertedSize = [self convert:writePointer packets:(amountToWrite/deviceFormat.mBytesPerPacket)]; -// convertedSize = [self convert:writePointer packets:(amountAvailable/deviceFormat.mBytesPerPacket)]; - if (playbackStatus == kCogStatusPlaying && convertedSize == 0) - { - DBLog(@"NEXT!!!!"); - [self sendPortMessage:kCogRequestNextFileMessage]; - writeRingBuffer = [self oppositeBuffer:writeRingBuffer]; - - [self setPlaybackStatus:kCogStatusEndOfFile]; - } - -// writePointer = (char *)writePointer + convertedSize; - [writeRingBuffer didWriteLength:convertedSize]; - - amountAvailable = [writeRingBuffer lengthAvailableToWriteReturningPointer:&writePointer]; - } - [writeLock unlock]; -// DBLog(@"WRote: %i", convertedSize); - - [self scheduleFillTimer]; -} - -- (VirtualRingBuffer *)oppositeBuffer:(VirtualRingBuffer *)buf -{ - if (buf == ringBuffer) - return auxRingBuffer; - else - return ringBuffer; -} - -- (double)calculateTime:(unsigned long) pos -{ - return ((pos/deviceFormat.mBytesPerPacket)/(deviceFormat.mSampleRate/1000.0)); -} - -- (unsigned long)calculatePos:(double) time -{ - return (unsigned long)(time * (deviceFormat.mSampleRate/1000.0)) * deviceFormat.mBytesPerPacket; -} - -- (void)sendPositionUpdate:(id)sender -{ - //this may be a bad idea - [readLock lock]; - unsigned long pos = currentPosition; - [readLock unlock]; - - double time = [self calculateTime:pos]; - - [self sendPortMessage:kCogPositionUpdateMessage withData:&time ofSize:(sizeof(double))]; -} - -- (int)convert:(void *)destBuf packets:(int)numPackets -{ - AudioBufferList ioData; - UInt32 ioNumberFrames; - UInt32 destSize; - OSStatus err; - - destSize = numPackets*deviceFormat.mBytesPerPacket; - - ioNumberFrames = numPackets; - ioData.mBuffers[0].mData = destBuf; - ioData.mBuffers[0].mDataByteSize = destSize; - ioData.mBuffers[0].mNumberChannels = deviceFormat.mChannelsPerFrame; - ioData.mNumberBuffers = 1; - -// DBLog(@"THIS IS RETARDED: %i", ioData.mBuffers[0].mData); - DBLog(@"NUMBER OF PACKETS REQUESTED: %i", ioNumberFrames); - err = AudioConverterFillComplexBuffer(converter, Sound_ACInputProc, self, &ioNumberFrames, &ioData, NULL); - if (err != noErr) - DBLog(@"Converter error: %i", err); -// DBLog(@"THIS IS ANNOYING: %i", ioData.mBuffers[0].mData); - free(conversionBuffer); - - - DBLog(@"HERE: %i/%i", destSize, ioData.mBuffers[0].mDataByteSize); - -// DBLog(@"%i/%i",old, inNumberFrames); - return ioData.mBuffers[0].mDataByteSize; -} - -- (BOOL)setupAudioOutput -{ - ComponentDescription desc; - OSStatus err; - - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_DefaultOutput; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; - - Component comp = FindNextComponent(NULL, &desc); //Finds an component that meets the desc spec's - if (comp == NULL) - return NO; - - err = OpenAComponent(comp, &outputUnit); //gains access to the services provided by the component - if (err) - return NO; - - // Initialize AudioUnit - err = AudioUnitInitialize(outputUnit); - if (err != noErr) - return NO; - - - UInt32 size = sizeof (AudioStreamBasicDescription); - Boolean outWritable; - //Gets the size of the Stream Format Property and if it is writable - AudioUnitGetPropertyInfo(outputUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, - 0, - &size, - &outWritable); - //Get the current stream format of the output - err = AudioUnitGetProperty (outputUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, - 0, - &deviceFormat, - &size); - - if (err != noErr) - return NO; - -// change output format... - ///Seems some 3rd party devices return incorrect stuff...or I just don't like noninterleaved data. - deviceFormat.mFormatFlags &= ~kLinearPCMFormatFlagIsNonInterleaved; - deviceFormat.mBytesPerFrame = deviceFormat.mChannelsPerFrame*(deviceFormat.mBitsPerChannel/8); - deviceFormat.mBytesPerPacket = deviceFormat.mBytesPerFrame * deviceFormat.mFramesPerPacket; -// DBLog(@"stuff: %i %i %i %i", deviceFormat.mBitsPerChannel, deviceFormat.mBytesPerFrame, deviceFormat.mBytesPerPacket, deviceFormat.mFramesPerPacket); - err = AudioUnitSetProperty (outputUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, - 0, - &deviceFormat, - size); - - //Set the stream format of the output to match the input - err = AudioUnitSetProperty (outputUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Input, - 0, - &deviceFormat, - size); - - //setup render callbacks - renderCallback.inputProc = Sound_Renderer; - renderCallback.inputProcRefCon = self; - - AudioUnitSetProperty(outputUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &renderCallback, sizeof(AURenderCallbackStruct)); - -// DBLog(@"Audio output successfully initialized"); - return (err == noErr); -} - -- (BOOL)startAudioOutput -{ - return (noErr == AudioOutputUnitStart(outputUnit)); -} - -- (void)cleanUpAudioOutput -{ - AudioOutputUnitStop(outputUnit);//you must stop the audio unit - AudioUnitUninitialize (outputUnit); - CloseComponent(outputUnit); -} - -- (void)stopAudioOutput -{ - if (outputUnit) - AudioOutputUnitStop(outputUnit); -} - -- (BOOL)prepareSoundFile -{ -// DBLog(@"This fucker hates me"); - [soundFile getFormat:&sourceStreamFormat]; - -#ifdef DEBUG - PrintStreamDesc(&sourceStreamFormat); - PrintStreamDesc(&deviceFormat); -#endif - - //Make the converter - OSStatus stat = noErr; - stat = AudioConverterNew ( &sourceStreamFormat, &deviceFormat, &converter); -// DBLog(@"Created converter"); - if (stat != noErr) - { - DBLog(@"Error creating converter %i", stat); - } - - unsigned long length; - length = (unsigned long)([soundFile totalSize] * (deviceFormat.mSampleRate/sourceStreamFormat.mSampleRate) * (deviceFormat.mBytesPerPacket/sourceStreamFormat.mBytesPerPacket)); - - //again, may be bad - [readLock lock]; - totalLength = length; - [readLock unlock]; -// DBLog(@"AM I CRASHING?"); - return (stat == noErr); -} - -- (void)cleanUpSoundFile -{ - AudioConverterDispose(converter); - [soundFile close]; -} - -- (void)setPlaybackStatus:(int)s -{ - playbackStatus = s; - - [self sendPortMessage:kCogStatusUpdateMessage withData:&s ofSize:(sizeof(int))]; -} - -- (void)pause -{ - [self stopAudioOutput]; - - oldPlaybackStatus = playbackStatus; - [self setPlaybackStatus:kCogStatusPaused]; - - [self stopPositionTimer]; -} - -- (void)resume -{ - [self setPlaybackStatus:oldPlaybackStatus]; - - [self startAudioOutput]; - - [self startPositionTimer]; -} - -- (void)stop -{ - [self stopAudioOutput]; - DBLog(@"Audio output stopped"); - [self resetBuffer]; - DBLog(@"BUFFERS RESET"); - - [self setPlaybackStatus:kCogStatusStopped]; - -// DBLog(@"HERE? PORT CONFLICT...FUCK"); - unsigned long pos = 0; - [self sendPortMessage:kCogPositionUpdateMessage withData:&pos ofSize:(sizeof(unsigned long))]; -// DBLog(@"THIS IS UBER SHITE: %@", positionTimer); - - [self stopPositionTimer]; - - // DBLog(@"INVALIDATED"); -} - -- (void)playFile:(NSString *)filename -{ - [self resetBuffer]; - [self stopPositionTimer]; -// [self stop]; - - DBLog(@"PLAYING FILE"); - if (![self setSoundFile:filename]) - { - DBLog(@"NOT PLAYING FILE"); - [self stop]; - - return; - } - - [readLock lock]; - unsigned long length = totalLength; - int bitrate = [soundFile bitRate]; - [readLock unlock]; - - double time = [self calculateTime:length]; - - [self sendPortMessage:kCogLengthUpdateMessage withData:&time ofSize:(sizeof(double))]; - [self sendPortMessage:kCogBitrateUpdateMessage withData:&bitrate ofSize:(sizeof(int))]; - - [self setPlaybackStatus:kCogStatusPlaying]; - - [self fillBuffer:self]; - [self startAudioOutput]; - - [self startPositionTimer]; -} - -- (void)changeFile:(NSString *)filename -{ - if ([self setSoundFile:filename]) - [self fireFillTimer]; -} - -- (void)resetBuffer -{ - [writeLock lock]; -// [readLock lock]; - - [ringBuffer empty]; - [auxRingBuffer empty]; - - readRingBuffer = ringBuffer; - writeRingBuffer = ringBuffer; - - currentPosition = 0; - -// [readLock unlock]; - [writeLock unlock]; -} - -- (BOOL)setSoundFile:(NSString *)filename -{ - [self cleanUpSoundFile]; - [soundFile release]; - - //GO THROUGH HELLA SHIT TO DETERMINE FILE...NEED TO MAKE SOME KIND OF REGISTERING MECHANISM - soundFile = [SoundFile open:filename]; - if (!soundFile) - { - DBLog(@"NEW SONG SETSOUNDFILE"); - [self sendPortMessage:kCogFileChangedMessage]; - [self setPlaybackStatus:kCogStatusEndOfPlaylist]; -// [self sendPortMessage:kCogRequestNextFileMessage]; - return NO; - } - -// DBLog(@"File opened: %s", [filename UTF8String]); - [self prepareSoundFile]; - - return YES; -} - -- (void)setVolume:(float)v -{ -// DBLog(@"Setting volume to: %f", v); - //Get the current stream format of the output - OSStatus err = AudioUnitSetParameter (outputUnit, - kHALOutputParam_Volume, - kAudioUnitScope_Global, - 0, - v * 0.01f, - 0); -} - - -@end diff --git a/Old/SoundController.h b/Old/SoundController.h deleted file mode 100644 index 7f25beb22..000000000 --- a/Old/SoundController.h +++ /dev/null @@ -1,61 +0,0 @@ -/* SoundController */ - -#import - -#import "Sound.h" -#import "PlaylistController.h" -#import "TrackingSlider.h" - -@class PlaylistView; - -@interface SoundController : NSObject -{ - IBOutlet PlaylistController *playlistController; - IBOutlet PlaylistView *playlistView; - - IBOutlet TrackingSlider *positionSlider; - IBOutlet NSTextField *timeField; - IBOutlet NSTextField *lengthField; - IBOutlet NSTextField *bitrateField; - - IBOutlet NSButton *playButton; - - BOOL waitingForPlay; //No sneaky changing on us - Sound *sound; - - int playbackStatus; - - BOOL showTimeRemaining; - - //For communication with the sound - NSPort *sendPort; - NSPort *distantPort; -} - -- (IBAction)toggleShowTimeRemaining:(id)sender; -- (IBAction)changeVolume:(id)sender; - -- (IBAction)playPauseResume:(id)sender; -- (IBAction)pauseResume:(id)sender; - -- (IBAction)play:(id)sender; -- (IBAction)pause:(id)sender; -- (IBAction)resume:(id)sender; -- (IBAction)stop:(id)sender; - -- (IBAction)next:(id)sender; -- (IBAction)prev:(id)sender; -- (IBAction)seek:(id)sender; - - -- (void)updateTimeField:(double)pos; - -- (void)playEntryAtIndex:(int)i; -- (void)playEntry:(PlaylistEntry *)pe; - -- (void)sendPortMessage:(int)msgid; -- (void)sendPortMessage:(int)msgid withData:(void *)data ofSize:(int)size; -- (void)sendPortMessage:(int)msgid withString:(NSString *)s; -- (void)handlePortMessage:(NSPortMessage *)portMessage; - -@end diff --git a/Old/SoundController.m b/Old/SoundController.m deleted file mode 100644 index 82902042a..000000000 --- a/Old/SoundController.m +++ /dev/null @@ -1,345 +0,0 @@ -#import "SoundController.h" -#import "Sound.h" -#import "PlaylistView.h" - -#import "DBLog.h" - -@implementation SoundController - -//Note: use distributed objects for communication between Sound and SoundController....each should be in their own threads - -- (id)init -{ - self = [super init]; - if (self) - { - sound = [[Sound alloc] init]; - playbackStatus = kCogStatusStopped; - - showTimeRemaining = NO; - } - - return self; -} - -- (void)awakeFromNib -{ - sendPort = [NSPort port]; - if (sendPort) - { - [sendPort setDelegate:self]; - - NSArray *modes = [NSArray arrayWithObjects:NSDefaultRunLoopMode, NSEventTrackingRunLoopMode, NSModalPanelRunLoopMode, nil]; - NSEnumerator *enumerator; - NSString *mode; - - enumerator = [modes objectEnumerator]; - while ((mode = [enumerator nextObject])) - [[NSRunLoop currentRunLoop] addPort:sendPort forMode:mode]; - - - [NSThread detachNewThreadSelector:@selector(launchThreadWithPort:) toTarget:sound withObject:sendPort]; - } -} - - -- (IBAction)playPauseResume:(id)sender -{ - if (playbackStatus == kCogStatusStopped) - [self play:self]; - else - [self pauseResume:self]; -} - -- (IBAction)pauseResume:(id)sender -{ -// DBLog(@"Pause/Resume Sent!"); - [self sendPortMessage:kCogPauseResumeMessage]; -} - -- (IBAction)pause:(id)sender -{ -// DBLog(@"Pause Sent!"); - [self sendPortMessage:kCogPauseMessage]; -} - -- (IBAction)resume:(id)sender -{ -// DBLog(@"Resume Sent!"); - - [self sendPortMessage:kCogResumeMessage]; -} - -- (IBAction)stop:(id)sender -{ -// DBLog(@"Stop Sent!"); - - waitingForPlay = NO; - [self sendPortMessage:kCogStopMessage]; -} - -//called by double-clicking on table -- (void)playEntryAtIndex:(int)i -{ - PlaylistEntry *pe = [[playlistController arrangedObjects] objectAtIndex:i]; - - [playlistController setCurrentEntry:pe addToHistory:YES]; - [playlistController reset]; - - [self playEntry:pe]; -} - -- (IBAction)play:(id)sender -{ - if ([playlistView selectedRow] == -1) - [playlistView selectRow:0 byExtendingSelection:NO]; - - [self playEntryAtIndex:[playlistView selectedRow]]; -} - -- (void)playEntry:(PlaylistEntry *)pe; -{ - waitingForPlay = NO; - -// DBLog(@"PlayEntry: %@ Sent!", [pe filename]); - - [self sendPortMessage:kCogPlayFileMessage withString:[pe filename]]; -} - -- (IBAction)next:(id)sender -{ - waitingForPlay = NO; - if ([playlistController nextEntry] == nil) - return; - - [playlistController next]; - [self playEntry:[playlistController currentEntry]]; -} - -- (IBAction)prev:(id)sender -{ - waitingForPlay = NO; - if ([playlistController prevEntry] == nil) - return; - - [playlistController prev]; - [self playEntry:[playlistController currentEntry]]; -} - -- (IBAction)seek:(id)sender -{ -// DBLog(@"SEEKING?"); - double time; - time = [positionSlider doubleValue]; - - if ([sender tracking] == NO) // check if user stopped sliding before playing audio - [self sendPortMessage:kCogSeekMessage withData:&time ofSize: (sizeof(double))]; - - [self updateTimeField:time]; -} - -- (void)sendPortMessage:(int)msgid -{ - NSPortMessage *portMessage = [[NSPortMessage alloc] initWithSendPort:distantPort receivePort:sendPort components:nil]; - - if (portMessage) - { - [portMessage setMsgid:msgid]; - [portMessage sendBeforeDate:[NSDate date]]; - [portMessage release]; - } -} - -- (void)sendPortMessage:(int)msgid withData:(void *)data ofSize:(int)size -{ - NSPortMessage *portMessage; - NSData *d = [[NSData alloc] initWithBytes:data length:size]; - NSArray *a = [[NSArray alloc] initWithObjects:d,nil]; - portMessage = [[NSPortMessage alloc] initWithSendPort:distantPort receivePort:sendPort components:a]; - - [a release]; - [d release]; - - if (portMessage) - { - NSDate *date = [[NSDate alloc] init]; - - [portMessage setMsgid:msgid]; - [portMessage sendBeforeDate:date]; - - [date release]; - [portMessage release]; - } - -} - -- (void)sendPortMessage:(int)msgid withString:(NSString *)s -{ - NSData *dataString = [s dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]; - - NSPortMessage *portMessage = [[NSPortMessage alloc] initWithSendPort:distantPort receivePort:sendPort components:[NSArray arrayWithObject:dataString]]; - - if (portMessage) - { - [portMessage setMsgid:msgid]; - [portMessage sendBeforeDate:[NSDate date]]; - - [portMessage release]; - } -} - -- (void)changePlayButtonImage:(NSString *)name -{ - NSImage *img = [NSImage imageNamed:[name stringByAppendingString:@"_gray"]]; - NSImage *alt = [NSImage imageNamed:[name stringByAppendingString:@"_blue"]]; - [img retain]; - [alt retain]; - if (img == nil) - { - DBLog(@"NIL IMAGE!!!"); - } - if (alt == nil) - { - DBLog(@"NIL ALT"); - } - - [playButton setImage:img]; - [playButton setAlternateImage:alt]; -} - -- (IBAction)changeVolume:(id)sender -{ - float v = (float)[sender floatValue]; - [self sendPortMessage:kCogSetVolumeMessage withData:&v ofSize:sizeof(float)]; -} - - -- (void)updateTimeField:(double)pos -{ - NSString *text; - if (showTimeRemaining == NO) - { - int sec = (int)(pos/1000.0); - text = [NSString stringWithFormat:NSLocalizedString(@"TimeElapsed", @""), sec/60, sec%60]; - } - else - { - int sec = (int)(([positionSlider maxValue] - pos)/1000.0); - text = [NSString stringWithFormat:NSLocalizedString(@"TimeRemaining", @""), sec/60, sec%60]; - } - [timeField setStringValue:text]; -} - -- (IBAction)toggleShowTimeRemaining:(id)sender -{ - showTimeRemaining = !showTimeRemaining; - - [self updateTimeField:[positionSlider doubleValue]]; -} - -- (void)handlePortMessage:(NSPortMessage *)portMessage -{ - - unsigned int message = [portMessage msgid]; - - if (message == kCogCheckinMessage) - { - // Get the worker threadÕs communications port. - DBLog(@"CHECKIN RECEIVED"); - distantPort = [portMessage sendPort]; - - // Retain and save the worker port for later use. - [distantPort retain]; - } - else if (message == kCogRequestNextFileMessage) - { - PlaylistEntry *pe; - - pe = [playlistController nextEntry]; - - if (pe == nil) - { - [self sendPortMessage:kCogEndOfPlaylistMessage]; - } - else - { - DBLog(@"REQUESTING"); - waitingForPlay = YES; - - [self sendPortMessage:kCogChangeFileMessage withString:[pe filename]]; - } - } - else if (message == kCogFileChangedMessage) - { - DBLog(@"FILE CHANGED"); - if (waitingForPlay == YES) - { - waitingForPlay = NO; - [playlistController next]; - [self updateTimeField:0.0f]; - } - } - else if (message == kCogBitrateUpdateMessage) - { - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - - int bitrate; - bitrate = (*(int *)[data bytes]); - // DBLog(@"Received length update: %f", max); -// [bitrateField setIntValue:bitrate]; - } - else if (message == kCogLengthUpdateMessage) - { - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - - double max; - max = (*(double *)[data bytes]); -// DBLog(@"Received length update: %f", max); - [positionSlider setMaxValue:max]; - [positionSlider setDoubleValue:0]; -// DBLog(@"Length changed: %f", max); -// [lengthField setDoubleValue:max/1000.0]; - [self updateTimeField:0.0f]; - } - else if (message == kCogPositionUpdateMessage) - { - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - - double pos; - pos = (*(double *)[data bytes]); - - if ([positionSlider tracking] == NO) - { - // DBLog(@"Received pos update: %f", pos); - [positionSlider setDoubleValue:pos]; - [self updateTimeField:pos]; - } - } - else if (message == kCogStatusUpdateMessage) - { - NSArray* components = [portMessage components]; - NSData *data = [components objectAtIndex:0]; - - int s; - s = (*(int *)[data bytes]); - - playbackStatus = s; - DBLog(@"STATUS UPDATE: %i", s); - - if (s == kCogStatusStopped || s == kCogStatusPaused) - { - //Show play image - [self changePlayButtonImage:@"play"]; - } - else if (s == kCogStatusPlaying) - { - //Show pause - [self changePlayButtonImage:@"pause"]; - } - } -} - -@end diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index d573942f5..c961627da 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -11,6 +11,7 @@ #import "Shuffle.h" #import "CoreAudioUtils.h" +#import "CogAudio/AudioPlayer.h" @implementation PlaylistController @@ -22,9 +23,9 @@ if (self) { - acceptableFileTypes = [NSArray arrayWithObjects:@"shn",@"wv",@"ogg",@"mpc",@"flac",@"ape",nil]; - acceptableFileTypes = [[acceptableFileTypes arrayByAddingObjectsFromArray:getCoreAudioExtensions()] retain]; + acceptableFileTypes = [[AudioPlayer fileTypes] retain]; acceptablePlaylistTypes = [[NSArray alloc] initWithObjects:@"playlist",nil]; + shuffleList = [[NSMutableArray alloc] init]; // DBLog(@"DAH BUTTER CHORNAR: %@", history); } @@ -125,7 +126,6 @@ [pe setFilename:[sortedFiles objectAtIndex:i]]; [pe setIndex:index+i]; [pe setTitle:[[sortedFiles objectAtIndex:i] lastPathComponent]]; - [pe setDisplay:[[sortedFiles objectAtIndex:i] lastPathComponent]]; // [pe performSelectorOnMainThread:@selector(readTags) withObject:nil waitUntilDone:NO]; // [pe performSelectorOnMainThread:@selector(readInfo) withObject:nil waitUntilDone:NO]; diff --git a/Playlist/PlaylistEntry.h b/Playlist/PlaylistEntry.h index 6c66bfb80..5c5556dba 100644 --- a/Playlist/PlaylistEntry.h +++ b/Playlist/PlaylistEntry.h @@ -7,11 +7,9 @@ // #import -#import "SoundFile.h" @interface PlaylistEntry : NSObject { NSString *filename; - NSString *display; NSString *artist; NSString *album; @@ -44,8 +42,6 @@ -(void)setFilename:(NSString *)f; -(NSString *)filename; --(void)setDisplay:(NSString *)d; --(NSString *)display; -(void)setCurrent:(BOOL) b; -(BOOL)current; @@ -66,6 +62,12 @@ -(void)setTrack:(int)y; -(int)track; +- (void)setLength:(double)l; +- (void)setBitrate:(int) br; +- (void)setChannels:(int)c; +- (void)setBitsPerSample:(int)bps; +- (void)setSampleRate:(float)s; + - (double)length; - (int)bitrate; - (int)channels; diff --git a/Playlist/PlaylistEntry.m b/Playlist/PlaylistEntry.m index 06ec8d6fe..1d0413b42 100644 --- a/Playlist/PlaylistEntry.m +++ b/Playlist/PlaylistEntry.m @@ -7,7 +7,8 @@ // #import "PlaylistEntry.h" -#import "TagLib/tag_c.h" +#import "CogAudio/AudioPropertiesReader.h" +#import "CogAudio/AudioMetadataReader.h" @implementation PlaylistEntry @@ -18,7 +19,6 @@ { [self setIndex:0]; [self setFilename:@""]; - [self setDisplay:@"Untitled"]; } return self; @@ -26,10 +26,7 @@ - (void)dealloc { - NSLog(@"DEALLOCATING A PLAYLIST ENTRY: %@", display); - [filename release]; - [display release]; [super dealloc]; } @@ -70,39 +67,6 @@ f = [f copy]; [filename release]; filename = f; -/* - //GO THROUGH HELLA SHIT TO DETERMINE FILE...NEED TO MAKE SOME KIND OF REGISTERING MECHANISM - if ([[filename pathExtension] isEqualToString:@"wav"] || [[filename pathExtension] isEqualToString:@"aiff"]) - { - soundFile = [[WaveFile alloc] init]; - } - else if ([[filename pathExtension] isEqualToString:@"ogg"]) - { - soundFile = [[VorbisFile alloc] init]; - } - else if ([[filename pathExtension] isEqualToString:@"mpc"]) - { - soundFile = [[MusepackFile alloc] init]; - } - else if ([[filename pathExtension] isEqualToString:@"flac"]) - { - soundFile = [[FlacFile alloc] init]; - } - else if ([[filename pathExtension] isEqualToString:@"ape"]) - { - soundFile = [[MonkeysFile alloc] init]; - } - else if ([[filename pathExtension] isEqualToString:@"mp3"]) - { - soundFile = [[MPEGFile alloc] init]; - } - else - { - soundFile = nil; - } - - [soundFile open:[filename UTF8String]]; -*/ } -(NSString *)filename @@ -110,18 +74,6 @@ return filename; } --(void)setDisplay:(NSString *)d -{ - d = [d copy]; - [display release]; - display = d; -} - --(NSString *)display -{ - return display; -} - -(void)setCurrent:(BOOL) b { current = b; @@ -212,47 +164,22 @@ return track; } -- (void)readInfo +- (void)readInfoThreadedSetVariables:(NSDictionary *)dict { - SoundFile *sf = [SoundFile readInfo:filename]; - if (sf == nil) - return; + [self setLength: [[dict objectForKey:@"length" ] doubleValue]]; + [self setBitrate: [[dict objectForKey:@"bitrate" ] intValue]]; + [self setChannels: [[dict objectForKey:@"channels" ] intValue]]; + [self setBitsPerSample: [[dict objectForKey:@"bitsPerSample"] intValue]]; + [self setSampleRate: [[dict objectForKey:@"sampleRate" ] floatValue]]; - length = [sf length]; - bitrate = [sf bitrate]; - channels = [sf channels]; - bitsPerSample = [sf bitsPerSample]; - sampleRate = [sf frequency]; - - [self setLengthString:length]; - - [sf release]; -// DBLog(@"Length: %f bitrate: %i channels: %i bps: %i samplerate: %f", length, bitrate, channels, bitsPerSample, sampleRate); - - //[(SoundFile *)sf close]; -// [sp close]; -} - -- (void)readInfoThreadedSetVariables:(SoundFile *)sf -{ - [self setLength:[sf length]]; - [self setBitrate:[sf bitrate]]; - [self setChannels:[sf channels]]; - [self setBitsPerSample:[sf bitsPerSample]]; - [self setSampleRate:(float)[sf frequency]]; - - [self setLengthString:length]; - - [sf release]; + [self setLengthString:[[dict objectForKey:@"length"] doubleValue]]; } - (void)readInfoThreaded { - SoundFile *sf = [SoundFile readInfo:filename]; - if (sf == nil) - return; + NSDictionary *properties = [AudioPropertiesReader propertiesForURL:[NSURL fileURLWithPath:filename]]; - [self performSelectorOnMainThread:@selector(readInfoThreadedSetVariables:) withObject:sf waitUntilDone:YES]; + [self performSelectorOnMainThread:@selector(readInfoThreadedSetVariables:) withObject:properties waitUntilDone:YES]; } - (NSString *)lengthString @@ -313,173 +240,30 @@ return sampleRate; } --(void)readTags +- (void)readTagsThreadedSetVariables: (NSDictionary *)m { - TagLib_File *tagFile = taglib_file_new((const char *)[filename UTF8String]); - DBLog(@"Does it have a file? %i %s", tagFile, (const char *)[filename UTF8String]); - if (tagFile) - { - TagLib_Tag *tag = taglib_file_tag(tagFile); - DBLog(@"Does it have a tag? %i", tag); + NSString *ti = [m objectForKey:@"title"]; - if (tag) - { - char *pArtist, *pTitle, *pAlbum, *pGenre, *pComment; - - pArtist = taglib_tag_artist(tag); - pTitle = taglib_tag_title(tag); - pAlbum = taglib_tag_album(tag); - pGenre = taglib_tag_genre(tag); - pComment = taglib_tag_comment(tag); - - [self setYear:[[NSNumber numberWithInt:taglib_tag_year(tag)] stringValue]]; - [self setTrack:taglib_tag_track(tag)]; - - - if (pArtist != NULL) - [self setArtist:[NSString stringWithUTF8String:(char *)pArtist]]; - else - [self setArtist:nil]; - - if (pAlbum != NULL) - [self setAlbum:[NSString stringWithUTF8String:(char *)pAlbum]]; - else - [self setAlbum:nil]; - - if (pTitle != NULL) - [self setTitle:[NSString stringWithUTF8String:(char *)pTitle]]; - else - [self setTitle:nil]; - - if (pGenre != NULL) - [self setGenre:[NSString stringWithUTF8String:(char *)pGenre]]; - else - [self setGenre:nil]; - - if ([artist isEqualToString:@""] || [title isEqualToString:@""]) - { - [self setDisplay:[filename lastPathComponent]]; - [self setTitle:[filename lastPathComponent]]; - } - else - { - [self setDisplay:[NSString stringWithFormat:@"%@ - %@", artist, title]]; - } - - taglib_tag_free_strings(); - } - - taglib_file_free(tagFile); - } - else - { - [self setDisplay:[filename lastPathComponent]]; + if ([ti isEqualToString:@""]) { [self setTitle:[filename lastPathComponent]]; } -} - -- (void)readTagsThreadedSetVariables: (NSArray *)a -{ - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:0]); - [self setDisplay:[a objectAtIndex:0]]; - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:1]); - [self setTitle:[a objectAtIndex:1]]; - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:2]); - [self setArtist:[a objectAtIndex:2]]; - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:3]); - [self setAlbum:[a objectAtIndex:3]]; - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:4]); - [self setGenre:[a objectAtIndex:4]]; - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:5]); - [self setYear:[[a objectAtIndex:5] stringValue]]; - NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:6]); - [self setTrack:[[a objectAtIndex:6] intValue]]; + else { + [self setTitle:[m objectForKey:@"title"]]; + } + + [self setArtist:[m objectForKey:@"artist"]]; + [self setAlbum:[m objectForKey:@"album"]]; + [self setGenre:[m objectForKey:@"genre"]]; + [self setYear:[m objectForKey:@"year"]]; + [self setTrack:[[m objectForKey:@"track"] intValue]]; } - (void)readTagsThreaded { - NSString *lDisplay = @"", *lArtist = @"", *lTitle = @"", *lAlbum = @"", *lGenre = @""; - int lYear = 0, lTrack = 0; + NSDictionary *metadata = [AudioMetadataReader metadataForURL:[NSURL fileURLWithPath:filename]]; - TagLib_File *tagFile = taglib_file_new((const char *)[filename UTF8String]); - DBLog(@"Does it have a file? %i %s", tagFile, (const char *)[filename UTF8String]); - if (tagFile) - { - TagLib_Tag *tag = taglib_file_tag(tagFile); - DBLog(@"Does it have a tag? %i", tag); - - if (tag) - { - char *pArtist, *pTitle, *pAlbum, *pGenre, *pComment; - - pArtist = taglib_tag_artist(tag); - pTitle = taglib_tag_title(tag); - pAlbum = taglib_tag_album(tag); - pGenre = taglib_tag_genre(tag); - pComment = taglib_tag_comment(tag); - - lYear = taglib_tag_year(tag); - lTrack = taglib_tag_track(tag); - - if (pArtist != NULL) - lArtist = [NSString stringWithUTF8String:(char *)pArtist]; - else - lArtist = @""; - - if (pAlbum != NULL) - lAlbum = [NSString stringWithUTF8String:(char *)pAlbum]; - else - lAlbum = @""; - - if (pTitle != NULL) - { - NSLog(@"SET TITLE PROPERLY"); - lTitle = [NSString stringWithUTF8String:(char *)pTitle]; - } - else - lTitle = @""; - - if (pGenre != NULL) - lGenre = [NSString stringWithUTF8String:(char *)pGenre]; - else - lGenre = @""; - - if ([lArtist isEqualToString:@""] || [lTitle isEqualToString:@""]) - { - NSLog(@"SET TITLE IMPROPERLY"); + [self performSelectorOnMainThread:@selector(readTagsThreadedSetVariables:) withObject:metadata waitUntilDone:YES]; - lDisplay = [filename lastPathComponent]; - lTitle = [filename lastPathComponent]; - } - else - { - lDisplay = [NSString stringWithFormat:@"%@ - %@", lArtist, lTitle]; - } - - taglib_tag_free_strings(); - } - - taglib_file_free(tagFile); - } - else - { - NSLog(@"SET TITLE IMPROPERLY2"); - lDisplay = [filename lastPathComponent]; - lTitle = [filename lastPathComponent]; - } - NSLog(@"TITLE IS: %@", lTitle); - [self performSelectorOnMainThread:@selector(readTagsThreadedSetVariables:) withObject: - [NSArray arrayWithObjects: - lDisplay, - lTitle, - lArtist, - lAlbum, - lGenre, - [NSNumber numberWithInt:lYear], - [NSNumber numberWithInt:lTrack], - nil] - - waitUntilDone:YES]; } - (NSString *)description diff --git a/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj b/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj new file mode 100644 index 000000000..5833d3914 --- /dev/null +++ b/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj @@ -0,0 +1,270 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1745C21A0B90B7F800A6768C /* CoreAudioPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C2190B90B7F800A6768C /* CoreAudioPropertiesReader.m */; }; + 17C93E740B8FF192008627D6 /* CoreAudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93E730B8FF192008627D6 /* CoreAudioDecoder.m */; }; + 17C93EAC0B8FF3CE008627D6 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17C93EAB0B8FF3CE008627D6 /* CoreAudio.framework */; }; + 17C93EB30B8FF3E1008627D6 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17C93EB20B8FF3E1008627D6 /* AudioToolbox.framework */; }; + 17F94E1D0B8D128500A34E87 /* CoreAudioCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F94E1C0B8D128500A34E87 /* CoreAudioCodec.m */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1745C2180B90B7F800A6768C /* CoreAudioPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioPropertiesReader.h; sourceTree = ""; }; + 1745C2190B90B7F800A6768C /* CoreAudioPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioPropertiesReader.m; sourceTree = ""; }; + 177FCFCA0B90C9A10011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 17C93E720B8FF192008627D6 /* CoreAudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CoreAudioDecoder.h; sourceTree = ""; }; + 17C93E730B8FF192008627D6 /* CoreAudioDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CoreAudioDecoder.m; sourceTree = ""; }; + 17C93EAB0B8FF3CE008627D6 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + 17C93EB20B8FF3E1008627D6 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + 17F94E1B0B8D128500A34E87 /* CoreAudioCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreAudioCodec.h; sourceTree = ""; }; + 17F94E1C0B8D128500A34E87 /* CoreAudioCodec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreAudioCodec.m; sourceTree = ""; }; + 32DBCF630370AF2F00C91783 /* CoreAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreAudio_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* CoreAudio.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreAudio.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 17C93EAC0B8FF3CE008627D6 /* CoreAudio.framework in Frameworks */, + 17C93EB30B8FF3E1008627D6 /* AudioToolbox.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* CoreAudio */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = CoreAudio; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCFCA0B90C9A10011C3B5 /* Plugin.h */, + 17F94E1B0B8D128500A34E87 /* CoreAudioCodec.h */, + 17F94E1C0B8D128500A34E87 /* CoreAudioCodec.m */, + 17C93E720B8FF192008627D6 /* CoreAudioDecoder.h */, + 17C93E730B8FF192008627D6 /* CoreAudioDecoder.m */, + 1745C2180B90B7F800A6768C /* CoreAudioPropertiesReader.h */, + 1745C2190B90B7F800A6768C /* CoreAudioPropertiesReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 17C93EB20B8FF3E1008627D6 /* AudioToolbox.framework */, + 17C93EAB0B8FF3CE008627D6 /* CoreAudio.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* CoreAudio.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* CoreAudio_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* CoreAudio */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "CoreAudio" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CoreAudio; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = CoreAudio; + productReference = 8D5B49B6048680CD000E48DA /* CoreAudio.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "CoreAudio" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* CoreAudio */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* CoreAudio */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17F94E1D0B8D128500A34E87 /* CoreAudioCodec.m in Sources */, + 17C93E740B8FF192008627D6 /* CoreAudioDecoder.m in Sources */, + 1745C21A0B90B7F800A6768C /* CoreAudioPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = CoreAudio_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = CoreAudio; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = CoreAudio_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = CoreAudio; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "CoreAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "CoreAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/CoreAudio/CoreAudioCodec.h b/Plugins/CoreAudio/CoreAudioCodec.h new file mode 100644 index 000000000..c61baa3ac --- /dev/null +++ b/Plugins/CoreAudio/CoreAudioCodec.h @@ -0,0 +1,17 @@ +// +// CoreAudio.h +// CoreAudio +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface CoreAudioCodec : NSObject +{ + +} + +@end diff --git a/Plugins/CoreAudio/CoreAudioCodec.m b/Plugins/CoreAudio/CoreAudioCodec.m new file mode 100644 index 000000000..71a0762f4 --- /dev/null +++ b/Plugins/CoreAudio/CoreAudioCodec.m @@ -0,0 +1,39 @@ +// +// CoreAudio.m +// CoreAudio +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "CoreAudioCodec.h" +#import "CoreAudioDecoder.h" +#import "CoreAudioPropertiesReader.h" + +@implementation CoreAudioCodec + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [CoreAudioDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [CoreAudioPropertiesReader class]; +} + + + + + +@end diff --git a/Plugins/CoreAudio/CoreAudioDecoder.h b/Plugins/CoreAudio/CoreAudioDecoder.h new file mode 100644 index 000000000..6a54c6497 --- /dev/null +++ b/Plugins/CoreAudio/CoreAudioDecoder.h @@ -0,0 +1,48 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import + +#include + +#import "Plugin.h" + +#undef _USE_WRAPPER_ + +@interface CoreAudioDecoder : NSObject +{ + ExtAudioFileRef _in; + +#ifdef _USE_WRAPPER_ + int _inFd; + AudioFileID _audioID; + + SInt64 _fileSize; + SInt64 _startOffset; +#endif + + int bitrate; + int bitsPerSample; + int channels; + float frequency; + double length; +} + +@end diff --git a/Plugins/CoreAudio/CoreAudioDecoder.m b/Plugins/CoreAudio/CoreAudioDecoder.m new file mode 100644 index 000000000..f63f40051 --- /dev/null +++ b/Plugins/CoreAudio/CoreAudioDecoder.m @@ -0,0 +1,344 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#import "CoreAudioDecoder.h" + +@interface CoreAudioDecoder (Private) +- (BOOL) readInfoFromExtAudioFileRef; +@end + +@implementation CoreAudioDecoder + +#ifdef _USE_WRAPPER_ +OSStatus readFunc(void * inRefCon, SInt64 inPosition, ByteCount requestCount, void *buffer, ByteCount* actualCount) +{ + CoreAudioFile *caf = (CoreAudioFile *)inRefCon; + int fd = caf->_inFd; + + // fseek(fd, inPosition, SEEK_SET); +// NSLog(@"Requesting %u", requestCount); +// NSLog(@"Currently at %lli", inPosition); + + *actualCount = pread(fd, buffer, requestCount, inPosition+caf->_startOffset); + + if (*actualCount <= 0) + { + return -1000; //Error? + } + + return noErr; +} + +SInt64 getSizeFunc(void *inRefCon) +{ + CoreAudioFile *caf = (CoreAudioFile *)inRefCon; + int fd = caf->_inFd; + + if (caf->_fileSize != 0) + { + return caf->_fileSize; + } + + /* long curPos; + + curPos = ftell(fd); + + fseek(fd, 0, SEEK_END); + + caf->_fileSize = ftell(fd); + + fseek(fd, curPos, SEEK_SET); + */ + + caf->_fileSize = lseek(fd, 0, SEEK_END) - caf->_startOffset; + NSLog(@"SIZE at %lli", caf->_fileSize); + + NSLog(@"ERROR: %i = %i %i %i", errno, EBADF, ESPIPE, EINVAL); + return caf->_fileSize; +} + +OSStatus setSizeFunc(void * inRefCon, SInt64 inSize) +{ + NSLog(@"setsize FUNC"); + + return -1000; //Not supported at the moment +} + +OSStatus writeFunc(void * inRefCon, SInt64 inPosition, ByteCount requestCount, const void *buffer, ByteCount* actualCount) +{ + NSLog(@"WRITE FUNC"); + return -1000; //Not supported at the moment +} +#endif + +- (void) close +{ + OSStatus err; + +#ifdef _USE_WRAPPER_ + if (_inFd) + close(_inFd); + AudioFileClose(_audioID); +#endif + + err = ExtAudioFileDispose(_in); + if(noErr != err) { + NSLog(@"Error closing ExtAudioFile"); + } +} + +- (BOOL) open:(NSURL *)url +{ + OSStatus err; + +#ifdef _USE_WRAPPER_ + AudioFileTypeID type = 0; + NSString *ext; + + // Open the input file + _inFd = open([[url path] UTF8String], O_RDONLY, 0777); + if (_inFd < 0) + { + NSLog(@"Error operning file: %s", url); + return NO; + } + _startOffset = 0; + + ext = [[url path] pathExtension]; + //Find first sync frame for MP3 + if([ext caseInsensitiveCompare:@"mp3"] == NSOrderedSame) { + size_t bytesRead; + uint8_t buf[2]; + + type = kAudioFileMP3Type; + + for(;;) { + bytesRead = read(_inFd, buf, 2); + + + if(2 != bytesRead) { + NSLog(@"Error finding mp3 sync frame"); + close(_inFd); + return NO; + } + + + // found some kind of data + if(0x00 != buf[0] || 0x00 != buf[1]) { + _startOffset = lseek(_inFd, 0, SEEK_CUR) - 2; + NSLog(@"Found sync frame at: %llx", _startOffset); + break; + } + } + } + else if([ext caseInsensitiveCompare:@"aac"] == NSOrderedSame) { + type = kAudioFileAAC_ADTSType; + } + else if([ext caseInsensitiveCompare:@"m4a"] == NSOrderedSame) { + type = kAudioFileM4AType; + } + else if([ext caseInsensitiveCompare:@"mp4"] == NSOrderedSame) { + type = kAudioFileMPEG4Type; + } + + //Using callbacks with fopen, ftell, fseek, fclose, because the default pread hangs when accessing the same file from multiple threads. + err = AudioFileOpenWithCallbacks(self, readFunc, writeFunc, getSizeFunc, setSizeFunc, type, &_audioID); + if(noErr != err) + { + NSLog(@"Error opening with callbacks, falling back: %s", (char *)&err); + FSRef ref; + close(_inFd); + _inFd = 0; + + err = FSPathMakeRef((const UInt8 *)[[url path] UTF8String], &ref, NULL); + if(noErr != err) { + return NO; + } + + err = AudioFileOpen(&ref, fsRdPerm, type, &_audioID); + if(noErr != err) { + NSLog(@"Error opening AudioFile: %s", (char *)&err); + return NO; + } + } + + err = ExtAudioFileWrapAudioFileID(_audioID, NO, &_in); + if(noErr != err) { + return NO; + } + +#else + FSRef ref; + + // Open the input file + err = FSPathMakeRef((const UInt8 *)[[url path] UTF8String], &ref, NULL); + if(noErr != err) { + return NO; + } + + err = ExtAudioFileOpen(&ref, &_in); + if(noErr != err) { + NSLog(@"Error opening file: %s", &err); + return NO; + } +#endif + return [self readInfoFromExtAudioFileRef]; +} + +- (BOOL) readInfoFromExtAudioFileRef +{ + OSStatus err; + UInt32 size; + SInt64 totalFrames; + AudioStreamBasicDescription asbd; + + // Get input file information + size = sizeof(asbd); + err = ExtAudioFileGetProperty(_in, kExtAudioFileProperty_FileDataFormat, &size, &asbd); + if(err != noErr) { + err = ExtAudioFileDispose(_in); + return NO; + } + + size = sizeof(totalFrames); + err = ExtAudioFileGetProperty(_in, kExtAudioFileProperty_FileLengthFrames, &size, &totalFrames); + if(err != noErr) { + err = ExtAudioFileDispose(_in); + return NO; + } + +#ifdef _USE_WRAPPER_ + SInt64 totalBytes; + + size = sizeof(totalBytes); + err = AudioFileGetProperty(_audioID, kAudioFilePropertyAudioDataByteCount, &size, &totalBytes); + if(err != noErr) { + [self close]; + return NO; + } + + bitrate = round(((totalBytes*8.0)/((double)(totalFrames)/asbd.mSampleRate))/1000.0); +#else + //Is there a way to get bitrate with extAudioFile? + bitrate = 0; +#endif + + // Set our properties + bitsPerSample = asbd.mBitsPerChannel; + channels = asbd.mChannelsPerFrame; + frequency = asbd.mSampleRate; + + // mBitsPerChannel will only be set for lpcm formats + if(0 == bitsPerSample) { + bitsPerSample = 16; + } + + length = ((double)totalFrames*1000.0)/frequency; + + // Set output format + AudioStreamBasicDescription result; + + bzero(&result, sizeof(AudioStreamBasicDescription)); + + result.mFormatID = kAudioFormatLinearPCM; + result.mFormatFlags = kAudioFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsBigEndian; + + result.mSampleRate = frequency; + result.mChannelsPerFrame = channels; + result.mBitsPerChannel = bitsPerSample; + + result.mBytesPerPacket = channels * (bitsPerSample / 8); + result.mFramesPerPacket = 1; + result.mBytesPerFrame = channels * (bitsPerSample / 8); + + err = ExtAudioFileSetProperty(_in, kExtAudioFileProperty_ClientDataFormat, sizeof(result), &result); + if(noErr != err) { + err = ExtAudioFileDispose(_in); + return NO; + } + + return YES; +} + +- (int) fillBuffer:(void *)buf ofSize:(UInt32)size +{ + OSStatus err; + AudioBufferList bufferList; + UInt32 frameCount; + + // Set up the AudioBufferList + bufferList.mNumberBuffers = 1; + bufferList.mBuffers[0].mNumberChannels = channels; + bufferList.mBuffers[0].mData = buf; + bufferList.mBuffers[0].mDataByteSize = size; + + // Read a chunk of PCM input (converted from whatever format) + frameCount = (size / (channels * (bitsPerSample / 8))); + err = ExtAudioFileRead(_in, &frameCount, &bufferList); + if(err != noErr) { + return 0; + } + + return frameCount * (channels * (bitsPerSample / 8)); +} + +- (double) seekToTime:(double)milliseconds +{ + OSStatus err; + + err = ExtAudioFileSeek(_in, ((milliseconds / 1000.f) * frequency)); + if(noErr != err) { + return -1.f; + } + + return milliseconds; +} + ++ (NSArray *)fileTypes +{ + OSStatus err; + UInt32 size; + NSArray *sAudioExtensions; + + size = sizeof(sAudioExtensions); + err = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AllExtensions, 0, NULL, &size, &sAudioExtensions); + if(noErr != err) { + return nil; + } + + return [sAudioExtensions autorelease]; +} + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels],@"channels", + [NSNumber numberWithInt:bitsPerSample],@"bitsPerSample", + [NSNumber numberWithInt:bitrate],@"bitrate", + [NSNumber numberWithFloat:frequency],@"sampleRate", + [NSNumber numberWithDouble:length],@"length", + @"big", @"endian", + nil]; +} + + +@end diff --git a/Plugins/CoreAudio/CoreAudioPropertiesReader.h b/Plugins/CoreAudio/CoreAudioPropertiesReader.h new file mode 100644 index 000000000..e360fa61a --- /dev/null +++ b/Plugins/CoreAudio/CoreAudioPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface CoreAudioPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/CoreAudio/CoreAudioPropertiesReader.m b/Plugins/CoreAudio/CoreAudioPropertiesReader.m new file mode 100644 index 000000000..77d7e43be --- /dev/null +++ b/Plugins/CoreAudio/CoreAudioPropertiesReader.m @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "CoreAudioPropertiesReader.h" +#import "CoreAudioDecoder.h" + +@implementation CoreAudioPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + CoreAudioDecoder *decoder; + + decoder = [[CoreAudioDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [CoreAudioDecoder fileTypes]; +} + +@end diff --git a/Plugins/CoreAudio/CoreAudio_Prefix.pch b/Plugins/CoreAudio/CoreAudio_Prefix.pch new file mode 100644 index 000000000..5d4df9d9d --- /dev/null +++ b/Plugins/CoreAudio/CoreAudio_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'CoreAudio' target in the 'CoreAudio' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/CoreAudio/Info.plist b/Plugins/CoreAudio/Info.plist new file mode 100644 index 000000000..43bc09cf9 --- /dev/null +++ b/Plugins/CoreAudio/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + CoreAudioCodec + + diff --git a/Plugins/Flac/Flac.xcodeproj/project.pbxproj b/Plugins/Flac/Flac.xcodeproj/project.pbxproj new file mode 100644 index 000000000..f72978eac --- /dev/null +++ b/Plugins/Flac/Flac.xcodeproj/project.pbxproj @@ -0,0 +1,297 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1745C2C50B90BAC700A6768C /* FlacPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C2C30B90BAC700A6768C /* FlacPropertiesReader.m */; }; + 177FCFC20B90C9960011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCFC10B90C9960011C3B5 /* Plugin.h */; }; + 179CFDB20B90C73400C8C4DB /* FLAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 179CFDB10B90C73400C8C4DB /* FLAC.framework */; }; + 179CFDB50B90C73900C8C4DB /* FLAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179CFDB10B90C73400C8C4DB /* FLAC.framework */; }; + 17C93F080B8FF67A008627D6 /* FlacDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93F040B8FF67A008627D6 /* FlacDecoder.m */; }; + 17C93F090B8FF67A008627D6 /* FlacCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93F070B8FF67A008627D6 /* FlacCodec.m */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 17C93F300B8FF7CC008627D6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 179CFDB50B90C73900C8C4DB /* FLAC.framework in CopyFiles */, + 177FCFC20B90C9960011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1745C2C20B90BAC700A6768C /* FlacPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlacPropertiesReader.h; sourceTree = ""; }; + 1745C2C30B90BAC700A6768C /* FlacPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FlacPropertiesReader.m; sourceTree = ""; }; + 177FCFC10B90C9960011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 179CFDB10B90C73400C8C4DB /* FLAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FLAC.framework; path = ../../Frameworks/FLAC/build/Release/FLAC.framework; sourceTree = SOURCE_ROOT; }; + 17C93F030B8FF67A008627D6 /* FlacDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlacDecoder.h; sourceTree = ""; }; + 17C93F040B8FF67A008627D6 /* FlacDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FlacDecoder.m; sourceTree = ""; }; + 17C93F060B8FF67A008627D6 /* FlacCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlacCodec.h; sourceTree = ""; }; + 17C93F070B8FF67A008627D6 /* FlacCodec.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FlacCodec.m; sourceTree = ""; }; + 32DBCF630370AF2F00C91783 /* Flac_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Flac_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* Flac.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flac.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 179CFDB20B90C73400C8C4DB /* FLAC.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Flac */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = Flac; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCFC10B90C9960011C3B5 /* Plugin.h */, + 17C93F060B8FF67A008627D6 /* FlacCodec.h */, + 17C93F070B8FF67A008627D6 /* FlacCodec.m */, + 17C93F030B8FF67A008627D6 /* FlacDecoder.h */, + 17C93F040B8FF67A008627D6 /* FlacDecoder.m */, + 1745C2C20B90BAC700A6768C /* FlacPropertiesReader.h */, + 1745C2C30B90BAC700A6768C /* FlacPropertiesReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 179CFDB10B90C73400C8C4DB /* FLAC.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* Flac.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* Flac_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* Flac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Flac" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 17C93F300B8FF7CC008627D6 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Flac; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = Flac; + productReference = 8D5B49B6048680CD000E48DA /* Flac.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Flac" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Flac */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* Flac */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17C93F080B8FF67A008627D6 /* FlacDecoder.m in Sources */, + 17C93F090B8FF67A008627D6 /* FlacCodec.m in Sources */, + 1745C2C50B90BAC700A6768C /* FlacPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/FLAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/FLAC/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Flac_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Flac; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/FLAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/FLAC/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Flac_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Flac; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Flac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Flac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/Flac/FlacCodec.h b/Plugins/Flac/FlacCodec.h new file mode 100644 index 000000000..02fbdd330 --- /dev/null +++ b/Plugins/Flac/FlacCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface FlacCodec : NSObject +{ + +} + +@end diff --git a/Plugins/Flac/FlacCodec.m b/Plugins/Flac/FlacCodec.m new file mode 100644 index 000000000..dcf0f374d --- /dev/null +++ b/Plugins/Flac/FlacCodec.m @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "FlacCodec.h" +#import "FlacDecoder.h" +#import "FlacPropertiesReader.h" + +@implementation FlacCodec + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [FlacDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [FlacPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/Flac/FlacDecoder.h b/Plugins/Flac/FlacDecoder.h new file mode 100644 index 000000000..3d14eb13d --- /dev/null +++ b/Plugins/Flac/FlacDecoder.h @@ -0,0 +1,35 @@ +// +// FlacFile.h +// zyVorbis +// +// Created by Vincent Spader on 1/25/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import +#import "FLAC/all.h" + +#define SAMPLES_PER_WRITE 512 +#define FLAC__MAX_SUPPORTED_CHANNELS 2 +#define SAMPLE_BUFFER_SIZE ((FLAC__MAX_BLOCK_SIZE + SAMPLES_PER_WRITE) * FLAC__MAX_SUPPORTED_CHANNELS * (24/8)) + +#import "Plugin.h" + +@interface FlacDecoder : NSObject +{ + FLAC__FileDecoder *decoder; + char buffer[SAMPLE_BUFFER_SIZE]; + int bufferAmount; + + int bitsPerSample; + int channels; + float frequency; + double length; +} + +- (FLAC__FileDecoder *)decoder; +- (char *)buffer; +- (int)bufferAmount; +- (void)setBufferAmount:(int)amount; + +@end diff --git a/Plugins/Flac/FlacDecoder.m b/Plugins/Flac/FlacDecoder.m new file mode 100644 index 000000000..1a2800b1e --- /dev/null +++ b/Plugins/Flac/FlacDecoder.m @@ -0,0 +1,184 @@ +// +// FlacDecoder.m +// zyVorbis +// +// Created by Vincent Spader on 1/25/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import "FlacDecoder.h" + + +@implementation FlacDecoder + +FLAC__StreamDecoderWriteStatus WriteProc(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const sampleBuffer[], void *client_data) +{ + FlacDecoder *flacDecoder = (FlacDecoder *)client_data; + unsigned wide_samples = frame->header.blocksize; + unsigned channels = frame->header.channels; + + UInt16 *buffer = (UInt16 *)[flacDecoder buffer]; + int i, j, c; + + for (i = j = 0; i < wide_samples; i++) + { + for (c = 0; c < channels; c++, j++) + { +// buffer[j] = CFSwapInt16LittleToHost(sampleBuffer[c][i]); + buffer[j] = sampleBuffer[c][i]; + } + } + +// memcpy([flacDecoder buffer], sampleBuffer, wide_samples*[flacDecoder bitsPerSample]/8); + [flacDecoder setBufferAmount:(wide_samples * channels*2)]; + + return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; +} + +void MetadataProc(const FLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) +{ + FlacDecoder *flacDecoder = (FlacDecoder *)client_data; + + flacDecoder->channels = metadata->data.stream_info.channels; + flacDecoder->frequency = metadata->data.stream_info.sample_rate; + flacDecoder->bitsPerSample = metadata->data.stream_info.bits_per_sample; + + flacDecoder->length = ((double)metadata->data.stream_info.total_samples*1000.0)/flacDecoder->frequency; +} + +void ErrorProc(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) +{ + //Do nothing? +} + +- (BOOL)open:(NSURL *)url +{ + FLAC__bool status; + + decoder = FLAC__file_decoder_new(); + if (decoder == NULL) + return NO; + + status = FLAC__file_decoder_set_filename(decoder, [[url path] UTF8String]); + if (status == false) + return NO; + + status = FLAC__file_decoder_set_write_callback(decoder, WriteProc); + if (status == false) + return NO; + + status = FLAC__file_decoder_set_metadata_callback(decoder, MetadataProc); + if (status == false) + return NO; + + status = FLAC__file_decoder_set_error_callback(decoder, ErrorProc); + if (status == false) + return NO; + + status = FLAC__file_decoder_set_client_data(decoder, self); + if (status == false) + return NO; + + if (FLAC__file_decoder_init(decoder) != FLAC__FILE_DECODER_OK) + return NO; + + FLAC__file_decoder_process_until_end_of_metadata(decoder); + + return YES; +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + int count; + int numread; + + if (bufferAmount == 0) + { + int i; + if (FLAC__file_decoder_get_state (decoder) == FLAC__FILE_DECODER_END_OF_FILE) + { + return 0; + } + + i = FLAC__file_decoder_process_single(decoder);// != FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE); + //return 0; +// [self writeSamplesToBuffer:buffer fromBuffer:sampleBuffer ofSize:(status*2)]; +// write callback sets bufferAmount...frickin weird, also sets sampleBuffer +// bufferAmount = status*4; + } + + count = bufferAmount; + if (bufferAmount > size) + { + count = size; + } + memcpy(buf, buffer, count); + + bufferAmount -= count; + + if (bufferAmount > 0) + memmove(buffer, &buffer[count], bufferAmount); + + if (count < size) + numread = [self fillBuffer:(&((char *)buf)[count]) ofSize:(size - count)]; + else + numread = 0; + + return count + numread; + +} + +- (void)close +{ + if (decoder) + { + FLAC__file_decoder_finish(decoder); + FLAC__file_decoder_delete(decoder); + } + decoder = NULL; + +} + +- (double)seekToTime:(double)milliseconds +{ + FLAC__file_decoder_seek_absolute(decoder, frequency * ((double)milliseconds/1000.0)); + + return milliseconds; +} + +//bs methods +- (char *)buffer +{ + return buffer; +} +- (int)bufferAmount +{ + return bufferAmount; +} +- (void)setBufferAmount:(int)amount +{ + bufferAmount = amount; +} + +- (FLAC__FileDecoder *)decoder +{ + return decoder; +} + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels],@"channels", + [NSNumber numberWithInt:bitsPerSample],@"bitsPerSample", + [NSNumber numberWithFloat:frequency],@"sampleRate", + [NSNumber numberWithDouble:length],@"length", + @"host",@"endian", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"flac"]; +} + +@end diff --git a/Plugins/Flac/FlacPropertiesReader.h b/Plugins/Flac/FlacPropertiesReader.h new file mode 100644 index 000000000..a61a4b30d --- /dev/null +++ b/Plugins/Flac/FlacPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface FlacPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/Flac/FlacPropertiesReader.m b/Plugins/Flac/FlacPropertiesReader.m new file mode 100644 index 000000000..374b92d0b --- /dev/null +++ b/Plugins/Flac/FlacPropertiesReader.m @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "FlacPropertiesReader.h" +#import "FlacDecoder.h" + +@implementation FlacPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + FlacDecoder *decoder; + + decoder = [[FlacDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [FlacDecoder fileTypes]; +} + +@end diff --git a/Plugins/Flac/Flac_Prefix.pch b/Plugins/Flac/Flac_Prefix.pch new file mode 100644 index 000000000..da291e6bd --- /dev/null +++ b/Plugins/Flac/Flac_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Flac' target in the 'Flac' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/Flac/Info.plist b/Plugins/Flac/Info.plist new file mode 100644 index 000000000..2ae4c2612 --- /dev/null +++ b/Plugins/Flac/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + FlacCodec + + diff --git a/Plugins/MAD/Info.plist b/Plugins/MAD/Info.plist new file mode 100644 index 000000000..520f61603 --- /dev/null +++ b/Plugins/MAD/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + MADCodec + + diff --git a/Plugins/MAD/MAD.xcodeproj/project.pbxproj b/Plugins/MAD/MAD.xcodeproj/project.pbxproj new file mode 100644 index 000000000..725ac44d4 --- /dev/null +++ b/Plugins/MAD/MAD.xcodeproj/project.pbxproj @@ -0,0 +1,319 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 170335470B8FC4EE00327265 /* MADDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 170335430B8FC4EE00327265 /* MADDecoder.m */; }; + 170335480B8FC4EE00327265 /* MADCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 170335450B8FC4EE00327265 /* MADCodec.m */; }; + 177FCEF40B90C8910011C3B5 /* MAD.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177FCEF30B90C8910011C3B5 /* MAD.framework */; }; + 177FCEF80B90C8990011C3B5 /* ID3Tag.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177FCEF70B90C8990011C3B5 /* ID3Tag.framework */; }; + 177FCF000B90C8A20011C3B5 /* ID3Tag.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCEF70B90C8990011C3B5 /* ID3Tag.framework */; }; + 177FCF010B90C8A20011C3B5 /* MAD.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCEF30B90C8910011C3B5 /* MAD.framework */; }; + 177FCFBC0B90C98A0011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCFBB0B90C98A0011C3B5 /* Plugin.h */; }; + 17B618AF0B90997E00BC003F /* MADPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 17B618AD0B90997E00BC003F /* MADPropertiesReader.m */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 170335510B8FC52B00327265 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 177FCF000B90C8A20011C3B5 /* ID3Tag.framework in CopyFiles */, + 177FCF010B90C8A20011C3B5 /* MAD.framework in CopyFiles */, + 177FCFBC0B90C98A0011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 170335420B8FC4EE00327265 /* MADDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MADDecoder.h; sourceTree = ""; }; + 170335430B8FC4EE00327265 /* MADDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MADDecoder.m; sourceTree = ""; }; + 170335440B8FC4EE00327265 /* MADCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MADCodec.h; sourceTree = ""; }; + 170335450B8FC4EE00327265 /* MADCodec.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MADCodec.m; sourceTree = ""; }; + 177FCEF30B90C8910011C3B5 /* MAD.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAD.framework; path = ../../Frameworks/MAD/build/Release/MAD.framework; sourceTree = SOURCE_ROOT; }; + 177FCEF70B90C8990011C3B5 /* ID3Tag.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ID3Tag.framework; path = ../../Frameworks/ID3Tag/build/Release/ID3Tag.framework; sourceTree = SOURCE_ROOT; }; + 177FCFBB0B90C98A0011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 17B618AC0B90997E00BC003F /* MADPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MADPropertiesReader.h; sourceTree = ""; }; + 17B618AD0B90997E00BC003F /* MADPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MADPropertiesReader.m; sourceTree = ""; }; + 32DBCF630370AF2F00C91783 /* MAD_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAD_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* MAD.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MAD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 177FCEF40B90C8910011C3B5 /* MAD.framework in Frameworks */, + 177FCEF80B90C8990011C3B5 /* ID3Tag.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* MAD */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = MAD; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCFBB0B90C98A0011C3B5 /* Plugin.h */, + 170335440B8FC4EE00327265 /* MADCodec.h */, + 170335450B8FC4EE00327265 /* MADCodec.m */, + 170335420B8FC4EE00327265 /* MADDecoder.h */, + 170335430B8FC4EE00327265 /* MADDecoder.m */, + 17B618AC0B90997E00BC003F /* MADPropertiesReader.h */, + 17B618AD0B90997E00BC003F /* MADPropertiesReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 177FCEF70B90C8990011C3B5 /* ID3Tag.framework */, + 177FCEF30B90C8910011C3B5 /* MAD.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* MAD.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* MAD_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* MAD */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "MAD" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 170335510B8FC52B00327265 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MAD; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = MAD; + productReference = 8D5B49B6048680CD000E48DA /* MAD.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "MAD" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* MAD */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* MAD */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 170335470B8FC4EE00327265 /* MADDecoder.m in Sources */, + 170335480B8FC4EE00327265 /* MADCodec.m in Sources */, + 17B618AF0B90997E00BC003F /* MADPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_4)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_5)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_6)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../../ID3Tag/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../../../Frameworks/MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_4 = "\"$(SRCROOT)/../../../Frameworks/ID3Tag/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_5 = "\"$(SRCROOT)/../../Frameworks/MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_6 = "\"$(SRCROOT)/../../Frameworks/ID3Tag/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MAD_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = MAD; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_4)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_5)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_6)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../../ID3Tag/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../../../Frameworks/MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_4 = "\"$(SRCROOT)/../../../Frameworks/ID3Tag/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_5 = "\"$(SRCROOT)/../../Frameworks/MAD/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_6 = "\"$(SRCROOT)/../../Frameworks/ID3Tag/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MAD_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = MAD; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "MAD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "MAD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/MAD/MADCodec.h b/Plugins/MAD/MADCodec.h new file mode 100644 index 000000000..43c2a1ea7 --- /dev/null +++ b/Plugins/MAD/MADCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface MADCodec : NSObject +{ + +} + +@end diff --git a/Plugins/MAD/MADCodec.m b/Plugins/MAD/MADCodec.m new file mode 100644 index 000000000..25f38581e --- /dev/null +++ b/Plugins/MAD/MADCodec.m @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "MADCodec.h" +#import "MADDecoder.h" +#import "MADPropertiesReader.h" + +@implementation MADCodec + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [MADDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [MADPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/MAD/MADDecoder.h b/Plugins/MAD/MADDecoder.h new file mode 100644 index 000000000..00b9436ea --- /dev/null +++ b/Plugins/MAD/MADDecoder.h @@ -0,0 +1,49 @@ +// +// MADFile.h +// Cog +// +// Created by Vincent Spader on 6/17/06. +// Copyright 2006 Vincent Spader. All rights reserved. +// + +#define HAVE_CONFIG_H +#import +#undef HAVE_CONFIG_H + +#import "MAD/mad.h" + +#import "Plugin.h" + +#define INPUT_BUFFER_SIZE 5*8192 + + +@interface MADDecoder : NSObject +{ + struct mad_stream _stream; + struct mad_frame _frame; + struct mad_synth _synth; + mad_timer_t _timer; + mad_timer_t _duration; + unsigned char _inputBuffer[INPUT_BUFFER_SIZE+MAD_BUFFER_GUARD]; + unsigned char *_outputBuffer; + int _outputAvailable; + int _fileSize; + + FILE *_inFd; + + BOOL _seekSkip; + + //For gapless playback of mp3s + BOOL _gapless; + long _currentFrame; + int _startPadding; + int _endPadding; + + int channels; + int bitsPerSample; + float frequency; + int bitrate; + double length; +} + +@end diff --git a/Plugins/MAD/MADDecoder.m b/Plugins/MAD/MADDecoder.m new file mode 100644 index 000000000..bc4901c11 --- /dev/null +++ b/Plugins/MAD/MADDecoder.m @@ -0,0 +1,581 @@ +// +// MADFile.m +// Cog +// +// Created by Vincent Spader on 6/17/06. +// Copyright 2006 Vincent Spader. All rights reserved. +// + +#import "MADDecoder.h" +#undef HAVE_CONFIG_H +#import + +@implementation MADDecoder + +/*XING FUN*/ + +#define XING_MAGIC (('X' << 24) | ('i' << 16) | ('n' << 8) | 'g') +#define INFO_MAGIC (('I' << 24) | ('n' << 16) | ('f' << 8) | 'o') +#define LAME_MAGIC (('L' << 24) | ('A' << 16) | ('M' << 8) | 'E') + +struct xing +{ + long flags; /* valid fields (see below) */ + unsigned long frames; /* total number of frames */ + unsigned long bytes; /* total number of bytes */ + unsigned char toc[100]; /* 100-point seek table */ + long scale; /* ?? */ +}; + +struct lame +{ + long flags; +}; + +enum +{ + XING_FRAMES = 0x00000001L, + XING_BYTES = 0x00000002L, + XING_TOC = 0x00000004L, + XING_SCALE = 0x00000008L +}; + +int lame_parse(struct lame *lame, struct mad_bitptr *ptr, unsigned int bitlen) +{ + unsigned long magic; + unsigned long garbage; + + magic = mad_bit_read(ptr, 32); //4 bytes + + if (magic != LAME_MAGIC) + return 0; + + mad_bit_skip(ptr, 17*8); //17 bytes skipped + garbage = mad_bit_read(ptr, 24); //3 bytes +// _startPadding = (garbage >> 12) & 0x000FFF; +// _endPadding = garbage & 0x000FFF; + + return 1; +} + +int xing_parse(struct xing *xing, struct mad_bitptr *ptr, unsigned int bitlen) +{ + xing->flags = 0; + unsigned long magic; + + if (bitlen < 64) + return 0; + + magic = mad_bit_read(ptr, 32); + if (magic != INFO_MAGIC && magic != XING_MAGIC) + return 0; + + xing->flags = mad_bit_read(ptr, 32); + bitlen -= 64; + + if (xing->flags & XING_FRAMES) { + if (bitlen < 32) + return 0; + + xing->frames = mad_bit_read(ptr, 32); + bitlen -= 32; + } + + if (xing->flags & XING_BYTES) { + if (bitlen < 32) + return 0; + + xing->bytes = mad_bit_read(ptr, 32); + bitlen -= 32; + } + + if (xing->flags & XING_TOC) { + int i; + + if (bitlen < 800) + return 0; + + for (i = 0; i < 100; ++i) + xing->toc[i] = mad_bit_read(ptr, 8); + + bitlen -= 800; + } + + if (xing->flags & XING_SCALE) { + if (bitlen < 32) + return 0; + + xing->scale = mad_bit_read(ptr, 32); + bitlen -= 32; + } + + return 1; +} + +int parse_headers(struct xing *xing, struct lame *lame, struct mad_bitptr ptr, unsigned int bitlen) +{ + xing->flags = 0; + lame->flags = 0; + + if (xing_parse(xing, &ptr, bitlen)) + { + lame_parse(lame, &ptr, bitlen); + + return 1; + } + + return 0; +} + + +- (BOOL)scanFileFast:(BOOL)fast useXing:(BOOL)use_xing +{ + const int BUFFER_SIZE = 16*1024; + const int N_AVERAGE_FRAMES = 10; + + struct mad_stream stream; + struct mad_header header; + struct mad_frame frame; /* to read xing data */ + struct xing xing; + struct lame lame; + int remainder = 0; + int data_used = 0; + int len = 0; + int tagsize = 0; + int frames = 0; + unsigned char buffer[BUFFER_SIZE]; + BOOL has_xing = NO; + BOOL vbr = NO; + + mad_stream_init (&stream); + mad_header_init (&header); + mad_frame_init (&frame); + + bitrate = 0; + _duration = mad_timer_zero; + + frames = 0; + + fseek(_inFd, 0, SEEK_END); + _fileSize = ftell(_inFd); + fseek(_inFd, 0, SEEK_SET); + + BOOL done = NO; + + while (!done) + { + remainder = stream.bufend - stream.next_frame; + + memcpy (buffer, stream.this_frame, remainder); + len = fread(buffer + remainder, 1, BUFFER_SIZE - remainder, _inFd); + + if (len <= 0) + break; + + mad_stream_buffer (&stream, buffer, len + remainder); + + while (1) + { + if (mad_header_decode (&header, &stream) == -1) + { + if (stream.error == MAD_ERROR_BUFLEN) + { + break; + } + if (!MAD_RECOVERABLE (stream.error)) + { + break; + } + if (stream.error == MAD_ERROR_LOSTSYNC) + { + /* ignore LOSTSYNC due to ID3 tags */ + tagsize = id3_tag_query (stream.this_frame, + stream.bufend - + stream.this_frame); + if (tagsize > 0) + { + mad_stream_skip (&stream, tagsize); + continue; + } + + } + + continue; + } + frames++; + + mad_timer_add (&_duration, header.duration); + data_used += stream.next_frame - stream.this_frame; + if (frames == 1) + { + /* most of these *should* remain constant */ + bitrate = header.bitrate; + frequency = header.samplerate; + channels = MAD_NCHANNELS(&header); + + if (use_xing) + { + frame.header = header; + if (mad_frame_decode(&frame, &stream) == -1) + continue; + + if (parse_headers(&xing, &lame, stream.anc_ptr, stream.anc_bitlen)) + { + has_xing = YES; + vbr = YES; + + frames = xing.frames; + mad_timer_multiply (&_duration, frames); + + bitrate = 8.0 * xing.bytes / mad_timer_count(_duration, MAD_UNITS_SECONDS); + done = YES; + break; + } + } + + } + else + { + /* perhaps we have a VBR file */ + if (bitrate != header.bitrate) + vbr = YES; + if (vbr) + bitrate += header.bitrate; + } + + if ((!vbr || (vbr && !has_xing)) && fast && frames >= N_AVERAGE_FRAMES) + { + float frame_size = ((double)data_used) / N_AVERAGE_FRAMES; + frames = (_fileSize - tagsize) / frame_size; + + _duration.seconds /= N_AVERAGE_FRAMES; + _duration.fraction /= N_AVERAGE_FRAMES; + mad_timer_multiply (&_duration, frames); + + done = YES; + break; + } + } + if (stream.error != MAD_ERROR_BUFLEN) + break; + } + + if (vbr && !has_xing) + bitrate = bitrate / frames; + + mad_frame_finish (&frame); + mad_header_finish (&header); + mad_stream_finish (&stream); + + length = mad_timer_count(_duration, MAD_UNITS_MILLISECONDS); + + bitrate /= 1000; + + fseek(_inFd, 0, SEEK_SET); + + return frames != 0; +} + + +- (BOOL)open:(NSURL *)url +{ + /* First the structures used by libmad must be initialized. */ + mad_stream_init(&_stream); + mad_frame_init(&_frame); + mad_synth_init(&_synth); + mad_timer_reset(&_timer); + + _inFd = fopen([[url path] UTF8String], "r"); + if (!_inFd) + return NO; + + bitsPerSample = 16; + + return [self scanFileFast:YES useXing:YES]; +} + + +/** +* Scale PCM data + */ +static inline signed int scale (mad_fixed_t sample) +{ + BOOL hard_limit = YES; +// BOOL replaygain = NO; + /* replayGain by SamKR */ + double scale = -1; +/* if (replaygain) + { + if (file_info->has_replaygain) + { + scale = file_info->replaygain_track_scale; + if (file_info->replaygain_album_scale != -1 + && (scale==-1 || ! xmmsmad_config.replaygain.track_mode)) + { + scale = file_info->replaygain_album_scale; + } + } + if (scale == -1) + scale = xmmsmad_config.replaygain.default_scale; + } +*/ + if (scale == -1) + scale = 1.0; + + /* hard-limit (clipping-prevention) */ + if (hard_limit) + { + /* convert to double before computation, to avoid mad_fixed_t wrapping */ + double x = mad_f_todouble(sample) * scale; + static const double k = 0.5; // -6dBFS + if (x > k) + { + x = tanh((x - k) / (1-k)) * (1-k) + k; + } + else if(x < -k) + { + x = tanh((x + k) / (1-k)) * (1-k) - k; + } + sample = x * (MAD_F_ONE); + } + else + sample *= scale; + + int n_bits_to_loose = MAD_F_FRACBITS + 1 - 16; + + /* round */ + /* add half of the bits_to_loose range to round */ + sample += (1L << (n_bits_to_loose - 1)); + + /* clip */ + /* make sure we are between -1 and 1 */ + if (sample >= MAD_F_ONE) + { + sample = MAD_F_ONE - 1; + } + else if (sample < -MAD_F_ONE) + { + sample = -MAD_F_ONE; + } + + /* quantize */ + /* + * Turn our mad_fixed_t into an integer. + * Shift all but 16-bits of the fractional part + * off the right hand side and shift an extra place + * to get the sign bit. + */ + sample >>= n_bits_to_loose; + + return sample; +} + + +- (void)writeOutput +{ + unsigned int nsamples; + mad_fixed_t const *left_ch, *right_ch; + +// if (_outputAvailable) { +// NSLog(@"Losing Output: %i", _outputAvailable); +// } + nsamples = _synth.pcm.length; + left_ch = _synth.pcm.samples[0]; + right_ch = _synth.pcm.samples[1]; + _outputAvailable = nsamples * channels * (bitsPerSample/8); + + if (_outputBuffer) + free(_outputBuffer); + + _outputBuffer = (unsigned char *) malloc (_outputAvailable * sizeof (char)); + + unsigned char *outputPtr = _outputBuffer; + + int i; + for (i=0; i < nsamples; i++) + { + signed short sample; + /* output sample(s) in 16-bit signed little-endian PCM */ + sample = scale(left_ch[i]); + *(outputPtr++) = sample>>8; + *(outputPtr++) = sample & 0xff; + + if (channels == 2) + { + sample = scale(right_ch[i]); + *(outputPtr++) = sample>>8; + *(outputPtr++) = sample & 0xff; + } + } +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + int remainder; + int len; + BOOL eof = NO; + int amountToCopy = size; + int amountRemaining = size; + + if (amountToCopy > _outputAvailable) + amountToCopy = _outputAvailable; + + if (amountToCopy) { + memcpy(buf, _outputBuffer, amountToCopy); + memmove(_outputBuffer, _outputBuffer + amountToCopy, _outputAvailable - amountToCopy); + + amountRemaining -= amountToCopy; + _outputAvailable -= amountToCopy; + } + + while (amountRemaining > 0 && !eof) { + if (_stream.buffer == NULL || _stream.error == MAD_ERROR_BUFLEN) + { + if (!_seekSkip) + { + remainder = _stream.bufend - _stream.next_frame; + if (remainder) + memmove(_inputBuffer, _stream.this_frame, remainder); + } + else + { + remainder = 0; + } + + len = fread(_inputBuffer+remainder, 1, INPUT_BUFFER_SIZE-remainder, _inFd); + if (len <= 0) + { + eof = YES; + break; + } + + len += remainder; + if (len < MAD_BUFFER_GUARD) { + int i; + for (i = len; i < MAD_BUFFER_GUARD; i++) + _inputBuffer[i] = 0; + len = MAD_BUFFER_GUARD; + } + + mad_stream_buffer(&_stream, _inputBuffer, len); + _stream.error = 0; + + if (_seekSkip) + { + int skip = 2; + do + { + if (mad_frame_decode (&_frame, &_stream) == 0) + { + mad_timer_add (&_timer, _frame.header.duration); + if (--skip == 0) + mad_synth_frame (&_synth, &_frame); + } + else if (!MAD_RECOVERABLE (_stream.error)) + break; + } while (skip); + + _seekSkip = NO; + } + + } + if (mad_frame_decode(&_frame, &_stream) == -1) { + if (!MAD_RECOVERABLE (_stream.error)) + { + if(_stream.error==MAD_ERROR_BUFLEN) { + continue; + } + + eof = YES; + } + + if (_stream.error == MAD_ERROR_LOSTSYNC) + { + // ignore LOSTSYNC due to ID3 tags + int tagsize = id3_tag_query (_stream.this_frame, + _stream.bufend - + _stream.this_frame); + if (tagsize > 0) + { + mad_stream_skip (&_stream, tagsize); + } + } + + continue; + } + mad_timer_add (&_timer, _frame.header.duration); + + mad_synth_frame (&_synth, &_frame); + + [self writeOutput]; + amountToCopy = amountRemaining; + if (amountToCopy > _outputAvailable) { + amountToCopy = _outputAvailable; + } + if (amountRemaining < amountToCopy) { + amountToCopy = amountRemaining; + } + + memcpy(((char *)buf)+(size-amountRemaining), _outputBuffer, amountToCopy); + memmove(_outputBuffer, _outputBuffer + amountToCopy, _outputAvailable - amountToCopy); + amountRemaining -= amountToCopy; + _outputAvailable -= amountToCopy; + } + + return (size - amountRemaining); +} + +- (void)close +{ + fclose(_inFd); + + mad_synth_finish(&_synth); + mad_frame_finish(&_frame); + mad_stream_finish(&_stream); +} + +- (double)seekToTime:(double)milliseconds +{ + int new_position; + int seconds = milliseconds/1000.0; + int total_seconds = mad_timer_count(_duration, MAD_UNITS_SECONDS); + + if (seconds > total_seconds) + seconds = total_seconds; + + mad_timer_set(&_timer, seconds, 0, 0); + new_position = ((double) seconds / (double) total_seconds) * _fileSize; + + fseek(_inFd, new_position, SEEK_SET); + mad_stream_sync(&_stream); + _stream.error = MAD_ERROR_BUFLEN; + _stream.sync = 0; + _outputAvailable = 0; + + mad_frame_mute(&_frame); + mad_synth_mute(&_synth); + + _seekSkip = YES; + + return seconds*1000.0; +} + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels],@"channels", + [NSNumber numberWithInt:bitsPerSample],@"bitsPerSample", + [NSNumber numberWithFloat:frequency],@"sampleRate", + [NSNumber numberWithInt:bitrate],@"bitrate", + [NSNumber numberWithDouble:length],@"length", + @"big", @"endian", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObjects:@"mp3",nil]; +} + +@end + diff --git a/Plugins/MAD/MADPropertiesReader.h b/Plugins/MAD/MADPropertiesReader.h new file mode 100644 index 000000000..066f0fbc0 --- /dev/null +++ b/Plugins/MAD/MADPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface MADPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/MAD/MADPropertiesReader.m b/Plugins/MAD/MADPropertiesReader.m new file mode 100644 index 000000000..c23054244 --- /dev/null +++ b/Plugins/MAD/MADPropertiesReader.m @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "MADPropertiesReader.h" +#import "MADDecoder.h" + +@implementation MADPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + MADDecoder *decoder; + + decoder = [[MADDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"mp3"]; +} + +@end diff --git a/Plugins/MAD/MAD_Prefix.pch b/Plugins/MAD/MAD_Prefix.pch new file mode 100644 index 000000000..3f25b88ef --- /dev/null +++ b/Plugins/MAD/MAD_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'MAD' target in the 'MAD' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/MonkeysAudio/Info.plist b/Plugins/MonkeysAudio/Info.plist new file mode 100644 index 000000000..c6ac94e2a --- /dev/null +++ b/Plugins/MonkeysAudio/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + MonkeysAudioCodec + + diff --git a/Plugins/MonkeysAudio/MonkeysAudio.xcodeproj/project.pbxproj b/Plugins/MonkeysAudio/MonkeysAudio.xcodeproj/project.pbxproj new file mode 100644 index 000000000..0840a95d9 --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudio.xcodeproj/project.pbxproj @@ -0,0 +1,297 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1745C2EC0B90BDD100A6768C /* MonkeysAudioCodec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1745C2E60B90BDD100A6768C /* MonkeysAudioCodec.mm */; }; + 1745C2ED0B90BDD100A6768C /* MonkeysAudioDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1745C2E80B90BDD100A6768C /* MonkeysAudioDecoder.mm */; }; + 1745C2EE0B90BDD100A6768C /* MonkeysAudioPropertiesReader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1745C2EA0B90BDD100A6768C /* MonkeysAudioPropertiesReader.mm */; }; + 177FCFB50B90C97E0011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCFB40B90C97E0011C3B5 /* Plugin.h */; }; + 179CFD770B90C70B00C8C4DB /* MAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 179CFD760B90C70B00C8C4DB /* MAC.framework */; }; + 179CFD7A0B90C70E00C8C4DB /* MAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179CFD760B90C70B00C8C4DB /* MAC.framework */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 1745C30E0B90BE7500A6768C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 179CFD7A0B90C70E00C8C4DB /* MAC.framework in CopyFiles */, + 177FCFB50B90C97E0011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1745C2E60B90BDD100A6768C /* MonkeysAudioCodec.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = MonkeysAudioCodec.mm; sourceTree = ""; }; + 1745C2E70B90BDD100A6768C /* MonkeysAudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MonkeysAudioDecoder.h; sourceTree = ""; }; + 1745C2E80B90BDD100A6768C /* MonkeysAudioDecoder.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = MonkeysAudioDecoder.mm; sourceTree = ""; }; + 1745C2E90B90BDD100A6768C /* MonkeysAudioPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MonkeysAudioPropertiesReader.h; sourceTree = ""; }; + 1745C2EA0B90BDD100A6768C /* MonkeysAudioPropertiesReader.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = MonkeysAudioPropertiesReader.mm; sourceTree = ""; }; + 1745C2F80B90BDF200A6768C /* MonkeysAudioCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MonkeysAudioCodec.h; sourceTree = ""; }; + 177FCFB40B90C97E0011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 179CFD760B90C70B00C8C4DB /* MAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAC.framework; path = ../../Frameworks/MAC/build/Release/MAC.framework; sourceTree = SOURCE_ROOT; }; + 32DBCF630370AF2F00C91783 /* MonkeysAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MonkeysAudio_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* MonkeysAudio.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MonkeysAudio.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 179CFD770B90C70B00C8C4DB /* MAC.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* MonkeysAudio */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = MonkeysAudio; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCFB40B90C97E0011C3B5 /* Plugin.h */, + 1745C2F80B90BDF200A6768C /* MonkeysAudioCodec.h */, + 1745C2E60B90BDD100A6768C /* MonkeysAudioCodec.mm */, + 1745C2E70B90BDD100A6768C /* MonkeysAudioDecoder.h */, + 1745C2E80B90BDD100A6768C /* MonkeysAudioDecoder.mm */, + 1745C2E90B90BDD100A6768C /* MonkeysAudioPropertiesReader.h */, + 1745C2EA0B90BDD100A6768C /* MonkeysAudioPropertiesReader.mm */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 179CFD760B90C70B00C8C4DB /* MAC.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* MonkeysAudio.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* MonkeysAudio_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* MonkeysAudio */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "MonkeysAudio" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 1745C30E0B90BE7500A6768C /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MonkeysAudio; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = MonkeysAudio; + productReference = 8D5B49B6048680CD000E48DA /* MonkeysAudio.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "MonkeysAudio" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* MonkeysAudio */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* MonkeysAudio */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1745C2EC0B90BDD100A6768C /* MonkeysAudioCodec.mm in Sources */, + 1745C2ED0B90BDD100A6768C /* MonkeysAudioDecoder.mm in Sources */, + 1745C2EE0B90BDD100A6768C /* MonkeysAudioPropertiesReader.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/MAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/MAC/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MonkeysAudio_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = MonkeysAudio; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/MAC/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/MAC/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MonkeysAudio_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = MonkeysAudio; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "MonkeysAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "MonkeysAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/MonkeysAudio/MonkeysAudioCodec.h b/Plugins/MonkeysAudio/MonkeysAudioCodec.h new file mode 100644 index 000000000..e223130f8 --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudioCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface MonkeysAudioCodec : NSObject +{ + +} + +@end diff --git a/Plugins/MonkeysAudio/MonkeysAudioCodec.mm b/Plugins/MonkeysAudio/MonkeysAudioCodec.mm new file mode 100644 index 000000000..0ced87f9d --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudioCodec.mm @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "MonkeysAudioCodec.h" +#import "MonkeysAudioDecoder.h" +#import "MonkeysAudioPropertiesReader.h" + +@implementation MonkeysAudioCodec + +- (PluginType)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [MonkeysAudioDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [MonkeysAudioPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/MonkeysAudio/MonkeysAudioDecoder.h b/Plugins/MonkeysAudio/MonkeysAudioDecoder.h new file mode 100644 index 000000000..f99492b8e --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudioDecoder.h @@ -0,0 +1,25 @@ +// +// MonkeysFile.h +// zyVorbis +// +// Created by Vincent Spader on 1/30/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import +#import "MAC/All.h" +#import "MAC/MACLib.h" + +#import "Plugin.h" + +@interface MonkeysAudioDecoder : NSObject +{ + IAPEDecompress * decompress; + + int channels; + int bitsPerSample; + float frequency; + double length; +} + +@end diff --git a/Plugins/MonkeysAudio/MonkeysAudioDecoder.mm b/Plugins/MonkeysAudio/MonkeysAudioDecoder.mm new file mode 100644 index 000000000..355d4b83a --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudioDecoder.mm @@ -0,0 +1,93 @@ +// +// MonkeysFile.m +// zyVorbis +// +// Created by Vincent Spader on 1/30/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import "MonkeysAudioDecoder.h" +#import "MAC/ApeInfo.h" +#import "MAC/CharacterHelper.h" + +@implementation MonkeysAudioDecoder + +- (BOOL)open:(NSURL *)url +{ + int n; + str_utf16 *chars = NULL; + + chars = GetUTF16FromUTF8((const unsigned char *)[[url path] UTF8String]); + if(chars == NULL) + return NO; + + decompress = CreateIAPEDecompress(chars, &n); + free(chars); + + if (decompress == NULL) + { + NSLog(@"ERROR OPENING FILE"); + return NO; + } + + frequency = decompress->GetInfo(APE_INFO_SAMPLE_RATE); + bitsPerSample = decompress->GetInfo(APE_INFO_BITS_PER_SAMPLE); + channels = decompress->GetInfo(APE_INFO_CHANNELS); + + length = ((double)decompress->GetInfo(APE_INFO_TOTAL_BLOCKS)*1000.0)/frequency; + + return YES; +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + int n; + int numread; + int blockAlign = decompress->GetInfo(APE_INFO_BLOCK_ALIGN); + n = decompress->GetData((char *)buf, size/blockAlign, &numread); + if (n != ERROR_SUCCESS) + { + NSLog(@"ERROR: %i", n); + return 0; + } + numread *= blockAlign; + + return numread; +} + +- (void)close +{ +// DBLog(@"CLOSE"); + if (decompress) + delete decompress; + + decompress = NULL; +} + +- (double)seekToTime:(double)milliseconds +{ + int r; +// DBLog(@"HELLO: %i", int(frequency*((double)milliseconds/1000.0))); + r = decompress->Seek(int(frequency*((double)milliseconds/1000.0))); + + return milliseconds; +} + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels],@"channels", + [NSNumber numberWithInt:bitsPerSample],@"bitsPerSample", + [NSNumber numberWithFloat:frequency],@"sampleRate", + [NSNumber numberWithDouble:length],@"length", + @"little",@"endian", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"ape"]; +} + + +@end diff --git a/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.h b/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.h new file mode 100644 index 000000000..e0f18cc53 --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface MonkeysAudioPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm b/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm new file mode 100644 index 000000000..8830cc49f --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "MonkeysAudioPropertiesReader.h" +#import "MonkeysAudioDecoder.h" + +@implementation MonkeysAudioPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + MonkeysAudioDecoder *decoder; + + decoder = [[MonkeysAudioDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [MonkeysAudioDecoder fileTypes]; +} + +@end diff --git a/Plugins/MonkeysAudio/MonkeysAudio_Prefix.pch b/Plugins/MonkeysAudio/MonkeysAudio_Prefix.pch new file mode 100644 index 000000000..302cfa90d --- /dev/null +++ b/Plugins/MonkeysAudio/MonkeysAudio_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'MonkeysAudio' target in the 'MonkeysAudio' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/Musepack/Info.plist b/Plugins/Musepack/Info.plist new file mode 100644 index 000000000..a65b3e8fa --- /dev/null +++ b/Plugins/Musepack/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + MusepackCodec + + diff --git a/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj b/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj new file mode 100644 index 000000000..d65dc72e3 --- /dev/null +++ b/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj @@ -0,0 +1,301 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1703330C0B8FB64500327265 /* MusepackCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 170333080B8FB64500327265 /* MusepackCodec.m */; }; + 1703330D0B8FB64500327265 /* MusepackDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1703330A0B8FB64500327265 /* MusepackDecoder.m */; }; + 1745C1A40B90B57400A6768C /* MusepackPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */; }; + 177FCF280B90C8D00011C3B5 /* MPCDec.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177FCF270B90C8D00011C3B5 /* MPCDec.framework */; }; + 177FCF2B0B90C8D20011C3B5 /* MPCDec.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF270B90C8D00011C3B5 /* MPCDec.framework */; }; + 177FCF390B90C8F10011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF380B90C8F10011C3B5 /* Plugin.h */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 170333140B8FB66C00327265 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 177FCF2B0B90C8D20011C3B5 /* MPCDec.framework in CopyFiles */, + 177FCF390B90C8F10011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 170333070B8FB64500327265 /* MusepackCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackCodec.h; sourceTree = ""; }; + 170333080B8FB64500327265 /* MusepackCodec.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackCodec.m; sourceTree = ""; }; + 170333090B8FB64500327265 /* MusepackDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackDecoder.h; sourceTree = ""; }; + 1703330A0B8FB64500327265 /* MusepackDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackDecoder.m; sourceTree = ""; }; + 1745C1A10B90B57400A6768C /* MusepackPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackPropertiesReader.h; sourceTree = ""; }; + 1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackPropertiesReader.m; sourceTree = ""; }; + 177FCF270B90C8D00011C3B5 /* MPCDec.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPCDec.framework; path = ../../Frameworks/MPCDec/build/Release/MPCDec.framework; sourceTree = SOURCE_ROOT; }; + 177FCF380B90C8F10011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 32DBCF630370AF2F00C91783 /* Musepack_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Musepack_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* Musepack.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Musepack.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 177FCF280B90C8D00011C3B5 /* MPCDec.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Musepack */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = Musepack; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCF380B90C8F10011C3B5 /* Plugin.h */, + 170333070B8FB64500327265 /* MusepackCodec.h */, + 170333080B8FB64500327265 /* MusepackCodec.m */, + 170333090B8FB64500327265 /* MusepackDecoder.h */, + 1703330A0B8FB64500327265 /* MusepackDecoder.m */, + 1745C1A10B90B57400A6768C /* MusepackPropertiesReader.h */, + 1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 177FCF270B90C8D00011C3B5 /* MPCDec.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* Musepack.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* Musepack_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* Musepack */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Musepack" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 170333140B8FB66C00327265 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Musepack; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = Musepack; + productReference = 8D5B49B6048680CD000E48DA /* Musepack.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Musepack" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Musepack */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* Musepack */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1703330C0B8FB64500327265 /* MusepackCodec.m in Sources */, + 1703330D0B8FB64500327265 /* MusepackDecoder.m in Sources */, + 1745C1A40B90B57400A6768C /* MusepackPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../MPCDec/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../../Frameworks/MPCDec/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../../Frameworks/MPCDec/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Musepack_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Musepack; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../MPCDec/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../../Frameworks/MPCDec/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../../Frameworks/MPCDec/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Musepack_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Musepack; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Musepack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Musepack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/Musepack/MusepackCodec.h b/Plugins/Musepack/MusepackCodec.h new file mode 100644 index 000000000..df227b58c --- /dev/null +++ b/Plugins/Musepack/MusepackCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface MusepackCodec : NSObject +{ + +} + +@end diff --git a/Plugins/Musepack/MusepackCodec.m b/Plugins/Musepack/MusepackCodec.m new file mode 100644 index 000000000..2114b59d2 --- /dev/null +++ b/Plugins/Musepack/MusepackCodec.m @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "MusepackCodec.h" +#import "MusepackDecoder.h" +#import "MusepackPropertiesReader.h" + +@implementation MusepackCodec + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [MusepackDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [MusepackPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/Musepack/MusepackDecoder.h b/Plugins/Musepack/MusepackDecoder.h new file mode 100644 index 000000000..6bc0e5c0f --- /dev/null +++ b/Plugins/Musepack/MusepackDecoder.h @@ -0,0 +1,31 @@ +// +// MusepackFile.h +// zyVorbis +// +// Created by Vincent Spader on 1/23/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import +#import +#import "Plugin.h" + +@interface MusepackDecoder : NSObject +{ + FILE *inFd; + mpc_decoder decoder; + mpc_reader_file reader; + mpc_streaminfo info; + + char buffer[MPC_FRAME_LENGTH*4]; + int bufferAmount; + + int bitrate; + float frequency; + double length; +} +- (BOOL)writeSamplesToBuffer:(uint16_t *)sample_buffer fromBuffer:(const MPC_SAMPLE_FORMAT *)p_buffer ofSize:(unsigned)p_size; + +- (NSDictionary *)properties; + +@end diff --git a/Plugins/Musepack/MusepackDecoder.m b/Plugins/Musepack/MusepackDecoder.m new file mode 100644 index 000000000..3b85dc600 --- /dev/null +++ b/Plugins/Musepack/MusepackDecoder.m @@ -0,0 +1,159 @@ +// +// MusepackFile.m +// zyVorbis +// +// Created by Vincent Spader on 1/23/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import "MusepackDecoder.h" + +@implementation MusepackDecoder + +- (BOOL)open:(NSURL *)url +{ + NSLog(@"Decoder opening...$@", url); + inFd = fopen([[url path] UTF8String], "rb"); + if (inFd == 0) + return NO; + + mpc_reader_setup_file_reader(&reader , inFd); + + mpc_streaminfo_init(&info); + if (mpc_streaminfo_read(&info, &reader.reader) != ERROR_CODE_OK) + { + NSLog(@"Not a valid musepack file."); + return NO; + } + + /* instantiate a decoder with our file reader */ + mpc_decoder_setup(&decoder, &reader.reader); + if (!mpc_decoder_initialize(&decoder, &info)) + { + NSLog(@"Error initializing decoder."); + return NO; + } + + + bitrate = (int)(info.average_bitrate/1000.0); + frequency = info.sample_freq; + + length = ((double)mpc_streaminfo_get_length_samples(&info)*1000.0)/frequency; + + NSLog(@"Length: %lf", length); + return YES; +} + +- (BOOL)writeSamplesToBuffer:(uint16_t *)sample_buffer fromBuffer:(const MPC_SAMPLE_FORMAT *)p_buffer ofSize:(unsigned)p_size +{ + unsigned n; + int m_bps = 16; + int clip_min = - 1 << (m_bps - 1), + clip_max = (1 << (m_bps - 1)) - 1, + float_scale = 1 << (m_bps - 1); + + for (n = 0; n < p_size; n++) + { + int val; +#ifdef MPC_FIXED_POINT + val = shift_signed( p_buffer[n], m_bps - MPC_FIXED_POINT_SCALE_SHIFT ); +#else + val = (int)( p_buffer[n] * float_scale ); +#endif + + if (val < clip_min) + val = clip_min; + else if (val > clip_max) + val = clip_max; + +// sample_buffer[n] = CFSwapInt16LittleToHost(val); + sample_buffer[n] = val; + } + +// m_data_bytes_written += p_size * (m_bps >> 3); + return YES; +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + int numread = bufferAmount; + int count = 0; + MPC_SAMPLE_FORMAT sampleBuffer[MPC_DECODER_BUFFER_LENGTH]; + + //Fill from buffer, going by bufferAmount + //if still needs more, decode and repeat + if (bufferAmount == 0) + { + /* returns the length of the samples*/ + + unsigned status = mpc_decoder_decode(&decoder, sampleBuffer, 0, 0); + if (status == (unsigned)( -1)) + { + //decode error + NSLog(@"Decode error"); + return 0; + } + else if (status == 0) //EOF + { + return 0; + } + else //status>0 /* status == MPC_FRAME_LENGTH */ + { + [self writeSamplesToBuffer:((uint16_t*)buffer) fromBuffer:sampleBuffer ofSize:(status*2)]; + } + + bufferAmount = status*4; + } + + count = bufferAmount; + if (bufferAmount > size) + { + count = size; + } + + memcpy(buf, buffer, count); + + bufferAmount -= count; + + if (bufferAmount > 0) + memmove(buffer, &buffer[count], bufferAmount); + + if (count < size) + numread = [self fillBuffer:(&((char *)buf)[count]) ofSize:(size - count)]; + else + numread = 0; + + return count + numread; +} + +- (void)close +{ + fclose(inFd); +} + +- (double)seekToTime:(double)milliseconds +{ + mpc_decoder_seek_sample(&decoder, frequency*((double)milliseconds/1000.0)); + + return milliseconds; +} + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:bitrate], @"bitrate", + [NSNumber numberWithFloat:frequency], @"sampleRate", + [NSNumber numberWithDouble:length], @"length", + [NSNumber numberWithInt:16], @"bitsPerSample", + [NSNumber numberWithInt:2], @"channels", + @"little",@"endian", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"mpc"]; +} + + +@end diff --git a/Plugins/Musepack/MusepackPropertiesReader.h b/Plugins/Musepack/MusepackPropertiesReader.h new file mode 100644 index 000000000..8eaa609ff --- /dev/null +++ b/Plugins/Musepack/MusepackPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface MusepackPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/Musepack/MusepackPropertiesReader.m b/Plugins/Musepack/MusepackPropertiesReader.m new file mode 100644 index 000000000..3064f63c9 --- /dev/null +++ b/Plugins/Musepack/MusepackPropertiesReader.m @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "MusepackPropertiesReader.h" +#import "MusepackDecoder.h" + +@implementation MusepackPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + MusepackDecoder *decoder; + + decoder = [[MusepackDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"mpc"]; +} + +@end diff --git a/Plugins/Musepack/Musepack_Prefix.pch b/Plugins/Musepack/Musepack_Prefix.pch new file mode 100644 index 000000000..3287e1160 --- /dev/null +++ b/Plugins/Musepack/Musepack_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Musepack' target in the 'Musepack' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/Shorten/Info.plist b/Plugins/Shorten/Info.plist new file mode 100644 index 000000000..192518cd2 --- /dev/null +++ b/Plugins/Shorten/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + ShortenCodec + + diff --git a/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj b/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj new file mode 100644 index 000000000..3ec476980 --- /dev/null +++ b/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj @@ -0,0 +1,297 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1745C42F0B90C1DC00A6768C /* ShortenCodec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1745C42A0B90C1DC00A6768C /* ShortenCodec.mm */; }; + 1745C4300B90C1DC00A6768C /* ShortenDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1745C42C0B90C1DC00A6768C /* ShortenDecoder.mm */; }; + 1745C4310B90C1DC00A6768C /* ShortenPropertiesReader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1745C42E0B90C1DC00A6768C /* ShortenPropertiesReader.mm */; }; + 177FCFAD0B90C96B0011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCFAC0B90C96B0011C3B5 /* Plugin.h */; }; + 179CFD600B90C6F600C8C4DB /* Shorten.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 179CFD5F0B90C6F600C8C4DB /* Shorten.framework */; }; + 179CFD630B90C6F800C8C4DB /* Shorten.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179CFD5F0B90C6F600C8C4DB /* Shorten.framework */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 1745C4400B90C21B00A6768C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 179CFD630B90C6F800C8C4DB /* Shorten.framework in CopyFiles */, + 177FCFAD0B90C96B0011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1745C4290B90C1DC00A6768C /* ShortenCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ShortenCodec.h; sourceTree = ""; }; + 1745C42A0B90C1DC00A6768C /* ShortenCodec.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ShortenCodec.mm; sourceTree = ""; }; + 1745C42B0B90C1DC00A6768C /* ShortenDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ShortenDecoder.h; sourceTree = ""; }; + 1745C42C0B90C1DC00A6768C /* ShortenDecoder.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ShortenDecoder.mm; sourceTree = ""; }; + 1745C42D0B90C1DC00A6768C /* ShortenPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ShortenPropertiesReader.h; sourceTree = ""; }; + 1745C42E0B90C1DC00A6768C /* ShortenPropertiesReader.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ShortenPropertiesReader.mm; sourceTree = ""; }; + 177FCFAC0B90C96B0011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 179CFD5F0B90C6F600C8C4DB /* Shorten.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Shorten.framework; path = ../../Frameworks/Shorten/build/Release/Shorten.framework; sourceTree = SOURCE_ROOT; }; + 32DBCF630370AF2F00C91783 /* Shorten_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shorten_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* Shorten.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Shorten.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 179CFD600B90C6F600C8C4DB /* Shorten.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Shorten */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = Shorten; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCFAC0B90C96B0011C3B5 /* Plugin.h */, + 1745C4290B90C1DC00A6768C /* ShortenCodec.h */, + 1745C42A0B90C1DC00A6768C /* ShortenCodec.mm */, + 1745C42B0B90C1DC00A6768C /* ShortenDecoder.h */, + 1745C42C0B90C1DC00A6768C /* ShortenDecoder.mm */, + 1745C42D0B90C1DC00A6768C /* ShortenPropertiesReader.h */, + 1745C42E0B90C1DC00A6768C /* ShortenPropertiesReader.mm */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 179CFD5F0B90C6F600C8C4DB /* Shorten.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* Shorten.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* Shorten_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* Shorten */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Shorten" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 1745C4400B90C21B00A6768C /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Shorten; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = Shorten; + productReference = 8D5B49B6048680CD000E48DA /* Shorten.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Shorten" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Shorten */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* Shorten */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1745C42F0B90C1DC00A6768C /* ShortenCodec.mm in Sources */, + 1745C4300B90C1DC00A6768C /* ShortenDecoder.mm in Sources */, + 1745C4310B90C1DC00A6768C /* ShortenPropertiesReader.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/Shorten/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/Shorten/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Shorten_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Shorten; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/Shorten/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/Shorten/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Shorten_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Shorten; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Shorten" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Shorten" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/Shorten/ShortenCodec.h b/Plugins/Shorten/ShortenCodec.h new file mode 100644 index 000000000..a17cc67d0 --- /dev/null +++ b/Plugins/Shorten/ShortenCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface ShortenCodec : NSObject +{ + +} + +@end diff --git a/Plugins/Shorten/ShortenCodec.mm b/Plugins/Shorten/ShortenCodec.mm new file mode 100644 index 000000000..3011cbb23 --- /dev/null +++ b/Plugins/Shorten/ShortenCodec.mm @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "ShortenCodec.h" +#import "ShortenDecoder.h" +#import "ShortenPropertiesReader.h" + +@implementation ShortenCodec + +- (PluginType)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [ShortenDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [ShortenPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/Shorten/ShortenDecoder.h b/Plugins/Shorten/ShortenDecoder.h new file mode 100644 index 000000000..be3a78b39 --- /dev/null +++ b/Plugins/Shorten/ShortenDecoder.h @@ -0,0 +1,30 @@ +// +// ShnFile.h +// Cog +// +// Created by Vincent Spader on 6/6/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import +#import + +#import "Plugin.h" + +@interface ShortenDecoder : NSObject +{ + //shn_file *handle; + shn_reader *decoder; + + long bufferSize; //total size + void *buffer; + void *inputBuffer;//derek + long bufferAmount; //amount currently in + + int channels; + int bitsPerSample; + float frequency; + double length; +} + +@end diff --git a/Plugins/Shorten/ShortenDecoder.mm b/Plugins/Shorten/ShortenDecoder.mm new file mode 100644 index 000000000..a5e2bf13c --- /dev/null +++ b/Plugins/Shorten/ShortenDecoder.mm @@ -0,0 +1,145 @@ +// +// ShnFile.mm +// Cog +// +// Created by Vincent Spader on 6/6/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import "ShortenDecoder.h" + +@implementation ShortenDecoder + +- (BOOL)open:(NSURL *)url +{ + decoder = new shn_reader; + + if (!decoder) + { + return NO; + } + + decoder->open([[url path] UTF8String], true); + + bufferSize = decoder->shn_get_buffer_block_size(512); + buffer = malloc(bufferSize); + + decoder->file_info(NULL, &channels, &frequency, NULL, &bitsPerSample, NULL); + + length = decoder->shn_get_song_length(); + + decoder->go(); + + return YES; +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + + //long numread = bufferAmount; + //long count = 0; + long numread, count; + bufferAmount = 0; + inputBuffer = malloc(bufferSize); + + //Fill from buffer, going by bufferAmount + //if still needs more, decode and repeat + if (bufferAmount == 0) + { + //bufferAmount = shn_read(handle, buffer, bufferSize); + while((bufferAmount = decoder->read(inputBuffer, bufferSize)) == (unsigned)(-1)) + { + bufferAmount = decoder->read(inputBuffer, bufferSize); + } + if (bufferAmount == 0) + return 0; + else if(bufferAmount == (unsigned)( -2)) + { + //NSLog(@"closing file, eof"); + return -2; + } + else + { + memcpy(buffer, inputBuffer, bufferAmount); + free(inputBuffer); + } + } + + //NSLog(@"bufferAmount: %d",bufferAmount); + + + count = bufferAmount; + if (bufferAmount > size) + { + count = size; + } + + memcpy(buf, buffer, count); + + bufferAmount -= count; + + if (bufferAmount > 0) + memmove(buffer, (&((char *)buffer)[count]), bufferAmount); + + if (count < size) + numread = [self fillBuffer:(&((char *)buf)[count]) ofSize:(size - count)]; + else + numread = 0; + + return count + numread; +} + +- (double)seekToTime:(double)milliseconds +{ + unsigned int sec; + + /*if (!shn_seekable(handle)) + return -1.0;*/ + + sec = (int)(milliseconds/1000.0); + + //shn_seek(handle, sec); + + decoder->seek(sec); + + return (sec * 1000.0); +} + +- (void)close +{ + if(decoder) + { + decoder->exit(); + delete decoder; + decoder = NULL; + } + + if (buffer) + { + free(buffer); + buffer = NULL; + } + + /*if (shn_cleanup_decoder(handle)) + shn_unload(handle);*/ +} + + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels],@"channels", + [NSNumber numberWithInt:bitsPerSample],@"bitsPerSample", + [NSNumber numberWithFloat:frequency],@"sampleRate", + [NSNumber numberWithDouble:length],@"length", + @"little",@"endian", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"shn"]; +} + + +@end diff --git a/Plugins/Shorten/ShortenPropertiesReader.h b/Plugins/Shorten/ShortenPropertiesReader.h new file mode 100644 index 000000000..b83ae4b74 --- /dev/null +++ b/Plugins/Shorten/ShortenPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface ShortenPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/Shorten/ShortenPropertiesReader.mm b/Plugins/Shorten/ShortenPropertiesReader.mm new file mode 100644 index 000000000..797db4ba9 --- /dev/null +++ b/Plugins/Shorten/ShortenPropertiesReader.mm @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "ShortenPropertiesReader.h" +#import "ShortenDecoder.h" + +@implementation ShortenPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + ShortenDecoder *decoder; + + decoder = [[ShortenDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [ShortenDecoder fileTypes]; +} + +@end diff --git a/Plugins/Shorten/Shorten_Prefix.pch b/Plugins/Shorten/Shorten_Prefix.pch new file mode 100644 index 000000000..b007678c6 --- /dev/null +++ b/Plugins/Shorten/Shorten_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Shorten' target in the 'Shorten' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/TagLib/Info.plist b/Plugins/TagLib/Info.plist new file mode 100644 index 000000000..7498c7054 --- /dev/null +++ b/Plugins/TagLib/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + TagLibPlugin + + diff --git a/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj b/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj new file mode 100644 index 000000000..4aac2ec19 --- /dev/null +++ b/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj @@ -0,0 +1,291 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 177FCFA50B90C9600011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCFA40B90C9600011C3B5 /* Plugin.h */; }; + 179CFD9F0B90C71E00C8C4DB /* TagLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 179CFD9E0B90C71E00C8C4DB /* TagLib.framework */; }; + 179CFDA20B90C72100C8C4DB /* TagLib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179CFD9E0B90C71E00C8C4DB /* TagLib.framework */; }; + 17C93FBC0B900538008627D6 /* TagLibPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93FBB0B900538008627D6 /* TagLibPlugin.m */; }; + 17C93FC30B90056C008627D6 /* TagLibMetadataReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93FC20B90056C008627D6 /* TagLibMetadataReader.m */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 17C93FF20B900734008627D6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 179CFDA20B90C72100C8C4DB /* TagLib.framework in CopyFiles */, + 177FCFA50B90C9600011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 177FCFA40B90C9600011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 179CFD9E0B90C71E00C8C4DB /* TagLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TagLib.framework; path = ../../Frameworks/TagLib/build/Release/TagLib.framework; sourceTree = SOURCE_ROOT; }; + 17C93FBA0B900538008627D6 /* TagLibPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TagLibPlugin.h; sourceTree = ""; }; + 17C93FBB0B900538008627D6 /* TagLibPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TagLibPlugin.m; sourceTree = ""; }; + 17C93FC10B90056C008627D6 /* TagLibMetadataReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagLibMetadataReader.h; sourceTree = ""; }; + 17C93FC20B90056C008627D6 /* TagLibMetadataReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TagLibMetadataReader.m; sourceTree = ""; }; + 32DBCF630370AF2F00C91783 /* TagLib_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagLib_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* TagLib.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TagLib.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 179CFD9F0B90C71E00C8C4DB /* TagLib.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* TagLib */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = TagLib; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCFA40B90C9600011C3B5 /* Plugin.h */, + 17C93FBA0B900538008627D6 /* TagLibPlugin.h */, + 17C93FBB0B900538008627D6 /* TagLibPlugin.m */, + 17C93FC10B90056C008627D6 /* TagLibMetadataReader.h */, + 17C93FC20B90056C008627D6 /* TagLibMetadataReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 179CFD9E0B90C71E00C8C4DB /* TagLib.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* TagLib.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* TagLib_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* TagLib */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "TagLib" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 17C93FF20B900734008627D6 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TagLib; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = TagLib; + productReference = 8D5B49B6048680CD000E48DA /* TagLib.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "TagLib" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* TagLib */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* TagLib */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17C93FBC0B900538008627D6 /* TagLibPlugin.m in Sources */, + 17C93FC30B90056C008627D6 /* TagLibMetadataReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/TagLib/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/TagLib/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = TagLib_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = TagLib; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/TagLib/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/TagLib/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = TagLib_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = TagLib; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "TagLib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "TagLib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/TagLib/TagLibMetadataReader.h b/Plugins/TagLib/TagLibMetadataReader.h new file mode 100644 index 000000000..0068fcd37 --- /dev/null +++ b/Plugins/TagLib/TagLibMetadataReader.h @@ -0,0 +1,18 @@ +// +// TagLibMetadataReader.h +// TagLib +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + +@interface TagLibMetadataReader : NSObject +{ + +} + +@end diff --git a/Plugins/TagLib/TagLibMetadataReader.m b/Plugins/TagLib/TagLibMetadataReader.m new file mode 100644 index 000000000..7967436cf --- /dev/null +++ b/Plugins/TagLib/TagLibMetadataReader.m @@ -0,0 +1,80 @@ +// +// TagLibMetadataReader.m +// TagLib +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "TagLibMetadataReader.h" +#import "TagLib/tag_c.h" + + +@implementation TagLibMetadataReader + +- (NSDictionary *)metadataForURL:(NSURL *)url +{ + NSString *lArtist = @"", *lTitle = @"", *lAlbum = @"", *lGenre = @""; + int lYear = 0, lTrack = 0; + + TagLib_File *tagFile = taglib_file_new((const char *)[[url path] UTF8String]); + if (tagFile) + { + TagLib_Tag *tag = taglib_file_tag(tagFile); + + if (tag) + { + char *pArtist, *pTitle, *pAlbum, *pGenre, *pComment; + + pArtist = taglib_tag_artist(tag); + pTitle = taglib_tag_title(tag); + pAlbum = taglib_tag_album(tag); + pGenre = taglib_tag_genre(tag); + pComment = taglib_tag_comment(tag); + + lYear = taglib_tag_year(tag); + lTrack = taglib_tag_track(tag); + + if (pArtist != NULL) + lArtist = [NSString stringWithUTF8String:(char *)pArtist]; + else + lArtist = @""; + + if (pAlbum != NULL) + lAlbum = [NSString stringWithUTF8String:(char *)pAlbum]; + else + lAlbum = @""; + + if (pTitle != NULL) + lTitle = [NSString stringWithUTF8String:(char *)pTitle]; + else + lTitle = @""; + + if (pGenre != NULL) + lGenre = [NSString stringWithUTF8String:(char *)pGenre]; + else + lGenre = @""; + + taglib_tag_free_strings(); + } + + taglib_file_free(tagFile); + } + + return [NSDictionary dictionaryWithObjectsAndKeys: + lArtist, @"artist", + lTitle, @"title", + lAlbum, @"album", + lGenre, @"genre", + [[NSNumber numberWithInt: lYear] stringValue], @"year", + [NSNumber numberWithInt: lTrack], @"track", + nil]; +} + ++ (NSArray *)fileTypes +{ + //May be a way to get a list of supported formats + return [NSArray arrayWithObjects:@"shn",@"wv",@"ogg",@"mpc",@"flac",@"ape",@"mp3",@"m4a",nil]; +} + +@end diff --git a/Plugins/TagLib/TagLibPlugin.h b/Plugins/TagLib/TagLibPlugin.h new file mode 100644 index 000000000..a8599b6c4 --- /dev/null +++ b/Plugins/TagLib/TagLibPlugin.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface TagLibPlugin : NSObject +{ + +} + +@end diff --git a/Plugins/TagLib/TagLibPlugin.m b/Plugins/TagLib/TagLibPlugin.m new file mode 100644 index 000000000..245fdbeb6 --- /dev/null +++ b/Plugins/TagLib/TagLibPlugin.m @@ -0,0 +1,37 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "TagLibPlugin.h" +#import "TagLibMetadataReader.h" + +@implementation TagLibPlugin + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return nil; +} + +- (Class)metadataReader +{ + return [TagLibMetadataReader class]; +} + +- (Class)propertiesReader +{ + return nil; +} + + + + +@end diff --git a/Plugins/TagLib/TagLib_Prefix.pch b/Plugins/TagLib/TagLib_Prefix.pch new file mode 100644 index 000000000..e0d4a7f6e --- /dev/null +++ b/Plugins/TagLib/TagLib_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'TagLib' target in the 'TagLib' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/Vorbis/Info.plist b/Plugins/Vorbis/Info.plist new file mode 100644 index 000000000..0c6db9857 --- /dev/null +++ b/Plugins/Vorbis/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + VorbisCodec + + diff --git a/Plugins/Vorbis/Vorbis.xcodeproj/project.pbxproj b/Plugins/Vorbis/Vorbis.xcodeproj/project.pbxproj new file mode 100644 index 000000000..605f653a6 --- /dev/null +++ b/Plugins/Vorbis/Vorbis.xcodeproj/project.pbxproj @@ -0,0 +1,311 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1745C2840B90B9F200A6768C /* VorbisPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C2820B90B9F200A6768C /* VorbisPropertiesReader.m */; }; + 177FCF9E0B90C9530011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF9D0B90C9530011C3B5 /* Plugin.h */; }; + 179CFDEE0B90C79800C8C4DB /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 179CFDED0B90C79800C8C4DB /* Vorbis.framework */; }; + 179CFDF20B90C79A00C8C4DB /* Vorbis.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179CFDED0B90C79800C8C4DB /* Vorbis.framework */; }; + 17C93D350B8FDA66008627D6 /* VorbisCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93D320B8FDA66008627D6 /* VorbisCodec.m */; }; + 17C93D360B8FDA66008627D6 /* VorbisDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93D340B8FDA66008627D6 /* VorbisDecoder.m */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 17C93D770B8FDCA5008627D6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 179CFDF20B90C79A00C8C4DB /* Vorbis.framework in CopyFiles */, + 177FCF9E0B90C9530011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1745C2810B90B9F200A6768C /* VorbisPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VorbisPropertiesReader.h; sourceTree = ""; }; + 1745C2820B90B9F200A6768C /* VorbisPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VorbisPropertiesReader.m; sourceTree = ""; }; + 177FCF9D0B90C9530011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 179CFDED0B90C79800C8C4DB /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = ../../Frameworks/Vorbis/build/Release/Vorbis.framework; sourceTree = SOURCE_ROOT; }; + 17C93D310B8FDA66008627D6 /* VorbisCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VorbisCodec.h; sourceTree = ""; }; + 17C93D320B8FDA66008627D6 /* VorbisCodec.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VorbisCodec.m; sourceTree = ""; }; + 17C93D330B8FDA66008627D6 /* VorbisDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VorbisDecoder.h; sourceTree = ""; }; + 17C93D340B8FDA66008627D6 /* VorbisDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VorbisDecoder.m; sourceTree = ""; }; + 32DBCF630370AF2F00C91783 /* Vorbis_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vorbis_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* Vorbis.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vorbis.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 179CFDEE0B90C79800C8C4DB /* Vorbis.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Vorbis */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = Vorbis; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCF9D0B90C9530011C3B5 /* Plugin.h */, + 17C93D310B8FDA66008627D6 /* VorbisCodec.h */, + 17C93D320B8FDA66008627D6 /* VorbisCodec.m */, + 17C93D330B8FDA66008627D6 /* VorbisDecoder.h */, + 17C93D340B8FDA66008627D6 /* VorbisDecoder.m */, + 1745C2810B90B9F200A6768C /* VorbisPropertiesReader.h */, + 1745C2820B90B9F200A6768C /* VorbisPropertiesReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 179CFDED0B90C79800C8C4DB /* Vorbis.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* Vorbis.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* Vorbis_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* Vorbis */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Vorbis" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 17C93D770B8FDCA5008627D6 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Vorbis; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = Vorbis; + productReference = 8D5B49B6048680CD000E48DA /* Vorbis.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Vorbis" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Vorbis */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* Vorbis */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 17C93D350B8FDA66008627D6 /* VorbisCodec.m in Sources */, + 17C93D360B8FDA66008627D6 /* VorbisDecoder.m in Sources */, + 1745C2840B90B9F200A6768C /* VorbisPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/Ogg/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../../Frameworks/Vorbis/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Vorbis_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + OTHER_LDFLAGS = ( + "-weak_framework", + Vorbis, + "-weak_framework", + Ogg, + ); + PRODUCT_NAME = Vorbis; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/Ogg/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/../../Frameworks/Vorbis/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Vorbis_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + OTHER_LDFLAGS = ( + "-weak_framework", + Vorbis, + "-weak_framework", + Ogg, + ); + PRODUCT_NAME = Vorbis; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "Vorbis" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Vorbis" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/Vorbis/VorbisCodec.h b/Plugins/Vorbis/VorbisCodec.h new file mode 100644 index 000000000..35dbcbe4e --- /dev/null +++ b/Plugins/Vorbis/VorbisCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface VorbisCodec : NSObject +{ + +} + +@end diff --git a/Plugins/Vorbis/VorbisCodec.m b/Plugins/Vorbis/VorbisCodec.m new file mode 100644 index 000000000..09d6249a7 --- /dev/null +++ b/Plugins/Vorbis/VorbisCodec.m @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "VorbisCodec.h" +#import "VorbisDecoder.h" +#import "VorbisPropertiesReader.h" + +@implementation VorbisCodec + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [VorbisDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [VorbisPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/Vorbis/VorbisDecoder.h b/Plugins/Vorbis/VorbisDecoder.h new file mode 100644 index 000000000..8f3c2f10e --- /dev/null +++ b/Plugins/Vorbis/VorbisDecoder.h @@ -0,0 +1,35 @@ +// +// VorbisFile.h +// zyVorbis +// +// Created by Vincent Spader on 1/22/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import +#import "Plugin.h" + +//config.h things +#define __MACOSX__ +#define HAVE_CONFIG_H + +#import +#import + +#undef __MACOSX__ +#undef HAVE_CONFIG_H + +@interface VorbisDecoder : NSObject +{ + FILE *inFd; + OggVorbis_File vorbisRef; + int currentSection; + + int bitsPerSample; + int bitrate; + int channels; + float frequency; + double length; +} + +@end diff --git a/Plugins/Vorbis/VorbisDecoder.m b/Plugins/Vorbis/VorbisDecoder.m new file mode 100644 index 000000000..bfe322d7b --- /dev/null +++ b/Plugins/Vorbis/VorbisDecoder.m @@ -0,0 +1,85 @@ +// +// VorbisFile.m +// zyVorbis +// +// Created by Vincent Spader on 1/22/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import "VorbisDecoder.h" + + +@implementation VorbisDecoder + +- (BOOL)open:(NSURL *)url +{ + inFd = fopen([[url path] UTF8String], "rb"); + if (inFd == 0) + return NO; + + if (ov_open(inFd, &vorbisRef, NULL, 0) != 0) + return NO; + + vorbis_info *vi; + + vi = ov_info(&vorbisRef, -1); + + bitsPerSample = vi->channels * 8; + bitrate = (vi->bitrate_nominal/1000.0); + channels = vi->channels; + frequency = vi->rate; + + length = ((double)ov_pcm_total(&vorbisRef, -1) * 1000.0)/frequency; + +// DBLog(@"Ok to go WITH OGG."); + + return YES; +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + int numread; + int total = 0; + + numread = ov_read(&vorbisRef, &((char *)buf)[total], size - total, 0, bitsPerSample/8, 1, ¤tSection); + while (total != size && numread > 0) + { + total += numread; + + numread = ov_read(&vorbisRef, &((char *)buf)[total], size - total, 0, bitsPerSample/8, 1, ¤tSection); + } + + return total; +} + +- (void)close +{ + ov_clear(&vorbisRef); +} + +- (double)seekToTime:(double)milliseconds +{ + ov_time_seek(&vorbisRef, (double)milliseconds/1000.0); + + return milliseconds; +} + + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels], @"channels", + [NSNumber numberWithInt:bitsPerSample], @"bitsPerSample", + [NSNumber numberWithFloat:frequency], @"sampleRate", + [NSNumber numberWithDouble:length], @"length", + [NSNumber numberWithInt:bitrate], @"bitrate", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObjects:@"ogg",nil]; +} + + +@end diff --git a/Plugins/Vorbis/VorbisPropertiesReader.h b/Plugins/Vorbis/VorbisPropertiesReader.h new file mode 100644 index 000000000..905bf68cd --- /dev/null +++ b/Plugins/Vorbis/VorbisPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface VorbisPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/Vorbis/VorbisPropertiesReader.m b/Plugins/Vorbis/VorbisPropertiesReader.m new file mode 100644 index 000000000..cb2f3012f --- /dev/null +++ b/Plugins/Vorbis/VorbisPropertiesReader.m @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "VorbisPropertiesReader.h" +#import "VorbisDecoder.h" + +@implementation VorbisPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + VorbisDecoder *decoder; + + decoder = [[VorbisDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [VorbisDecoder fileTypes]; +} + +@end diff --git a/Plugins/Vorbis/Vorbis_Prefix.pch b/Plugins/Vorbis/Vorbis_Prefix.pch new file mode 100644 index 000000000..bee4c64bf --- /dev/null +++ b/Plugins/Vorbis/Vorbis_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Vorbis' target in the 'Vorbis' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Plugins/WavPack/Info.plist b/Plugins/WavPack/Info.plist new file mode 100644 index 000000000..97a48778a --- /dev/null +++ b/Plugins/WavPack/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.yourcocoabundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + WavPackCodec + + diff --git a/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj b/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj new file mode 100644 index 000000000..dadd49b8a --- /dev/null +++ b/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj @@ -0,0 +1,297 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 1745C4D90B90C42500A6768C /* WavPackCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C4D40B90C42500A6768C /* WavPackCodec.m */; }; + 1745C4DA0B90C42500A6768C /* WavPackDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C4D60B90C42500A6768C /* WavPackDecoder.m */; }; + 1745C4DB0B90C42500A6768C /* WavPackPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C4D80B90C42500A6768C /* WavPackPropertiesReader.m */; }; + 177FCF950B90C9450011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF940B90C9450011C3B5 /* Plugin.h */; }; + 179CFD490B90C6DC00C8C4DB /* WavPack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 179CFD480B90C6DC00C8C4DB /* WavPack.framework */; }; + 179CFD4C0B90C6DF00C8C4DB /* WavPack.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179CFD480B90C6DC00C8C4DB /* WavPack.framework */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 1745C4FE0B90C4CD00A6768C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 179CFD4C0B90C6DF00C8C4DB /* WavPack.framework in CopyFiles */, + 177FCF950B90C9450011C3B5 /* Plugin.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1745C4D30B90C42500A6768C /* WavPackCodec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WavPackCodec.h; sourceTree = ""; }; + 1745C4D40B90C42500A6768C /* WavPackCodec.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WavPackCodec.m; sourceTree = ""; }; + 1745C4D50B90C42500A6768C /* WavPackDecoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WavPackDecoder.h; sourceTree = ""; }; + 1745C4D60B90C42500A6768C /* WavPackDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WavPackDecoder.m; sourceTree = ""; }; + 1745C4D70B90C42500A6768C /* WavPackPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WavPackPropertiesReader.h; sourceTree = ""; }; + 1745C4D80B90C42500A6768C /* WavPackPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WavPackPropertiesReader.m; sourceTree = ""; }; + 177FCF940B90C9450011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; + 179CFD480B90C6DC00C8C4DB /* WavPack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WavPack.framework; path = ../../Frameworks/WavPack/build/Release/WavPack.framework; sourceTree = SOURCE_ROOT; }; + 32DBCF630370AF2F00C91783 /* WavPack_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WavPack_Prefix.pch; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* WavPack.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WavPack.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + 179CFD490B90C6DC00C8C4DB /* WavPack.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* WavPack */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = WavPack; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 177FCF940B90C9450011C3B5 /* Plugin.h */, + 1745C4D30B90C42500A6768C /* WavPackCodec.h */, + 1745C4D40B90C42500A6768C /* WavPackCodec.m */, + 1745C4D50B90C42500A6768C /* WavPackDecoder.h */, + 1745C4D60B90C42500A6768C /* WavPackDecoder.m */, + 1745C4D70B90C42500A6768C /* WavPackPropertiesReader.h */, + 1745C4D80B90C42500A6768C /* WavPackPropertiesReader.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 179CFD480B90C6DC00C8C4DB /* WavPack.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C167FFE841241C02AAC07 /* AppKit.framework */, + D2F7E65807B2D6F200F64583 /* CoreData.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* WavPack.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* WavPack_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* WavPack */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "WavPack" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + 1745C4FE0B90C4CD00A6768C /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WavPack; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = WavPack; + productReference = 8D5B49B6048680CD000E48DA /* WavPack.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "WavPack" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* WavPack */; + projectDirPath = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* WavPack */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1745C4D90B90C42500A6768C /* WavPackCodec.m in Sources */, + 1745C4DA0B90C42500A6768C /* WavPackDecoder.m in Sources */, + 1745C4DB0B90C42500A6768C /* WavPackPropertiesReader.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/WavPack/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/WavPack/build/Release\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = WavPack_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = WavPack; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../../../Frameworks/WavPack/build/Release\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../Frameworks/WavPack/build/Release\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = WavPack_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = WavPack; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "WavPack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "WavPack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Plugins/WavPack/WavPackCodec.h b/Plugins/WavPack/WavPackCodec.h new file mode 100644 index 000000000..342318db8 --- /dev/null +++ b/Plugins/WavPack/WavPackCodec.h @@ -0,0 +1,17 @@ +// +// MusepackCodec.h +// Musepack +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import +#import "Plugin.h" + +@interface WavPackCodec : NSObject +{ + +} + +@end diff --git a/Plugins/WavPack/WavPackCodec.m b/Plugins/WavPack/WavPackCodec.m new file mode 100644 index 000000000..3f724083f --- /dev/null +++ b/Plugins/WavPack/WavPackCodec.m @@ -0,0 +1,38 @@ +// +// MusepackCodec.m +// MusepackCodec +// +// Created by Vincent Spader on 2/21/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "WavPackCodec.h" +#import "WavPackDecoder.h" +#import "WavPackPropertiesReader.h" + +@implementation WavPackCodec + +- (int)pluginType +{ + return kCogPluginCodec; +} + +- (Class)decoder +{ + return [WavPackDecoder class]; +} + +- (Class)metadataReader +{ + return nil; +} + +- (Class)propertiesReader +{ + return [WavPackPropertiesReader class]; +} + + + + +@end diff --git a/Plugins/WavPack/WavPackDecoder.h b/Plugins/WavPack/WavPackDecoder.h new file mode 100644 index 000000000..d5d6508fd --- /dev/null +++ b/Plugins/WavPack/WavPackDecoder.h @@ -0,0 +1,25 @@ +// +// WavPackFile.h +// Cog +// +// Created by Vincent Spader on 6/6/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import +#import "Plugin.h" + +#import "Wavpack/wputils.h" + +@interface WavPackDecoder : NSObject +{ + WavpackContext *wpc; + + int bitsPerSample; + int channels; + int bitrate; + float frequency; + double length; +} + +@end diff --git a/Plugins/WavPack/WavPackDecoder.m b/Plugins/WavPack/WavPackDecoder.m new file mode 100644 index 000000000..ff5a2e976 --- /dev/null +++ b/Plugins/WavPack/WavPackDecoder.m @@ -0,0 +1,91 @@ +// +// WavPackFile.m +// Cog +// +// Created by Vincent Spader on 6/6/05. +// Copyright 2005 Vincent Spader All rights reserved. +// + +#import "WavPackDecoder.h" + + +@implementation WavPackDecoder + +- (BOOL)open:(NSURL *)url +{ + int open_flags = 0; + char error[80]; + + wpc = WavpackOpenFileInput([[url path] UTF8String], error, open_flags, 0); + if (!wpc) + return NO; + + channels = WavpackGetNumChannels(wpc); + bitsPerSample = WavpackGetBitsPerSample(wpc); + + frequency = WavpackGetSampleRate(wpc); + + length = ((double)WavpackGetNumSamples(wpc) * 1000.0)/frequency; + + bitrate = (int)(WavpackGetAverageBitrate(wpc, TRUE)/1000.0); + + return YES; +} + +- (int)fillBuffer:(void *)buf ofSize:(UInt32)size +{ + int numsamples; + int n; + void *sampleBuf = malloc(size*2); + + numsamples = size/(bitsPerSample/8)/channels; +// DBLog(@"NUM SAMPLES: %i %i", numsamples, size); + n = WavpackUnpackSamples(wpc, sampleBuf, numsamples); + + int i; + for (i = 0; i < n*channels; i++) + { + ((UInt16 *)buf)[i] = ((UInt32 *)sampleBuf)[i]; + } + n *= (bitsPerSample/8)*channels; + + free(sampleBuf); + + return n; +} + +- (double)seekToTime:(double)milliseconds +{ + int sample; + sample = frequency*(milliseconds/1000.0); + + WavpackSeekSample(wpc, sample); + + return milliseconds; +} + +- (void)close +{ + WavpackCloseFile(wpc); +} + + +- (NSDictionary *)properties +{ + return [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:channels],@"channels", + [NSNumber numberWithInt:bitsPerSample],@"bitsPerSample", + [NSNumber numberWithInt:bitrate],@"bitrate", + [NSNumber numberWithFloat:frequency],@"sampleRate", + [NSNumber numberWithDouble:length],@"length", + @"host",@"endian", + nil]; +} + ++ (NSArray *)fileTypes +{ + return [NSArray arrayWithObject:@"wv"]; +} + + +@end diff --git a/Plugins/WavPack/WavPackPropertiesReader.h b/Plugins/WavPack/WavPackPropertiesReader.h new file mode 100644 index 000000000..380883dc7 --- /dev/null +++ b/Plugins/WavPack/WavPackPropertiesReader.h @@ -0,0 +1,19 @@ +// +// MADPropertiesReader.h +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +#import "Plugin.h" + + +@interface WavPackPropertiesReader : NSObject +{ + +} + +@end diff --git a/Plugins/WavPack/WavPackPropertiesReader.m b/Plugins/WavPack/WavPackPropertiesReader.m new file mode 100644 index 000000000..f576a0db1 --- /dev/null +++ b/Plugins/WavPack/WavPackPropertiesReader.m @@ -0,0 +1,38 @@ +// +// MADPropertiesReader.m +// MAD +// +// Created by Vincent Spader on 2/24/07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "WavPackPropertiesReader.h" +#import "WavPackDecoder.h" + +@implementation WavPackPropertiesReader + +- (NSDictionary *)propertiesForURL:(NSURL *)url +{ + NSDictionary *properties; + WavPackDecoder *decoder; + + decoder = [[WavPackDecoder alloc] init]; + if (![decoder open:url]) + { + return nil; + } + + properties = [decoder properties]; + + [decoder close]; + + return properties; +} + + ++ (NSArray *)fileTypes +{ + return [WavPackDecoder fileTypes]; +} + +@end diff --git a/Plugins/WavPack/WavPack_Prefix.pch b/Plugins/WavPack/WavPack_Prefix.pch new file mode 100644 index 000000000..09b58d601 --- /dev/null +++ b/Plugins/WavPack/WavPack_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'WavPack' target in the 'WavPack' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Scripts/build_dependencies.sh b/Scripts/build_dependencies.sh new file mode 100755 index 000000000..e741481ea --- /dev/null +++ b/Scripts/build_dependencies.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +./Scripts/build_frameworks.sh +./Scripts/build_preferences.sh +./Scripts/build_plugins.sh + +cd Audio +xcodebuild -alltargets -configuration Release +cd .. + diff --git a/Libraries/build_libs.sh b/Scripts/build_frameworks.sh similarity index 84% rename from Libraries/build_libs.sh rename to Scripts/build_frameworks.sh index 3c052ac73..b2a685e5d 100755 --- a/Libraries/build_libs.sh +++ b/Scripts/build_frameworks.sh @@ -4,7 +4,7 @@ libs=( MAC MPCDec Ogg FLAC Shorten TagLib Vorbis WavPack MAD ID3Tag ) for lib in "${libs[@]}" do - cd $lib + cd Frameworks/$lib xcodebuild -alltargets -configuration Release - cd .. + cd ../.. done diff --git a/Scripts/build_plugins.sh b/Scripts/build_plugins.sh new file mode 100755 index 000000000..d9e5290c3 --- /dev/null +++ b/Scripts/build_plugins.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +plugins=( CoreAudio MonkeysAudio Musepack Flac Shorten TagLib Vorbis WavPack MAD ) + +for plugin in "${plugins[@]}" +do + cd Plugins/$plugin + xcodebuild -alltargets -configuration Release + cd ../.. +done diff --git a/Preferences/build_prefs.sh b/Scripts/build_preferences.sh similarity index 77% rename from Preferences/build_prefs.sh rename to Scripts/build_preferences.sh index ce86bb2c0..6687a52e4 100755 --- a/Preferences/build_prefs.sh +++ b/Scripts/build_preferences.sh @@ -4,7 +4,7 @@ prefs=( General ) for pref in "${prefs[@]}" do - cd $pref + cd Preferences/$pref xcodebuild -alltargets -configuration Release - cd .. + cd ../.. done diff --git a/load_localization.sh b/Scripts/load_localization.sh similarity index 100% rename from load_localization.sh rename to Scripts/load_localization.sh diff --git a/update_strings.sh b/Scripts/update_strings.sh similarity index 100% rename from update_strings.sh rename to Scripts/update_strings.sh diff --git a/Sound/SOUNDTODO b/Sound/SOUNDTODO deleted file mode 100644 index c0e0f46c5..000000000 --- a/Sound/SOUNDTODO +++ /dev/null @@ -1,41 +0,0 @@ -Limit the number of queued elements (2 would probably be good, maybe 3). - - - ------------------------------------------------------------------------------------------------------- -InputChain - InputController - Input - reads data from file, puts it in buffer - ConverterController? - Converter - reads data from buffer, puts it in next buffer - EffectsController? - Effects - reads data from buffer, puts it in next buffer - - outputBuffer - the final buffer, to be read by output - - Filename/URL - -OutputController - output - -Reads data from the outputbuffer and outputs - -SoundController - InputChain - OutputController - - ChainQueue - -On Input EOF, it will signal SoundController. -SoundController will create a new InputChain for the next file. The NEW InputChain will get placed in the ChainQueue. -When all data has been played from the current InputChain, it is released. Then, pop the first item from the Queue, and make it the new InputChain. Signal the delegate that a song change has taken place. - -How to get the next file from the delegate? -/*Perhaps have it keep a copy of the playlist? No. Playlist changes would be a problem. Could have delegate call method like signalPlaylistChanged. Code to make modifications would be a pain. -*/ -Need an offset for how many songs (chains) have been queued, probably. -Delegate can get the offset, and tell it nextFile from that. -Delegate will keep track of changes to the playlist. If the playlist is modified so it affected within the currently playing index to index + offset, then signal the soundcontroller, telling it had a playlist change. Would have to clear the ChainQueue and start again. -/*Might want soundcontroller to keep track of changes, and have a signalPlaylistChanged, however. This means the soundcontroller wouldnt be independent of the playlist, however, which is a Nice Thing®. -*/ -So, soundcontroller will signal delegate when a file is first opened, to fill the nextfile. Also, when input hits EOF for the current file, nextFile becomes current, and it will signal the delegate for nextFile. - diff --git a/Sound/SoundController.h b/Sound/SoundController.h deleted file mode 100644 index 7a9734c4e..000000000 --- a/Sound/SoundController.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// SoundController.h -// Cog -// -// Created by Vincent Spader on 8/7/05. -// Copyright 2005 Vincent Spader. All rights reserved. -// - -#import - -#import "BufferChain.h" -#import "OutputNode.h" -#import "PlaylistEntry.h" - -@class BufferChain; -@class OutputNode; - -@interface SoundController : NSObject { - BufferChain *bufferChain; - OutputNode *output; - - NSMutableArray *chainQueue; - - PlaylistEntry *nextEntry; //Updated whenever the playlist changes? - - id delegate; -} - -- (OutputNode *) output; -- (BufferChain *) bufferChain; -- (id)initWithDelegate:(id)d; - -- (void)play:(PlaylistEntry *)pe; -- (void)stop; -- (void)pause; -- (void)resume; - -- (void)seekToTime:(double)time; -- (void)setVolume:(double)v; - -- (double)amountPlayed; - - -- (void)setNextEntry:(PlaylistEntry *)pe; -- (void)setPlaybackStatus:(int)s; - - -@end diff --git a/Sound/SoundController.m b/Sound/SoundController.m deleted file mode 100644 index fb94d0719..000000000 --- a/Sound/SoundController.m +++ /dev/null @@ -1,215 +0,0 @@ -// -// SoundController.m -// Cog -// -// Created by Vincent Spader on 8/7/05. -// Copyright 2005 Vincent Spader. All rights reserved. -// - -#import "SoundController.h" -#import "Status.h" - -@implementation SoundController - -- (id)initWithDelegate:(id)d -{ - DBLog(@"Initializing\n"); - - self = [super init]; - if (self) - { - //things - output = NULL; - bufferChain = NULL; - - chainQueue = [[NSMutableArray alloc] init]; - - delegate = d; - } - - return self; -} - -- (void)play:(PlaylistEntry *)pe -{ - if (output) - { - [output release]; - } - output = [[OutputNode alloc] initWithController:self previous:nil]; - [output setup]; - - NSEnumerator *enumerator = [chainQueue objectEnumerator]; - id anObject; - while (anObject = [enumerator nextObject]) - { - [anObject setShouldContinue:NO]; - } - [chainQueue removeAllObjects]; - - if (bufferChain) - { - [bufferChain setShouldContinue:NO]; - - [bufferChain release]; - } - bufferChain = [[BufferChain alloc] initWithController:self]; - - while (![bufferChain open:pe]) - { - [bufferChain release]; - - [self requestNextEntry:pe]; - - pe = nextEntry; - if (pe == nil) - { - return; - } - - [self notifySongChanged:pe]; - bufferChain = [[BufferChain alloc] initWithController:self]; - } - - [self setShouldContinue:YES]; - DBLog(@"DETACHING THREADS"); - - [output launchThread]; - [bufferChain launchThreads]; - - [self setPlaybackStatus:kCogStatusPlaying]; -} - -- (void)stop -{ - //Set shouldoContinue to NO on allll things - [self setShouldContinue:NO]; - [self setPlaybackStatus:kCogStatusStopped]; -} - -- (void)pause -{ - [output pause]; - - [self setPlaybackStatus:kCogStatusPaused]; -} - -- (void)resume -{ - [output resume]; - - [self setPlaybackStatus:kCogStatusPlaying]; -} - -- (void)seekToTime:(double)time -{ - //Need to reset everything's buffers, and then seek? - /*HACK TO TEST HOW WELL THIS WOULD WORK*/ - [bufferChain seek:time]; - [output seek:time]; - - - /*END HACK*/ -} - -- (void)setVolume:(double)v -{ - [output setVolume:v]; -} - -- (void)setNextEntry:(PlaylistEntry *)pe -{ - [pe retain]; - [nextEntry release]; - nextEntry = pe; -} - - -- (void)setShouldContinue:(BOOL)s -{ - [bufferChain setShouldContinue:s]; - [output setShouldContinue:s]; -} - -- (double)amountPlayed -{ - return [output amountPlayed]; -} - - -- (void)requestNextEntry:(PlaylistEntry *)pe -{ - [delegate performSelectorOnMainThread:@selector(delegateRequestNextEntry:) withObject:pe waitUntilDone:YES]; -} - -- (void)notifySongChanged:(PlaylistEntry *)pe -{ - [delegate performSelectorOnMainThread:@selector(delegateNotifySongChanged:) withObject:pe waitUntilDone:NO]; -} - -- (void)endOfInputReached:(id)sender -{ - BufferChain *newChain = nil; - - nextEntry = [sender playlistEntry]; - [nextEntry retain]; - - do { - [newChain release]; - [self requestNextEntry:nextEntry]; - - if (nextEntry == nil) - { - return; - } - - newChain = [[BufferChain alloc] initWithController:self]; - } while (![newChain open:nextEntry]); - - [newChain setShouldContinue:YES]; - [newChain launchThreads]; - - [chainQueue insertObject:newChain atIndex:[chainQueue count]]; - - [newChain release]; -} - -- (void)endOfInputPlayed -{ - if ([chainQueue count] <= 0) - { - //End of playlist - DBLog(@"STOPPED"); - [self stop]; - - return; - } -// NSLog(@"SWAPPING BUFFERS"); - [bufferChain release]; - - DBLog(@"END OF INPUT PLAYED"); - bufferChain = [chainQueue objectAtIndex:0]; - [bufferChain retain]; - - [chainQueue removeObjectAtIndex:0]; - - [self notifySongChanged:[bufferChain playlistEntry]]; - [output setEndOfStream:NO]; -} - -- (void)setPlaybackStatus:(int)s -{ - [delegate performSelectorOnMainThread:@selector(delegateNotifyStatusUpdate:) withObject:[NSNumber numberWithInt:s] waitUntilDone:NO]; -} - -- (BufferChain *)bufferChain -{ - return bufferChain; -} - -- (OutputNode *) output -{ - return output; -} - -@end diff --git a/Sound/SoundFile/AACFile.h b/Sound/SoundFile/AACFile.h deleted file mode 100644 index 00d023c45..000000000 --- a/Sound/SoundFile/AACFile.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// AACFile.h -// Cog -// -// Created by Vincent Spader on 5/31/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import - -#import - -#import "SoundFile.h" - -#define INPUT_BUFFER_SIZE 1024*16 -#define SAMPLE_BUFFER_SIZE FAAD_MIN_STREAMSIZE*1024 - -@interface AACFile : SoundFile { - FILE *inFd; - NeAACDecHandle hAac; - NeAACDecFrameInfo hInfo; - - unsigned long *seekTable; - int seekTableLength; - - char buffer[SAMPLE_BUFFER_SIZE]; - int bufferAmount; - - char inputBuffer[INPUT_BUFFER_SIZE]; - int inputAmount; -} - -@end diff --git a/Sound/SoundFile/AACFile.m b/Sound/SoundFile/AACFile.m deleted file mode 100644 index d284d7958..000000000 --- a/Sound/SoundFile/AACFile.m +++ /dev/null @@ -1,174 +0,0 @@ -// -// AACFile.m -// Cog -// -// Created by Vincent Spader on 5/31/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import "AACFile.h" -#import - -@implementation AACFile - -- (BOOL)open:(const char *)filename -{ - faadAACInfo info; - // unsigned long cap = NeAACDecGetCapabilities(); - //Check if decoder has the needed capabilities - - inFd = fopen(filename, "r"); - if (!inFd) - return NO; - - //Open the library - hAac = NeAACDecOpen(); - - //Get the current config - NeAACDecConfigurationPtr conf = NeAACDecGetCurrentConfiguration(hAac); - - conf->outputFormat = FAAD_FMT_32BIT; - bitsPerSample = 32; - - //set the new configuration - NeAACDecSetConfiguration(hAac, conf); - - get_AAC_format(inFd, &info, &seekTable, &seekTableLength, 1); - - fseek(inFd, 0, SEEK_SET); - - inputAmount = fread(inputBuffer, 1, INPUT_BUFFER_SIZE, inFd); - - unsigned long samplerate; - unsigned char c; - //Initialize the library using one of the initalization functions - char err = NeAACDecInit(hAac, (unsigned char *)inputBuffer, inputAmount, &samplerate, &c); - if (err < 0) - { - //ERROR BLARG - DBLog(@"AAC ERRROR"); - return NO; - } - inputAmount -= err; - memmove(inputBuffer, &inputBuffer[err], inputAmount); - - frequency = (int)samplerate; - channels = c; - - bitrate = (int)((float)info.bitrate/1000.0); - totalSize = (long int)(info.length*(double)frequency/1000.0*channels*bitsPerSample/8); - - isBigEndian = YES; - - return YES; -} - -- (BOOL)readInfo:(const char *)filename -{ - [self open:filename]; - - return YES; -} - -- (int)fillBuffer:(void *)buf ofSize:(UInt32)size -{ - int numread = bufferAmount; - int count = 0; - char *sampleBuffer; - -// DBLog(@"FILLING BUFFER : %i, %i", size, bufferAmount); -// DBLog(@"INPUT AMOUNT: %i/%i", inputAmount, INPUT_BUFFER_SIZE); - // DBLog(@"Fill buffer: %i", size); - //Fill from buffer, going by bufferAmount - //if still needs more, decode and repeat - if (bufferAmount == 0) - { - int n; - - /* returns the length of the samples*/ - if (inputAmount < INPUT_BUFFER_SIZE && !feof(inFd)) - { - n = fread(&inputBuffer[inputAmount], 1, INPUT_BUFFER_SIZE-inputAmount, inFd); - inputAmount += n; - } - - sampleBuffer = NeAACDecDecode(hAac, &hInfo, (unsigned char *)inputBuffer, inputAmount); - - if (hInfo.error == 0 && hInfo.samples > 0) - { - inputAmount -= hInfo.bytesconsumed; - memmove(inputBuffer, &inputBuffer[hInfo.bytesconsumed], inputAmount); - - //DO STUFF with decoded data - memcpy(buffer, sampleBuffer, hInfo.samples * (bitsPerSample/8)); - } - else if (hInfo.error != 0) - { - DBLog(@"FAAD2 Warning %s %i\n", NeAACDecGetErrorMessage(hInfo.error), hInfo.channels); - if (feof(inFd) && inputAmount == 0) - { - return 0; - } - } - else - { - inputAmount -= hInfo.bytesconsumed; - memmove(inputBuffer, &inputBuffer[hInfo.bytesconsumed], inputAmount); - } - - bufferAmount = hInfo.samples*(bitsPerSample/8); -// DBLog(@"REAL BUFFER AMOUNT: %i", bufferAmount); - } - - count = bufferAmount; - if (bufferAmount > size) - { - count = size; - } - - memcpy(buf, buffer, count); - - bufferAmount -= count; - - if (bufferAmount > 0) - memmove(buffer, &buffer[count], bufferAmount); - - if (count < size) - numread = [self fillBuffer:(&((char *)buf)[count]) ofSize:(size - count)]; - else - numread = 0; - - return count + numread; -} - -- (double)seekToTime:(double)milliseconds -{ - int second; - int i; - unsigned long pos; - unsigned long length; - - if (seekTableLength <= 1) - return -1; - - length = (unsigned long)(totalSize /(frequency * channels*(bitsPerSample/8))); - - second = (int)(milliseconds/1000.0); - i = (int)(((float)second/length)*seekTableLength); - - pos = seekTable[i]; - - fseek(inFd, pos, SEEK_SET); - inputAmount = 0; - NeAACDecPostSeekReset(hAac, -1); - - return second*1000.0; -} - -- (void)close -{ - NeAACDecClose(hAac); - fclose(inFd); -} - -@end diff --git a/Sound/SoundFile/MPEGFile.h b/Sound/SoundFile/MPEGFile.h deleted file mode 100644 index 02b6847c4..000000000 --- a/Sound/SoundFile/MPEGFile.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPEGFile.h -// zyVorbis -// -// Created by Vincent Spader on 1/30/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import -#import "SoundFile.h" - -#include "DecMPA/decmpa.h" - -@interface MPEGFile : SoundFile { - void *decoder; -} - -@end diff --git a/Sound/SoundFile/MPEGFile.mm b/Sound/SoundFile/MPEGFile.mm deleted file mode 100644 index 76ce08cbe..000000000 --- a/Sound/SoundFile/MPEGFile.mm +++ /dev/null @@ -1,112 +0,0 @@ -// -// MPEGFile.m -// zyVorbis -// -// Created by Vincent Spader on 1/30/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import "MPEGFile.h" - - -@implementation MPEGFile - -- (BOOL)open:(const char *)filename -{ - int err; - -// DBLog(@"Opening: %s!!!!", filename); - - err = DecMPA_CreateUsingFile(&decoder, filename, DECMPA_VERSION); - if (err != DECMPA_OK) - return NO; - - DecMPA_SetParam(decoder, DECMPA_PARAM_OUTPUT, DECMPA_OUTPUT_INT16); - - long n; - DecMPA_DecodeNoData(decoder, &n); -// DBLog(@"Woot: %i", n); - DecMPA_OutputFormat outputFormat; - err = DecMPA_GetOutputFormat(decoder, &outputFormat); - - if (err != DECMPA_OK) - return NO; - - frequency = outputFormat.nFrequency; - channels = outputFormat.nChannels; - bitsPerSample = 16; - - isBigEndian = hostIsBigEndian(); - - long duration; - DecMPA_GetDuration(decoder, &duration); - totalSize = (long int)(duration*(double)frequency/1000.0*channels*bitsPerSample/8); - - DecMPA_MPEGHeader mpegHeader; - DecMPA_GetMPEGHeader(decoder, &mpegHeader); -// int totalRate = mpegHeader.nBitRateKbps; -// int num = 0; -/* - while (DecMPA_DecodeNoData(decoder, &n) == DECMPA_OK) - { - DecMPA_GetMPEGHeader(decoder, &mpegHeader); - totalRate += mpegHeader.nBitRateKbps; - DBLog(@"%i %i %i", num, mpegHeader.nBitRateIndex, mpegHeader.nBitRateKbps); - num++; - } - err = DecMPA_GetMPEGHeader(decoder, &mpegHeader); -*/ - bitrate = mpegHeader.nBitRateKbps; -// DBLog(@"Bitrate? %i", mpegHeader.); -// DBLog(@"Mpeg file opened."); - err = DecMPA_SeekToTime(decoder, 0); - if (err != DECMPA_OK) - return NO; - return YES; -} - -- (BOOL)readInfo:(const char *)filename -{ - [self open:filename]; - - return YES; -} - -- (int)fillBuffer:(void *)buf ofSize:(UInt32)size -{ - long numread; - long total = 0; - - DecMPA_Decode(decoder, &((char *)buf)[total], size - total, &numread); - while (total != size && numread > 0) - { - total += numread; - - DecMPA_Decode(decoder, &((char *)buf)[total], size - total, &numread); - } - /* - int n; - for (n = 0; n < total/2; n++) - { - ((UInt16 *)buf)[n] = CFSwapInt16BigToHost(((UInt16 *)buf)[n]); - } - */ - - return total; -} - -- (void)close -{ - if (decoder) - DecMPA_Destroy(decoder); - decoder = NULL; -} - -- (double)seekToTime:(double)milliseconds -{ - DecMPA_SeekToTime(decoder, (unsigned long)milliseconds); - - return milliseconds; -} - -@end diff --git a/Sound/SoundFile/WaveFile.h b/Sound/SoundFile/WaveFile.h deleted file mode 100644 index ffda228c4..000000000 --- a/Sound/SoundFile/WaveFile.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// WaveFile.h -// zyVorbis -// -// Created by Vincent Spader on 1/31/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import -#import "SndFile/sndfile.h" -#import "SoundFile.h" - -@interface WaveFile : SoundFile { - SNDFILE *sndFile; - SF_INFO info; -} - -- (BOOL)readInfo; - -@end diff --git a/Sound/SoundFile/WaveFile.m b/Sound/SoundFile/WaveFile.m deleted file mode 100644 index 4c46e9ef0..000000000 --- a/Sound/SoundFile/WaveFile.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// WaveFile.m -// zyVorbis -// -// Created by Vincent Spader on 1/31/05. -// Copyright 2005 Vincent Spader All rights reserved. -// - -#import "WaveFile.h" - -@implementation WaveFile - -- (BOOL)open:(const char *)filename -{ - sndFile = sf_open(filename, SFM_READ, &info); - - if (sndFile == NULL) - return NO; - - return [self readInfo]; -} - -- (BOOL)readInfo -{ - bitrate = 0; - frequency = info.samplerate; - channels = info.channels; - isUnsigned = NO; - - switch (info.format & SF_FORMAT_ENDMASK) - { - case SF_ENDIAN_FILE: - if (((info.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AIFF) || ((info.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU)) - isBigEndian = YES; - else - isBigEndian = NO; - - break; - case SF_ENDIAN_CPU: - isBigEndian = hostIsBigEndian(); - //DBLog(@"&CPU ENDIAN"); - break; - case SF_ENDIAN_LITTLE: - isBigEndian = NO; -// DBLog(@"&LITTLE INDIAN"); - break; - case SF_ENDIAN_BIG: - isBigEndian = YES; -// DBLog(@"&BIG ENDIAN"); - break; - default: - isBigEndian = NO; -// DBLog(@"&WHAT THE FUCK IS GOING ON?!!!!"); - } - - switch (info.format & SF_FORMAT_SUBMASK) - { - case SF_FORMAT_PCM_S8: - bitsPerSample = 8; - break; - case SF_FORMAT_PCM_16: - bitsPerSample = 16; - break; - case SF_FORMAT_PCM_24: - bitsPerSample = 24; - break; - case SF_FORMAT_PCM_32: - bitsPerSample = 32; - break; - case SF_FORMAT_PCM_U8: - isUnsigned = YES; - bitsPerSample = 8; - break; - default: - DBLog(@"BITS PER SAMPLE NOT DEFINED"); - return NO; - } - - totalSize = info.frames*channels*bitsPerSample/8; - - return YES; -} - -- (BOOL)readInfo:(const char *)filename -{ - [self open:filename]; - - return YES; -} - -- (int)fillBuffer:(void *)buf ofSize:(UInt32)size -{ - int numread; - - numread = sf_read_raw(sndFile, buf, size); -/* - if (isBigEndian == YES) - { - int n; - for (n = 0; n < numread/2; n++) - { - ((UInt16 *)buf)[n] = CFSwapInt16LittleToHost(((UInt16 *)buf)[n]); - } - } -*/ - return numread; -} - -- (void)close -{ - if (sndFile) - sf_close(sndFile); - sndFile = NULL; -} - -- (double)seekToTime:(double)milliseconds -{ - sf_seek(sndFile, frequency*((double)milliseconds/1000.0), SEEK_SET); - - return milliseconds; -} - -@end diff --git a/TODO b/TODO deleted file mode 100644 index 2e687f1a7..000000000 --- a/TODO +++ /dev/null @@ -1,3 +0,0 @@ -Plugins. -Stuff. - diff --git a/Custom/AMRemovableColumnsTableView.h b/ThirdParty/AMRemovableColumnsTableView/AMRemovableColumnsTableView.h similarity index 100% rename from Custom/AMRemovableColumnsTableView.h rename to ThirdParty/AMRemovableColumnsTableView/AMRemovableColumnsTableView.h diff --git a/Custom/AMRemovableColumnsTableView.m b/ThirdParty/AMRemovableColumnsTableView/AMRemovableColumnsTableView.m similarity index 100% rename from Custom/AMRemovableColumnsTableView.m rename to ThirdParty/AMRemovableColumnsTableView/AMRemovableColumnsTableView.m diff --git a/Custom/AMRemovableTableColumn.h b/ThirdParty/AMRemovableColumnsTableView/AMRemovableTableColumn.h similarity index 100% rename from Custom/AMRemovableTableColumn.h rename to ThirdParty/AMRemovableColumnsTableView/AMRemovableTableColumn.h diff --git a/Custom/AMRemovableTableColumn.m b/ThirdParty/AMRemovableColumnsTableView/AMRemovableTableColumn.m similarity index 100% rename from Custom/AMRemovableTableColumn.m rename to ThirdParty/AMRemovableColumnsTableView/AMRemovableTableColumn.m diff --git a/ThirdParty/AppleRemote/AppleRemote.h b/ThirdParty/AppleRemote/AppleRemote.h new file mode 100644 index 000000000..8ca112ae8 --- /dev/null +++ b/ThirdParty/AppleRemote/AppleRemote.h @@ -0,0 +1,199 @@ +/***************************************************************************** + * AppleRemote.h + * AppleRemote + * $Id: AppleRemote.h 18683 2007-02-02 09:12:37Z fkuehne $ + * + * Created by Martin Kahr on 11.03.06 under a MIT-style license. + * Copyright (c) 2006 martinkahr.com. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + ***************************************************************************** + * + * Note that changes made by any members or contributors of the VideoLAN team + * (i.e. changes that were checked in exclusively into one of VideoLAN's source code + * repositories) are licensed under the GNU General Public License version 2, + * or (at your option) any later version. + * Thus, the following statements apply to our changes: + * + * Copyright (C) 2006-2007 the VideoLAN team + * Authors: Eric Petit + * Felix Kühne + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#import +#import +#import +#import +#import +#import +#import + +enum AppleRemoteEventIdentifier +{ + kRemoteButtonVolume_Plus =1<<1, + kRemoteButtonVolume_Minus =1<<2, + kRemoteButtonMenu =1<<3, + kRemoteButtonPlay =1<<4, + kRemoteButtonRight =1<<5, + kRemoteButtonLeft =1<<6, + kRemoteButtonRight_Hold =1<<7, + kRemoteButtonLeft_Hold =1<<8, + kRemoteButtonMenu_Hold =1<<9, + kRemoteButtonPlay_Sleep =1<<10, + kRemoteControl_Switched =1<<11, + kRemoteButtonVolume_Plus_Hold =1<<12, + kRemoteButtonVolume_Minus_Hold =1<<13 +}; +typedef enum AppleRemoteEventIdentifier AppleRemoteEventIdentifier; + +/* Encapsulates usage of the apple remote control +This class is implemented as a singleton as there is exactly one remote per machine (until now) +The class is not thread safe +*/ +@interface AppleRemote : NSObject { + IOHIDDeviceInterface** hidDeviceInterface; + IOHIDQueueInterface** queue; + NSMutableArray* allCookies; + NSMutableDictionary* cookieToButtonMapping; + + BOOL openInExclusiveMode; + BOOL simulatePlusMinusHold; + BOOL processesBacklog; + + /* state for simulating plus/minus hold */ + BOOL lastEventSimulatedHold; + AppleRemoteEventIdentifier lastPlusMinusEvent; + NSTimeInterval lastPlusMinusEventTime; + + int remoteId; + unsigned int clickCountEnabledButtons; + NSTimeInterval maxClickTimeDifference; + NSTimeInterval lastClickCountEventTime; + AppleRemoteEventIdentifier lastClickCountEvent; + unsigned int eventClickCount; + + IBOutlet id delegate; +} + +- (int) remoteId; + +- (BOOL) isRemoteAvailable; + +- (BOOL) isListeningToRemote; +- (void) setListeningToRemote: (BOOL) value; + +- (BOOL) isOpenInExclusiveMode; +- (void) setOpenInExclusiveMode: (BOOL) value; + +/* click counting makes it possible to recognize if the user has pressed a button repeatedly + * click counting does delay each event as it has to wait if there is another event (second click) + * therefore there is a slight time difference (maximumClickCountTimeDifference) between a single click + * of the user and the call of your delegate method + * click counting can be enabled individually for specific buttons. Use the property clickCountEnableButtons + * to set the buttons for which click counting shall be enabled */ +- (BOOL) clickCountingEnabled; +- (void) setClickCountingEnabled: (BOOL) value; + +- (unsigned int) clickCountEnabledButtons; +- (void) setClickCountEnabledButtons: (unsigned int)value; + +/* the maximum time difference till which clicks are recognized as multi clicks */ +- (NSTimeInterval) maximumClickCountTimeDifference; +- (void) setMaximumClickCountTimeDifference: (NSTimeInterval) timeDiff; + +/* When your application needs to much time on the main thread when processing an event other events + * may already be received which are put on a backlog. As soon as your main thread + * has some spare time this backlog is processed and may flood your delegate with calls. + * Backlog processing is turned off by default. */ +- (BOOL) processesBacklog; +- (void) setProcessesBacklog: (BOOL) value; + +/* Sets an NSApplication delegate which starts listening when application is becoming active + * and stops listening when application resigns being active. + * If an NSApplication delegate has been already set all method calls will be forwarded to this delegate, too. */ +- (BOOL) listeningOnAppActivate; +- (void) setListeningOnAppActivate: (BOOL) value; + +/* Simulating plus/minus hold does deactivate sending of individual requests for plus/minus pressed down/released. + * Instead special hold events are being triggered when the user is pressing and holding plus/minus for a small period. + * With simulating enabled the plus/minus buttons do behave as the left/right buttons */ +- (BOOL) simulatesPlusMinusHold; +- (void) setSimulatesPlusMinusHold: (BOOL) value; + +/* Delegates are not retained */ +- (void) setDelegate: (id) delegate; +- (id) delegate; + +- (IBAction) startListening: (id) sender; +- (IBAction) stopListening: (id) sender; +@end + +@interface AppleRemote (Singleton) + ++ (AppleRemote*) sharedRemote; + +@end + +/* Method definitions for the delegate of the AppleRemote class */ +@interface NSObject(NSAppleRemoteDelegate) + +- (void) appleRemoteButton: (AppleRemoteEventIdentifier)buttonIdentifier pressedDown: (BOOL) pressedDown clickCount: (unsigned int) count; + +@end + +@interface AppleRemote (PrivateMethods) +- (void) setRemoteId: (int) aValue; +- (NSDictionary*) cookieToButtonMapping; +- (IOHIDQueueInterface**) queue; +- (IOHIDDeviceInterface**) hidDeviceInterface; +- (void) handleEventWithCookieString: (NSString*) cookieString sumOfValues: (SInt32) sumOfValues; +@end + +@interface AppleRemote (IOKitMethods) +- (io_object_t) findAppleRemoteDevice; +- (IOHIDDeviceInterface**) createInterfaceForDevice: (io_object_t) hidDevice; +- (BOOL) initializeCookies; +- (BOOL) openDevice; +@end + +/* A NSApplication delegate which is used to activate and deactivate listening to the remote control + * dependent on the activation state of your application. + * All events are delegated to the original NSApplication delegate if necessary */ +@interface AppleRemoteApplicationDelegate : NSObject { + id applicationDelegate; +} + +- (id) initWithApplicationDelegate: (id) delegate; +- (id) applicationDelegate; +@end \ No newline at end of file diff --git a/ThirdParty/AppleRemote/AppleRemote.m b/ThirdParty/AppleRemote/AppleRemote.m new file mode 100644 index 000000000..fbe986bdc --- /dev/null +++ b/ThirdParty/AppleRemote/AppleRemote.m @@ -0,0 +1,713 @@ +/***************************************************************************** + * AppleRemote.m + * AppleRemote + * $Id: AppleRemote.m 18683 2007-02-02 09:12:37Z fkuehne $ + * + * Created by Martin Kahr on 11.03.06 under a MIT-style license. + * Copyright (c) 2006 martinkahr.com. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + ***************************************************************************** + * + * Note that changes made by any members or contributors of the VideoLAN team + * (i.e. changes that were exclusively checked in to one of VideoLAN's source code + * repositories) are licensed under the GNU General Public License version 2, + * or (at your option) any later version. + * Thus, the following statements apply to our changes: + * + * Copyright (C) 2006-2007 the VideoLAN team + * Authors: Eric Petit + * Felix Kühne + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#import "AppleRemote.h" + +const char* AppleRemoteDeviceName = "AppleIRController"; +const int REMOTE_SWITCH_COOKIE=19; +const NSTimeInterval DEFAULT_MAXIMUM_CLICK_TIME_DIFFERENCE=0.35; +const NSTimeInterval HOLD_RECOGNITION_TIME_INTERVAL=0.4; + +@implementation AppleRemote + +#pragma public interface + +- (id) init { + if ( self = [super init] ) { + openInExclusiveMode = YES; + queue = NULL; + hidDeviceInterface = NULL; + cookieToButtonMapping = [[NSMutableDictionary alloc] init]; + + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonVolume_Plus] forKey:@"14_12_11_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonVolume_Minus] forKey:@"14_13_11_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu] forKey:@"14_7_6_14_7_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay] forKey:@"14_8_6_14_8_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight] forKey:@"14_9_6_14_9_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft] forKey:@"14_10_6_14_10_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight_Hold] forKey:@"14_6_4_2_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft_Hold] forKey:@"14_6_3_2_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu_Hold] forKey:@"14_6_14_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay_Sleep] forKey:@"18_14_6_18_14_6_"]; + [cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteControl_Switched] forKey:@"19_"]; + + /* defaults */ + [self setSimulatesPlusMinusHold: YES]; + maxClickTimeDifference = DEFAULT_MAXIMUM_CLICK_TIME_DIFFERENCE; + } + + return self; +} + +- (void) dealloc { + [self stopListening:self]; + [cookieToButtonMapping release]; + [super dealloc]; +} + +/* this was added by the VideoLAN team to ensure Leopard-compatibility and is VLC-only */ +#if GC_ENABLED +- (void)finalize +{ + [self stopListening: self]; + [super finalize]; +} +#endif + +- (int) remoteId { + return remoteId; +} + +- (BOOL) isRemoteAvailable { + io_object_t hidDevice = [self findAppleRemoteDevice]; + if (hidDevice != 0) { + IOObjectRelease(hidDevice); + return YES; + } else { + return NO; + } +} + +- (BOOL) isListeningToRemote { + return (hidDeviceInterface != NULL && allCookies != NULL && queue != NULL); +} + +- (void) setListeningToRemote: (BOOL) value { + if (value == NO) { + [self stopListening:self]; + } else { + [self startListening:self]; + } +} + +/* Delegates are not retained! + * http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/chapter_6_section_4.html + * Delegating objects do not (and should not) retain their delegates. + * However, clients of delegating objects (applications, usually) are responsible for ensuring that their delegates are around + * to receive delegation messages. To do this, they may have to retain the delegate. */ +- (void) setDelegate: (id) _delegate { + if (_delegate && [_delegate respondsToSelector:@selector(appleRemoteButton:pressedDown:clickCount:)]==NO) return; + + delegate = _delegate; +} +- (id) delegate { + return delegate; +} + +- (BOOL) isOpenInExclusiveMode { + return openInExclusiveMode; +} +- (void) setOpenInExclusiveMode: (BOOL) value { + openInExclusiveMode = value; +} + +- (BOOL) clickCountingEnabled { + return clickCountEnabledButtons != 0; +} +- (void) setClickCountingEnabled: (BOOL) value { + if (value) { + [self setClickCountEnabledButtons: kRemoteButtonVolume_Plus | kRemoteButtonVolume_Minus | kRemoteButtonPlay | kRemoteButtonLeft | kRemoteButtonRight | kRemoteButtonMenu]; + } else { + [self setClickCountEnabledButtons: 0]; + } +} + +- (unsigned int) clickCountEnabledButtons { + return clickCountEnabledButtons; +} +- (void) setClickCountEnabledButtons: (unsigned int)value { + clickCountEnabledButtons = value; +} + +- (NSTimeInterval) maximumClickCountTimeDifference { + return maxClickTimeDifference; +} +- (void) setMaximumClickCountTimeDifference: (NSTimeInterval) timeDiff { + maxClickTimeDifference = timeDiff; +} + +- (BOOL) processesBacklog { + return processesBacklog; +} +- (void) setProcessesBacklog: (BOOL) value { + processesBacklog = value; +} + +- (BOOL) listeningOnAppActivate { + id appDelegate = [NSApp delegate]; + return (appDelegate!=nil && [appDelegate isKindOfClass: [AppleRemoteApplicationDelegate class]]); +} +- (void) setListeningOnAppActivate: (BOOL) value { + if (value) { + if ([self listeningOnAppActivate]) return; + AppleRemoteApplicationDelegate* appDelegate = [[AppleRemoteApplicationDelegate alloc] initWithApplicationDelegate: [NSApp delegate]]; + /* NSApp does not retain its delegate therefore we keep retain count on 1 */ + [NSApp setDelegate: appDelegate]; + } else { + if ([self listeningOnAppActivate]==NO) return; + AppleRemoteApplicationDelegate* appDelegate = (AppleRemoteApplicationDelegate*)[NSApp delegate]; + id previousAppDelegate = [appDelegate applicationDelegate]; + [NSApp setDelegate: previousAppDelegate]; + [appDelegate release]; + } +} + +- (BOOL) simulatesPlusMinusHold { + return simulatePlusMinusHold; +} +- (void) setSimulatesPlusMinusHold: (BOOL) value { + simulatePlusMinusHold = value; +} + +- (IBAction) startListening: (id) sender { + if ([self isListeningToRemote]) return; + + io_object_t hidDevice = [self findAppleRemoteDevice]; + if (hidDevice == 0) return; + + if ([self createInterfaceForDevice:hidDevice] == NULL) { + goto error; + } + + if ([self initializeCookies]==NO) { + goto error; + } + + if ([self openDevice]==NO) { + goto error; + } + goto cleanup; + +error: + [self stopListening:self]; + +cleanup: + IOObjectRelease(hidDevice); +} + +- (IBAction) stopListening: (id) sender { + if (queue != NULL) { + (*queue)->stop(queue); + + //dispose of queue + (*queue)->dispose(queue); + + //release the queue we allocated + (*queue)->Release(queue); + + queue = NULL; + } + + if (allCookies != nil) { + [allCookies autorelease]; + allCookies = nil; + } + + if (hidDeviceInterface != NULL) { + //close the device + (*hidDeviceInterface)->close(hidDeviceInterface); + + //release the interface + (*hidDeviceInterface)->Release(hidDeviceInterface); + + hidDeviceInterface = NULL; + } +} + +@end + +@implementation AppleRemote (Singleton) + +static AppleRemote* sharedInstance=nil; + ++ (AppleRemote*) sharedRemote { + @synchronized(self) { + if (sharedInstance == nil) { + sharedInstance = [[self alloc] init]; + } + } + return sharedInstance; +} ++ (id)allocWithZone:(NSZone *)zone { + @synchronized(self) { + if (sharedInstance == nil) { + return [super allocWithZone:zone]; + } + } + return sharedInstance; +} +- (id)copyWithZone:(NSZone *)zone { + return self; +} +- (id)retain { + return self; +} +- (unsigned)retainCount { + return UINT_MAX; //denotes an object that cannot be released +} +- (void)release { + //do nothing +} +- (id)autorelease { + return self; +} + +@end + +@implementation AppleRemote (PrivateMethods) + +- (void) setRemoteId: (int) value { + remoteId = value; +} + +- (IOHIDQueueInterface**) queue { + return queue; +} + +- (IOHIDDeviceInterface**) hidDeviceInterface { + return hidDeviceInterface; +} + + +- (NSDictionary*) cookieToButtonMapping { + return cookieToButtonMapping; +} + +- (NSString*) validCookieSubstring: (NSString*) cookieString { + if (cookieString == nil || [cookieString length] == 0) return nil; + NSEnumerator* keyEnum = [[self cookieToButtonMapping] keyEnumerator]; + NSString* key; + while(key = [keyEnum nextObject]) { + NSRange range = [cookieString rangeOfString:key]; + if (range.location == 0) return key; + } + return nil; +} + +- (void) sendSimulatedPlusMinusEvent: (id) time { + BOOL startSimulateHold = NO; + AppleRemoteEventIdentifier event = lastPlusMinusEvent; + @synchronized(self) { + startSimulateHold = (lastPlusMinusEvent>0 && lastPlusMinusEventTime == [time doubleValue]); + } + if (startSimulateHold) { + lastEventSimulatedHold = YES; + event = (event==kRemoteButtonVolume_Plus) ? kRemoteButtonVolume_Plus_Hold : kRemoteButtonVolume_Minus_Hold; + [delegate appleRemoteButton:event pressedDown: YES clickCount: 1]; + } +} + +- (void) sendRemoteButtonEvent: (AppleRemoteEventIdentifier) event pressedDown: (BOOL) pressedDown { + if (delegate) { + if (simulatePlusMinusHold) { + if (event == kRemoteButtonVolume_Plus || event == kRemoteButtonVolume_Minus) { + if (pressedDown) { + lastPlusMinusEvent = event; + lastPlusMinusEventTime = [NSDate timeIntervalSinceReferenceDate]; + [self performSelector:@selector(sendSimulatedPlusMinusEvent:) + withObject:[NSNumber numberWithDouble:lastPlusMinusEventTime] + afterDelay:HOLD_RECOGNITION_TIME_INTERVAL]; + return; + } else { + if (lastEventSimulatedHold) { + event = (event==kRemoteButtonVolume_Plus) ? kRemoteButtonVolume_Plus_Hold : kRemoteButtonVolume_Minus_Hold; + lastPlusMinusEvent = 0; + lastEventSimulatedHold = NO; + } else { + @synchronized(self) { + lastPlusMinusEvent = 0; + } + pressedDown = YES; + } + } + } + } + + if (([self clickCountEnabledButtons] & event) == event) { + if (pressedDown==NO && (event == kRemoteButtonVolume_Minus || event == kRemoteButtonVolume_Plus)) { + return; // this one is triggered automatically by the handler + } + NSNumber* eventNumber; + NSNumber* timeNumber; + @synchronized(self) { + lastClickCountEventTime = [NSDate timeIntervalSinceReferenceDate]; + if (lastClickCountEvent == event) { + eventClickCount = eventClickCount + 1; + } else { + eventClickCount = 1; + } + lastClickCountEvent = event; + timeNumber = [NSNumber numberWithDouble:lastClickCountEventTime]; + eventNumber= [NSNumber numberWithUnsignedInt:event]; + } + [self performSelector: @selector(executeClickCountEvent:) + withObject: [NSArray arrayWithObjects:eventNumber, timeNumber, nil] + afterDelay: maxClickTimeDifference]; + } else { + [delegate appleRemoteButton:event pressedDown: pressedDown clickCount:1]; + } + } +} + +- (void) executeClickCountEvent: (NSArray*) values { + AppleRemoteEventIdentifier event = [[values objectAtIndex: 0] unsignedIntValue]; + NSTimeInterval eventTimePoint = [[values objectAtIndex: 1] doubleValue]; + + BOOL finishedClicking = NO; + int finalClickCount = eventClickCount; + + @synchronized(self) { + finishedClicking = (event != lastClickCountEvent || eventTimePoint == lastClickCountEventTime); + if (finishedClicking) eventClickCount = 0; + } + + if (finishedClicking) { + [delegate appleRemoteButton:event pressedDown: YES clickCount:finalClickCount]; + if ([self simulatesPlusMinusHold]==NO && (event == kRemoteButtonVolume_Minus || event == kRemoteButtonVolume_Plus)) { + // trigger a button release event, too + [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow:0.1]]; + [delegate appleRemoteButton:event pressedDown: NO clickCount:finalClickCount]; + } + } + +} + +- (void) handleEventWithCookieString: (NSString*) cookieString sumOfValues: (SInt32) sumOfValues { + /* + if (previousRemainingCookieString) { + cookieString = [previousRemainingCookieString stringByAppendingString: cookieString]; + NSLog(@"New cookie string is %@", cookieString); + [previousRemainingCookieString release], previousRemainingCookieString=nil; + }*/ + if (cookieString == nil || [cookieString length] == 0) return; + NSNumber* buttonId = [[self cookieToButtonMapping] objectForKey: cookieString]; + if (buttonId != nil) { + [self sendRemoteButtonEvent: [buttonId intValue] pressedDown: (sumOfValues>0)]; + } else { + // let's see if a number of events are stored in the cookie string. this does + // happen when the main thread is too busy to handle all incoming events in time. + NSString* subCookieString; + NSString* lastSubCookieString=nil; + while(subCookieString = [self validCookieSubstring: cookieString]) { + cookieString = [cookieString substringFromIndex: [subCookieString length]]; + lastSubCookieString = subCookieString; + if (processesBacklog) [self handleEventWithCookieString: subCookieString sumOfValues:sumOfValues]; + } + if (processesBacklog == NO && lastSubCookieString != nil) { + // process the last event of the backlog and assume that the button is not pressed down any longer. + // The events in the backlog do not seem to be in order and therefore (in rare cases) the last event might be + // a button pressed down event while in reality the user has released it. + // NSLog(@"processing last event of backlog"); + [self handleEventWithCookieString: lastSubCookieString sumOfValues:0]; + } + if ([cookieString length] > 0) { + NSLog(@"Unknown button for cookiestring %@", cookieString); + } + } +} + +@end + +/* Callback method for the device queue +Will be called for any event of any type (cookie) to which we subscribe +*/ +static void QueueCallbackFunction(void* target, IOReturn result, void* refcon, void* sender) { + AppleRemote* remote = (AppleRemote*)target; + + IOHIDEventStruct event; + AbsoluteTime zeroTime = {0,0}; + NSMutableString* cookieString = [NSMutableString string]; + SInt32 sumOfValues = 0; + while (result == kIOReturnSuccess) + { + result = (*[remote queue])->getNextEvent([remote queue], &event, zeroTime, 0); + if ( result != kIOReturnSuccess ) + continue; + + //printf("%d %d %d\n", event.elementCookie, event.value, event.longValue); + + if (REMOTE_SWITCH_COOKIE == (int)event.elementCookie) { + [remote setRemoteId: event.value]; + [remote handleEventWithCookieString: @"19_" sumOfValues: 0]; + } else { + if (((int)event.elementCookie)!=5) { + sumOfValues+=event.value; + [cookieString appendString:[NSString stringWithFormat:@"%d_", event.elementCookie]]; + } + } + } + + [remote handleEventWithCookieString: cookieString sumOfValues: sumOfValues]; +} + +@implementation AppleRemote (IOKitMethods) + +- (IOHIDDeviceInterface**) createInterfaceForDevice: (io_object_t) hidDevice { + io_name_t className; + IOCFPlugInInterface** plugInInterface = NULL; + HRESULT plugInResult = S_OK; + SInt32 score = 0; + IOReturn ioReturnValue = kIOReturnSuccess; + + hidDeviceInterface = NULL; + + ioReturnValue = IOObjectGetClass(hidDevice, className); + + if (ioReturnValue != kIOReturnSuccess) { + NSLog(@"Error: Failed to get class name."); + return NULL; + } + + ioReturnValue = IOCreatePlugInInterfaceForService(hidDevice, + kIOHIDDeviceUserClientTypeID, + kIOCFPlugInInterfaceID, + &plugInInterface, + &score); + if (ioReturnValue == kIOReturnSuccess) + { + //Call a method of the intermediate plug-in to create the device interface + plugInResult = (*plugInInterface)->QueryInterface(plugInInterface, CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID), (LPVOID) &hidDeviceInterface); + + if (plugInResult != S_OK) { + NSLog(@"Error: Couldn't create HID class device interface"); + } + // Release + if (plugInInterface) (*plugInInterface)->Release(plugInInterface); + } + return hidDeviceInterface; +} + +- (io_object_t) findAppleRemoteDevice { + CFMutableDictionaryRef hidMatchDictionary = NULL; + IOReturn ioReturnValue = kIOReturnSuccess; + io_iterator_t hidObjectIterator = 0; + io_object_t hidDevice = 0; + + // Set up a matching dictionary to search the I/O Registry by class + // name for all HID class devices + hidMatchDictionary = IOServiceMatching(AppleRemoteDeviceName); + + // Now search I/O Registry for matching devices. + ioReturnValue = IOServiceGetMatchingServices(kIOMasterPortDefault, hidMatchDictionary, &hidObjectIterator); + + if ((ioReturnValue == kIOReturnSuccess) && (hidObjectIterator != 0)) { + hidDevice = IOIteratorNext(hidObjectIterator); + } + + // release the iterator + IOObjectRelease(hidObjectIterator); + + return hidDevice; +} + +- (BOOL) initializeCookies { + IOHIDDeviceInterface122** handle = (IOHIDDeviceInterface122**)hidDeviceInterface; + IOHIDElementCookie cookie; + long usage; + long usagePage; + id object; + NSArray* elements = nil; + NSDictionary* element; + IOReturn success; + + if (!handle || !(*handle)) return NO; + + /* Copy all elements, since we're grabbing most of the elements + * for this device anyway, and thus, it's faster to iterate them + * ourselves. When grabbing only one or two elements, a matching + * dictionary should be passed in here instead of NULL. */ + success = (*handle)->copyMatchingElements(handle, NULL, (CFArrayRef*)&elements); + + if (success == kIOReturnSuccess) { + + [elements autorelease]; + /* + cookies = calloc(NUMBER_OF_APPLE_REMOTE_ACTIONS, sizeof(IOHIDElementCookie)); + memset(cookies, 0, sizeof(IOHIDElementCookie) * NUMBER_OF_APPLE_REMOTE_ACTIONS); + */ + allCookies = [[NSMutableArray alloc] init]; + int i; + for (i=0; i< [elements count]; i++) { + element = [elements objectAtIndex:i]; + + //Get cookie + object = [element valueForKey: (NSString*)CFSTR(kIOHIDElementCookieKey) ]; + if (object == nil || ![object isKindOfClass:[NSNumber class]]) continue; + if (object == 0 || CFGetTypeID(object) != CFNumberGetTypeID()) continue; + cookie = (IOHIDElementCookie) [object longValue]; + + //Get usage + object = [element valueForKey: (NSString*)CFSTR(kIOHIDElementUsageKey) ]; + if (object == nil || ![object isKindOfClass:[NSNumber class]]) continue; + usage = [object longValue]; + + //Get usage page + object = [element valueForKey: (NSString*)CFSTR(kIOHIDElementUsagePageKey) ]; + if (object == nil || ![object isKindOfClass:[NSNumber class]]) continue; + usagePage = [object longValue]; + + [allCookies addObject: [NSNumber numberWithInt:(int)cookie]]; + } + } else { + return NO; + } + + return YES; +} + +- (BOOL) openDevice { + HRESULT result; + + IOHIDOptionsType openMode = kIOHIDOptionsTypeNone; + if ([self isOpenInExclusiveMode]) openMode = kIOHIDOptionsTypeSeizeDevice; + IOReturn ioReturnValue = (*hidDeviceInterface)->open(hidDeviceInterface, openMode); + + if (ioReturnValue == KERN_SUCCESS) { + queue = (*hidDeviceInterface)->allocQueue(hidDeviceInterface); + if (queue) { + result = (*queue)->create(queue, 0, 12); //depth: maximum number of elements in queue before oldest elements in queue begin to be lost. + + int i=0; + for(i=0; i<[allCookies count]; i++) { + IOHIDElementCookie cookie = (IOHIDElementCookie)[[allCookies objectAtIndex:i] intValue]; + (*queue)->addElement(queue, cookie, 0); + } + + // add callback for async events + CFRunLoopSourceRef eventSource; + ioReturnValue = (*queue)->createAsyncEventSource(queue, &eventSource); + if (ioReturnValue == KERN_SUCCESS) { + ioReturnValue = (*queue)->setEventCallout(queue,QueueCallbackFunction, self, NULL); + if (ioReturnValue == KERN_SUCCESS) { + CFRunLoopAddSource(CFRunLoopGetCurrent(), eventSource, kCFRunLoopDefaultMode); + //start data delivery to queue + (*queue)->start(queue); + return YES; + } else { + NSLog(@"Error when setting event callout"); + } + } else { + NSLog(@"Error when creating async event source"); + } + } else { + NSLog(@"Error when opening device"); + } + } + return NO; +} + +@end + +@implementation AppleRemoteApplicationDelegate + +- (id) initWithApplicationDelegate: (id) delegate { + if (self = [super init]) { + applicationDelegate = [delegate retain]; + } + return self; +} + +- (void) dealloc { + NSLog(@"Dealloc"); + [applicationDelegate release]; + [super dealloc]; +} + +- (id) applicationDelegate { + return applicationDelegate; +} + +- (void)applicationWillBecomeActive:(NSNotification *)aNotification { + if ([applicationDelegate respondsToSelector: @selector(applicationWillBecomeActive:)]) { + [applicationDelegate applicationWillBecomeActive: aNotification]; + } +} +- (void)applicationDidBecomeActive:(NSNotification *)aNotification { + [[AppleRemote sharedRemote] setListeningToRemote: YES]; + + if ([applicationDelegate respondsToSelector: @selector(applicationDidBecomeActive:)]) { + [applicationDelegate applicationDidBecomeActive: aNotification]; + } +} +- (void)applicationWillResignActive:(NSNotification *)aNotification { + [[AppleRemote sharedRemote] setListeningToRemote: NO]; + + if ([applicationDelegate respondsToSelector: @selector(applicationWillResignActive:)]) { + [applicationDelegate applicationWillResignActive: aNotification]; + } +} +- (void)applicationDidResignActive:(NSNotification *)aNotification { + if ([applicationDelegate respondsToSelector: @selector(applicationDidResignActive:)]) { + [applicationDelegate applicationDidResignActive: aNotification]; + } +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { + NSMethodSignature* signature = [super methodSignatureForSelector: aSelector]; + if (signature == nil && applicationDelegate != nil) { + signature = [applicationDelegate methodSignatureForSelector: aSelector]; + } + return signature; +} + +- (void)forwardInvocation:(NSInvocation *)invocation { + SEL aSelector = [invocation selector]; + + if (applicationDelegate==nil || [applicationDelegate respondsToSelector:aSelector]==NO) { + [super forwardInvocation: invocation]; + return; + } + + [invocation invokeWithTarget:applicationDelegate]; +} +@end \ No newline at end of file diff --git a/ThirdParty/CoreAudioUtils/CoreAudioUtils.h b/ThirdParty/CoreAudioUtils/CoreAudioUtils.h new file mode 100644 index 000000000..2b0138690 --- /dev/null +++ b/ThirdParty/CoreAudioUtils/CoreAudioUtils.h @@ -0,0 +1,24 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import + +// Return an array of valid audio file extensions recognized by Core Audio +NSArray * getCoreAudioExtensions(); diff --git a/ThirdParty/CoreAudioUtils/CoreAudioUtils.m b/ThirdParty/CoreAudioUtils/CoreAudioUtils.m new file mode 100644 index 000000000..b59c55db2 --- /dev/null +++ b/ThirdParty/CoreAudioUtils/CoreAudioUtils.m @@ -0,0 +1,49 @@ +/* + * $Id$ + * + * Copyright (C) 2006 Stephen F. Booth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "CoreAudioUtils.h" + +#include + +// CoreAudio utility function +static NSArray *sAudioExtensions = nil; + +// Return an array of valid audio file extensions recognized by Core Audio +NSArray * +getCoreAudioExtensions() +{ + OSStatus err; + UInt32 size; + + @synchronized(sAudioExtensions) { + if(nil == sAudioExtensions) { + size = sizeof(sAudioExtensions); + err = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AllExtensions, 0, NULL, &size, &sAudioExtensions); + if(noErr != err) { + return nil; + } + + [sAudioExtensions retain]; + } + } + + return sAudioExtensions; +} + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Headers b/ThirdParty/Frameworks/Sparkle.framework/Headers new file mode 120000 index 000000000..a177d2a6b --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Resources b/ThirdParty/Frameworks/Sparkle.framework/Resources new file mode 120000 index 000000000..953ee36f3 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Sparkle b/ThirdParty/Frameworks/Sparkle.framework/Sparkle new file mode 120000 index 000000000..b2c52731e --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Sparkle @@ -0,0 +1 @@ +Versions/Current/Sparkle \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h new file mode 100644 index 000000000..ee901e685 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h @@ -0,0 +1,13 @@ +// +// NSApplication+AppCopies.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@interface NSApplication (SUAppCopies) +- (int)copiesRunning; +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h new file mode 100644 index 000000000..c995911ca --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h @@ -0,0 +1,11 @@ +// +// NSFileManager+Authentication.m +// Sparkle +// +// Created by Andy Matuschak on 3/9/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +@interface NSFileManager (SUAuthenticationAdditions) +- (BOOL)movePathWithAuthentication:(NSString *)src toPath:(NSString *)dst; +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h new file mode 100644 index 000000000..f0ce7c20c --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h @@ -0,0 +1,15 @@ +// +// NSFileManager+Verification.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +// For the paranoid folks! +@interface NSFileManager (SUVerification) +- (BOOL)validatePath:(NSString *)path withMD5Hash:(NSString *)hash; +- (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature; +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h new file mode 100755 index 000000000..498e4d01c --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h @@ -0,0 +1,61 @@ +/* + +BSD License + +Copyright (c) 2002, Brent Simmons +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of ranchero.com or Brent Simmons nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + + +/* + NSString+extras.h + NetNewsWire + + Created by Brent Simmons on Fri Jun 14 2002. + Copyright (c) 2002 Brent Simmons. All rights reserved. +*/ + + +#import +#import + + +@interface NSString (extras) + +- (NSString *)stringWithSubstitute:(NSString *)subs forCharactersFromSet:(NSCharacterSet *)set; + +- (NSString *) trimWhiteSpace; + +- (NSString *) stripHTML; + +- (NSString *) ellipsizeAfterNWords: (int) n; + ++ (BOOL) stringIsEmpty: (NSString *) s; + + +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h new file mode 100755 index 000000000..82da04a44 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h @@ -0,0 +1,98 @@ +/* + +BSD License + +Copyright (c) 2002, Brent Simmons +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of ranchero.com or Brent Simmons nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + +/* + RSS.h + A class for reading RSS feeds. + + Created by Brent Simmons on Wed Apr 17 2002. + Copyright (c) 2002 Brent Simmons. All rights reserved. +*/ + + +#import +#import +#import "NSString+extras.h" + + +@interface RSS : NSObject { + + NSDictionary *headerItems; + NSMutableArray *newsItems; + NSString *version; + + BOOL flRdf; + BOOL normalize; + } + + +/*Public*/ + +- (RSS *) initWithTitle: (NSString *) title andDescription: (NSString *) description; + +- (RSS *) initWithData: (NSData *) rssData normalize: (BOOL) fl; + +- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl; +- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl userAgent:(NSString *)userAgent; + +- (NSDictionary *) headerItems; + +- (NSMutableArray *) newsItems; + +- (NSString *) version; + +// AMM's extensions for Sparkle +- (NSDictionary *)newestItem; + + +/*Private*/ + +- (void) createheaderdictionary: (CFXMLTreeRef) tree; + +- (void) createitemsarray: (CFXMLTreeRef) tree; + +- (void) setversionstring: (CFXMLTreeRef) tree; + +- (void) flattenimagechildren: (CFXMLTreeRef) tree into: (NSMutableDictionary *) dictionary; + +- (void) flattensourceattributes: (CFXMLNodeRef) node into: (NSMutableDictionary *) dictionary; + +- (CFXMLTreeRef) getchanneltree: (CFXMLTreeRef) tree; + +- (CFXMLTreeRef) getnamedtree: (CFXMLTreeRef) currentTree name: (NSString *) name; + +- (void) normalizeRSSItem: (NSMutableDictionary *) rssItem; + +- (NSString *) getelementvalue: (CFXMLTreeRef) tree; + +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h new file mode 100644 index 000000000..209fe2061 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h @@ -0,0 +1,27 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@class RSS, SUAppcastItem; +@interface SUAppcast : NSObject { + NSArray *items; + id delegate; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; + +- (SUAppcastItem *)newestItem; +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- appcastDidFinishLoading:(SUAppcast *)appcast; +@end \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h new file mode 100644 index 000000000..c0202e3d9 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -0,0 +1,57 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUAppcastItem : NSObject { + NSString *title; + NSDate *date; + NSString *description; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *MD5Sum; + + NSURL *fileURL; + NSString *fileVersion; + NSString *versionString; +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; + +- (NSString *)title; +- (void)setTitle:(NSString *)aTitle; + +- (NSDate *)date; +- (void)setDate:(NSDate *)aDate; + +- (NSString *)description; +- (void)setDescription:(NSString *)aDescription; + +- (NSURL *)releaseNotesURL; +- (void)setReleaseNotesURL:(NSURL *)aReleaseNotesURL; + +- (NSString *)DSASignature; +- (void)setDSASignature:(NSString *)aDSASignature; + +- (NSString *)MD5Sum; +- (void)setMD5Sum:(NSString *)aMd5Sum; + +- (NSURL *)fileURL; +- (void)setFileURL:(NSURL *)aFileURL; + +- (NSString *)fileVersion; +- (void)setFileVersion:(NSString *)aFileVersion; + +- (NSString *)versionString; +- (void)setVersionString:(NSString *)versionString; + +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h new file mode 100644 index 000000000..fc0ac9fd0 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h @@ -0,0 +1,21 @@ +// +// SUAutomaticUpdateAlert.h +// Sparkle +// +// Created by Andy Matuschak on 3/18/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@class SUAppcastItem; +@interface SUAutomaticUpdateAlert : NSWindowController { + SUAppcastItem *updateItem; +} + +- initWithAppcastItem:(SUAppcastItem *)item; + +- (IBAction)relaunchNow:sender; +- (IBAction)relaunchLater:sender; + +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h new file mode 100644 index 000000000..bfbe625bb --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h @@ -0,0 +1,20 @@ +// +// SUConstants.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +extern NSString *SUUpdaterWillRestartNotification; + +extern NSString *SUCheckAtStartupKey; +extern NSString *SUFeedURLKey; +extern NSString *SUShowReleaseNotesKey; +extern NSString *SUSkippedVersionKey; +extern NSString *SUScheduledCheckIntervalKey; +extern NSString *SULastCheckTimeKey; +extern NSString *SUExpectsDSASignatureKey; +extern NSString *SUPublicDSAKeyKey; +extern NSString *SUAutomaticallyUpdateKey; +extern NSString *SUAllowsAutomaticUpdatesKey; \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h new file mode 100644 index 000000000..e83d15206 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h @@ -0,0 +1,26 @@ +// +// SUStatusChecker.h +// Sparkle +// +// Created by Evan Schoenberg on 7/6/06. +// + +#import +#import + +@class SUStatusChecker; + +@protocol SUStatusCheckerDelegate +//versionString will be nil and isNewVersion will be NO if version checking fails. +- (void)statusChecker:(SUStatusChecker *)statusChecker foundVersion:(NSString *)versionString isNewVersion:(BOOL)isNewVersion; +@end + +@interface SUStatusChecker : SUUpdater { + id scDelegate; +} + +// Create a status checker which will notifiy delegate once the appcast version is determined. +// Notification occurs via the method defined in the SUStatusCheckerDelegate informal protocol. ++ (SUStatusChecker *)statusCheckerForDelegate:(id)delegate; + +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h new file mode 100644 index 000000000..19a3f89ec --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h @@ -0,0 +1,33 @@ +// +// SUStatusController.h +// Sparkle +// +// Created by Andy Matuschak on 3/14/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUStatusController : NSWindowController { + double progressValue, maxProgressValue; + NSString *title, *statusText, *buttonTitle; + IBOutlet NSButton *actionButton; +} + +// Pass 0 for the max progress value to get an indeterminate progress bar. +// Pass nil for the status text to not show it. +- (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText; + +// If isDefault is YES, the button's key equivalent will be \r. +- (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault; +- (void)setButtonEnabled:(BOOL)enabled; + +- (double)progressValue; +- (void)setProgressValue:(double)value; +- (double)maxProgressValue; +- (void)setMaxProgressValue:(double)value; + +- (void)setStatusText:(NSString *)statusText; + +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h new file mode 100644 index 000000000..da111c158 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h @@ -0,0 +1,25 @@ +// +// SUUnarchiver.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUUnarchiver : NSObject { + id delegate; +} + +- (void)unarchivePath:(NSString *)path; +- (void)setDelegate:delegate; + +@end + +@interface NSObject (SUUnarchiverDelegate) +- (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length; +- (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver; +- (void)unarchiverDidFail:(SUUnarchiver *)unarchiver; +@end \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h new file mode 100644 index 000000000..69c281749 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h @@ -0,0 +1,40 @@ +// +// SUUpdateAlert.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +typedef enum +{ + SUInstallUpdateChoice, + SURemindMeLaterChoice, + SUSkipThisVersionChoice +} SUUpdateAlertChoice; + +@class WebView, SUAppcastItem; +@interface SUUpdateAlert : NSWindowController { + SUAppcastItem *updateItem; + id delegate; + + IBOutlet WebView *releaseNotesView; + IBOutlet NSTextField *description; + NSProgressIndicator *releaseNotesSpinner; + BOOL webViewFinishedLoading; +} + +- initWithAppcastItem:(SUAppcastItem *)item; +- (void)setDelegate:delegate; + +- (IBAction)installUpdate:sender; +- (IBAction)skipThisVersion:sender; +- (IBAction)remindMeLater:sender; + +@end + +@interface NSObject (SUUpdateAlertDelegate) +- (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice; +@end diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h new file mode 100644 index 000000000..5f82914bc --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -0,0 +1,55 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +// Before you use Sparkle in your app, you must set SUFeedURL in Info.plist to the +// address of the appcast on your webserver. If you don't already have an +// appcast, please see the Sparkle documentation to learn about how to set one up. + +// .zip, .dmg, .tar, .tbz, .tgz archives are supported at this time. + +// By default, Sparkle offers to show the user the release notes of the build they'll be +// getting, which it assumes are in the description (or body) field of the relevant RSS item. +// Set SUShowReleaseNotes to in Info.plist to hide the button. + +@class SUAppcastItem, SUUpdateAlert, SUStatusController; +@interface SUUpdater : NSObject { + SUAppcastItem *updateItem; + + SUStatusController *statusController; + SUUpdateAlert *updateAlert; + + NSURLDownload *downloader; + NSString *downloadPath; + + NSTimer *checkTimer; + NSTimeInterval checkInterval; + + BOOL verbose; + BOOL updateInProgress; +} + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:sender; + +// This method is similar to the above, but it's intended for updates initiated by +// the computer instead of by the user. It does not alert the user when he is up to date, +// and it remains silent about network errors in fetching the feed. This is what you +// want to call to update programmatically; only use checkForUpdates: with buttons and menu items. +- (void)checkForUpdatesInBackground; + +// This method allows you to schedule a check to run every time interval. You can +// pass 0 to this method to cancel a previously scheduled timer. You probably don't want +// to call this directly: if you set a SUScheduledCheckInterval key in Info.plist or +// the user defaults, Sparkle will set this up for you automatically on startup. You might +// just want to call this every time the user changes the setting in the preferences. +- (void)scheduleCheckWithInterval:(NSTimeInterval)interval; + +@end \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUtilities.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUtilities.h new file mode 100644 index 000000000..5af355083 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/SUUtilities.h @@ -0,0 +1,20 @@ +// +// SUUtilities.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +id SUInfoValueForKey(NSString *key); +NSString *SUHostAppName(); +NSString *SUHostAppDisplayName(); +NSString *SUHostAppVersion(); +NSString *SUHostAppVersionString(); + +NSComparisonResult SUStandardVersionComparison(NSString * versionA, NSString * versionB); + +// If running make localizable-strings for genstrings, ignore the error on this line. +NSString *SULocalizedString(NSString *key, NSString *comment); diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h new file mode 100644 index 000000000..13e9b2156 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h @@ -0,0 +1,22 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import "SUUpdater.h" +#import "SUUtilities.h" +#import "SUConstants.h" +#import "SUAppcast.h" +#import "SUAppcastItem.h" +#import "SUUpdateAlert.h" +#import "SUAutomaticUpdateAlert.h" +#import "SUStatusController.h" +#import "SUUnarchiver.h" +#import "SUStatusChecker.h" + +#import "NSApplication+AppCopies.h" +#import "NSFileManager+Authentication.h" +#import "NSFileManager+Verification.h" \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist new file mode 100644 index 000000000..c154cb61e --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.1 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib new file mode 100644 index 000000000..ff40c9ddf --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + CLASS = SUStatusController; + LANGUAGE = ObjC; + OUTLETS = {actionButton = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib new file mode 100644 index 000000000..99183444c --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 69 10 356 240 0 0 1280 832 + IBFramework Version + 443.0 + IBOpenObjects + + 5 + + IBSystem Version + 8H14 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..378b22f2a6e3c51f385cd62f3c93f35a69cedf27 GIT binary patch literal 6873 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 + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..15daf3081231de924d80ee94c9ede541ca4f31ec GIT binary patch literal 6589 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..17f2f3de0f2f6d8823af59f5861b0a0483fdea4b GIT binary patch literal 10881 zcmai4349aP)<5^&q)pPaohE70q)js!RuM{D3KS5eWf2ex(y}ilZPPZ8CN)XfYW0GM zJfEVXqPRj?UBLx6a6=y=0%8Rb6vY)0aY3IOD&M&?X{o^XeVt#DnYsJ9|8vg&oZE`} zU?3XH%{>4FC@|209ugoCOjA1gB9*m)x&FxHj`$S~ghOQ=W8wPA9m5r~{gtt3xs+N` zdZmAXzp5x+(E?=Y>UY5a#u+1vbF^wzzL<}b&1r-|5||+mdP5($3d;%xn8#oC+ zz-jmueuFb`7RT63bVN@~B#S7dGsz+OWDqGPSCY}>Dl(o-#Jj2ZDJK;q0ymNx7ejq=QpUJP}PpYGOnoLt@DwSwD&7nPMF3qC_ zbTGYwj-X@dI68q&r!%OZR?`|fpI$>bT|}>^OXv;s-}F{`C%uc_L+_&x()Dx$-9n$F zTj>k*Mfwu`58X-k(Rb*6`Yvsu@6q?^A^H(LO24AV>DTlG{ht0nf22Rr-{|iQn2s4> zGcz(1v(V$r%50*XxtJH*dQJ3;D8Kpf(tSs3*3+m9+1Hc3Uq*u&nx$%(#TgCBwEEGaFjtn^2tfr>yd5L+-L910<1!x0U% zLxR3&)F0JqPc11O8>osRkfYN|N=tloe)WDvNol;AD7mmp(MIcFy4FGK*iuR9!~hN) z^iK+es>1W46FXLl@kEE(G*FYolRA{v3ZLRD&<1myH~)4M93H_L&I?E8V4LCLP;87Z z@B^U9XrG*KszZbi#ysR9=5k&>xAlKwl_?e$aoiwithOs&*5?>dnv}2F%3v z4bfP*PFu+2))kdY(#YZ=;mWYDZRRa72uHmf2BYZXRwBBZCu(C9!;rNw1ct%@lW@t*DaCKChI`lGQx$QQ#MLV@C5jPu26 zCzX_r_Eq?U9B=Hhg! zaU%0jjTXQ{tX$eqAqI)^8#(Yt`ASXN*TCQn&;-}Qb--Z}Eau5Pg{N|fr*R8UM8zno zuMhg=aYKj8^}cA#UlI02s^l0>pj^r;@lP(3hlMJA_0fhPf~iU#7mmhCD)p2*@cDaD4{^mFJKuRr%pwP;@m7tuDD2>#>V`D z?sBjEeofuw#y)u4r=Y3n1GpJ(f#q;3+=f!R9ag{{c-;wi;rB|o8}7l)D6RCNn&WS5 zLC}v9L`=l|p_q_-Q7BM{3yxxGQ7}*w68eSvqwWk~NH~a?6fdx+HZ+$@_PN4H_m_SDoc9FvHNyYA_u6Pr!P9HuX?RAg2eQ5sPye4pi)rKtGk@nS72o)ya~GyEpNrKvK!upJ+K$H!8@=Y-c@(1*jG8HCK7H4 zRSgLT!$PskP|?+Ulo={{eK-z<`;8XYvKF0yRfG^=II1XPUwT4eF>j=L!ElX= z({B6{DS>z8mrg8QfJUKiIzm%GLT&IKe2e|t;S_wQ_B^RJ5c6M|o6|@8>jx6!muhqS z5so$Ed1ll^p?_!AJTxjj@Pxxyc`~`mtgsZkzv=|=n z2dh+^3%@I@zj#n5K!70gBZRg?dRr5r7HtnWi8!)jfmqNl-cM<}JAjU7GOlD z0J*$3pTmQkex%xAKS?5Hs3yr!OH#1fY?4YOl7^R+*ho6EP6y-=Cviaz%2~Jv^i8U2 zjf?oJ{Ski%$xgXsnGp30kPQz<=AjWDjl_P6>Mz8WOt}J~SFdhPU)~3=LOy|)8PbRa zt^I61oFk%yPY^E3PTV9LFBul{JNXK{?uxqu(gDiW5GyuDXNuKH7r@C2k4C!U+PdMV zJ8_U62yS&`flA&FS349x{rND}r;whalkWIjbfkSJq!%f`j(U?mxb8yy^v8AIf!~*r zfr#m-is`t5pqUi{Kn$Wc2?v8kb+ITPfb%NG&t-TG87oOeGJyCL$3NQWmy6N+W0j&q zIDK3(8A67tOBjZe?@mTQIT=Yt35R}#idVd=)VwSoh?DNm2c;o{8a%bJcVS+4Ilot* zruOjsf|SJJ*^OVW!P6dx=Xn-DLs%&(TTjZ!gt#T0^)?+FsC%mwBbOtUF!*s&Mf{|i)R0;dAhXFF5+rpbM8c$= zU%^N4k$e=tl8@$NcnKfN$MLK9cwQ>_L)@K@C>t~SLf4#H-%x?xEvF$8?18gKkJnA5 z2jc^kwX#q#8L^IjR&a@nPz8%{%@HJP=cvHcb3K+znYfe*<3~p)1!A>jLTmrQ860u@ zcHy+V8U?}Day<6Euuhy8VfPm)(-u)SeCUN`>5Yv&5LLOt!L;G4={<5S%K19jOBRvE zQ%6=I`~%eie`KN-K%j>R@QLriAhHCj-9T<94a&jwK z$}4y!eyZ>zE-64_QU-CHIm0`6ND>PvKMfG(Mfr;4^tS zpT&K=RzuH~f!HYDTwk1#q8UQD;JeZo`WZAs!l#r=HtprOU_(tH6m6^P(q0esSNj@* zXo%JTK0ts#F>hJ!kgN5Tak!DvDWX+_J6zOV2ME;tP$f_lM%K zSy2N3y6jWR4?U=EI|8r?m=tv z4B6UDwxWr^Ih-3Osuey*o?lO%CogEKJPE4^EuP#deuGXd;t%?LQGZDo$?G`-u${cL zmb|19Fq=xX#x|h7AbW{N)@>dRa>=XYHL?Rq)_lHzhb}^}$WF|j>>_WG-73KfBf*mS zJYJ9FP!KFZs`3T=^ZMorTHe%jlc@Rocc!gdl!zJw@EDKabu|x3PU~6xTe^7gSw2_V z#XDFG01%d}7_`=*zl~v%!-oN21KvmR$%oH#@m>Uk0r;sM*(0CAVe&bTBB9gSrnjea zE#xcY4K3t2`l_6$YV&x5w&f?tH*3i^E-O7xxFRcQKIXWj$UsfB4#$)6DTK)f$U)GXe+Ov2eER_{r z1Vz6iiq0U4IHIWWVkkNbVM@qbl&L7X22tci6g8F{WE6kJ7GmjDnKL8)I?NV~ z@sCElMf$hX5o#d@YQxn%$%B0HQEI0Snn9h^MKfs@b<=F>0Xvncmnu+BJJ61_6YWg9 z(5?`q-RPyXJME#y6q+4Vlb`eO5u<5CHw|{ zJ%5Zp!ILcY^D!#f!k6;R$V^b<3wooP7pNgs-#px`g51KUrm&QSIpRtbW&?^dh?)?C zg?LvfbOMDem}(Gz>rvEUOsYh%tWFht0FkJzM%4WyHwvrgo8G zUg5dOP|YG-Br>E|($Ta~iwxBW?`HmQ9J;442_@KlOf>}B5@lTEc?JOxNb&fOUM1o` zTBa1`#sj@%_r)eXIj$PbQ0Ha*GD!`uJI+R~Y-p7>B`=UH2RyQ(L* zq3~2a@nCi?gxVlwOqV3BVVJ=Zp6I4pmyK_}%;-$zs5e=^+h33q$~shR;RXbCY;ZzyPNR zc@E+kEsx6H`u5YJgC^Dd(Z%rC+EzlYW)iTtZ|`D)DAauAG}wn5+JYLTy3!(+Aek2ec(&f)>SgG3>2DXFn3n^g30VYXtV1 z-bu}+A`v@tI)}! zi^an%bg{!Qku02QrD_-=cweJxQveM|-~xOKOp4mV9bX)mVYQ7YZ$M;+(cm1z-+_BfL6S#nbUK&8<}*Y24unF@(U5ug~GB-ZPe=Y%0(~jYV4I$ zkegqa@4vK{usr7;u+Z|4;|JBHXks`(4>r?-LJXMKjQcZx9n$ZZe{vO4*BZQO^Rv`O z53AXh#r$dXvvlG-^+@J}bH@PmW094CTzZUtijMX(`Z@S$p|B10!eB(vLqEs2@@M(; zm@Hg|dF0wa6$W4ZAbwC0w(!J_WG^cdJKSC~Tns~DE ze-&S3yO^0JLpe)fsp>)~f0O@*@8rA0Qp%<5)=fe|;4Za|sEvk+GW*2~;`_wXnFIHU z+4=4@EQ7zrx1A?O$Yoi~jpJwI=z~!7`}iKd7suX&UB}m3<&UbT90($jr@#$8?@ikl z(m||~3ert{zX0j9b`@3s!n(13PmpZn9!OJ20&K&);2Bzon`smD1uBrPB&md@H&U2B zNMV-Y)-G0wjET2sdpCegX%>kit;d1bBlc%g{b(BcQtTbCT)f0@5c^xKT8%#VEqYJF zRZ{ggN%V*`ij}Z_kG9R|3<9wb)$I>t20Pm3(ui%AVNb6hD+sl=n~v?+3^tRMvsui? zDp)0}Vt!W5YWVy75dVN5=12I4{3Cvpf6PDO$9Riy$!d^RfZ!6+R1>y&?H}^n>f}uq z2S8n-^4NJHe?<89wg!0!Gz|l?da5aRjR(7ONJP7r;3jFvms?@o)@#1D<|ym8x^*3M z+ubi<{Wc?C9gnO|97bLVBal=MAZPGUax5CpTs#K|k_6nZG$@5D$PPTJ90e8V$wt#Z zU?hJVr6i6j7vj<73Y1kN9$9WjBTI2VlaN;|#$9~}4>m)1kXeUBbu}JszQPMyXL64^ zI$Oo=W%sfB*#l%bdx))OYgjW|%hr)w*ao(dZDJ3zN7$q6G4?onf^BA7*puuj_B4Bj zf62e%$NAU%1m=Lg;V1dG{1pF=f6x8=2mT{J&41!Q^Z)W+_^Vqb0jkE{&1=l1b7_Q>B1plpIo(q<1i4*@9pgZK@k@IL2;zXo~)wG_@rLW@)TSJI+q9lk7Y813S%r zX1}uE*%|g1JF7G3Y&yFxL)Tf?Q&*@Pq8p)`q?@IS>aNkc z@9N&u9n>At9oBuQJF5Fc_o?o4-Iu!Kx)ZvSx>I_SK0~kQyXi;jOZC(BGxf9d75XZD zwZ2wATYsy5js9`{R{bmbUHW(QAL_r-f35#U|E>O%{s;YO{m=Se^uHz;608a7362D3 zLS{n8guH}a3B42gCiF`fkT5Xe@`Py#w6_D?KM9F;gBaaLk&Vk~h{ z;`NC)BrZ){mUv6zio}N!pGe%2_*CLEiQ5zRCmv2bmiUt)(I6R|hE9fj!vMo@!+67V zL!}{XSY}vmSZ#RNu*I;;aLDkp;TOYihCd8{8vZtd(QWh?y~Ym4j>ay=ON^HqhZ(Dl z3yn*Sw;3Nat~NFs*BLh$HyIx>ZZS-Ea8ey7fnrxbCnr@nDnq{gn#Y~G#|1#ZWy4$qM)NI;l+HQK;^r~rx=?&8%(-)@W zrW2;qrZY*&Nv@<0Nx4avC5=p)o>ZMQFKIziV^UMnbxB*2UQXJb^hwf*q@R-hoAhha z?@4Ep{z^J)1~W73&535CIms-W6>~>(XLDC`H*+s@A9JC(zj>0m((E_am;>fH<~noO zJm1`CZZcnI-ei8#{EB&xd7pW|xy5|I{J!}E^AYnY^DpM#&1cMiCA*S4Cg&vQCg&#? zB=xa>^ws z`6-vDj7X_W@u$?J1XAXt)TM+|u1<-jG^ET+S&-70(v)&t%Ka%%qdw?%sk>A6q#jQFH1)UCKT`ip{aXTwN;)Y)GN9s_r4*@?)J3{P zx>V{R^_23YUQ%zVuhdT(APtnRlB%U9>0aq|>1bL~T8Fd&X=Q2Gr!7fak#=X=%CvjZ zR;4wkJ)HJR+Mcw7X-Cpdq@7Ot%c8fWSiF{QmORS{%M{Br%M44o#b>$J!Yzv}ODs27 zmRWAH+-zBIIb!+Na@Lw+?O@Hb4zW(LPP5LimRo(+N~_-*vesK8)|hpHwb}Z#b*uF` z>x*-+m>jPY?-#Mwm!DYZKG_ZwrX40HrKY?_Ky=!{6^zP|7>C@6@qzBWR(yvQjlzx5s4e2kY z?@K?H{!RLC_5{1tF5A1=``U}_W9*f7zrDsDu+OpA*~9j$?NR%D`$GFQ_G|5{><8>e z?O)kX+E3YkaTpy*j$}uwBh6uTq&plArz6whcJy~#<{0D{>?m>!aSU^mJGf)9V~Jy_ zW0~V7$IXtdj-8IT9eW+`I9eRvJAQQhp6NL(T^0tnE8 zz}3ffxod>0#5KoN=L);7c12t<*Id`Ft~XpeUAtVnU3*;nT<^IKx(>NM$_!*K%)BP^ z+RR0nH)XEOyeISC%(a=1Wj>ktX66@}UuAxs`Az1@%_<6bywCSSx;v@pY?XufvhjHj%S_7I+=AU>t}bm+vE1SJGeW!ySOiL zU+V7R9_b$Eu5w@Pj=AT$7q}bUP41QMP3|Y%&${1qzvX`0z1RJY`(yVR_h0U_cpAyF z_1THpQg(;zj@g~FduI2^zAAfW_LA(i*>7a;%-)r~J9|&|zU=+kE!jVL%pRvF%aiT# zdOCPId5S$lJ;OaCJfl3LJtdwR&jQa)o|`?(J-2yQcpmg@^t|EO>DlGk?b+km=h^RR z@f`5H@A<%U#PgBoW6v?qXP%RuA3VRyb~!_K$ysu?EX#`AQSK~vmAlE^c`9XQL+$^t? zpOCl7yW|%66Zw?a?9KLe_2zl=y#?NZ-a+2M-jUuV-lg7U-kZEPdzX7}^RDpT>0Rl) z$9u2$e(!_c)!t_BI`0PWChsHO$GlH?w|JlOKI47X`@Hu>?{@FY-ZvGh=#&J-pqLc1 zlA=h8MX@P%B|~v3SxUAdD~i%l>8x~Bx+&e293@xDR|=FqN}=`>3#xrK-jve#I_&eEp;Z=4l zfb;d4a`(*)jzPLkWcfb&_M_@l)v4;9zy402q}yqb9;KPCd%7O#Z=9y7)%#JJtK~Q~ zX{5H1T6WW^u6#dG>r_u;_1RY2ZOwEeZKe11_Gy}={q(C^XSxqMZCiT(O8@lyEWOw1 z%_{W%ywkpwzSPV&dXV%^UXAPXG)xQKce6%QJ)zw~C=8{`M6GB)R2%mbeWlg?2SQ-1 zZ=;M&n~_{mYoXai)tZ50XouCjCYG(W`y*jgyB0L!~3yD9O%m^fBj85pw}YZ%Ca=lr_mqie6f-mRDP0vpuf~J+9S974zny1 zjUP%fB-qmvv%FGYz78`k{rgTMEr^|^)>XF7RmtT0EuRx;6ow}l^Cy4nwGY{T#8z55!vqk*+W z>w==A>@aIp{K}khB40zw!Xm9k@Xka~}M%&}u}=SmT&$q`TvuR^r++ z4Kx$7fdssGls!Foa7Qh{wX6n*p6MD`oo79R(?E7lb76b*W?ja=jspxe+Q2y=XCB{K z$&L@f{a^@7k~^>(k_I~-WNko)S#4cr2h~7uFF(PO^lLA0e4-Zn!r&t28?AS~nv34> z4ss0BFS?s~t=F*-F`CwO9b^2B%-$Dw+|AO%i_Q%-BSzH_xeKqqEHmG%`0|PHBQpLi z$AK+h@d+YfVIReR@_^$byK{7v=*>-=A|3lHn^V4phU)#N^^O5%2= z*eH1uJ|D?Xi9+*9U8Ruif}^(8^RcW%)#W-1UZ66CXUL_j(7+&bIV61i@2#eqamvsR9|kL81K4*nHYv@4d#&@jSW`t})NZ^qk5!FV9p=uWk7 z^p}zx&T#Ia)qHCna<;f0OPI4};(*A|cu%oNkt^yyb9AYJB2RC&*1Da-e(#pGPUKb8 ziEy^}6=XxS44akQK36-vsk5%rN+B1S$C=c8x-VJUoDb(Y?>mQ=4AqU3cOQQ3O2{ zV?PPs|i^ZCfGw5IAVRRZS`n>BxxXX-EC???{skLrwYbzOqF(a5J5 znBHjMOM8&CsONm)aBm9h|t*b zd(U{e75dT!oP%}A*4-V|q{F!nWf4aO+zcOdds~}%kF5Gg5*APJTR(fZ@6&hHO7~Y0 z!j5L7_I}pbzH4VbaUuw!hp~oRpCFsl#Ano;l@vs;5Kk*UqZhIA@?HKY_4n^Yce1Yi_{cL!yXbiDd2bQ^Oz12XwIIo9#F4J{zu1F! OV?8R6O)=CKO#T79qO$h@ literal 0 HcmV?d00001 diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/ThirdParty/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..ac43a0cee6b83ce628cce69b73b65d5f32350823 GIT binary patch literal 6559 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 })58edtf>15w_ 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 M@=iR;xsQ4CpIEI>SpWb4 diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/decls.pbxbtree b/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/decls.pbxbtree deleted file mode 100644 index e87f91bdf33f5984d59ef701154387cc71d751ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433332 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ν=12z2ouE3>1=NLcuWY<4DI}kYOsHX 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 diff --git a/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/imports.pbxbtree b/Libraries/Ogg/libogg-1.1.3/macosx/build/Ogg.build/Ogg.pbxindex/imports.pbxbtree deleted file mode 100644 index 41e4adfb731771e948b29506696e79c557f7e3a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8372 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 tvi1pMKVJ8S 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