seal 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +1 -0
- data/LICENSE +13 -0
- data/README.md +265 -0
- data/ext/seal/extconf.rb +45 -0
- data/include/al/al.h +724 -0
- data/include/al/alc.h +277 -0
- data/include/al/efx-presets.h +402 -0
- data/include/al/efx.h +758 -0
- data/include/mpg123/mpg123.h +1034 -0
- data/include/ogg/config_types.h +25 -0
- data/include/ogg/ogg.h +210 -0
- data/include/ogg/os_types.h +147 -0
- data/include/seal.h +23 -0
- data/include/seal/buf.h +143 -0
- data/include/seal/core.h +95 -0
- data/include/seal/efs.h +112 -0
- data/include/seal/err.h +93 -0
- data/include/seal/fmt.h +58 -0
- data/include/seal/listener.h +103 -0
- data/include/seal/raw.h +86 -0
- data/include/seal/rvb.h +520 -0
- data/include/seal/src.h +413 -0
- data/include/seal/stream.h +81 -0
- data/include/vorbis/codec.h +243 -0
- data/include/vorbis/vorbisfile.h +206 -0
- data/mpg123/AUTHORS +150 -0
- data/mpg123/COPYING +773 -0
- data/mpg123/ChangeLog +3 -0
- data/mpg123/INSTALL +111 -0
- data/mpg123/Makefile.am +99 -0
- data/mpg123/Makefile.in +1043 -0
- data/mpg123/NEWS +1200 -0
- data/mpg123/NEWS.libmpg123 +133 -0
- data/mpg123/README +203 -0
- data/mpg123/TODO +38 -0
- data/mpg123/aclocal.m4 +1168 -0
- data/mpg123/build/config.guess +1530 -0
- data/mpg123/build/config.sub +1782 -0
- data/mpg123/build/depcomp +707 -0
- data/mpg123/build/install-sh +527 -0
- data/mpg123/build/ltmain.sh +9655 -0
- data/mpg123/build/missing +330 -0
- data/mpg123/configure +20267 -0
- data/mpg123/configure.ac +2178 -0
- data/mpg123/doc/ACCURACY +2 -0
- data/mpg123/doc/BENCHMARKING +110 -0
- data/mpg123/doc/BUGS +3 -0
- data/mpg123/doc/CONTACT +17 -0
- data/mpg123/doc/LICENSE +22 -0
- data/mpg123/doc/Makefile.am +32 -0
- data/mpg123/doc/Makefile.in +490 -0
- data/mpg123/doc/PATENTS +39 -0
- data/mpg123/doc/README.3DNOW +56 -0
- data/mpg123/doc/README.gain +171 -0
- data/mpg123/doc/README.remote +218 -0
- data/mpg123/doc/ROAD_TO_LGPL +270 -0
- data/mpg123/doc/THANKS +13 -0
- data/mpg123/doc/TODO +63 -0
- data/mpg123/doc/doxy_examples.c +21 -0
- data/mpg123/doc/doxygen.conf +41 -0
- data/mpg123/doc/doxyhead.xhtml +12 -0
- data/mpg123/doc/examples/dump_seekindex.c +41 -0
- data/mpg123/doc/examples/extract_frames.c +92 -0
- data/mpg123/doc/examples/feedseek.c +238 -0
- data/mpg123/doc/examples/id3dump.c +178 -0
- data/mpg123/doc/examples/mpg123_to_wav.c +118 -0
- data/mpg123/doc/examples/mpglib.c +92 -0
- data/mpg123/doc/examples/scan.c +47 -0
- data/mpg123/doc/libmpg123_speed.txt +84 -0
- data/mpg123/equalize.dat +37 -0
- data/mpg123/libmpg123.pc.in +11 -0
- data/mpg123/m4/addrconfig.m4 +34 -0
- data/mpg123/m4/libtool.m4 +7982 -0
- data/mpg123/m4/ltoptions.m4 +384 -0
- data/mpg123/m4/ltsugar.m4 +123 -0
- data/mpg123/m4/ltversion.m4 +23 -0
- data/mpg123/m4/lt~obsolete.m4 +98 -0
- data/mpg123/makedll.sh +19 -0
- data/mpg123/man1/mpg123.1 +512 -0
- data/mpg123/mpg123.spec +68 -0
- data/mpg123/mpg123.spec.in +68 -0
- data/mpg123/ports/MSVC++/2005/libmpg123/libmpg123.vcproj +741 -0
- data/mpg123/ports/MSVC++/2008/dump_seekindex/dump_seekindex.vcproj +194 -0
- data/mpg123/ports/MSVC++/2008/feedseek/feedseek.vcproj +195 -0
- data/mpg123/ports/MSVC++/2008/libmpg123/libmpg123.vcproj +1357 -0
- data/mpg123/ports/MSVC++/2008/mpg123.sln +44 -0
- data/mpg123/ports/MSVC++/2008/mpglib/mpglib.vcproj +191 -0
- data/mpg123/ports/MSVC++/2008/scan/scan.vcproj +195 -0
- data/mpg123/ports/MSVC++/2008clr/2008clr.sln +81 -0
- data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Program.cs +435 -0
- data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Properties/AssemblyInfo.cs +36 -0
- data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/ReplaceReaderclr.csproj +72 -0
- data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Program.cs +331 -0
- data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Properties/AssemblyInfo.cs +36 -0
- data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/feedseekclr.csproj +71 -0
- data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Program.cs +79 -0
- data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Properties/AssemblyInfo.cs +36 -0
- data/mpg123/ports/MSVC++/2008clr/examples/scanclr/scanclr.csproj +70 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/AssemblyInfo.cpp +76 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/ReadMe.txt +165 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.cpp +91 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.h +130 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/dllmain.cpp +19 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/enum.h +218 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.cpp +48 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.h +134 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.cpp +92 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.h +132 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.cpp +138 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.h +152 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.cpp +896 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.h +953 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.rc +102 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.vcproj +328 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/resource.h +14 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.cpp +8 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.h +38 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.cpp +166 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.h +265 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/targetver.h +24 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.cpp +67 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.h +111 -0
- data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj +90 -0
- data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj.filters +6 -0
- data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj +95 -0
- data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj.filters +6 -0
- data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj +960 -0
- data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj.user +3 -0
- data/mpg123/ports/MSVC++/2010/libmpg123/yasm.exe +0 -0
- data/mpg123/ports/MSVC++/2010/mpg123.sln +38 -0
- data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj +93 -0
- data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj.filters +6 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/CORE_FileIn.H +15 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/SourceFilter_MP3.H +139 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_Def.H +206 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_FileIn.H +167 -0
- data/mpg123/ports/MSVC++/CMP3Stream/README +4 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_FileIn.CPP +462 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Log.CPP +122 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Mutex.CPP +35 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/SourceFilter_MP3Stream.CPP +586 -0
- data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/PLACE_LIBMPG123_SOURCES_HERE +0 -0
- data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/libMPG123.vcproj +245 -0
- data/mpg123/ports/MSVC++/config.h +35 -0
- data/mpg123/ports/MSVC++/examples/feedseek.c +240 -0
- data/mpg123/ports/MSVC++/examples/scan.c +47 -0
- data/mpg123/ports/MSVC++/mpg123.h +46 -0
- data/mpg123/ports/MSVC++/msvc.c +59 -0
- data/mpg123/ports/README +26 -0
- data/mpg123/ports/Sony_PSP/Makefile.psp +38 -0
- data/mpg123/ports/Sony_PSP/README +11 -0
- data/mpg123/ports/Sony_PSP/config.h +368 -0
- data/mpg123/ports/Sony_PSP/readers.c.patch +2 -0
- data/mpg123/ports/Xcode/config.h +197 -0
- data/mpg123/ports/Xcode/mpg123.h +17 -0
- data/mpg123/ports/Xcode/mpg123.xcodeproj/project.pbxproj +670 -0
- data/mpg123/ports/mpg123_.pas +478 -0
- data/mpg123/scripts/benchmark-cpu.pl +56 -0
- data/mpg123/scripts/tag_lyrics.py +76 -0
- data/mpg123/src/Makefile.am +186 -0
- data/mpg123/src/Makefile.in +1097 -0
- data/mpg123/src/audio.c +725 -0
- data/mpg123/src/audio.h +106 -0
- data/mpg123/src/buffer.c +312 -0
- data/mpg123/src/buffer.h +45 -0
- data/mpg123/src/common.c +240 -0
- data/mpg123/src/common.h +29 -0
- data/mpg123/src/config.h.in +436 -0
- data/mpg123/src/control_generic.c +809 -0
- data/mpg123/src/equalizer.c +48 -0
- data/mpg123/src/genre.c +271 -0
- data/mpg123/src/genre.h +15 -0
- data/mpg123/src/getlopt.c +148 -0
- data/mpg123/src/getlopt.h +77 -0
- data/mpg123/src/httpget.c +700 -0
- data/mpg123/src/httpget.h +66 -0
- data/mpg123/src/legacy_module.c +74 -0
- data/mpg123/src/libmpg123/Makefile.am +141 -0
- data/mpg123/src/libmpg123/Makefile.in +919 -0
- data/mpg123/src/libmpg123/compat.c +138 -0
- data/mpg123/src/libmpg123/compat.h +178 -0
- data/mpg123/src/libmpg123/dct36_3dnow.S +505 -0
- data/mpg123/src/libmpg123/dct36_3dnowext.S +512 -0
- data/mpg123/src/libmpg123/dct64.c +174 -0
- data/mpg123/src/libmpg123/dct64_3dnow.S +712 -0
- data/mpg123/src/libmpg123/dct64_3dnowext.S +714 -0
- data/mpg123/src/libmpg123/dct64_altivec.c +315 -0
- data/mpg123/src/libmpg123/dct64_i386.c +336 -0
- data/mpg123/src/libmpg123/dct64_i486.c +342 -0
- data/mpg123/src/libmpg123/dct64_mmx.S +811 -0
- data/mpg123/src/libmpg123/dct64_neon.S +297 -0
- data/mpg123/src/libmpg123/dct64_neon_float.S +270 -0
- data/mpg123/src/libmpg123/dct64_sse.S +454 -0
- data/mpg123/src/libmpg123/dct64_sse_float.S +401 -0
- data/mpg123/src/libmpg123/dct64_x86_64.S +464 -0
- data/mpg123/src/libmpg123/dct64_x86_64_float.S +426 -0
- data/mpg123/src/libmpg123/debug.h +171 -0
- data/mpg123/src/libmpg123/decode.h +268 -0
- data/mpg123/src/libmpg123/dither.c +119 -0
- data/mpg123/src/libmpg123/dither.h +23 -0
- data/mpg123/src/libmpg123/equalizer.c +17 -0
- data/mpg123/src/libmpg123/equalizer_3dnow.S +70 -0
- data/mpg123/src/libmpg123/feature.c +106 -0
- data/mpg123/src/libmpg123/format.c +521 -0
- data/mpg123/src/libmpg123/frame.c +1046 -0
- data/mpg123/src/libmpg123/frame.h +410 -0
- data/mpg123/src/libmpg123/gapless.h +119 -0
- data/mpg123/src/libmpg123/getbits.h +100 -0
- data/mpg123/src/libmpg123/getcpuflags.S +91 -0
- data/mpg123/src/libmpg123/getcpuflags.h +47 -0
- data/mpg123/src/libmpg123/huffman.h +340 -0
- data/mpg123/src/libmpg123/icy.c +32 -0
- data/mpg123/src/libmpg123/icy.h +38 -0
- data/mpg123/src/libmpg123/icy2utf8.c +438 -0
- data/mpg123/src/libmpg123/icy2utf8.h +10 -0
- data/mpg123/src/libmpg123/id3.c +999 -0
- data/mpg123/src/libmpg123/id3.h +43 -0
- data/mpg123/src/libmpg123/index.c +134 -0
- data/mpg123/src/libmpg123/index.h +59 -0
- data/mpg123/src/libmpg123/intsym.h +256 -0
- data/mpg123/src/libmpg123/l12_integer_tables.h +278 -0
- data/mpg123/src/libmpg123/l2tables.h +164 -0
- data/mpg123/src/libmpg123/l3_integer_tables.h +1002 -0
- data/mpg123/src/libmpg123/layer1.c +155 -0
- data/mpg123/src/libmpg123/layer2.c +371 -0
- data/mpg123/src/libmpg123/layer3.c +2053 -0
- data/mpg123/src/libmpg123/lfs_alias.c +252 -0
- data/mpg123/src/libmpg123/lfs_wrap.c +751 -0
- data/mpg123/src/libmpg123/libmpg123.c +1607 -0
- data/mpg123/src/libmpg123/mangle.h +74 -0
- data/mpg123/src/libmpg123/mpeghead.h +87 -0
- data/mpg123/src/libmpg123/mpg123.h.in +1075 -0
- data/mpg123/src/libmpg123/mpg123lib_intern.h +338 -0
- data/mpg123/src/libmpg123/ntom.c +148 -0
- data/mpg123/src/libmpg123/optimize.c +964 -0
- data/mpg123/src/libmpg123/optimize.h +219 -0
- data/mpg123/src/libmpg123/parse.c +1179 -0
- data/mpg123/src/libmpg123/parse.h +25 -0
- data/mpg123/src/libmpg123/reader.h +137 -0
- data/mpg123/src/libmpg123/readers.c +1235 -0
- data/mpg123/src/libmpg123/sample.h +152 -0
- data/mpg123/src/libmpg123/stringbuf.c +163 -0
- data/mpg123/src/libmpg123/synth.c +816 -0
- data/mpg123/src/libmpg123/synth.h +196 -0
- data/mpg123/src/libmpg123/synth_3dnow.S +318 -0
- data/mpg123/src/libmpg123/synth_3dnowext.S +6 -0
- data/mpg123/src/libmpg123/synth_8bit.c +142 -0
- data/mpg123/src/libmpg123/synth_8bit.h +86 -0
- data/mpg123/src/libmpg123/synth_altivec.c +1057 -0
- data/mpg123/src/libmpg123/synth_arm.S +271 -0
- data/mpg123/src/libmpg123/synth_arm_accurate.S +287 -0
- data/mpg123/src/libmpg123/synth_i486.c +252 -0
- data/mpg123/src/libmpg123/synth_i586.S +336 -0
- data/mpg123/src/libmpg123/synth_i586_dither.S +375 -0
- data/mpg123/src/libmpg123/synth_mmx.S +125 -0
- data/mpg123/src/libmpg123/synth_mono.h +64 -0
- data/mpg123/src/libmpg123/synth_neon.S +123 -0
- data/mpg123/src/libmpg123/synth_neon_accurate.S +173 -0
- data/mpg123/src/libmpg123/synth_neon_float.S +149 -0
- data/mpg123/src/libmpg123/synth_neon_s32.S +168 -0
- data/mpg123/src/libmpg123/synth_ntom.h +213 -0
- data/mpg123/src/libmpg123/synth_real.c +404 -0
- data/mpg123/src/libmpg123/synth_s32.c +411 -0
- data/mpg123/src/libmpg123/synth_sse.S +6 -0
- data/mpg123/src/libmpg123/synth_sse3d.h +246 -0
- data/mpg123/src/libmpg123/synth_sse_accurate.S +294 -0
- data/mpg123/src/libmpg123/synth_sse_float.S +241 -0
- data/mpg123/src/libmpg123/synth_sse_s32.S +306 -0
- data/mpg123/src/libmpg123/synth_stereo_neon.S +175 -0
- data/mpg123/src/libmpg123/synth_stereo_neon_accurate.S +262 -0
- data/mpg123/src/libmpg123/synth_stereo_neon_float.S +220 -0
- data/mpg123/src/libmpg123/synth_stereo_neon_s32.S +247 -0
- data/mpg123/src/libmpg123/synth_stereo_sse_accurate.S +508 -0
- data/mpg123/src/libmpg123/synth_stereo_sse_float.S +416 -0
- data/mpg123/src/libmpg123/synth_stereo_sse_s32.S +540 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64.S +335 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64_accurate.S +454 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64_float.S +396 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64_s32.S +473 -0
- data/mpg123/src/libmpg123/synth_x86_64.S +244 -0
- data/mpg123/src/libmpg123/synth_x86_64_accurate.S +301 -0
- data/mpg123/src/libmpg123/synth_x86_64_float.S +259 -0
- data/mpg123/src/libmpg123/synth_x86_64_s32.S +312 -0
- data/mpg123/src/libmpg123/synths.h +52 -0
- data/mpg123/src/libmpg123/tabinit.c +294 -0
- data/mpg123/src/libmpg123/tabinit_mmx.S +210 -0
- data/mpg123/src/libmpg123/testcpu.c +35 -0
- data/mpg123/src/libmpg123/true.h +14 -0
- data/mpg123/src/local.c +63 -0
- data/mpg123/src/local.h +21 -0
- data/mpg123/src/metaprint.c +373 -0
- data/mpg123/src/metaprint.h +17 -0
- data/mpg123/src/module.c +306 -0
- data/mpg123/src/module.h +48 -0
- data/mpg123/src/mpg123.c +1405 -0
- data/mpg123/src/mpg123app.h +171 -0
- data/mpg123/src/output/Makefile.am +213 -0
- data/mpg123/src/output/Makefile.in +1238 -0
- data/mpg123/src/output/aix.c +300 -0
- data/mpg123/src/output/alib.c +209 -0
- data/mpg123/src/output/alsa.c +297 -0
- data/mpg123/src/output/arts.c +117 -0
- data/mpg123/src/output/coreaudio.c +370 -0
- data/mpg123/src/output/dummy.c +78 -0
- data/mpg123/src/output/esd.c +167 -0
- data/mpg123/src/output/hp.c +184 -0
- data/mpg123/src/output/jack.c +450 -0
- data/mpg123/src/output/mint.c +197 -0
- data/mpg123/src/output/nas.c +335 -0
- data/mpg123/src/output/openal.c +197 -0
- data/mpg123/src/output/os2.c +665 -0
- data/mpg123/src/output/oss.c +319 -0
- data/mpg123/src/output/portaudio.c +255 -0
- data/mpg123/src/output/pulse.c +164 -0
- data/mpg123/src/output/sdl.c +206 -0
- data/mpg123/src/output/sgi.c +213 -0
- data/mpg123/src/output/sndio.c +161 -0
- data/mpg123/src/output/sun.c +281 -0
- data/mpg123/src/output/win32.c +229 -0
- data/mpg123/src/playlist.c +596 -0
- data/mpg123/src/playlist.h +52 -0
- data/mpg123/src/resolver.c +319 -0
- data/mpg123/src/resolver.h +25 -0
- data/mpg123/src/sfifo.c +146 -0
- data/mpg123/src/sfifo.h +95 -0
- data/mpg123/src/streamdump.c +74 -0
- data/mpg123/src/streamdump.h +20 -0
- data/mpg123/src/term.c +479 -0
- data/mpg123/src/term.h +81 -0
- data/mpg123/src/tests/noise.c +52 -0
- data/mpg123/src/tests/plain_id3.c +109 -0
- data/mpg123/src/tests/seek_accuracy.c +261 -0
- data/mpg123/src/tests/seek_whence.c +56 -0
- data/mpg123/src/tests/testtext.h +34 -0
- data/mpg123/src/tests/text.c +80 -0
- data/mpg123/src/wav.c +464 -0
- data/mpg123/src/wavhead.h +68 -0
- data/mpg123/src/win32_net.c +599 -0
- data/mpg123/src/win32_support.c +191 -0
- data/mpg123/src/win32_support.h +152 -0
- data/mpg123/src/xfermem.c +321 -0
- data/mpg123/src/xfermem.h +74 -0
- data/mpg123/windows-builds.sh +137 -0
- data/msvc/lib/OpenAL32.lib +0 -0
- data/spec/fixtures/heal.ogg +0 -0
- data/spec/fixtures/tone_up.wav +0 -0
- data/spec/seal/buffer_spec.rb +37 -0
- data/spec/seal/core_spec.rb +29 -0
- data/spec/seal/effect_slot_spec.rb +38 -0
- data/spec/seal/listener_spec.rb +33 -0
- data/spec/seal/reverb_spec.rb +51 -0
- data/spec/seal/source_spec.rb +370 -0
- data/spec/seal/stream_spec.rb +38 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/attribute_examples.rb +75 -0
- data/spec/support/audio_object_with_format.rb +27 -0
- data/spec/support/movable_object.rb +22 -0
- data/src/libogg/bitwise.c +857 -0
- data/src/libogg/framing.c +2093 -0
- data/src/libvorbis/backends.h +144 -0
- data/src/libvorbis/bitrate.c +253 -0
- data/src/libvorbis/bitrate.h +59 -0
- data/src/libvorbis/block.c +1046 -0
- data/src/libvorbis/codebook.c +484 -0
- data/src/libvorbis/codebook.h +119 -0
- data/src/libvorbis/codec_internal.h +167 -0
- data/src/libvorbis/envelope.c +375 -0
- data/src/libvorbis/envelope.h +80 -0
- data/src/libvorbis/floor0.c +221 -0
- data/src/libvorbis/floor1.c +1100 -0
- data/src/libvorbis/highlevel.h +58 -0
- data/src/libvorbis/info.c +668 -0
- data/src/libvorbis/lookup.c +94 -0
- data/src/libvorbis/lookup.h +32 -0
- data/src/libvorbis/lookup_data.h +192 -0
- data/src/libvorbis/lpc.c +160 -0
- data/src/libvorbis/lpc.h +29 -0
- data/src/libvorbis/lsp.c +456 -0
- data/src/libvorbis/lsp.h +28 -0
- data/src/libvorbis/mapping0.c +816 -0
- data/src/libvorbis/masking.h +785 -0
- data/src/libvorbis/mdct.c +563 -0
- data/src/libvorbis/mdct.h +71 -0
- data/src/libvorbis/misc.h +57 -0
- data/src/libvorbis/os.h +186 -0
- data/src/libvorbis/psy.c +1206 -0
- data/src/libvorbis/psy.h +154 -0
- data/src/libvorbis/registry.c +45 -0
- data/src/libvorbis/registry.h +32 -0
- data/src/libvorbis/res0.c +889 -0
- data/src/libvorbis/scales.h +90 -0
- data/src/libvorbis/sharedbook.c +579 -0
- data/src/libvorbis/smallft.c +1255 -0
- data/src/libvorbis/smallft.h +34 -0
- data/src/libvorbis/synthesis.c +184 -0
- data/src/libvorbis/vorbisfile.c +2337 -0
- data/src/libvorbis/window.c +2135 -0
- data/src/libvorbis/window.h +26 -0
- data/src/rubyext.c +2329 -0
- data/src/seal/buf.c +124 -0
- data/src/seal/core.c +283 -0
- data/src/seal/efs.c +74 -0
- data/src/seal/err.c +118 -0
- data/src/seal/fmt.c +86 -0
- data/src/seal/listener.c +111 -0
- data/src/seal/mpg.c +174 -0
- data/src/seal/mpg.h +24 -0
- data/src/seal/ov.c +180 -0
- data/src/seal/ov.h +22 -0
- data/src/seal/raw.c +59 -0
- data/src/seal/reader.c +102 -0
- data/src/seal/reader.h +59 -0
- data/src/seal/rvb.c +368 -0
- data/src/seal/src.c +654 -0
- data/src/seal/stream.c +109 -0
- data/src/seal/threading.c +66 -0
- data/src/seal/threading.h +20 -0
- data/src/seal/wav.c +297 -0
- data/src/seal/wav.h +23 -0
- data/src/win32api.rb +29 -0
- metadata +563 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*
|
|
2
|
+
scanclr: Estimate length (sample count) of a mpeg file and compare to length from exact scan.
|
|
3
|
+
|
|
4
|
+
copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
5
|
+
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
6
|
+
|
|
7
|
+
CLR example initially written by Malcolm Boczek
|
|
8
|
+
Based on scan.c example initially written by Thomas Orgis
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* Note the lack of error checking here.
|
|
12
|
+
While it would be nicer to inform the user about troubles, libmpg123 is designed _not_ to bite you on operations with invalid handles , etc.
|
|
13
|
+
You just jet invalid results on invalid operations... */
|
|
14
|
+
/* Ditto for mpg123clr (MB) */
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
using System;
|
|
21
|
+
using System.Collections.Generic;
|
|
22
|
+
using System.Linq;
|
|
23
|
+
using System.Text;
|
|
24
|
+
|
|
25
|
+
using mpg123clr;
|
|
26
|
+
|
|
27
|
+
namespace scanclr
|
|
28
|
+
{
|
|
29
|
+
class Program
|
|
30
|
+
{
|
|
31
|
+
static void Main(string[] args)
|
|
32
|
+
{
|
|
33
|
+
if (args.Length < 1)
|
|
34
|
+
{
|
|
35
|
+
Console.WriteLine("\nI will give you the estimated and exact sample lengths of MPEG audio files.\n");
|
|
36
|
+
Console.WriteLine("\nUsage: scanclr <mpeg audio file list>\n\n");
|
|
37
|
+
Console.WriteLine("Press any key to exit:");
|
|
38
|
+
while (Console.Read() == 0) ;
|
|
39
|
+
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
mpg123clr.mpg.ErrorCode err;
|
|
45
|
+
|
|
46
|
+
err = mpg123.mpg123_init();
|
|
47
|
+
|
|
48
|
+
mpg123 mp = new mpg123();
|
|
49
|
+
err = mp.mpg123_new();
|
|
50
|
+
|
|
51
|
+
mp.mpg123_param(mpg123clr.mpg.parms.resync_limit, -1, 0);
|
|
52
|
+
|
|
53
|
+
foreach (string name in args)
|
|
54
|
+
{
|
|
55
|
+
|
|
56
|
+
err = mp.mpg123_open(name);
|
|
57
|
+
|
|
58
|
+
long a, b;
|
|
59
|
+
|
|
60
|
+
a = mp.mpg123_length();
|
|
61
|
+
|
|
62
|
+
mp.mpg123_scan();
|
|
63
|
+
|
|
64
|
+
b = mp.mpg123_length();
|
|
65
|
+
|
|
66
|
+
mp.mpg123_close();
|
|
67
|
+
|
|
68
|
+
Console.WriteLine(string.Format("File {0}: estimated {1} vs. scanned {2}", name, a, b));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Console.WriteLine("\nPress any key to exit:");
|
|
72
|
+
while (Console.Read() == 0) ;
|
|
73
|
+
|
|
74
|
+
mp.Dispose();
|
|
75
|
+
|
|
76
|
+
mpg123.mpg123_exit();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
using System.Reflection;
|
|
2
|
+
using System.Runtime.CompilerServices;
|
|
3
|
+
using System.Runtime.InteropServices;
|
|
4
|
+
|
|
5
|
+
// General Information about an assembly is controlled through the following
|
|
6
|
+
// set of attributes. Change these attribute values to modify the information
|
|
7
|
+
// associated with an assembly.
|
|
8
|
+
[assembly: AssemblyTitle("scanclr")]
|
|
9
|
+
[assembly: AssemblyDescription("")]
|
|
10
|
+
[assembly: AssemblyConfiguration("")]
|
|
11
|
+
[assembly: AssemblyCompany("")]
|
|
12
|
+
[assembly: AssemblyProduct("scanclr")]
|
|
13
|
+
[assembly: AssemblyCopyright("© mpg123 project 2009")]
|
|
14
|
+
[assembly: AssemblyTrademark("")]
|
|
15
|
+
[assembly: AssemblyCulture("")]
|
|
16
|
+
|
|
17
|
+
// Setting ComVisible to false makes the types in this assembly not visible
|
|
18
|
+
// to COM components. If you need to access a type in this assembly from
|
|
19
|
+
// COM, set the ComVisible attribute to true on that type.
|
|
20
|
+
[assembly: ComVisible(false)]
|
|
21
|
+
|
|
22
|
+
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
23
|
+
[assembly: Guid("a22ea83e-2dba-4835-b0d8-cca3f0bc73a8")]
|
|
24
|
+
|
|
25
|
+
// Version information for an assembly consists of the following four values:
|
|
26
|
+
//
|
|
27
|
+
// Major Version
|
|
28
|
+
// Minor Version
|
|
29
|
+
// Build Number
|
|
30
|
+
// Revision
|
|
31
|
+
//
|
|
32
|
+
// You can specify all the values or you can default the Build and Revision Numbers
|
|
33
|
+
// by using the '*' as shown below:
|
|
34
|
+
// [assembly: AssemblyVersion("1.0.*")]
|
|
35
|
+
[assembly: AssemblyVersion("1.0.0.0")]
|
|
36
|
+
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
5
|
+
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
6
|
+
<ProductVersion>9.0.30729</ProductVersion>
|
|
7
|
+
<SchemaVersion>2.0</SchemaVersion>
|
|
8
|
+
<ProjectGuid>{53664927-0A21-4056-A5D5-C6A1B4B1F839}</ProjectGuid>
|
|
9
|
+
<OutputType>Exe</OutputType>
|
|
10
|
+
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
11
|
+
<RootNamespace>scanclr</RootNamespace>
|
|
12
|
+
<AssemblyName>scanclr</AssemblyName>
|
|
13
|
+
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
|
14
|
+
<FileAlignment>512</FileAlignment>
|
|
15
|
+
</PropertyGroup>
|
|
16
|
+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
17
|
+
<DebugSymbols>true</DebugSymbols>
|
|
18
|
+
<DebugType>full</DebugType>
|
|
19
|
+
<Optimize>false</Optimize>
|
|
20
|
+
<OutputPath>bin\Debug\</OutputPath>
|
|
21
|
+
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
22
|
+
<ErrorReport>prompt</ErrorReport>
|
|
23
|
+
<WarningLevel>4</WarningLevel>
|
|
24
|
+
<PlatformTarget>x86</PlatformTarget>
|
|
25
|
+
</PropertyGroup>
|
|
26
|
+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
27
|
+
<DebugType>pdbonly</DebugType>
|
|
28
|
+
<Optimize>true</Optimize>
|
|
29
|
+
<OutputPath>bin\Release\</OutputPath>
|
|
30
|
+
<DefineConstants>TRACE</DefineConstants>
|
|
31
|
+
<ErrorReport>prompt</ErrorReport>
|
|
32
|
+
<WarningLevel>4</WarningLevel>
|
|
33
|
+
<PlatformTarget>x86</PlatformTarget>
|
|
34
|
+
</PropertyGroup>
|
|
35
|
+
<ItemGroup>
|
|
36
|
+
<Reference Include="System" />
|
|
37
|
+
<Reference Include="System.Core">
|
|
38
|
+
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
|
39
|
+
</Reference>
|
|
40
|
+
<Reference Include="System.Xml.Linq">
|
|
41
|
+
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
|
42
|
+
</Reference>
|
|
43
|
+
<Reference Include="System.Data.DataSetExtensions">
|
|
44
|
+
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
|
45
|
+
</Reference>
|
|
46
|
+
<Reference Include="System.Data" />
|
|
47
|
+
<Reference Include="System.Xml" />
|
|
48
|
+
</ItemGroup>
|
|
49
|
+
<ItemGroup>
|
|
50
|
+
<Compile Include="Program.cs" />
|
|
51
|
+
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
52
|
+
</ItemGroup>
|
|
53
|
+
<ItemGroup>
|
|
54
|
+
<ProjectReference Include="..\..\mpg123clr\mpg123clr.vcproj">
|
|
55
|
+
<Project>{99E8B20E-9C29-46BC-B766-A50F237D88BF}</Project>
|
|
56
|
+
<Name>mpg123clr</Name>
|
|
57
|
+
</ProjectReference>
|
|
58
|
+
</ItemGroup>
|
|
59
|
+
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
60
|
+
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
61
|
+
Other similar extension points exist, see Microsoft.Common.targets.
|
|
62
|
+
<Target Name="BeforeBuild">
|
|
63
|
+
</Target>
|
|
64
|
+
<Target Name="AfterBuild">
|
|
65
|
+
</Target>
|
|
66
|
+
-->
|
|
67
|
+
<PropertyGroup>
|
|
68
|
+
<PostBuildEvent>if exist "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" copy /y "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" "$(TargetDir)"</PostBuildEvent>
|
|
69
|
+
</PropertyGroup>
|
|
70
|
+
</Project>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
|
|
3
|
+
|
|
4
|
+
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
|
|
5
|
+
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
|
|
6
|
+
|
|
7
|
+
All rights to this work freely assigned to the mpg123 project.
|
|
8
|
+
*/
|
|
9
|
+
/*
|
|
10
|
+
libmpg123: MPEG Audio Decoder library
|
|
11
|
+
|
|
12
|
+
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
13
|
+
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
14
|
+
|
|
15
|
+
*/
|
|
16
|
+
/*
|
|
17
|
+
1.8.1.0 04-Aug-09 Initial release.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#include "stdafx.h"
|
|
21
|
+
|
|
22
|
+
using namespace System::Reflection;
|
|
23
|
+
using namespace System::Runtime::CompilerServices;
|
|
24
|
+
|
|
25
|
+
//
|
|
26
|
+
// General Information about an assembly is controlled through the following
|
|
27
|
+
// set of attributes. Change these attribute values to modify the information
|
|
28
|
+
// associated with an assembly.
|
|
29
|
+
//
|
|
30
|
+
[assembly:AssemblyTitleAttribute("mpg123clr.dll")];
|
|
31
|
+
[assembly:AssemblyDescriptionAttribute("mpg123clr Dynamic Link Library")];
|
|
32
|
+
[assembly:AssemblyConfigurationAttribute("")];
|
|
33
|
+
[assembly:AssemblyCompanyAttribute("mpg123 Project")];
|
|
34
|
+
[assembly:AssemblyProductAttribute("mpg123clr.dll")];
|
|
35
|
+
[assembly:AssemblyCopyrightAttribute("� 2009-2011 by the mpg123 project")];
|
|
36
|
+
[assembly:AssemblyTrademarkAttribute("")];
|
|
37
|
+
[assembly:AssemblyCultureAttribute("")];
|
|
38
|
+
|
|
39
|
+
//
|
|
40
|
+
// Version information for an assembly consists of the following four values:
|
|
41
|
+
//
|
|
42
|
+
// Major Version
|
|
43
|
+
// Minor Version
|
|
44
|
+
// Build Number
|
|
45
|
+
// Revision
|
|
46
|
+
//
|
|
47
|
+
// You can specify all the value or you can default the Revision and Build Numbers
|
|
48
|
+
// by using the '*' as shown below:
|
|
49
|
+
|
|
50
|
+
[assembly:AssemblyVersionAttribute("1.13.0.0")];
|
|
51
|
+
|
|
52
|
+
//
|
|
53
|
+
// In order to sign your assembly you must specify a key to use. Refer to the
|
|
54
|
+
// Microsoft .NET Framework documentation for more information on assembly signing.
|
|
55
|
+
//
|
|
56
|
+
// Use the attributes below to control which key is used for signing.
|
|
57
|
+
//
|
|
58
|
+
// Notes:
|
|
59
|
+
// (*) If no key is specified, the assembly is not signed.
|
|
60
|
+
// (*) KeyName refers to a key that has been installed in the Crypto Service
|
|
61
|
+
// Provider (CSP) on your machine. KeyFile refers to a file which contains
|
|
62
|
+
// a key.
|
|
63
|
+
// (*) If the KeyFile and the KeyName values are both specified, the
|
|
64
|
+
// following processing occurs:
|
|
65
|
+
// (1) If the KeyName can be found in the CSP, that key is used.
|
|
66
|
+
// (2) If the KeyName does not exist and the KeyFile does exist, the key
|
|
67
|
+
// in the KeyFile is installed into the CSP and used.
|
|
68
|
+
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
|
|
69
|
+
// When specifying the KeyFile, the location of the KeyFile should be
|
|
70
|
+
// relative to the project directory.
|
|
71
|
+
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
|
|
72
|
+
// documentation for more information on this.
|
|
73
|
+
//
|
|
74
|
+
[assembly:AssemblyDelaySignAttribute(false)];
|
|
75
|
+
[assembly:AssemblyKeyFileAttribute("")];
|
|
76
|
+
[assembly:AssemblyKeyNameAttribute("")];
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
========================================================================
|
|
2
|
+
DYNAMIC LINK LIBRARY : mpg123clr Project Overview
|
|
3
|
+
========================================================================
|
|
4
|
+
|
|
5
|
+
Project Installation:
|
|
6
|
+
|
|
7
|
+
The project is part of a Visual Studio 2008 Solution.
|
|
8
|
+
|
|
9
|
+
The Visual Studio solution file is 2008clr.sln located in a folder/directory named 2008clr.
|
|
10
|
+
|
|
11
|
+
This folder/directory should be located in the mpg123/ports/MSVC++ folder to maintain file relationships
|
|
12
|
+
with required mpg123 library files. i.e. at mpg123/ports/MSVC++/2008clr.
|
|
13
|
+
|
|
14
|
+
The solution includes the following projects:
|
|
15
|
+
|
|
16
|
+
mpg123clr The mpg123 CLR project. This creates the CLR compatible DLL file.
|
|
17
|
+
scanclr Demonstration project for comparison with scan.c example.
|
|
18
|
+
feedseekclr Demonstration project for comparison with feedseek.c example
|
|
19
|
+
replacereaderclr Demonstration project, how to implement ReplaceReader in CLR (proof of concept)
|
|
20
|
+
libmpg123 For convenience, ensures that libmpg123.lib is available for linking
|
|
21
|
+
|
|
22
|
+
=========================================================================
|
|
23
|
+
Compiling:
|
|
24
|
+
Configuration Manager:
|
|
25
|
+
|
|
26
|
+
mpg123clr requires linking to a libmpg123 static library, this library must be compiled prior to
|
|
27
|
+
compiling the clr projects. mpg123clr uses relative folder position during linking; therefore either:-
|
|
28
|
+
|
|
29
|
+
ensure that the 2008clr solution is correctly located within the ports\msvc++ folder, or
|
|
30
|
+
change the "linker->input->additional dependencies" to suit your installation configuration
|
|
31
|
+
|
|
32
|
+
NOTE: x64 Active Solution Platform configurations are not supplied with this solution but have been tested.
|
|
33
|
+
(Effectively all that is required is to change all "include" references to account for the "x64" output locations)
|
|
34
|
+
|
|
35
|
+
NOTE: The "unsafe" context of the ReplaceReaderClr project is only required to allow the use of callbacks.
|
|
36
|
+
mpg123clr is written to avoid the use of "unsafe" for the majority of normal operations.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
==========================================================================
|
|
40
|
+
Using mpg123clr:
|
|
41
|
+
|
|
42
|
+
Mpg123clr is a CLR ready dll. Simply add a reference to the mpg123clr.dll file in your application project.
|
|
43
|
+
|
|
44
|
+
You may also add a "using" directive in your program files. C# e.g. using mpg123clr;
|
|
45
|
+
|
|
46
|
+
The mpg123clr project is configured to create an additional Intellisense documentation file (mpg123clr.xml)
|
|
47
|
+
to assist usage. If you manually relocate the .dll please also copy the .xml file to ensure correct Intellisense
|
|
48
|
+
operation.
|
|
49
|
+
|
|
50
|
+
===========================================================================
|
|
51
|
+
Common Errors:
|
|
52
|
+
|
|
53
|
+
1) Problem: "Unhandled Exception - file not found" error when the application is executed.
|
|
54
|
+
Cause: Incorrect libmpg123 library build / missing libmpg123.dll.
|
|
55
|
+
Solution: Copy libmpg123.dll to the application output folder - possibly in a Post-Build Event (see scanclr for
|
|
56
|
+
an example).
|
|
57
|
+
Explanation: mpg123clr requires static library libmpg123.lib and NOT dynamic library libmpg123.dll.
|
|
58
|
+
If the libmpg123 library is built using an incorrect Project Context (such as Debug_Generic_Dll), mpg123clr
|
|
59
|
+
will attempt to load the libmpg123.dll at runtime even though this file is not required.
|
|
60
|
+
Alternatively: Use Configuration Manager and select a non-dll build context for the libmpg123 project.
|
|
61
|
+
(i.e. Debug_Generic not Debug_Generic_Dll)
|
|
62
|
+
|
|
63
|
+
===========================================================================
|
|
64
|
+
Developer Notes:
|
|
65
|
+
|
|
66
|
+
1) Documentation <remarks> do not appear in CLR Intellisense environment (at time of writing).
|
|
67
|
+
So deferred in favour of <para> within <summary>.
|
|
68
|
+
2) During development "off_t" parameters conflicted with intellisense (although size_t worked just fine)
|
|
69
|
+
Since many CLR functions that refer to off_t features (e.g. positioners) actually expect 64bit long
|
|
70
|
+
(or long long in C++) parameters, I've implemented off_t as a long long - with one notable exception.
|
|
71
|
+
This fixed intellisense and accommodates the CLR 64bit long implementation positioners: And then intellisense
|
|
72
|
+
started working correctly and made this a moot point - at least as far as intellisense is concerned.
|
|
73
|
+
3) off_t notable exception - SeekDelegate, SeekHandleDelegate
|
|
74
|
+
Usually 2008clr functions are called by the callee, long long (clr 64bit long) can be marshaled and passed
|
|
75
|
+
to libmpg123. The seek delegate is called directly by the libmpg123 seek functions - there isn't an opportunity
|
|
76
|
+
to marshal the offending parameters. A library compiled in 32 bit will expect the SeekDelegate to have a 32bit
|
|
77
|
+
position parameter but in 64bit compilation the same parameter will be 64bit. Therefore the need to be correct
|
|
78
|
+
overrides the need for consistency with CLR 64bit positioners.
|
|
79
|
+
SIDE NOTE: In early tests the SeekDelegate was defined with a long long parameter - libmpg123 called it oblivious
|
|
80
|
+
to the fact that the type was incorrect. The only impact was that the 32bit position and 32bit origin (whence)
|
|
81
|
+
were compacted to a single 64bit parameter. This is fixed, no longer an issue!!!
|
|
82
|
+
4) PosixSeek and PosixRead ARE ONLY INCLUDED AS PROOF OF CONCEPT - to prove that the callbacks into CLR would
|
|
83
|
+
function correctly with libmpg123 cdecl calls. It saved making a separate dll for the posix elements.
|
|
84
|
+
REPEAT AFTER ME: Not for normal consumption....
|
|
85
|
+
5) The __clrcall decoration of mpg123clr functions is not strictly necessary for Visual Studio 2005 and later,
|
|
86
|
+
but has been left in for compatibility with earlier versions. See MS documentation of "double thunking"
|
|
87
|
+
6) Many functions use pin_ptr to pin the return variables prior to calling the libmpg123 function, this was
|
|
88
|
+
considered as an alternative to avoid the use of local variables with attendant overhead of
|
|
89
|
+
allocate/use/copy/destroy etc. In practice pin_ptr has significant overhead, empirical tests showed very
|
|
90
|
+
little performance difference between either method.
|
|
91
|
+
7) Set pin_ptr to NULL after use, to force early GC (recommended). Carried out performance trials and found
|
|
92
|
+
insignificant impact. Since most functions are likely to be used repeatedly decided to follow recommended usage.
|
|
93
|
+
If code analysis proves this to be redundant - can be removed...
|
|
94
|
+
(1.9.0.1 update) "insignificant" in Debug mode, quite significant if the debug overhead is removed,
|
|
95
|
+
i.e. Release mode. So try/finally blocks removed in favour of allocating temporary local return variable.
|
|
96
|
+
8) (1.12.0.0 update) Support for mpg123_open_handle warrants further description... here it is.
|
|
97
|
+
a) Pinning of delegates is not required. See Microsoft: C++, How to: Marshal Callbacks and Delegates Using C++ Interop
|
|
98
|
+
b) Pinning of objects is an entirely different matter, so why is the open_handle object not pinned?
|
|
99
|
+
Answer: Because it's an object. I allowed passing of any object not just handles.
|
|
100
|
+
i) a pin_ptr cannot be a field member for instance scope.
|
|
101
|
+
ii) cannot pin the object itself because there's no object.field to pin
|
|
102
|
+
iii) cannot pin the object target because the referenced object may be unblittable.
|
|
103
|
+
iv) GCHandle.Alloc(obj, GCHandleType.Pinned) doesn't work on unblittable objects (eg managed references like BinaryReader)
|
|
104
|
+
Since I don't restrict which objects may be passed I'm forced to exclude pinning.
|
|
105
|
+
c) The generated handle doesn't need to be pinned. GCHandle.Alloc(obj) creates a potentially GC relocatable object
|
|
106
|
+
containing a Handle to the object. The GCHandle.ToIntPtr(userObjectHandle) creates an integer representation of the
|
|
107
|
+
handle that is valid irrespective of any GC relocation of either the object or the GCHandle and can therefore be
|
|
108
|
+
passed through unmanaged code to CLR native methods that can re-reference the original object via GCHandle.FromIntPtr
|
|
109
|
+
and gch.Target.
|
|
110
|
+
All this seems relatively efficient, certainly there is little performance difference between the ReplaceReader
|
|
111
|
+
and ReplaceReaderHandle sample code.
|
|
112
|
+
|
|
113
|
+
=============================================================================
|
|
114
|
+
Tested/Untested
|
|
115
|
+
|
|
116
|
+
I haven't used mpg123clr in a production project yet, although one is about to start. Therefore EVERYTHING should
|
|
117
|
+
be treated as though unproven. UPDATE: the scanclr, feedseekclr and replacereaderclr examples have provided a basic
|
|
118
|
+
functional test.
|
|
119
|
+
|
|
120
|
+
Largefile support totally untested... would appreciate a volunteer.
|
|
121
|
+
|
|
122
|
+
The majority of functions have been tried in test projects with the following exceptions.
|
|
123
|
+
|
|
124
|
+
64bit compilation. mpg123clr compiles correctly in 64bit x64 platform mode, but hasn't been tested.
|
|
125
|
+
|
|
126
|
+
ICY(icy_meta); Never had genuine ICY data to test with.
|
|
127
|
+
Icy2Utf8(icy_text); Never tried. Please provide sample material.
|
|
128
|
+
enc_from_id3(encbyte); Works on libmpg123 enums, never had real world text samples.
|
|
129
|
+
store_utf8(...); Works with CLR generated text, not tried with real world text samples.
|
|
130
|
+
mpg123str.strlen(...) Not tested with utf8 text strings. Please provide sample material.
|
|
131
|
+
|
|
132
|
+
==============================================================================
|
|
133
|
+
Documentation
|
|
134
|
+
|
|
135
|
+
mpg123clr is 90% documentation, use intellisense as your reference. If in doubt refer back to the libmpg123
|
|
136
|
+
documents. NOTE: You need to build the mpg123clr library to create the intellisense file.
|
|
137
|
+
|
|
138
|
+
===============================================================================
|
|
139
|
+
Error Trapping
|
|
140
|
+
|
|
141
|
+
libmpg123 is an error agnostic library - it shouldn't generate errors, but neither does it trap them.
|
|
142
|
+
|
|
143
|
+
mpg123clr is built on the same concept although some CLR generated errors have been trapped. My personal
|
|
144
|
+
preference is that exceptions should be avoided not relied on...
|
|
145
|
+
|
|
146
|
+
THE CALLING APPLICATION IS RESPONSIBLE FOR ERROR DETECTION, TRAPPING AND CORRECTION.
|
|
147
|
+
|
|
148
|
+
All projects are "as is" with no express or implied warranty. Demonstration projects are to demonstrate the
|
|
149
|
+
use of the library and are NOT considered examples of good coding practice. Use at own risk.
|
|
150
|
+
|
|
151
|
+
===============================================================================
|
|
152
|
+
Revision History
|
|
153
|
+
|
|
154
|
+
1.8.1.0 04-Aug-09 Initial release.
|
|
155
|
+
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
|
|
156
|
+
1.9.0.0 30-Sep-09 Project config - if exists, copy libmpg123.dll to app output folder (mb)
|
|
157
|
+
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
|
|
158
|
+
1.9.0.1 24-Nov-09 Performance update - removed try/finally (mb)
|
|
159
|
+
1.12.0.0 14-Apr-10 Release match - added open_handle and framebyframe support (mb)
|
|
160
|
+
1.13.0.0 13-Jan-11 Release match - added encsize and strlen support (mb)
|
|
161
|
+
|
|
162
|
+
Constructive feedback preferred.
|
|
163
|
+
|
|
164
|
+
Malcolm Boczek
|
|
165
|
+
mpg123clr original author.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/*
|
|
2
|
+
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
|
|
3
|
+
|
|
4
|
+
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
|
|
5
|
+
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
|
|
6
|
+
|
|
7
|
+
All rights to this work freely assigned to the mpg123 project.
|
|
8
|
+
*/
|
|
9
|
+
/*
|
|
10
|
+
libmpg123: MPEG Audio Decoder library
|
|
11
|
+
|
|
12
|
+
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
13
|
+
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
14
|
+
|
|
15
|
+
*/
|
|
16
|
+
/*
|
|
17
|
+
1.8.1.0 04-Aug-09 Initial release.
|
|
18
|
+
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
|
|
19
|
+
1.9.0.0 13-Oct-09 pin_ptr = nullptr on return (mb)
|
|
20
|
+
1.9.0.1 24-Nov-09 performance update - removed try/finally (mb)
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
#include "StdAfx.h"
|
|
24
|
+
#include "advanced.h"
|
|
25
|
+
|
|
26
|
+
mpg123clr::advpars::advpars(int% error)
|
|
27
|
+
{
|
|
28
|
+
pin_ptr<int> err = &error;
|
|
29
|
+
mp = ::mpg123_new_pars(err);
|
|
30
|
+
|
|
31
|
+
err = nullptr;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
mpg123clr::advpars::~advpars(void)
|
|
35
|
+
{
|
|
36
|
+
// clean up code to release managed resources
|
|
37
|
+
// ...
|
|
38
|
+
|
|
39
|
+
// call Finalizer to clean up unmanaged resources
|
|
40
|
+
this->!advpars();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
mpg123clr::advpars::!advpars(void)
|
|
44
|
+
{
|
|
45
|
+
if (mp != NULL)
|
|
46
|
+
{
|
|
47
|
+
::mpg123_delete_pars(mp);
|
|
48
|
+
mp = NULL;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_fmt_none(void)
|
|
53
|
+
{
|
|
54
|
+
return (mpg123clr::mpg::ErrorCode) ::mpg123_fmt_none(mp);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_fmt_all(void)
|
|
58
|
+
{
|
|
59
|
+
return (mpg123clr::mpg::ErrorCode) ::mpg123_fmt_all(mp);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_fmt(int rate, mpg123clr::mpg::channelcount channels, int encodings)
|
|
63
|
+
{
|
|
64
|
+
return (mpg123clr::mpg::ErrorCode) ::mpg123_fmt(mp, rate, (int)channels, encodings);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
mpg123clr::mpg::channelcount mpg123clr::advpars::mpg123_fmt_support(int rate, int encodings)
|
|
68
|
+
{
|
|
69
|
+
return (mpg123clr::mpg::channelcount) ::mpg123_fmt_support(mp, rate, encodings);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_par(mpg123clr::mpg::parms type, int val, double fval)
|
|
73
|
+
{
|
|
74
|
+
return (mpg123clr::mpg::ErrorCode) ::mpg123_par(mp, (mpg123_parms) type, val, fval);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_getpar(mpg123clr::mpg::parms type, [Out] int% val, [Out] double% fval)
|
|
78
|
+
{
|
|
79
|
+
// Avoid need for local intermediary variables
|
|
80
|
+
pin_ptr<int> _val = &val;
|
|
81
|
+
pin_ptr<double> _fval = &fval;
|
|
82
|
+
|
|
83
|
+
int ret = ::mpg123_getpar(mp, (mpg123_parms) type, (long*)_val, _fval);
|
|
84
|
+
|
|
85
|
+
_fval = nullptr;
|
|
86
|
+
_val = nullptr;
|
|
87
|
+
|
|
88
|
+
return (mpg123clr::mpg::ErrorCode) ret;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|