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/sfifo.h
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/*
|
|
2
|
+
SFIFO 1.3 Simple portable lock-free FIFO
|
|
3
|
+
|
|
4
|
+
(c) 2000-2002, David Olofson - free software under the terms of the LGPL 2.1
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Platform support:
|
|
10
|
+
* gcc / Linux / x86: Works
|
|
11
|
+
* gcc / Linux / x86 kernel: Works
|
|
12
|
+
* gcc / FreeBSD / x86: Works
|
|
13
|
+
* gcc / NetBSD / x86: Works
|
|
14
|
+
* gcc / Mac OS X / PPC: Works
|
|
15
|
+
* gcc / Win32 / x86: Works
|
|
16
|
+
* Borland C++ / DOS / x86RM: Works
|
|
17
|
+
* Borland C++ / Win32 / x86PM16: Untested
|
|
18
|
+
* ? / Various Un*ces / ?: Untested
|
|
19
|
+
* ? / Mac OS / PPC: Untested
|
|
20
|
+
* gcc / BeOS / x86: Untested
|
|
21
|
+
* gcc / BeOS / PPC: Untested
|
|
22
|
+
* ? / ? / Alpha: Untested
|
|
23
|
+
*
|
|
24
|
+
* 1.2: Max buffer size halved, to avoid problems with
|
|
25
|
+
* the sign bit...
|
|
26
|
+
*
|
|
27
|
+
* 1.3: Critical buffer allocation bug fixed! For certain
|
|
28
|
+
* requested buffer sizes, older version would
|
|
29
|
+
* allocate a buffer of insufficient size, which
|
|
30
|
+
* would result in memory thrashing. (Amazing that
|
|
31
|
+
* I've manage to use this to the extent I have
|
|
32
|
+
* without running into this... *heh*)
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
#ifndef _SFIFO_H_
|
|
36
|
+
#define _SFIFO_H_
|
|
37
|
+
|
|
38
|
+
#ifdef __cplusplus
|
|
39
|
+
extern "C" {
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
#include <errno.h>
|
|
43
|
+
|
|
44
|
+
/* Defining SFIFO_STATIC and then including the sfifo.c will result in local code. */
|
|
45
|
+
#ifdef SFIFO_STATIC
|
|
46
|
+
#define SFIFO_SCOPE static
|
|
47
|
+
#else
|
|
48
|
+
#define SFIFO_SCOPE
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
/*------------------------------------------------
|
|
52
|
+
"Private" stuff
|
|
53
|
+
------------------------------------------------*/
|
|
54
|
+
/*
|
|
55
|
+
* Porting note:
|
|
56
|
+
* Reads and writes of a variable of this type in memory
|
|
57
|
+
* must be *atomic*! 'int' is *not* atomic on all platforms.
|
|
58
|
+
* A safe type should be used, and sfifo should limit the
|
|
59
|
+
* maximum buffer size accordingly.
|
|
60
|
+
*/
|
|
61
|
+
typedef int sfifo_atomic_t;
|
|
62
|
+
#ifdef __TURBOC__
|
|
63
|
+
# define SFIFO_MAX_BUFFER_SIZE 0x7fff
|
|
64
|
+
#else /* Kludge: Assume 32 bit platform */
|
|
65
|
+
# define SFIFO_MAX_BUFFER_SIZE 0x7fffffff
|
|
66
|
+
#endif
|
|
67
|
+
|
|
68
|
+
typedef struct sfifo_t
|
|
69
|
+
{
|
|
70
|
+
char *buffer;
|
|
71
|
+
int size; /* Number of bytes */
|
|
72
|
+
sfifo_atomic_t readpos; /* Read position */
|
|
73
|
+
sfifo_atomic_t writepos; /* Write position */
|
|
74
|
+
} sfifo_t;
|
|
75
|
+
|
|
76
|
+
#define SFIFO_SIZEMASK(x) ((x)->size - 1)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/*------------------------------------------------
|
|
80
|
+
API
|
|
81
|
+
------------------------------------------------*/
|
|
82
|
+
SFIFO_SCOPE int sfifo_init(sfifo_t *f, int size);
|
|
83
|
+
SFIFO_SCOPE void sfifo_close(sfifo_t *f);
|
|
84
|
+
SFIFO_SCOPE void sfifo_flush(sfifo_t *f);
|
|
85
|
+
SFIFO_SCOPE int sfifo_write(sfifo_t *f, const void *buf, int len);
|
|
86
|
+
SFIFO_SCOPE int sfifo_read(sfifo_t *f, void *buf, int len);
|
|
87
|
+
#define sfifo_used(x) (((x)->writepos - (x)->readpos) & SFIFO_SIZEMASK(x))
|
|
88
|
+
#define sfifo_space(x) ((x)->size - 1 - sfifo_used(x))
|
|
89
|
+
#define sfifo_size(x) ((x)->size - 1)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
#ifdef __cplusplus
|
|
93
|
+
};
|
|
94
|
+
#endif
|
|
95
|
+
#endif
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/*
|
|
2
|
+
streamdump: Dumping a copy of the input data.
|
|
3
|
+
|
|
4
|
+
copyright 2010 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
|
+
#include "streamdump.h"
|
|
10
|
+
#include <fcntl.h>
|
|
11
|
+
#include <errno.h>
|
|
12
|
+
#include "debug.h"
|
|
13
|
+
|
|
14
|
+
/* Stream dump descriptor. */
|
|
15
|
+
static int dump_fd = -1;
|
|
16
|
+
|
|
17
|
+
/* Read data from input, write copy to dump file. */
|
|
18
|
+
static ssize_t dump_read(int fd, void *buf, size_t count)
|
|
19
|
+
{
|
|
20
|
+
ssize_t ret = read(fd, buf, count);
|
|
21
|
+
if(ret > 0 && dump_fd > -1)
|
|
22
|
+
{
|
|
23
|
+
write(dump_fd, buf, ret);
|
|
24
|
+
}
|
|
25
|
+
return ret;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Also mirror seeks, to prevent messed up dumps of seekable streams. */
|
|
29
|
+
static off_t dump_seek(int fd, off_t pos, int whence)
|
|
30
|
+
{
|
|
31
|
+
off_t ret = lseek(fd, pos, whence);
|
|
32
|
+
if(ret >= 0 && dump_fd > -1)
|
|
33
|
+
{
|
|
34
|
+
lseek(dump_fd, pos, whence);
|
|
35
|
+
}
|
|
36
|
+
return ret;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* External API... open and close. */
|
|
40
|
+
int dump_open(mpg123_handle *mh)
|
|
41
|
+
{
|
|
42
|
+
int ret;
|
|
43
|
+
|
|
44
|
+
if(param.streamdump == NULL) return 0;
|
|
45
|
+
|
|
46
|
+
if(!param.quiet) fprintf(stderr, "Note: Dumping stream to %s\n", param.streamdump);
|
|
47
|
+
|
|
48
|
+
dump_fd = compat_open(param.streamdump, O_CREAT|O_TRUNC|O_RDWR);
|
|
49
|
+
if(dump_fd < 0)
|
|
50
|
+
{
|
|
51
|
+
error1("Failed to open dump file: %s\n", strerror(errno));
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#ifdef WIN32
|
|
56
|
+
_setmode(dump_fd, _O_BINARY);
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
ret = mpg123_replace_reader(mh, dump_read, dump_seek);
|
|
60
|
+
if(ret != MPG123_OK)
|
|
61
|
+
{
|
|
62
|
+
error1("Unable to replace reader for stream dump: %s\n", mpg123_strerror(mh));
|
|
63
|
+
dump_close();
|
|
64
|
+
return -1;
|
|
65
|
+
}
|
|
66
|
+
else return 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void dump_close(void)
|
|
70
|
+
{
|
|
71
|
+
if(dump_fd > -1) compat_close(dump_fd);
|
|
72
|
+
|
|
73
|
+
dump_fd = -1;
|
|
74
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*
|
|
2
|
+
streamdump: Dumping a copy of the input data.
|
|
3
|
+
|
|
4
|
+
copyright 2010 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 STREAMDUMP_H
|
|
10
|
+
#define STREAMDUMP_H
|
|
11
|
+
|
|
12
|
+
#include "mpg123app.h"
|
|
13
|
+
|
|
14
|
+
/* Open dump stream, if requested, and replace readers.
|
|
15
|
+
Return value is 0 for no error, -1 when bad. */
|
|
16
|
+
int dump_open(mpg123_handle *mh);
|
|
17
|
+
/* Just close... */
|
|
18
|
+
void dump_close(void);
|
|
19
|
+
|
|
20
|
+
#endif
|
data/mpg123/src/term.c
ADDED
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/*
|
|
2
|
+
term: terminal control
|
|
3
|
+
|
|
4
|
+
copyright ?-2008 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
|
+
#include "mpg123app.h"
|
|
10
|
+
|
|
11
|
+
#ifdef HAVE_TERMIOS
|
|
12
|
+
|
|
13
|
+
#include <termios.h>
|
|
14
|
+
#include <ctype.h>
|
|
15
|
+
|
|
16
|
+
#include "buffer.h"
|
|
17
|
+
#include "term.h"
|
|
18
|
+
#include "common.h"
|
|
19
|
+
#include "playlist.h"
|
|
20
|
+
#include "metaprint.h"
|
|
21
|
+
#include "debug.h"
|
|
22
|
+
|
|
23
|
+
extern int buffer_pid;
|
|
24
|
+
extern audio_output_t *ao;
|
|
25
|
+
|
|
26
|
+
static int term_enable = 0;
|
|
27
|
+
static struct termios old_tio;
|
|
28
|
+
int seeking = FALSE;
|
|
29
|
+
|
|
30
|
+
/* Buffered key from a signal or whatnot.
|
|
31
|
+
We ignore the null character... */
|
|
32
|
+
static char prekey = 0;
|
|
33
|
+
|
|
34
|
+
/* Hm, next step would be some system in this, plus configurability...
|
|
35
|
+
Two keys for everything? It's just stop/pause for now... */
|
|
36
|
+
struct keydef { const char key; const char key2; const char* desc; };
|
|
37
|
+
struct keydef term_help[] =
|
|
38
|
+
{
|
|
39
|
+
{ MPG123_STOP_KEY, ' ', "interrupt/restart playback (i.e. '(un)pause')" }
|
|
40
|
+
,{ MPG123_NEXT_KEY, 0, "next track" }
|
|
41
|
+
,{ MPG123_PREV_KEY, 0, "previous track" }
|
|
42
|
+
,{ MPG123_BACK_KEY, 0, "back to beginning of track" }
|
|
43
|
+
,{ MPG123_PAUSE_KEY, 0, "loop around current position (don't combine with output buffer)" }
|
|
44
|
+
,{ MPG123_FORWARD_KEY, 0, "forward" }
|
|
45
|
+
,{ MPG123_REWIND_KEY, 0, "rewind" }
|
|
46
|
+
,{ MPG123_FAST_FORWARD_KEY, 0, "fast forward" }
|
|
47
|
+
,{ MPG123_FAST_REWIND_KEY, 0, "fast rewind" }
|
|
48
|
+
,{ MPG123_FINE_FORWARD_KEY, 0, "fine forward" }
|
|
49
|
+
,{ MPG123_FINE_REWIND_KEY, 0, "fine rewind" }
|
|
50
|
+
,{ MPG123_VOL_UP_KEY, 0, "volume up" }
|
|
51
|
+
,{ MPG123_VOL_DOWN_KEY, 0, "volume down" }
|
|
52
|
+
,{ MPG123_RVA_KEY, 0, "RVA switch" }
|
|
53
|
+
,{ MPG123_VERBOSE_KEY, 0, "verbose switch" }
|
|
54
|
+
,{ MPG123_PLAYLIST_KEY, 0, "list current playlist, indicating current track there" }
|
|
55
|
+
,{ MPG123_TAG_KEY, 0, "display tag info (again)" }
|
|
56
|
+
,{ MPG123_MPEG_KEY, 0, "print MPEG header info (again)" }
|
|
57
|
+
,{ MPG123_HELP_KEY, 0, "this help" }
|
|
58
|
+
,{ MPG123_QUIT_KEY, 0, "quit" }
|
|
59
|
+
,{ MPG123_PITCH_UP_KEY, MPG123_PITCH_BUP_KEY, "pitch up (small step, big step)" }
|
|
60
|
+
,{ MPG123_PITCH_DOWN_KEY, MPG123_PITCH_BDOWN_KEY, "pitch down (small step, big step)" }
|
|
61
|
+
,{ MPG123_PITCH_ZERO_KEY, 0, "reset pitch to zero" }
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
void term_sigcont(int sig);
|
|
65
|
+
static void term_sigusr(int sig);
|
|
66
|
+
|
|
67
|
+
/* This must call only functions safe inside a signal handler. */
|
|
68
|
+
int term_setup(struct termios *pattern)
|
|
69
|
+
{
|
|
70
|
+
struct termios tio = *pattern;
|
|
71
|
+
|
|
72
|
+
/* One might want to use sigaction instead. */
|
|
73
|
+
signal(SIGCONT, term_sigcont);
|
|
74
|
+
signal(SIGUSR1, term_sigusr);
|
|
75
|
+
signal(SIGUSR2, term_sigusr);
|
|
76
|
+
|
|
77
|
+
tio.c_lflag &= ~(ICANON|ECHO);
|
|
78
|
+
tio.c_cc[VMIN] = 1;
|
|
79
|
+
tio.c_cc[VTIME] = 0;
|
|
80
|
+
return tcsetattr(0,TCSANOW,&tio);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
void term_sigcont(int sig)
|
|
84
|
+
{
|
|
85
|
+
term_enable = 0;
|
|
86
|
+
|
|
87
|
+
if (term_setup(&old_tio) < 0)
|
|
88
|
+
{
|
|
89
|
+
fprintf(stderr,"Can't set terminal attributes\n");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
term_enable = 1;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
static void term_sigusr(int sig)
|
|
97
|
+
{
|
|
98
|
+
switch(sig)
|
|
99
|
+
{
|
|
100
|
+
case SIGUSR1: prekey=*param.term_usr1; break;
|
|
101
|
+
case SIGUSR2: prekey=*param.term_usr2; break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* initialze terminal */
|
|
106
|
+
void term_init(void)
|
|
107
|
+
{
|
|
108
|
+
debug("term_init");
|
|
109
|
+
|
|
110
|
+
term_enable = 0;
|
|
111
|
+
|
|
112
|
+
if(tcgetattr(0,&old_tio) < 0)
|
|
113
|
+
{
|
|
114
|
+
fprintf(stderr,"Can't get terminal attributes\n");
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if(term_setup(&old_tio) < 0)
|
|
118
|
+
{
|
|
119
|
+
fprintf(stderr,"Can't set terminal attributes\n");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
term_enable = 1;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
void term_hint(void)
|
|
127
|
+
{
|
|
128
|
+
fprintf(stderr, "\nTerminal control enabled, press 'h' for listing of keys and functions.\n\n");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static void term_handle_input(mpg123_handle *, audio_output_t *, int);
|
|
132
|
+
|
|
133
|
+
static int stopped = 0;
|
|
134
|
+
static int paused = 0;
|
|
135
|
+
static int pause_cycle;
|
|
136
|
+
|
|
137
|
+
static int print_index(mpg123_handle *mh)
|
|
138
|
+
{
|
|
139
|
+
int err;
|
|
140
|
+
size_t c, fill;
|
|
141
|
+
off_t *index;
|
|
142
|
+
off_t step;
|
|
143
|
+
err = mpg123_index(mh, &index, &step, &fill);
|
|
144
|
+
if(err == MPG123_ERR)
|
|
145
|
+
{
|
|
146
|
+
fprintf(stderr, "Error accessing frame index: %s\n", mpg123_strerror(mh));
|
|
147
|
+
return err;
|
|
148
|
+
}
|
|
149
|
+
for(c=0; c < fill;++c)
|
|
150
|
+
fprintf(stderr, "[%lu] %lu: %li (+%li)\n",
|
|
151
|
+
(unsigned long) c,
|
|
152
|
+
(unsigned long) (c*step),
|
|
153
|
+
(long) index[c],
|
|
154
|
+
(long) (c ? index[c]-index[c-1] : 0));
|
|
155
|
+
return MPG123_OK;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static off_t offset = 0;
|
|
159
|
+
|
|
160
|
+
/* Go back to the start for the cyclic pausing. */
|
|
161
|
+
void pause_recycle(mpg123_handle *fr)
|
|
162
|
+
{
|
|
163
|
+
/* Take care not to go backwards in time in steps of 1 frame
|
|
164
|
+
That is what the +1 is for. */
|
|
165
|
+
pause_cycle=(int)(LOOP_CYCLES/mpg123_tpf(fr));
|
|
166
|
+
offset-=pause_cycle;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* Done with pausing, no offset anymore. Just continuous playback from now. */
|
|
170
|
+
void pause_uncycle(void)
|
|
171
|
+
{
|
|
172
|
+
offset += pause_cycle;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
off_t term_control(mpg123_handle *fr, audio_output_t *ao)
|
|
176
|
+
{
|
|
177
|
+
offset = 0;
|
|
178
|
+
debug1("control for frame: %li", (long)mpg123_tellframe(fr));
|
|
179
|
+
if(!term_enable) return 0;
|
|
180
|
+
|
|
181
|
+
if(paused)
|
|
182
|
+
{
|
|
183
|
+
/* pause_cycle counts the remaining frames _after_ this one, thus <0, not ==0 . */
|
|
184
|
+
if(--pause_cycle < 0)
|
|
185
|
+
{
|
|
186
|
+
pause_recycle(fr);
|
|
187
|
+
if(param.usebuffer)
|
|
188
|
+
{
|
|
189
|
+
while(paused && xfermem_get_usedspace(buffermem))
|
|
190
|
+
{
|
|
191
|
+
buffer_ignore_lowmem();
|
|
192
|
+
term_handle_input(fr, ao, TRUE);
|
|
193
|
+
}
|
|
194
|
+
/* Undo the cycling offset if we are done with cycling. */
|
|
195
|
+
if(!paused) pause_uncycle();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
do
|
|
201
|
+
{
|
|
202
|
+
term_handle_input(fr, ao, stopped|seeking);
|
|
203
|
+
if((offset < 0) && (-offset > framenum)) offset = - framenum;
|
|
204
|
+
if(param.verbose && offset != 0)
|
|
205
|
+
print_stat(fr,offset,0);
|
|
206
|
+
} while (stopped);
|
|
207
|
+
|
|
208
|
+
/* Make the seeking experience with buffer less annoying.
|
|
209
|
+
No sound during seek, but at least it is possible to go backwards. */
|
|
210
|
+
if(offset)
|
|
211
|
+
{
|
|
212
|
+
if((offset = mpg123_seek_frame(fr, offset, SEEK_CUR)) >= 0)
|
|
213
|
+
debug1("seeked to %li", (long)offset);
|
|
214
|
+
else error1("seek failed: %s!", mpg123_strerror(fr));
|
|
215
|
+
/* Buffer resync already happened on un-stop? */
|
|
216
|
+
/* if(param.usebuffer) buffer_resync();*/
|
|
217
|
+
}
|
|
218
|
+
return 0;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* Stop playback while seeking if buffer is involved. */
|
|
222
|
+
static void seekmode(void)
|
|
223
|
+
{
|
|
224
|
+
if(param.usebuffer && !stopped)
|
|
225
|
+
{
|
|
226
|
+
stopped = TRUE;
|
|
227
|
+
buffer_stop();
|
|
228
|
+
fprintf(stderr, "%s", MPG123_STOPPED_STRING);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* Get the next pressed key, if any.
|
|
233
|
+
Returns 1 when there is a key, 0 if not. */
|
|
234
|
+
static int get_key(int do_delay, char *val)
|
|
235
|
+
{
|
|
236
|
+
fd_set r;
|
|
237
|
+
struct timeval t;
|
|
238
|
+
|
|
239
|
+
/* Shortcut: If some other means sent a key, use it. */
|
|
240
|
+
if(prekey)
|
|
241
|
+
{
|
|
242
|
+
debug1("Got prekey: %c\n", prekey);
|
|
243
|
+
*val = prekey;
|
|
244
|
+
prekey = 0;
|
|
245
|
+
return 1;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
t.tv_sec=0;
|
|
249
|
+
t.tv_usec=(do_delay) ? 10*1000 : 0;
|
|
250
|
+
|
|
251
|
+
FD_ZERO(&r);
|
|
252
|
+
FD_SET(0,&r);
|
|
253
|
+
if(select(1,&r,NULL,NULL,&t) > 0 && FD_ISSET(0,&r))
|
|
254
|
+
{
|
|
255
|
+
if(read(0,val,1) <= 0)
|
|
256
|
+
return 0; /* Well, we couldn't read the key, so there is none. */
|
|
257
|
+
else
|
|
258
|
+
return 1;
|
|
259
|
+
}
|
|
260
|
+
else return 0;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
static void term_handle_key(mpg123_handle *fr, audio_output_t *ao, char val)
|
|
264
|
+
{
|
|
265
|
+
switch(tolower(val))
|
|
266
|
+
{
|
|
267
|
+
case MPG123_BACK_KEY:
|
|
268
|
+
if(!param.usebuffer) ao->flush(ao);
|
|
269
|
+
else buffer_resync();
|
|
270
|
+
if(paused) pause_cycle=(int)(LOOP_CYCLES/mpg123_tpf(fr));
|
|
271
|
+
|
|
272
|
+
if(mpg123_seek_frame(fr, 0, SEEK_SET) < 0)
|
|
273
|
+
error1("Seek to begin failed: %s", mpg123_strerror(fr));
|
|
274
|
+
|
|
275
|
+
framenum=0;
|
|
276
|
+
break;
|
|
277
|
+
case MPG123_NEXT_KEY:
|
|
278
|
+
if(!param.usebuffer) ao->flush(ao);
|
|
279
|
+
else buffer_resync(); /* was: plain_buffer_resync */
|
|
280
|
+
next_track();
|
|
281
|
+
break;
|
|
282
|
+
case MPG123_QUIT_KEY:
|
|
283
|
+
debug("QUIT");
|
|
284
|
+
if(stopped)
|
|
285
|
+
{
|
|
286
|
+
stopped = 0;
|
|
287
|
+
if(param.usebuffer)
|
|
288
|
+
{
|
|
289
|
+
buffer_resync();
|
|
290
|
+
buffer_start();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
set_intflag();
|
|
294
|
+
offset = 0;
|
|
295
|
+
break;
|
|
296
|
+
case MPG123_PAUSE_KEY:
|
|
297
|
+
paused=1-paused;
|
|
298
|
+
if(paused) {
|
|
299
|
+
/* Not really sure if that is what is wanted
|
|
300
|
+
This jumps in audio output, but has direct reaction to pausing loop. */
|
|
301
|
+
if(param.usebuffer) buffer_resync();
|
|
302
|
+
|
|
303
|
+
pause_recycle(fr);
|
|
304
|
+
}
|
|
305
|
+
if(stopped)
|
|
306
|
+
{
|
|
307
|
+
stopped=0;
|
|
308
|
+
if(param.usebuffer) buffer_start();
|
|
309
|
+
}
|
|
310
|
+
fprintf(stderr, "%s", (paused) ? MPG123_PAUSED_STRING : MPG123_EMPTY_STRING);
|
|
311
|
+
break;
|
|
312
|
+
case MPG123_STOP_KEY:
|
|
313
|
+
case ' ':
|
|
314
|
+
/* when seeking while stopped and then resuming, I want to prevent the chirp from the past */
|
|
315
|
+
if(!param.usebuffer) ao->flush(ao);
|
|
316
|
+
stopped=1-stopped;
|
|
317
|
+
if(paused) {
|
|
318
|
+
paused=0;
|
|
319
|
+
offset -= pause_cycle;
|
|
320
|
+
}
|
|
321
|
+
if(param.usebuffer)
|
|
322
|
+
{
|
|
323
|
+
if(stopped) buffer_stop();
|
|
324
|
+
else
|
|
325
|
+
{
|
|
326
|
+
/* When we stopped buffer for seeking, we must resync. */
|
|
327
|
+
if(offset) buffer_resync();
|
|
328
|
+
|
|
329
|
+
buffer_start();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
fprintf(stderr, "%s", (stopped) ? MPG123_STOPPED_STRING : MPG123_EMPTY_STRING);
|
|
333
|
+
break;
|
|
334
|
+
case MPG123_FINE_REWIND_KEY:
|
|
335
|
+
if(param.usebuffer) seekmode();
|
|
336
|
+
offset--;
|
|
337
|
+
break;
|
|
338
|
+
case MPG123_FINE_FORWARD_KEY:
|
|
339
|
+
seekmode();
|
|
340
|
+
offset++;
|
|
341
|
+
break;
|
|
342
|
+
case MPG123_REWIND_KEY:
|
|
343
|
+
seekmode();
|
|
344
|
+
offset-=10;
|
|
345
|
+
break;
|
|
346
|
+
case MPG123_FORWARD_KEY:
|
|
347
|
+
seekmode();
|
|
348
|
+
offset+=10;
|
|
349
|
+
break;
|
|
350
|
+
case MPG123_FAST_REWIND_KEY:
|
|
351
|
+
seekmode();
|
|
352
|
+
offset-=50;
|
|
353
|
+
break;
|
|
354
|
+
case MPG123_FAST_FORWARD_KEY:
|
|
355
|
+
seekmode();
|
|
356
|
+
offset+=50;
|
|
357
|
+
break;
|
|
358
|
+
case MPG123_VOL_UP_KEY:
|
|
359
|
+
mpg123_volume_change(fr, 0.02);
|
|
360
|
+
break;
|
|
361
|
+
case MPG123_VOL_DOWN_KEY:
|
|
362
|
+
mpg123_volume_change(fr, -0.02);
|
|
363
|
+
break;
|
|
364
|
+
case MPG123_PITCH_UP_KEY:
|
|
365
|
+
case MPG123_PITCH_BUP_KEY:
|
|
366
|
+
case MPG123_PITCH_DOWN_KEY:
|
|
367
|
+
case MPG123_PITCH_BDOWN_KEY:
|
|
368
|
+
case MPG123_PITCH_ZERO_KEY:
|
|
369
|
+
{
|
|
370
|
+
double new_pitch = param.pitch;
|
|
371
|
+
switch(val) /* Not tolower here! */
|
|
372
|
+
{
|
|
373
|
+
case MPG123_PITCH_UP_KEY: new_pitch += MPG123_PITCH_VAL; break;
|
|
374
|
+
case MPG123_PITCH_BUP_KEY: new_pitch += MPG123_PITCH_BVAL; break;
|
|
375
|
+
case MPG123_PITCH_DOWN_KEY: new_pitch -= MPG123_PITCH_VAL; break;
|
|
376
|
+
case MPG123_PITCH_BDOWN_KEY: new_pitch -= MPG123_PITCH_BVAL; break;
|
|
377
|
+
case MPG123_PITCH_ZERO_KEY: new_pitch = 0.0; break;
|
|
378
|
+
}
|
|
379
|
+
set_pitch(fr, ao, new_pitch);
|
|
380
|
+
fprintf(stderr, "New pitch: %f\n", param.pitch);
|
|
381
|
+
}
|
|
382
|
+
break;
|
|
383
|
+
case MPG123_VERBOSE_KEY:
|
|
384
|
+
param.verbose++;
|
|
385
|
+
if(param.verbose > VERBOSE_MAX)
|
|
386
|
+
{
|
|
387
|
+
param.verbose = 0;
|
|
388
|
+
clear_stat();
|
|
389
|
+
}
|
|
390
|
+
mpg123_param(fr, MPG123_VERBOSE, param.verbose, 0);
|
|
391
|
+
break;
|
|
392
|
+
case MPG123_RVA_KEY:
|
|
393
|
+
if(++param.rva > MPG123_RVA_MAX) param.rva = 0;
|
|
394
|
+
mpg123_param(fr, MPG123_RVA, param.rva, 0);
|
|
395
|
+
mpg123_volume_change(fr, 0.);
|
|
396
|
+
break;
|
|
397
|
+
case MPG123_PREV_KEY:
|
|
398
|
+
if(!param.usebuffer) ao->flush(ao);
|
|
399
|
+
else buffer_resync(); /* was: plain_buffer_resync */
|
|
400
|
+
|
|
401
|
+
prev_track();
|
|
402
|
+
break;
|
|
403
|
+
case MPG123_PLAYLIST_KEY:
|
|
404
|
+
fprintf(stderr, "%s\nPlaylist (\">\" indicates current track):\n", param.verbose ? "\n" : "");
|
|
405
|
+
print_playlist(stderr, 1);
|
|
406
|
+
fprintf(stderr, "\n");
|
|
407
|
+
break;
|
|
408
|
+
case MPG123_TAG_KEY:
|
|
409
|
+
fprintf(stderr, "%s\n", param.verbose ? "\n" : "");
|
|
410
|
+
print_id3_tag(fr, param.long_id3, stderr);
|
|
411
|
+
fprintf(stderr, "\n");
|
|
412
|
+
break;
|
|
413
|
+
case MPG123_MPEG_KEY:
|
|
414
|
+
if(param.verbose) print_stat(fr,0,0); /* Make sure that we are talking about the correct frame. */
|
|
415
|
+
fprintf(stderr, "\n");
|
|
416
|
+
print_header(fr);
|
|
417
|
+
fprintf(stderr, "\n");
|
|
418
|
+
break;
|
|
419
|
+
case MPG123_HELP_KEY:
|
|
420
|
+
{ /* This is more than the one-liner before, but it's less spaghetti. */
|
|
421
|
+
int i;
|
|
422
|
+
fprintf(stderr,"\n\n -= terminal control keys =-\n");
|
|
423
|
+
for(i=0; i<(sizeof(term_help)/sizeof(struct keydef)); ++i)
|
|
424
|
+
{
|
|
425
|
+
if(term_help[i].key2) fprintf(stderr, "[%c] or [%c]", term_help[i].key, term_help[i].key2);
|
|
426
|
+
else fprintf(stderr, "[%c]", term_help[i].key);
|
|
427
|
+
|
|
428
|
+
fprintf(stderr, "\t%s\n", term_help[i].desc);
|
|
429
|
+
}
|
|
430
|
+
fprintf(stderr, "\n");
|
|
431
|
+
}
|
|
432
|
+
break;
|
|
433
|
+
case MPG123_FRAME_INDEX_KEY:
|
|
434
|
+
case MPG123_VARIOUS_INFO_KEY:
|
|
435
|
+
if(param.verbose) fprintf(stderr, "\n");
|
|
436
|
+
switch(val) /* because of tolower() ... */
|
|
437
|
+
{
|
|
438
|
+
case MPG123_FRAME_INDEX_KEY:
|
|
439
|
+
print_index(fr);
|
|
440
|
+
{
|
|
441
|
+
long accurate;
|
|
442
|
+
if(mpg123_getstate(fr, MPG123_ACCURATE, &accurate, NULL) == MPG123_OK)
|
|
443
|
+
fprintf(stderr, "Accurate position: %s\n", (accurate == 0 ? "no" : "yes"));
|
|
444
|
+
else
|
|
445
|
+
error1("Unable to get state: %s", mpg123_strerror(fr));
|
|
446
|
+
}
|
|
447
|
+
break;
|
|
448
|
+
case MPG123_VARIOUS_INFO_KEY:
|
|
449
|
+
{
|
|
450
|
+
const char* curdec = mpg123_current_decoder(fr);
|
|
451
|
+
if(curdec == NULL) fprintf(stderr, "Cannot get decoder info!\n");
|
|
452
|
+
else fprintf(stderr, "Active decoder: %s\n", curdec);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
break;
|
|
456
|
+
default:
|
|
457
|
+
;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
static void term_handle_input(mpg123_handle *fr, audio_output_t *ao, int do_delay)
|
|
462
|
+
{
|
|
463
|
+
char val;
|
|
464
|
+
/* Do we really want that while loop? This means possibly handling multiple inputs that come very rapidly in one go. */
|
|
465
|
+
while(get_key(do_delay, &val))
|
|
466
|
+
{
|
|
467
|
+
term_handle_key(fr, ao, val);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
void term_restore(void)
|
|
472
|
+
{
|
|
473
|
+
if(!term_enable) return;
|
|
474
|
+
|
|
475
|
+
tcsetattr(0,TCSAFLUSH,&old_tio);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
#endif
|
|
479
|
+
|