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
data/mpg123/src/term.h
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
term: terminal control
|
|
3
|
+
|
|
4
|
+
copyright ?-2006 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
|
+
initially written by Michael Hipp
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef _MPG123_TERM_H_
|
|
10
|
+
#define _MPG123_TERM_H_
|
|
11
|
+
|
|
12
|
+
#include "mpg123app.h"
|
|
13
|
+
|
|
14
|
+
#ifdef HAVE_TERMIOS
|
|
15
|
+
|
|
16
|
+
#define LOOP_CYCLES 0.500000 /* Loop time in sec */
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
* Defines the keybindings in term.c - change to your
|
|
20
|
+
* own preferences.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
#define MPG123_HELP_KEY 'h'
|
|
24
|
+
#define MPG123_BACK_KEY 'b'
|
|
25
|
+
#define MPG123_NEXT_KEY 'f'
|
|
26
|
+
#define MPG123_PAUSE_KEY 'p'
|
|
27
|
+
#define MPG123_QUIT_KEY 'q'
|
|
28
|
+
/* space bar is alias for that */
|
|
29
|
+
#define MPG123_STOP_KEY 's'
|
|
30
|
+
#define MPG123_REWIND_KEY ','
|
|
31
|
+
#define MPG123_FORWARD_KEY '.'
|
|
32
|
+
/* This is convenient on QWERTZ-keyboards. */
|
|
33
|
+
#define MPG123_FAST_REWIND_KEY ';'
|
|
34
|
+
#define MPG123_FAST_FORWARD_KEY ':'
|
|
35
|
+
#define MPG123_FINE_REWIND_KEY '<'
|
|
36
|
+
#define MPG123_FINE_FORWARD_KEY '>'
|
|
37
|
+
/* You probably want to use the following bindings instead
|
|
38
|
+
* on a standard QWERTY-keyboard:
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/* #define MPG123_FAST_REWIND_KEY '<' */
|
|
42
|
+
/* #define MPG123_FAST_FORWARD_KEY '>' */
|
|
43
|
+
/* #define MPG123_FINE_REWIND_KEY ';' */
|
|
44
|
+
/* #define MPG123_FINE_FORWARD_KEY ':' */
|
|
45
|
+
|
|
46
|
+
#define MPG123_VOL_UP_KEY '+'
|
|
47
|
+
#define MPG123_VOL_DOWN_KEY '-'
|
|
48
|
+
#define MPG123_VERBOSE_KEY 'v'
|
|
49
|
+
#define MPG123_RVA_KEY 'r'
|
|
50
|
+
#define MPG123_PLAYLIST_KEY 'l'
|
|
51
|
+
#define MPG123_PREV_KEY 'd'
|
|
52
|
+
#define MPG123_MPEG_KEY 'm'
|
|
53
|
+
#define MPG123_TAG_KEY 't'
|
|
54
|
+
#define MPG123_PITCH_UP_KEY 'c'
|
|
55
|
+
#define MPG123_PITCH_BUP_KEY 'C'
|
|
56
|
+
#define MPG123_PITCH_DOWN_KEY 'x'
|
|
57
|
+
#define MPG123_PITCH_BDOWN_KEY 'X'
|
|
58
|
+
#define MPG123_PITCH_ZERO_KEY 'w'
|
|
59
|
+
/* This counts as "undocumented" and can disappear */
|
|
60
|
+
#define MPG123_FRAME_INDEX_KEY 'i'
|
|
61
|
+
#define MPG123_VARIOUS_INFO_KEY 'I'
|
|
62
|
+
/* The normal and big pitch adjustment done on key presses. */
|
|
63
|
+
#define MPG123_PITCH_VAL 0.001
|
|
64
|
+
#define MPG123_PITCH_BVAL 0.01
|
|
65
|
+
|
|
66
|
+
#define MPG123_PAUSED_STRING "Paused. \b\b\b\b\b\b\b\b"
|
|
67
|
+
#define MPG123_STOPPED_STRING "Stopped.\b\b\b\b\b\b\b\b"
|
|
68
|
+
#define MPG123_EMPTY_STRING " \b\b\b\b\b\b\b\b"
|
|
69
|
+
|
|
70
|
+
/* Need it as string for the param struct, change according to the above. */
|
|
71
|
+
#define MPG123_TERM_USR1 "s"
|
|
72
|
+
#define MPG123_TERM_USR2 "f"
|
|
73
|
+
|
|
74
|
+
void term_init(void);
|
|
75
|
+
off_t term_control(mpg123_handle *mh, audio_output_t *ao);
|
|
76
|
+
void term_restore(void);
|
|
77
|
+
void term_hint(void); /* Print a message hinting at terminal usage. */
|
|
78
|
+
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
#endif
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#include "config.h"
|
|
2
|
+
#include "compat.h"
|
|
3
|
+
#include "dither.h"
|
|
4
|
+
#include "debug.h"
|
|
5
|
+
|
|
6
|
+
const char *typenames[] = { "white", "tpdf", "highpass_tpdf" };
|
|
7
|
+
enum mpg123_noise_type types[] = { mpg123_white_noise, mpg123_tpdf_noise, mpg123_highpass_tpdf_noise };
|
|
8
|
+
|
|
9
|
+
int main(int argc, char **argv)
|
|
10
|
+
{
|
|
11
|
+
size_t i;
|
|
12
|
+
size_t count = DITHERSIZE;
|
|
13
|
+
float *table;
|
|
14
|
+
enum mpg123_noise_type type = mpg123_highpass_tpdf_noise;
|
|
15
|
+
|
|
16
|
+
fprintf(stderr, "Note: You could give two optional arguments: noise type and table size (number count).\n");
|
|
17
|
+
if(argc > 1)
|
|
18
|
+
{
|
|
19
|
+
const char *typename = argv[1];
|
|
20
|
+
for(i=0; i<sizeof(typenames)/sizeof(char*); ++i)
|
|
21
|
+
if(strcmp(typename, typenames[i]) == 0)
|
|
22
|
+
{
|
|
23
|
+
type = types[i];
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if(i == sizeof(typenames)/sizeof(char*))
|
|
28
|
+
{
|
|
29
|
+
error("Unknown noise type!");
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if(argc > 2)
|
|
34
|
+
{
|
|
35
|
+
count = (size_t) atol(argv[2]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
table = malloc(sizeof(float)*count);
|
|
39
|
+
if(table == NULL)
|
|
40
|
+
{
|
|
41
|
+
error("Cannot allocate memory for noise table!");
|
|
42
|
+
return -2;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
mpg123_noise(table, count, type);
|
|
46
|
+
for(i=0; i<count; ++i)
|
|
47
|
+
printf("%g\n", table[i]);
|
|
48
|
+
|
|
49
|
+
free(table);
|
|
50
|
+
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* Just printing out ID3 tags with plain data from libmpg123 and explicitly called conversion routine. */
|
|
2
|
+
|
|
3
|
+
#include "compat.h"
|
|
4
|
+
#include <mpg123.h>
|
|
5
|
+
#include "debug.h"
|
|
6
|
+
|
|
7
|
+
int test_whence(const char* path, int scan_before)
|
|
8
|
+
{
|
|
9
|
+
int err = MPG123_OK;
|
|
10
|
+
mpg123_handle* mh = NULL;
|
|
11
|
+
off_t length, pos;
|
|
12
|
+
|
|
13
|
+
mh = mpg123_new(NULL, &err );
|
|
14
|
+
if(mh == NULL) return -1;
|
|
15
|
+
|
|
16
|
+
err = mpg123_open(mh, path );
|
|
17
|
+
if(err != MPG123_OK) return -1;
|
|
18
|
+
|
|
19
|
+
if(scan_before) mpg123_scan(mh);
|
|
20
|
+
|
|
21
|
+
pos = mpg123_seek( mh, 0, SEEK_END);
|
|
22
|
+
if(pos < 0){ error1("seek failed: %s", mpg123_strerror(mh)); return -1; }
|
|
23
|
+
|
|
24
|
+
pos = mpg123_tell(mh);
|
|
25
|
+
length = mpg123_length(mh);
|
|
26
|
+
|
|
27
|
+
/* Later: Read samples and compare different whence values with identical seek positions. */
|
|
28
|
+
|
|
29
|
+
mpg123_close(mh);
|
|
30
|
+
mpg123_delete(mh);
|
|
31
|
+
|
|
32
|
+
fprintf(stdout, "length %"OFF_P" vs. pos %"OFF_P"\n", length, pos);
|
|
33
|
+
|
|
34
|
+
return (pos == length) ? 0 : -1;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void print_field(const char *name, mpg123_string *sb)
|
|
38
|
+
{
|
|
39
|
+
const unsigned char *sbp = (unsigned char*)sb->p;
|
|
40
|
+
enum mpg123_text_encoding enc;
|
|
41
|
+
mpg123_string printer;
|
|
42
|
+
mpg123_init_string(&printer);
|
|
43
|
+
printf("\n=== %s ===\n", name);
|
|
44
|
+
if(sb->fill == 0)
|
|
45
|
+
{
|
|
46
|
+
printf("Oh, empty. Totally.\n");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
enc = mpg123_enc_from_id3(sbp[0]);
|
|
51
|
+
|
|
52
|
+
printf("From encoding: %i (in ID3: %i)\n", enc, (int)sbp[0]) ;
|
|
53
|
+
if(mpg123_store_utf8(&printer, enc, sbp+1, sb->fill-1))
|
|
54
|
+
{
|
|
55
|
+
/* Not caring for multiple strings separated via null bytes here. */
|
|
56
|
+
printf("Value: %s\n", printer.p);
|
|
57
|
+
}
|
|
58
|
+
else error("Conversion failed!");
|
|
59
|
+
mpg123_free_string(&printer);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
int main(int argc, char **argv)
|
|
64
|
+
{
|
|
65
|
+
int err;
|
|
66
|
+
int ret = 0;
|
|
67
|
+
mpg123_handle *mh;
|
|
68
|
+
mpg123_id3v2 *id3;
|
|
69
|
+
|
|
70
|
+
if(argc < 2)
|
|
71
|
+
{
|
|
72
|
+
printf("Gimme a MPEG file name...\n");
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
mpg123_init();
|
|
77
|
+
mh = mpg123_new(NULL, &err);
|
|
78
|
+
if(err != MPG123_OK) goto badend;
|
|
79
|
+
|
|
80
|
+
mpg123_param(mh, MPG123_ADD_FLAGS, MPG123_PLAIN_ID3TEXT, 0.);
|
|
81
|
+
|
|
82
|
+
err = mpg123_open(mh, argv[1]);
|
|
83
|
+
if(err != MPG123_OK) goto badend;
|
|
84
|
+
|
|
85
|
+
err = mpg123_scan(mh);
|
|
86
|
+
if(err != MPG123_OK) goto badend;
|
|
87
|
+
|
|
88
|
+
err = mpg123_id3(mh, NULL, &id3);
|
|
89
|
+
if(err != MPG123_OK) goto badend;
|
|
90
|
+
|
|
91
|
+
if(id3 == NULL)
|
|
92
|
+
{
|
|
93
|
+
error("No ID3 data found.");
|
|
94
|
+
goto badend;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
print_field("artist", id3->artist);
|
|
98
|
+
print_field("title", id3->title);
|
|
99
|
+
print_field("album", id3->album);
|
|
100
|
+
print_field("comment", id3->comment);
|
|
101
|
+
|
|
102
|
+
goto end;
|
|
103
|
+
badend:
|
|
104
|
+
ret = -1;
|
|
105
|
+
end:
|
|
106
|
+
mpg123_delete(mh);
|
|
107
|
+
mpg123_exit();
|
|
108
|
+
return ret;
|
|
109
|
+
}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/*
|
|
2
|
+
seek-accuracy: Take some given mpeg file and validate that seeks are indeed accurate.
|
|
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
|
+
initially written by Thomas Orgis
|
|
7
|
+
|
|
8
|
+
arguments: decoder preframes testfile.mpeg
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#include <mpg123.h>
|
|
12
|
+
#include <compat.h>
|
|
13
|
+
|
|
14
|
+
#define SAMPLES 1000
|
|
15
|
+
/* Cannot use the const value as fixed array size:-( */
|
|
16
|
+
const size_t samples = SAMPLES;
|
|
17
|
+
|
|
18
|
+
/* Use getlopt.c in future? But heck, don't bloat. */
|
|
19
|
+
enum theargs
|
|
20
|
+
{
|
|
21
|
+
arg_binname = 0
|
|
22
|
+
,arg_decoder
|
|
23
|
+
,arg_preframes
|
|
24
|
+
,arg_file
|
|
25
|
+
,arg_total
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const char* filename;
|
|
29
|
+
int channels;
|
|
30
|
+
mpg123_handle *m;
|
|
31
|
+
size_t first_sample_errs = 0;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
int check_seeking(size_t *errs);
|
|
35
|
+
|
|
36
|
+
int main(int argc, char **argv)
|
|
37
|
+
{
|
|
38
|
+
int ret = 0;
|
|
39
|
+
size_t errs[2] = {0, 0};
|
|
40
|
+
size_t errs_ntom[2] = {0, 0};
|
|
41
|
+
|
|
42
|
+
if(argc < arg_total)
|
|
43
|
+
{
|
|
44
|
+
fprintf(stderr, "\nUsage: %s <decoder> <preframes> <mpeg audio file>\n\n", argv[0]);
|
|
45
|
+
return -1;
|
|
46
|
+
}
|
|
47
|
+
mpg123_init();
|
|
48
|
+
m = mpg123_new(argv[arg_decoder], NULL);
|
|
49
|
+
mpg123_param(m, MPG123_RESYNC_LIMIT, -1, 0);
|
|
50
|
+
|
|
51
|
+
if(mpg123_param(m, MPG123_PREFRAMES, atol(argv[arg_preframes]), 0) == MPG123_OK)
|
|
52
|
+
printf("Testing library with preframes set to %li\n", atol(argv[arg_preframes]));
|
|
53
|
+
|
|
54
|
+
filename = argv[arg_file];
|
|
55
|
+
ret = check_seeking(errs);
|
|
56
|
+
|
|
57
|
+
if(ret == 0)
|
|
58
|
+
{
|
|
59
|
+
printf("Now with NtoM resampling to 33333 Hz!");
|
|
60
|
+
mpg123_param(m, MPG123_FORCE_RATE, 33333, 0);
|
|
61
|
+
ret = check_seeking(errs_ntom);
|
|
62
|
+
}
|
|
63
|
+
else fprintf(stderr, "Some failure occured! Unable to test properly!");
|
|
64
|
+
|
|
65
|
+
printf("\n");
|
|
66
|
+
printf("1to1 indexed seek errors: %"SIZE_P" / %"SIZE_P"\n", (size_p)errs[0],(size_p)samples);
|
|
67
|
+
printf("1to1 non-indexed seek errors: %"SIZE_P" / %"SIZE_P"\n", (size_p)errs[1],(size_p)samples);
|
|
68
|
+
printf("NtoM indexed seek errors: %"SIZE_P" / %"SIZE_P"\n", (size_p)errs_ntom[0],(size_p)samples);
|
|
69
|
+
printf("NtoM non-indexed seek errors: %"SIZE_P" / %"SIZE_P"\n", (size_p)errs_ntom[1],(size_p)samples);
|
|
70
|
+
printf("Errors in getting first sample again: %"SIZE_P"\n", first_sample_errs);
|
|
71
|
+
printf("\n");
|
|
72
|
+
|
|
73
|
+
if(ret == 0)
|
|
74
|
+
{
|
|
75
|
+
|
|
76
|
+
if(first_sample_errs == 0 && errs[0] == 0 && errs[1] == 0 && errs_ntom[0] == 0 && errs_ntom[1] == 0)
|
|
77
|
+
{
|
|
78
|
+
printf("Congratulations, all seeks were accurate!\n");
|
|
79
|
+
printf("But be warned: Not _all_ sample offsets have been tested. This result just means that the basic mechanism of sample-accurate seeking seems to work.\n");
|
|
80
|
+
}
|
|
81
|
+
else
|
|
82
|
+
{
|
|
83
|
+
printf("There have been some errors. For layer 3 files, this may be due to too low MPG123_PREFRAMES.\n");
|
|
84
|
+
ret = -1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
else fprintf(stderr, "Some bad failure during checking!\n");
|
|
89
|
+
|
|
90
|
+
mpg123_delete(m);
|
|
91
|
+
mpg123_exit();
|
|
92
|
+
|
|
93
|
+
return ret;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
int open_file()
|
|
97
|
+
{
|
|
98
|
+
if( mpg123_open(m, filename) == MPG123_OK
|
|
99
|
+
&&
|
|
100
|
+
mpg123_getformat(m, NULL, &channels, NULL) == MPG123_OK )
|
|
101
|
+
{
|
|
102
|
+
printf("Channels: %i\n", channels);
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
{
|
|
107
|
+
printf("Opening file failed: %s\n", mpg123_strerror(m));
|
|
108
|
+
return -1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Operation:
|
|
113
|
+
Read through the whole file and remember selected samples and their position.
|
|
114
|
+
Then, seek to the positions selectively and compare.
|
|
115
|
+
Second mode: Check if this is identical to fresh decoding and seek (without frame index table)... less important now, focusing on the first one.
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
struct seeko
|
|
119
|
+
{
|
|
120
|
+
off_t position[SAMPLES];
|
|
121
|
+
short left[SAMPLES];
|
|
122
|
+
short right[SAMPLES];
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/* select some positions to check seek accuracy on */
|
|
126
|
+
void fix_positions(struct seeko *so, off_t length)
|
|
127
|
+
{
|
|
128
|
+
off_t step = (length-1)/(samples-1);
|
|
129
|
+
size_t i;
|
|
130
|
+
/* simple fixed stepping, in order (one could shuffle this) */
|
|
131
|
+
for(i=0; i<samples-1; ++i)
|
|
132
|
+
so->position[i] = i*step;
|
|
133
|
+
|
|
134
|
+
/* plus the last one! */
|
|
135
|
+
so->position[samples-1] = length-1;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
int collect(struct seeko *so)
|
|
139
|
+
{
|
|
140
|
+
off_t pos_count = 0;
|
|
141
|
+
off_t length;
|
|
142
|
+
int err = MPG123_OK;
|
|
143
|
+
size_t posi = 0;
|
|
144
|
+
mpg123_scan(m);
|
|
145
|
+
length = mpg123_length(m);
|
|
146
|
+
printf("Estimated length: %"OFF_P"\n", (off_p)length);
|
|
147
|
+
/* Compute the interesting positions */
|
|
148
|
+
fix_positions(so, length);
|
|
149
|
+
/*
|
|
150
|
+
Default format is always 16bit int, rate does not matter.
|
|
151
|
+
Let's just get the channel count and not bother.
|
|
152
|
+
*/
|
|
153
|
+
while(err == MPG123_OK)
|
|
154
|
+
{
|
|
155
|
+
short buff[1024]; /* choosing a non-divider of mpeg frame size on purpose */
|
|
156
|
+
size_t got = 0;
|
|
157
|
+
off_t buffsamples;
|
|
158
|
+
err = mpg123_read(m, (unsigned char*)buff, 1024*sizeof(short), &got);
|
|
159
|
+
buffsamples = got/(channels*sizeof(short));
|
|
160
|
+
while(so->position[posi] < pos_count+buffsamples)
|
|
161
|
+
{
|
|
162
|
+
size_t i = (so->position[posi]-pos_count)*channels;
|
|
163
|
+
printf("got sample %"SIZE_P" (%"OFF_P")\n", (size_p)posi, (off_p)so->position[posi]);
|
|
164
|
+
so->left[posi] = buff[i];
|
|
165
|
+
if(channels == 2)
|
|
166
|
+
so->right[posi] = buff[i+1];
|
|
167
|
+
|
|
168
|
+
if(++posi >= samples) break;
|
|
169
|
+
}
|
|
170
|
+
if(posi >= samples) break;
|
|
171
|
+
|
|
172
|
+
pos_count += buffsamples;
|
|
173
|
+
}
|
|
174
|
+
if(posi < samples && (err != MPG123_DONE && err != MPG123_OK))
|
|
175
|
+
{
|
|
176
|
+
printf("An error occured (not done)?: %s\n", mpg123_strerror(m));
|
|
177
|
+
return -1;
|
|
178
|
+
}
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* We allow some minimal difference ... for subtle floating point effects. */
|
|
183
|
+
int same(short a, short b)
|
|
184
|
+
{
|
|
185
|
+
return (abs(a-b) <= 2);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
int check_sample(struct seeko *so, size_t i)
|
|
189
|
+
{
|
|
190
|
+
short buf[2]; /* at max one left and right sample */
|
|
191
|
+
size_t got = 0;
|
|
192
|
+
|
|
193
|
+
if(mpg123_seek(m, so->position[i], SEEK_SET) != so->position[i])
|
|
194
|
+
{
|
|
195
|
+
printf("Error seeking to %"OFF_P": %s\n", (off_p)so->position[i], mpg123_strerror(m));
|
|
196
|
+
return -1;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if( mpg123_read(m, (unsigned char*)buf, channels*sizeof(short), &got) != MPG123_OK
|
|
200
|
+
||
|
|
201
|
+
got/sizeof(short) != channels )
|
|
202
|
+
{
|
|
203
|
+
printf("Error occured on reading sample %"SIZE_P"! (%s)\n", (size_p)i, mpg123_strerror(m));
|
|
204
|
+
return -1;
|
|
205
|
+
}
|
|
206
|
+
if(same(buf[0], so->left[i]) && (channels == 1 || same(buf[1], so->right[i])))
|
|
207
|
+
{
|
|
208
|
+
printf("sample %"SIZE_P" PASS\n", (size_p)i);
|
|
209
|
+
}
|
|
210
|
+
else
|
|
211
|
+
{
|
|
212
|
+
if(channels == 1) printf("sample %"SIZE_P" FAIL (%i != %i)\n", (size_p)i, buf[0], so->left[i]);
|
|
213
|
+
else printf("sample %"SIZE_P" FAIL (%i != %i || %i != %i)\n", (size_p)i, buf[0], so->left[i], buf[1], so->right[i]);
|
|
214
|
+
return -1;
|
|
215
|
+
}
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
size_t check_positions(struct seeko *so)
|
|
220
|
+
{
|
|
221
|
+
size_t i;
|
|
222
|
+
size_t errs = 0;
|
|
223
|
+
printf("Seeking and comparing...\n");
|
|
224
|
+
for(i=0; i<samples; ++i)
|
|
225
|
+
{
|
|
226
|
+
if(check_sample(so, i) != 0)
|
|
227
|
+
++errs;
|
|
228
|
+
}
|
|
229
|
+
printf("Check the first one again, seeking back from the end.\n");
|
|
230
|
+
if(check_sample(so, 0) != 0)
|
|
231
|
+
++first_sample_errs;
|
|
232
|
+
|
|
233
|
+
return errs;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
int check_seeking(size_t *errs)
|
|
237
|
+
{
|
|
238
|
+
struct seeko so;
|
|
239
|
+
int ret = 0;
|
|
240
|
+
|
|
241
|
+
/* First opening. */
|
|
242
|
+
if(open_file() != 0) return -1;
|
|
243
|
+
|
|
244
|
+
printf("Collecting samples...\n");
|
|
245
|
+
ret = collect(&so);
|
|
246
|
+
if(ret != 0) return ret;
|
|
247
|
+
|
|
248
|
+
errs[0] = check_positions(&so);
|
|
249
|
+
|
|
250
|
+
printf("With fresh opening (empty seek index):\n");
|
|
251
|
+
if(open_file() != 0) return -1;
|
|
252
|
+
|
|
253
|
+
errs[1] = check_positions(&so);
|
|
254
|
+
|
|
255
|
+
printf("Another fresh Opening to see if first sample works:\n");
|
|
256
|
+
if(open_file() != 0) return -1;
|
|
257
|
+
if(check_sample(&so, 0) != 0)
|
|
258
|
+
++first_sample_errs;
|
|
259
|
+
|
|
260
|
+
return ret;
|
|
261
|
+
}
|