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,119 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* *
|
|
3
|
+
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
|
4
|
+
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
|
5
|
+
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
|
6
|
+
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
|
7
|
+
* *
|
|
8
|
+
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
|
|
9
|
+
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
|
10
|
+
* *
|
|
11
|
+
********************************************************************
|
|
12
|
+
|
|
13
|
+
function: basic shared codebook operations
|
|
14
|
+
last mod: $Id: codebook.h 17030 2010-03-25 06:52:55Z xiphmont $
|
|
15
|
+
|
|
16
|
+
********************************************************************/
|
|
17
|
+
|
|
18
|
+
#ifndef _V_CODEBOOK_H_
|
|
19
|
+
#define _V_CODEBOOK_H_
|
|
20
|
+
|
|
21
|
+
#include <ogg/ogg.h>
|
|
22
|
+
|
|
23
|
+
/* This structure encapsulates huffman and VQ style encoding books; it
|
|
24
|
+
doesn't do anything specific to either.
|
|
25
|
+
|
|
26
|
+
valuelist/quantlist are nonNULL (and q_* significant) only if
|
|
27
|
+
there's entry->value mapping to be done.
|
|
28
|
+
|
|
29
|
+
If encode-side mapping must be done (and thus the entry needs to be
|
|
30
|
+
hunted), the auxiliary encode pointer will point to a decision
|
|
31
|
+
tree. This is true of both VQ and huffman, but is mostly useful
|
|
32
|
+
with VQ.
|
|
33
|
+
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
typedef struct static_codebook{
|
|
37
|
+
long dim; /* codebook dimensions (elements per vector) */
|
|
38
|
+
long entries; /* codebook entries */
|
|
39
|
+
long *lengthlist; /* codeword lengths in bits */
|
|
40
|
+
|
|
41
|
+
/* mapping ***************************************************************/
|
|
42
|
+
int maptype; /* 0=none
|
|
43
|
+
1=implicitly populated values from map column
|
|
44
|
+
2=listed arbitrary values */
|
|
45
|
+
|
|
46
|
+
/* The below does a linear, single monotonic sequence mapping. */
|
|
47
|
+
long q_min; /* packed 32 bit float; quant value 0 maps to minval */
|
|
48
|
+
long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */
|
|
49
|
+
int q_quant; /* bits: 0 < quant <= 16 */
|
|
50
|
+
int q_sequencep; /* bitflag */
|
|
51
|
+
|
|
52
|
+
long *quantlist; /* map == 1: (int)(entries^(1/dim)) element column map
|
|
53
|
+
map == 2: list of dim*entries quantized entry vals
|
|
54
|
+
*/
|
|
55
|
+
int allocedp;
|
|
56
|
+
} static_codebook;
|
|
57
|
+
|
|
58
|
+
typedef struct codebook{
|
|
59
|
+
long dim; /* codebook dimensions (elements per vector) */
|
|
60
|
+
long entries; /* codebook entries */
|
|
61
|
+
long used_entries; /* populated codebook entries */
|
|
62
|
+
const static_codebook *c;
|
|
63
|
+
|
|
64
|
+
/* for encode, the below are entry-ordered, fully populated */
|
|
65
|
+
/* for decode, the below are ordered by bitreversed codeword and only
|
|
66
|
+
used entries are populated */
|
|
67
|
+
float *valuelist; /* list of dim*entries actual entry values */
|
|
68
|
+
ogg_uint32_t *codelist; /* list of bitstream codewords for each entry */
|
|
69
|
+
|
|
70
|
+
int *dec_index; /* only used if sparseness collapsed */
|
|
71
|
+
char *dec_codelengths;
|
|
72
|
+
ogg_uint32_t *dec_firsttable;
|
|
73
|
+
int dec_firsttablen;
|
|
74
|
+
int dec_maxlength;
|
|
75
|
+
|
|
76
|
+
/* The current encoder uses only centered, integer-only lattice books. */
|
|
77
|
+
int quantvals;
|
|
78
|
+
int minval;
|
|
79
|
+
int delta;
|
|
80
|
+
} codebook;
|
|
81
|
+
|
|
82
|
+
extern void vorbis_staticbook_destroy(static_codebook *b);
|
|
83
|
+
extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source);
|
|
84
|
+
extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
|
|
85
|
+
extern void vorbis_book_clear(codebook *b);
|
|
86
|
+
|
|
87
|
+
extern float *_book_unquantize(const static_codebook *b,int n,int *map);
|
|
88
|
+
extern float *_book_logdist(const static_codebook *b,float *vals);
|
|
89
|
+
extern float _float32_unpack(long val);
|
|
90
|
+
extern long _float32_pack(float val);
|
|
91
|
+
extern int _best(codebook *book, float *a, int step);
|
|
92
|
+
extern int _ilog(unsigned int v);
|
|
93
|
+
extern long _book_maptype1_quantvals(const static_codebook *b);
|
|
94
|
+
|
|
95
|
+
extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);
|
|
96
|
+
extern long vorbis_book_codeword(codebook *book,int entry);
|
|
97
|
+
extern long vorbis_book_codelen(codebook *book,int entry);
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b);
|
|
102
|
+
extern static_codebook *vorbis_staticbook_unpack(oggpack_buffer *b);
|
|
103
|
+
|
|
104
|
+
extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b);
|
|
105
|
+
|
|
106
|
+
extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
|
|
107
|
+
extern long vorbis_book_decodevs_add(codebook *book, float *a,
|
|
108
|
+
oggpack_buffer *b,int n);
|
|
109
|
+
extern long vorbis_book_decodev_set(codebook *book, float *a,
|
|
110
|
+
oggpack_buffer *b,int n);
|
|
111
|
+
extern long vorbis_book_decodev_add(codebook *book, float *a,
|
|
112
|
+
oggpack_buffer *b,int n);
|
|
113
|
+
extern long vorbis_book_decodevv_add(codebook *book, float **a,
|
|
114
|
+
long off,int ch,
|
|
115
|
+
oggpack_buffer *b,int n);
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
#endif
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* *
|
|
3
|
+
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
|
4
|
+
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
|
5
|
+
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
|
6
|
+
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
|
7
|
+
* *
|
|
8
|
+
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
|
|
9
|
+
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
|
10
|
+
* *
|
|
11
|
+
********************************************************************
|
|
12
|
+
|
|
13
|
+
function: libvorbis codec headers
|
|
14
|
+
last mod: $Id: codec_internal.h 16227 2009-07-08 06:58:46Z xiphmont $
|
|
15
|
+
|
|
16
|
+
********************************************************************/
|
|
17
|
+
|
|
18
|
+
#ifndef _V_CODECI_H_
|
|
19
|
+
#define _V_CODECI_H_
|
|
20
|
+
|
|
21
|
+
#include "envelope.h"
|
|
22
|
+
#include "codebook.h"
|
|
23
|
+
|
|
24
|
+
#define BLOCKTYPE_IMPULSE 0
|
|
25
|
+
#define BLOCKTYPE_PADDING 1
|
|
26
|
+
#define BLOCKTYPE_TRANSITION 0
|
|
27
|
+
#define BLOCKTYPE_LONG 1
|
|
28
|
+
|
|
29
|
+
#define PACKETBLOBS 15
|
|
30
|
+
|
|
31
|
+
typedef struct vorbis_block_internal{
|
|
32
|
+
float **pcmdelay; /* this is a pointer into local storage */
|
|
33
|
+
float ampmax;
|
|
34
|
+
int blocktype;
|
|
35
|
+
|
|
36
|
+
oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
|
|
37
|
+
blob [PACKETBLOBS/2] points to
|
|
38
|
+
the oggpack_buffer in the
|
|
39
|
+
main vorbis_block */
|
|
40
|
+
} vorbis_block_internal;
|
|
41
|
+
|
|
42
|
+
typedef void vorbis_look_floor;
|
|
43
|
+
typedef void vorbis_look_residue;
|
|
44
|
+
typedef void vorbis_look_transform;
|
|
45
|
+
|
|
46
|
+
/* mode ************************************************************/
|
|
47
|
+
typedef struct {
|
|
48
|
+
int blockflag;
|
|
49
|
+
int windowtype;
|
|
50
|
+
int transformtype;
|
|
51
|
+
int mapping;
|
|
52
|
+
} vorbis_info_mode;
|
|
53
|
+
|
|
54
|
+
typedef void vorbis_info_floor;
|
|
55
|
+
typedef void vorbis_info_residue;
|
|
56
|
+
typedef void vorbis_info_mapping;
|
|
57
|
+
|
|
58
|
+
#include "psy.h"
|
|
59
|
+
#include "bitrate.h"
|
|
60
|
+
|
|
61
|
+
typedef struct private_state {
|
|
62
|
+
/* local lookup storage */
|
|
63
|
+
envelope_lookup *ve; /* envelope lookup */
|
|
64
|
+
int window[2];
|
|
65
|
+
vorbis_look_transform **transform[2]; /* block, type */
|
|
66
|
+
drft_lookup fft_look[2];
|
|
67
|
+
|
|
68
|
+
int modebits;
|
|
69
|
+
vorbis_look_floor **flr;
|
|
70
|
+
vorbis_look_residue **residue;
|
|
71
|
+
vorbis_look_psy *psy;
|
|
72
|
+
vorbis_look_psy_global *psy_g_look;
|
|
73
|
+
|
|
74
|
+
/* local storage, only used on the encoding side. This way the
|
|
75
|
+
application does not need to worry about freeing some packets'
|
|
76
|
+
memory and not others'; packet storage is always tracked.
|
|
77
|
+
Cleared next call to a _dsp_ function */
|
|
78
|
+
unsigned char *header;
|
|
79
|
+
unsigned char *header1;
|
|
80
|
+
unsigned char *header2;
|
|
81
|
+
|
|
82
|
+
bitrate_manager_state bms;
|
|
83
|
+
|
|
84
|
+
ogg_int64_t sample_count;
|
|
85
|
+
} private_state;
|
|
86
|
+
|
|
87
|
+
/* codec_setup_info contains all the setup information specific to the
|
|
88
|
+
specific compression/decompression mode in progress (eg,
|
|
89
|
+
psychoacoustic settings, channel setup, options, codebook
|
|
90
|
+
etc).
|
|
91
|
+
*********************************************************************/
|
|
92
|
+
|
|
93
|
+
#include "highlevel.h"
|
|
94
|
+
typedef struct codec_setup_info {
|
|
95
|
+
|
|
96
|
+
/* Vorbis supports only short and long blocks, but allows the
|
|
97
|
+
encoder to choose the sizes */
|
|
98
|
+
|
|
99
|
+
long blocksizes[2];
|
|
100
|
+
|
|
101
|
+
/* modes are the primary means of supporting on-the-fly different
|
|
102
|
+
blocksizes, different channel mappings (LR or M/A),
|
|
103
|
+
different residue backends, etc. Each mode consists of a
|
|
104
|
+
blocksize flag and a mapping (along with the mapping setup */
|
|
105
|
+
|
|
106
|
+
int modes;
|
|
107
|
+
int maps;
|
|
108
|
+
int floors;
|
|
109
|
+
int residues;
|
|
110
|
+
int books;
|
|
111
|
+
int psys; /* encode only */
|
|
112
|
+
|
|
113
|
+
vorbis_info_mode *mode_param[64];
|
|
114
|
+
int map_type[64];
|
|
115
|
+
vorbis_info_mapping *map_param[64];
|
|
116
|
+
int floor_type[64];
|
|
117
|
+
vorbis_info_floor *floor_param[64];
|
|
118
|
+
int residue_type[64];
|
|
119
|
+
vorbis_info_residue *residue_param[64];
|
|
120
|
+
static_codebook *book_param[256];
|
|
121
|
+
codebook *fullbooks;
|
|
122
|
+
|
|
123
|
+
vorbis_info_psy *psy_param[4]; /* encode only */
|
|
124
|
+
vorbis_info_psy_global psy_g_param;
|
|
125
|
+
|
|
126
|
+
bitrate_manager_info bi;
|
|
127
|
+
highlevel_encode_setup hi; /* used only by vorbisenc.c. It's a
|
|
128
|
+
highly redundant structure, but
|
|
129
|
+
improves clarity of program flow. */
|
|
130
|
+
int halfrate_flag; /* painless downsample for decode */
|
|
131
|
+
} codec_setup_info;
|
|
132
|
+
|
|
133
|
+
extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
|
|
134
|
+
extern void _vp_global_free(vorbis_look_psy_global *look);
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
typedef struct {
|
|
139
|
+
int sorted_index[VIF_POSIT+2];
|
|
140
|
+
int forward_index[VIF_POSIT+2];
|
|
141
|
+
int reverse_index[VIF_POSIT+2];
|
|
142
|
+
|
|
143
|
+
int hineighbor[VIF_POSIT];
|
|
144
|
+
int loneighbor[VIF_POSIT];
|
|
145
|
+
int posts;
|
|
146
|
+
|
|
147
|
+
int n;
|
|
148
|
+
int quant_q;
|
|
149
|
+
vorbis_info_floor1 *vi;
|
|
150
|
+
|
|
151
|
+
long phrasebits;
|
|
152
|
+
long postbits;
|
|
153
|
+
long frames;
|
|
154
|
+
} vorbis_look_floor1;
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
|
|
159
|
+
const float *logmdct, /* in */
|
|
160
|
+
const float *logmask);
|
|
161
|
+
extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
|
|
162
|
+
int *A,int *B,
|
|
163
|
+
int del);
|
|
164
|
+
extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
|
|
165
|
+
vorbis_look_floor1 *look,
|
|
166
|
+
int *post,int *ilogmask);
|
|
167
|
+
#endif
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* *
|
|
3
|
+
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
|
4
|
+
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
|
5
|
+
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
|
6
|
+
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
|
7
|
+
* *
|
|
8
|
+
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
|
|
9
|
+
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
|
10
|
+
* *
|
|
11
|
+
********************************************************************
|
|
12
|
+
|
|
13
|
+
function: PCM data envelope analysis
|
|
14
|
+
last mod: $Id: envelope.c 16227 2009-07-08 06:58:46Z xiphmont $
|
|
15
|
+
|
|
16
|
+
********************************************************************/
|
|
17
|
+
|
|
18
|
+
#include <stdlib.h>
|
|
19
|
+
#include <string.h>
|
|
20
|
+
#include <stdio.h>
|
|
21
|
+
#include <math.h>
|
|
22
|
+
#include <ogg/ogg.h>
|
|
23
|
+
#include "vorbis/codec.h"
|
|
24
|
+
#include "codec_internal.h"
|
|
25
|
+
|
|
26
|
+
#include "os.h"
|
|
27
|
+
#include "scales.h"
|
|
28
|
+
#include "envelope.h"
|
|
29
|
+
#include "mdct.h"
|
|
30
|
+
#include "misc.h"
|
|
31
|
+
|
|
32
|
+
void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){
|
|
33
|
+
codec_setup_info *ci=vi->codec_setup;
|
|
34
|
+
vorbis_info_psy_global *gi=&ci->psy_g_param;
|
|
35
|
+
int ch=vi->channels;
|
|
36
|
+
int i,j;
|
|
37
|
+
int n=e->winlength=128;
|
|
38
|
+
e->searchstep=64; /* not random */
|
|
39
|
+
|
|
40
|
+
e->minenergy=gi->preecho_minenergy;
|
|
41
|
+
e->ch=ch;
|
|
42
|
+
e->storage=128;
|
|
43
|
+
e->cursor=ci->blocksizes[1]/2;
|
|
44
|
+
e->mdct_win=_ogg_calloc(n,sizeof(*e->mdct_win));
|
|
45
|
+
mdct_init(&e->mdct,n);
|
|
46
|
+
|
|
47
|
+
for(i=0;i<n;i++){
|
|
48
|
+
e->mdct_win[i]=sin(i/(n-1.)*M_PI);
|
|
49
|
+
e->mdct_win[i]*=e->mdct_win[i];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* magic follows */
|
|
53
|
+
e->band[0].begin=2; e->band[0].end=4;
|
|
54
|
+
e->band[1].begin=4; e->band[1].end=5;
|
|
55
|
+
e->band[2].begin=6; e->band[2].end=6;
|
|
56
|
+
e->band[3].begin=9; e->band[3].end=8;
|
|
57
|
+
e->band[4].begin=13; e->band[4].end=8;
|
|
58
|
+
e->band[5].begin=17; e->band[5].end=8;
|
|
59
|
+
e->band[6].begin=22; e->band[6].end=8;
|
|
60
|
+
|
|
61
|
+
for(j=0;j<VE_BANDS;j++){
|
|
62
|
+
n=e->band[j].end;
|
|
63
|
+
e->band[j].window=_ogg_malloc(n*sizeof(*e->band[0].window));
|
|
64
|
+
for(i=0;i<n;i++){
|
|
65
|
+
e->band[j].window[i]=sin((i+.5)/n*M_PI);
|
|
66
|
+
e->band[j].total+=e->band[j].window[i];
|
|
67
|
+
}
|
|
68
|
+
e->band[j].total=1./e->band[j].total;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
e->filter=_ogg_calloc(VE_BANDS*ch,sizeof(*e->filter));
|
|
72
|
+
e->mark=_ogg_calloc(e->storage,sizeof(*e->mark));
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void _ve_envelope_clear(envelope_lookup *e){
|
|
77
|
+
int i;
|
|
78
|
+
mdct_clear(&e->mdct);
|
|
79
|
+
for(i=0;i<VE_BANDS;i++)
|
|
80
|
+
_ogg_free(e->band[i].window);
|
|
81
|
+
_ogg_free(e->mdct_win);
|
|
82
|
+
_ogg_free(e->filter);
|
|
83
|
+
_ogg_free(e->mark);
|
|
84
|
+
memset(e,0,sizeof(*e));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* fairly straight threshhold-by-band based until we find something
|
|
88
|
+
that works better and isn't patented. */
|
|
89
|
+
|
|
90
|
+
static int _ve_amp(envelope_lookup *ve,
|
|
91
|
+
vorbis_info_psy_global *gi,
|
|
92
|
+
float *data,
|
|
93
|
+
envelope_band *bands,
|
|
94
|
+
envelope_filter_state *filters){
|
|
95
|
+
long n=ve->winlength;
|
|
96
|
+
int ret=0;
|
|
97
|
+
long i,j;
|
|
98
|
+
float decay;
|
|
99
|
+
|
|
100
|
+
/* we want to have a 'minimum bar' for energy, else we're just
|
|
101
|
+
basing blocks on quantization noise that outweighs the signal
|
|
102
|
+
itself (for low power signals) */
|
|
103
|
+
|
|
104
|
+
float minV=ve->minenergy;
|
|
105
|
+
float *vec=alloca(n*sizeof(*vec));
|
|
106
|
+
|
|
107
|
+
/* stretch is used to gradually lengthen the number of windows
|
|
108
|
+
considered prevoius-to-potential-trigger */
|
|
109
|
+
int stretch=max(VE_MINSTRETCH,ve->stretch/2);
|
|
110
|
+
float penalty=gi->stretch_penalty-(ve->stretch/2-VE_MINSTRETCH);
|
|
111
|
+
if(penalty<0.f)penalty=0.f;
|
|
112
|
+
if(penalty>gi->stretch_penalty)penalty=gi->stretch_penalty;
|
|
113
|
+
|
|
114
|
+
/*_analysis_output_always("lpcm",seq2,data,n,0,0,
|
|
115
|
+
totalshift+pos*ve->searchstep);*/
|
|
116
|
+
|
|
117
|
+
/* window and transform */
|
|
118
|
+
for(i=0;i<n;i++)
|
|
119
|
+
vec[i]=data[i]*ve->mdct_win[i];
|
|
120
|
+
mdct_forward(&ve->mdct,vec,vec);
|
|
121
|
+
|
|
122
|
+
/*_analysis_output_always("mdct",seq2,vec,n/2,0,1,0); */
|
|
123
|
+
|
|
124
|
+
/* near-DC spreading function; this has nothing to do with
|
|
125
|
+
psychoacoustics, just sidelobe leakage and window size */
|
|
126
|
+
{
|
|
127
|
+
float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2];
|
|
128
|
+
int ptr=filters->nearptr;
|
|
129
|
+
|
|
130
|
+
/* the accumulation is regularly refreshed from scratch to avoid
|
|
131
|
+
floating point creep */
|
|
132
|
+
if(ptr==0){
|
|
133
|
+
decay=filters->nearDC_acc=filters->nearDC_partialacc+temp;
|
|
134
|
+
filters->nearDC_partialacc=temp;
|
|
135
|
+
}else{
|
|
136
|
+
decay=filters->nearDC_acc+=temp;
|
|
137
|
+
filters->nearDC_partialacc+=temp;
|
|
138
|
+
}
|
|
139
|
+
filters->nearDC_acc-=filters->nearDC[ptr];
|
|
140
|
+
filters->nearDC[ptr]=temp;
|
|
141
|
+
|
|
142
|
+
decay*=(1./(VE_NEARDC+1));
|
|
143
|
+
filters->nearptr++;
|
|
144
|
+
if(filters->nearptr>=VE_NEARDC)filters->nearptr=0;
|
|
145
|
+
decay=todB(&decay)*.5-15.f;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* perform spreading and limiting, also smooth the spectrum. yes,
|
|
149
|
+
the MDCT results in all real coefficients, but it still *behaves*
|
|
150
|
+
like real/imaginary pairs */
|
|
151
|
+
for(i=0;i<n/2;i+=2){
|
|
152
|
+
float val=vec[i]*vec[i]+vec[i+1]*vec[i+1];
|
|
153
|
+
val=todB(&val)*.5f;
|
|
154
|
+
if(val<decay)val=decay;
|
|
155
|
+
if(val<minV)val=minV;
|
|
156
|
+
vec[i>>1]=val;
|
|
157
|
+
decay-=8.;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/*_analysis_output_always("spread",seq2++,vec,n/4,0,0,0);*/
|
|
161
|
+
|
|
162
|
+
/* perform preecho/postecho triggering by band */
|
|
163
|
+
for(j=0;j<VE_BANDS;j++){
|
|
164
|
+
float acc=0.;
|
|
165
|
+
float valmax,valmin;
|
|
166
|
+
|
|
167
|
+
/* accumulate amplitude */
|
|
168
|
+
for(i=0;i<bands[j].end;i++)
|
|
169
|
+
acc+=vec[i+bands[j].begin]*bands[j].window[i];
|
|
170
|
+
|
|
171
|
+
acc*=bands[j].total;
|
|
172
|
+
|
|
173
|
+
/* convert amplitude to delta */
|
|
174
|
+
{
|
|
175
|
+
int p,this=filters[j].ampptr;
|
|
176
|
+
float postmax,postmin,premax=-99999.f,premin=99999.f;
|
|
177
|
+
|
|
178
|
+
p=this;
|
|
179
|
+
p--;
|
|
180
|
+
if(p<0)p+=VE_AMP;
|
|
181
|
+
postmax=max(acc,filters[j].ampbuf[p]);
|
|
182
|
+
postmin=min(acc,filters[j].ampbuf[p]);
|
|
183
|
+
|
|
184
|
+
for(i=0;i<stretch;i++){
|
|
185
|
+
p--;
|
|
186
|
+
if(p<0)p+=VE_AMP;
|
|
187
|
+
premax=max(premax,filters[j].ampbuf[p]);
|
|
188
|
+
premin=min(premin,filters[j].ampbuf[p]);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
valmin=postmin-premin;
|
|
192
|
+
valmax=postmax-premax;
|
|
193
|
+
|
|
194
|
+
/*filters[j].markers[pos]=valmax;*/
|
|
195
|
+
filters[j].ampbuf[this]=acc;
|
|
196
|
+
filters[j].ampptr++;
|
|
197
|
+
if(filters[j].ampptr>=VE_AMP)filters[j].ampptr=0;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* look at min/max, decide trigger */
|
|
201
|
+
if(valmax>gi->preecho_thresh[j]+penalty){
|
|
202
|
+
ret|=1;
|
|
203
|
+
ret|=4;
|
|
204
|
+
}
|
|
205
|
+
if(valmin<gi->postecho_thresh[j]-penalty)ret|=2;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return(ret);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
#if 0
|
|
212
|
+
static int seq=0;
|
|
213
|
+
static ogg_int64_t totalshift=-1024;
|
|
214
|
+
#endif
|
|
215
|
+
|
|
216
|
+
long _ve_envelope_search(vorbis_dsp_state *v){
|
|
217
|
+
vorbis_info *vi=v->vi;
|
|
218
|
+
codec_setup_info *ci=vi->codec_setup;
|
|
219
|
+
vorbis_info_psy_global *gi=&ci->psy_g_param;
|
|
220
|
+
envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
|
|
221
|
+
long i,j;
|
|
222
|
+
|
|
223
|
+
int first=ve->current/ve->searchstep;
|
|
224
|
+
int last=v->pcm_current/ve->searchstep-VE_WIN;
|
|
225
|
+
if(first<0)first=0;
|
|
226
|
+
|
|
227
|
+
/* make sure we have enough storage to match the PCM */
|
|
228
|
+
if(last+VE_WIN+VE_POST>ve->storage){
|
|
229
|
+
ve->storage=last+VE_WIN+VE_POST; /* be sure */
|
|
230
|
+
ve->mark=_ogg_realloc(ve->mark,ve->storage*sizeof(*ve->mark));
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
for(j=first;j<last;j++){
|
|
234
|
+
int ret=0;
|
|
235
|
+
|
|
236
|
+
ve->stretch++;
|
|
237
|
+
if(ve->stretch>VE_MAXSTRETCH*2)
|
|
238
|
+
ve->stretch=VE_MAXSTRETCH*2;
|
|
239
|
+
|
|
240
|
+
for(i=0;i<ve->ch;i++){
|
|
241
|
+
float *pcm=v->pcm[i]+ve->searchstep*(j);
|
|
242
|
+
ret|=_ve_amp(ve,gi,pcm,ve->band,ve->filter+i*VE_BANDS);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
ve->mark[j+VE_POST]=0;
|
|
246
|
+
if(ret&1){
|
|
247
|
+
ve->mark[j]=1;
|
|
248
|
+
ve->mark[j+1]=1;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if(ret&2){
|
|
252
|
+
ve->mark[j]=1;
|
|
253
|
+
if(j>0)ve->mark[j-1]=1;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if(ret&4)ve->stretch=-1;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
ve->current=last*ve->searchstep;
|
|
260
|
+
|
|
261
|
+
{
|
|
262
|
+
long centerW=v->centerW;
|
|
263
|
+
long testW=
|
|
264
|
+
centerW+
|
|
265
|
+
ci->blocksizes[v->W]/4+
|
|
266
|
+
ci->blocksizes[1]/2+
|
|
267
|
+
ci->blocksizes[0]/4;
|
|
268
|
+
|
|
269
|
+
j=ve->cursor;
|
|
270
|
+
|
|
271
|
+
while(j<ve->current-(ve->searchstep)){/* account for postecho
|
|
272
|
+
working back one window */
|
|
273
|
+
if(j>=testW)return(1);
|
|
274
|
+
|
|
275
|
+
ve->cursor=j;
|
|
276
|
+
|
|
277
|
+
if(ve->mark[j/ve->searchstep]){
|
|
278
|
+
if(j>centerW){
|
|
279
|
+
|
|
280
|
+
#if 0
|
|
281
|
+
if(j>ve->curmark){
|
|
282
|
+
float *marker=alloca(v->pcm_current*sizeof(*marker));
|
|
283
|
+
int l,m;
|
|
284
|
+
memset(marker,0,sizeof(*marker)*v->pcm_current);
|
|
285
|
+
fprintf(stderr,"mark! seq=%d, cursor:%fs time:%fs\n",
|
|
286
|
+
seq,
|
|
287
|
+
(totalshift+ve->cursor)/44100.,
|
|
288
|
+
(totalshift+j)/44100.);
|
|
289
|
+
_analysis_output_always("pcmL",seq,v->pcm[0],v->pcm_current,0,0,totalshift);
|
|
290
|
+
_analysis_output_always("pcmR",seq,v->pcm[1],v->pcm_current,0,0,totalshift);
|
|
291
|
+
|
|
292
|
+
_analysis_output_always("markL",seq,v->pcm[0],j,0,0,totalshift);
|
|
293
|
+
_analysis_output_always("markR",seq,v->pcm[1],j,0,0,totalshift);
|
|
294
|
+
|
|
295
|
+
for(m=0;m<VE_BANDS;m++){
|
|
296
|
+
char buf[80];
|
|
297
|
+
sprintf(buf,"delL%d",m);
|
|
298
|
+
for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m].markers[l]*.1;
|
|
299
|
+
_analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
for(m=0;m<VE_BANDS;m++){
|
|
303
|
+
char buf[80];
|
|
304
|
+
sprintf(buf,"delR%d",m);
|
|
305
|
+
for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m+VE_BANDS].markers[l]*.1;
|
|
306
|
+
_analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->mark[l]*.4;
|
|
310
|
+
_analysis_output_always("mark",seq,marker,v->pcm_current,0,0,totalshift);
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
seq++;
|
|
314
|
+
|
|
315
|
+
}
|
|
316
|
+
#endif
|
|
317
|
+
|
|
318
|
+
ve->curmark=j;
|
|
319
|
+
if(j>=testW)return(1);
|
|
320
|
+
return(0);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
j+=ve->searchstep;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return(-1);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
int _ve_envelope_mark(vorbis_dsp_state *v){
|
|
331
|
+
envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
|
|
332
|
+
vorbis_info *vi=v->vi;
|
|
333
|
+
codec_setup_info *ci=vi->codec_setup;
|
|
334
|
+
long centerW=v->centerW;
|
|
335
|
+
long beginW=centerW-ci->blocksizes[v->W]/4;
|
|
336
|
+
long endW=centerW+ci->blocksizes[v->W]/4;
|
|
337
|
+
if(v->W){
|
|
338
|
+
beginW-=ci->blocksizes[v->lW]/4;
|
|
339
|
+
endW+=ci->blocksizes[v->nW]/4;
|
|
340
|
+
}else{
|
|
341
|
+
beginW-=ci->blocksizes[0]/4;
|
|
342
|
+
endW+=ci->blocksizes[0]/4;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
if(ve->curmark>=beginW && ve->curmark<endW)return(1);
|
|
346
|
+
{
|
|
347
|
+
long first=beginW/ve->searchstep;
|
|
348
|
+
long last=endW/ve->searchstep;
|
|
349
|
+
long i;
|
|
350
|
+
for(i=first;i<last;i++)
|
|
351
|
+
if(ve->mark[i])return(1);
|
|
352
|
+
}
|
|
353
|
+
return(0);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
void _ve_envelope_shift(envelope_lookup *e,long shift){
|
|
357
|
+
int smallsize=e->current/e->searchstep+VE_POST; /* adjust for placing marks
|
|
358
|
+
ahead of ve->current */
|
|
359
|
+
int smallshift=shift/e->searchstep;
|
|
360
|
+
|
|
361
|
+
memmove(e->mark,e->mark+smallshift,(smallsize-smallshift)*sizeof(*e->mark));
|
|
362
|
+
|
|
363
|
+
#if 0
|
|
364
|
+
for(i=0;i<VE_BANDS*e->ch;i++)
|
|
365
|
+
memmove(e->filter[i].markers,
|
|
366
|
+
e->filter[i].markers+smallshift,
|
|
367
|
+
(1024-smallshift)*sizeof(*(*e->filter).markers));
|
|
368
|
+
totalshift+=shift;
|
|
369
|
+
#endif
|
|
370
|
+
|
|
371
|
+
e->current-=shift;
|
|
372
|
+
if(e->curmark>=0)
|
|
373
|
+
e->curmark-=shift;
|
|
374
|
+
e->cursor-=shift;
|
|
375
|
+
}
|