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,168 @@
|
|
|
1
|
+
/*
|
|
2
|
+
synth_neon_s32: ARM NEON optimized synth (32-bit output version)
|
|
3
|
+
|
|
4
|
+
copyright 1995-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 Taihei Monma
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#include "mangle.h"
|
|
10
|
+
|
|
11
|
+
#define WINDOW r0
|
|
12
|
+
#define B0 r1
|
|
13
|
+
#define SAMPLES r2
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
int synth_1to1_s32_neon_asm(real *window, real *b0, int *samples, int bo1);
|
|
17
|
+
return value: number of clipped samples (0)
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
.text
|
|
21
|
+
.globl ASM_NAME(synth_1to1_s32_neon_asm)
|
|
22
|
+
ALIGN4
|
|
23
|
+
ASM_NAME(synth_1to1_s32_neon_asm):
|
|
24
|
+
push {r4-r6, lr}
|
|
25
|
+
vpush {q4-q7}
|
|
26
|
+
mov r6, sp
|
|
27
|
+
sub sp, sp, #16
|
|
28
|
+
bic sp, #0xff
|
|
29
|
+
|
|
30
|
+
add WINDOW, WINDOW, #64
|
|
31
|
+
sub WINDOW, WINDOW, r3, lsl #2
|
|
32
|
+
|
|
33
|
+
mov r3, #4
|
|
34
|
+
mov r4, #128
|
|
35
|
+
mov r5, #64
|
|
36
|
+
.Loop_start_1:
|
|
37
|
+
vld1.32 {q0,q1}, [WINDOW], r4
|
|
38
|
+
vld1.32 {q2,q3}, [WINDOW], r4
|
|
39
|
+
vld1.32 {q4,q5}, [WINDOW], r4
|
|
40
|
+
vld1.32 {q6,q7}, [WINDOW]
|
|
41
|
+
sub WINDOW, WINDOW, #352
|
|
42
|
+
vld1.32 {q8,q9}, [B0, :128], r5
|
|
43
|
+
vld1.32 {q10,q11}, [B0, :128], r5
|
|
44
|
+
vld1.32 {q12,q13}, [B0, :128], r5
|
|
45
|
+
vld1.32 {q14,q15}, [B0, :128]
|
|
46
|
+
vswp q1, q4
|
|
47
|
+
vswp q3, q6
|
|
48
|
+
sub B0, B0, #160
|
|
49
|
+
vmul.f32 q0, q0, q8
|
|
50
|
+
vmul.f32 q2, q2, q10
|
|
51
|
+
vmul.f32 q1, q1, q12
|
|
52
|
+
vmul.f32 q3, q3, q14
|
|
53
|
+
vmla.f32 q0, q4, q9
|
|
54
|
+
vmla.f32 q2, q6, q11
|
|
55
|
+
vmla.f32 q1, q5, q13
|
|
56
|
+
vmla.f32 q3, q7, q15
|
|
57
|
+
vld1.32 {q4,q5}, [WINDOW], r4
|
|
58
|
+
vld1.32 {q6,q7}, [WINDOW], r4
|
|
59
|
+
vld1.32 {q8,q9}, [WINDOW], r4
|
|
60
|
+
vld1.32 {q10,q11}, [B0, :128], r5
|
|
61
|
+
vld1.32 {q12,q13}, [B0, :128], r5
|
|
62
|
+
vld1.32 {q14,q15}, [B0, :128], r5
|
|
63
|
+
vswp q5, q6
|
|
64
|
+
vswp q11, q12
|
|
65
|
+
vmla.f32 q0, q4, q10
|
|
66
|
+
vmla.f32 q2, q5, q11
|
|
67
|
+
vmla.f32 q1, q8, q14
|
|
68
|
+
vld1.32 {q4,q5}, [WINDOW]
|
|
69
|
+
vld1.32 {q10,q11}, [B0, :128]!
|
|
70
|
+
add WINDOW, WINDOW, #96
|
|
71
|
+
vmla.f32 q3, q4, q10
|
|
72
|
+
vmla.f32 q0, q6, q12
|
|
73
|
+
vmla.f32 q2, q7, q13
|
|
74
|
+
vmla.f32 q1, q9, q15
|
|
75
|
+
vmla.f32 q3, q5, q11
|
|
76
|
+
vmvn.i32 q5, #0xb9000000
|
|
77
|
+
vpadd.f32 d0, d0, d1
|
|
78
|
+
vpadd.f32 d4, d4, d5
|
|
79
|
+
vpadd.f32 d2, d2, d3
|
|
80
|
+
vpadd.f32 d6, d6, d7
|
|
81
|
+
vld1.32 {q6}, [sp, :128]
|
|
82
|
+
vpadd.f32 d0, d0, d4
|
|
83
|
+
vpadd.f32 d1, d2, d6
|
|
84
|
+
|
|
85
|
+
vcvt.s32.f32 q3, q0, #16
|
|
86
|
+
vacgt.f32 q5, q0, q5
|
|
87
|
+
vld2.32 {q1,q2}, [SAMPLES]
|
|
88
|
+
vshr.u32 q5, q5, #31
|
|
89
|
+
vmov q1, q3
|
|
90
|
+
vst2.32 {q1,q2}, [SAMPLES]!
|
|
91
|
+
vadd.i32 q5, q5, q6
|
|
92
|
+
vst1.32 {q5}, [sp, :128]
|
|
93
|
+
|
|
94
|
+
subs r3, r3, #1
|
|
95
|
+
bne .Loop_start_1
|
|
96
|
+
|
|
97
|
+
mov r3, #4
|
|
98
|
+
mov r5, #-64
|
|
99
|
+
.Loop_start_2:
|
|
100
|
+
vld1.32 {q0,q1}, [WINDOW], r4
|
|
101
|
+
vld1.32 {q2,q3}, [WINDOW], r4
|
|
102
|
+
vld1.32 {q4,q5}, [WINDOW], r4
|
|
103
|
+
vld1.32 {q6,q7}, [WINDOW]
|
|
104
|
+
sub WINDOW, WINDOW, #352
|
|
105
|
+
vld1.32 {q8,q9}, [B0, :128], r5
|
|
106
|
+
vld1.32 {q10,q11}, [B0, :128], r5
|
|
107
|
+
vld1.32 {q12,q13}, [B0, :128], r5
|
|
108
|
+
vld1.32 {q14,q15}, [B0, :128]
|
|
109
|
+
vswp q1, q4
|
|
110
|
+
vswp q3, q6
|
|
111
|
+
add B0, B0, #224
|
|
112
|
+
vmul.f32 q0, q0, q8
|
|
113
|
+
vmul.f32 q2, q2, q10
|
|
114
|
+
vmul.f32 q1, q1, q12
|
|
115
|
+
vmul.f32 q3, q3, q14
|
|
116
|
+
vmla.f32 q0, q4, q9
|
|
117
|
+
vmla.f32 q2, q6, q11
|
|
118
|
+
vmla.f32 q1, q5, q13
|
|
119
|
+
vmla.f32 q3, q7, q15
|
|
120
|
+
vld1.32 {q4,q5}, [WINDOW], r4
|
|
121
|
+
vld1.32 {q6,q7}, [WINDOW], r4
|
|
122
|
+
vld1.32 {q8,q9}, [WINDOW], r4
|
|
123
|
+
vld1.32 {q10,q11}, [B0, :128], r5
|
|
124
|
+
vld1.32 {q12,q13}, [B0, :128], r5
|
|
125
|
+
vld1.32 {q14,q15}, [B0, :128], r5
|
|
126
|
+
vswp q5, q6
|
|
127
|
+
vswp q11, q12
|
|
128
|
+
vmla.f32 q0, q4, q10
|
|
129
|
+
vmla.f32 q2, q5, q11
|
|
130
|
+
vmla.f32 q1, q8, q14
|
|
131
|
+
vld1.32 {q4,q5}, [WINDOW]
|
|
132
|
+
vld1.32 {q10,q11}, [B0, :128]
|
|
133
|
+
add WINDOW, WINDOW, #96
|
|
134
|
+
sub B0, B0, #96
|
|
135
|
+
vmla.f32 q3, q4, q10
|
|
136
|
+
vmla.f32 q0, q6, q12
|
|
137
|
+
vmla.f32 q2, q7, q13
|
|
138
|
+
vmla.f32 q1, q9, q15
|
|
139
|
+
vmla.f32 q3, q5, q11
|
|
140
|
+
vmvn.i32 q5, #0xb9000000
|
|
141
|
+
vpadd.f32 d0, d0, d1
|
|
142
|
+
vpadd.f32 d4, d4, d5
|
|
143
|
+
vpadd.f32 d2, d2, d3
|
|
144
|
+
vpadd.f32 d6, d6, d7
|
|
145
|
+
vld1.32 {q6}, [sp, :128]
|
|
146
|
+
vpadd.f32 d0, d0, d4
|
|
147
|
+
vpadd.f32 d1, d2, d6
|
|
148
|
+
|
|
149
|
+
vcvt.s32.f32 q3, q0, #16
|
|
150
|
+
vacgt.f32 q5, q0, q5
|
|
151
|
+
vld2.32 {q1,q2}, [SAMPLES]
|
|
152
|
+
vshr.u32 q5, q5, #31
|
|
153
|
+
vmov q1, q3
|
|
154
|
+
vst2.32 {q1,q2}, [SAMPLES]!
|
|
155
|
+
vadd.i32 q5, q5, q6
|
|
156
|
+
vst1.32 {q5}, [sp, :128]
|
|
157
|
+
|
|
158
|
+
subs r3, r3, #1
|
|
159
|
+
bne .Loop_start_2
|
|
160
|
+
|
|
161
|
+
vld1.32 {q0}, [sp, :128]
|
|
162
|
+
vpadd.i32 d0, d0, d1
|
|
163
|
+
vpadd.i32 d0, d0, d0
|
|
164
|
+
vmov.32 r0, d0[0]
|
|
165
|
+
|
|
166
|
+
mov sp, r6
|
|
167
|
+
vpop {q4-q7}
|
|
168
|
+
pop {r4-r6, pc}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/*
|
|
2
|
+
synth_ntom.h: ntom-resampling synth functions
|
|
3
|
+
|
|
4
|
+
This header is used multiple times to create different variants of this function.
|
|
5
|
+
Hint: MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T as well as WRITE_SAMPLE do vary.
|
|
6
|
+
|
|
7
|
+
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
8
|
+
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
9
|
+
initially written by Michael Hipp, generalized by Thomas Orgis
|
|
10
|
+
|
|
11
|
+
Well, this is very simple resampling... you may or may not like what you hear.
|
|
12
|
+
But it's cheap.
|
|
13
|
+
But still, we don't implement a non-autoincrement version of this one.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/* Note: These mono functions would also work generically,
|
|
17
|
+
it's just that they need a runtime calculation for the conversion loop...
|
|
18
|
+
The fixed XtoY functions have the chance for loop unrolling... */
|
|
19
|
+
|
|
20
|
+
int MONO_NAME(real *bandPtr, mpg123_handle *fr)
|
|
21
|
+
{
|
|
22
|
+
SAMPLE_T samples_tmp[8*64];
|
|
23
|
+
SAMPLE_T *tmp1 = samples_tmp;
|
|
24
|
+
size_t i;
|
|
25
|
+
int ret;
|
|
26
|
+
|
|
27
|
+
size_t pnt = fr->buffer.fill;
|
|
28
|
+
unsigned char *samples = fr->buffer.data;
|
|
29
|
+
fr->buffer.data = (unsigned char*) samples_tmp;
|
|
30
|
+
fr->buffer.fill = 0;
|
|
31
|
+
ret = SYNTH_NAME(bandPtr, 0, fr, 1);
|
|
32
|
+
fr->buffer.data = samples;
|
|
33
|
+
|
|
34
|
+
samples += pnt;
|
|
35
|
+
for(i=0;i<(fr->buffer.fill/(2*sizeof(SAMPLE_T)));i++)
|
|
36
|
+
{
|
|
37
|
+
*( (SAMPLE_T *)samples) = *tmp1;
|
|
38
|
+
samples += sizeof(SAMPLE_T);
|
|
39
|
+
tmp1 += 2;
|
|
40
|
+
}
|
|
41
|
+
fr->buffer.fill = pnt + (fr->buffer.fill/2);
|
|
42
|
+
|
|
43
|
+
return ret;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr)
|
|
48
|
+
{
|
|
49
|
+
size_t i;
|
|
50
|
+
int ret;
|
|
51
|
+
size_t pnt1 = fr->buffer.fill;
|
|
52
|
+
unsigned char *samples = fr->buffer.data + pnt1;
|
|
53
|
+
|
|
54
|
+
ret = SYNTH_NAME(bandPtr, 0, fr, 1);
|
|
55
|
+
|
|
56
|
+
for(i=0;i<((fr->buffer.fill-pnt1)/(2*sizeof(SAMPLE_T)));i++)
|
|
57
|
+
{
|
|
58
|
+
((SAMPLE_T *)samples)[1] = ((SAMPLE_T *)samples)[0];
|
|
59
|
+
samples+=2*sizeof(SAMPLE_T);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return ret;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
int SYNTH_NAME(real *bandPtr,int channel, mpg123_handle *fr, int final)
|
|
67
|
+
{
|
|
68
|
+
static const int step = 2;
|
|
69
|
+
SAMPLE_T *samples = (SAMPLE_T *) (fr->buffer.data + fr->buffer.fill);
|
|
70
|
+
|
|
71
|
+
real *b0, **buf; /* (*buf)[0x110]; */
|
|
72
|
+
int clip = 0;
|
|
73
|
+
int bo1;
|
|
74
|
+
int ntom;
|
|
75
|
+
|
|
76
|
+
if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
|
|
77
|
+
|
|
78
|
+
if(!channel)
|
|
79
|
+
{
|
|
80
|
+
fr->bo--;
|
|
81
|
+
fr->bo &= 0xf;
|
|
82
|
+
buf = fr->real_buffs[0];
|
|
83
|
+
ntom = fr->ntom_val[1] = fr->ntom_val[0];
|
|
84
|
+
}
|
|
85
|
+
else
|
|
86
|
+
{
|
|
87
|
+
samples++;
|
|
88
|
+
buf = fr->real_buffs[1];
|
|
89
|
+
ntom = fr->ntom_val[1];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if(fr->bo & 0x1)
|
|
93
|
+
{
|
|
94
|
+
b0 = buf[0];
|
|
95
|
+
bo1 = fr->bo;
|
|
96
|
+
dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
{
|
|
100
|
+
b0 = buf[1];
|
|
101
|
+
bo1 = fr->bo+1;
|
|
102
|
+
dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
{
|
|
106
|
+
register int j;
|
|
107
|
+
real *window = fr->decwin + 16 - bo1;
|
|
108
|
+
|
|
109
|
+
for (j=16;j;j--,window+=0x10)
|
|
110
|
+
{
|
|
111
|
+
real sum;
|
|
112
|
+
|
|
113
|
+
ntom += fr->ntom_step;
|
|
114
|
+
if(ntom < NTOM_MUL)
|
|
115
|
+
{
|
|
116
|
+
window += 16;
|
|
117
|
+
b0 += 16;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
sum = REAL_MUL_SYNTH(*window++, *b0++);
|
|
122
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
123
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
124
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
125
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
126
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
127
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
128
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
129
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
130
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
131
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
132
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
133
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
134
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
135
|
+
sum += REAL_MUL_SYNTH(*window++, *b0++);
|
|
136
|
+
sum -= REAL_MUL_SYNTH(*window++, *b0++);
|
|
137
|
+
|
|
138
|
+
while(ntom >= NTOM_MUL)
|
|
139
|
+
{
|
|
140
|
+
WRITE_SAMPLE(samples,sum,clip);
|
|
141
|
+
samples += step;
|
|
142
|
+
ntom -= NTOM_MUL;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
ntom += fr->ntom_step;
|
|
147
|
+
if(ntom >= NTOM_MUL)
|
|
148
|
+
{
|
|
149
|
+
real sum;
|
|
150
|
+
sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]);
|
|
151
|
+
sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]);
|
|
152
|
+
sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]);
|
|
153
|
+
sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]);
|
|
154
|
+
sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]);
|
|
155
|
+
sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]);
|
|
156
|
+
sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]);
|
|
157
|
+
sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]);
|
|
158
|
+
|
|
159
|
+
while(ntom >= NTOM_MUL)
|
|
160
|
+
{
|
|
161
|
+
WRITE_SAMPLE(samples,sum,clip);
|
|
162
|
+
samples += step;
|
|
163
|
+
ntom -= NTOM_MUL;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
b0-=0x10,window-=0x20;
|
|
168
|
+
window += bo1<<1;
|
|
169
|
+
|
|
170
|
+
for (j=15;j;j--,b0-=0x20,window-=0x10)
|
|
171
|
+
{
|
|
172
|
+
real sum;
|
|
173
|
+
|
|
174
|
+
ntom += fr->ntom_step;
|
|
175
|
+
if(ntom < NTOM_MUL)
|
|
176
|
+
{
|
|
177
|
+
window -= 16;
|
|
178
|
+
b0 += 16;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
sum = REAL_MUL_SYNTH(-*(--window), *b0++);
|
|
183
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
184
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
185
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
186
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
187
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
188
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
189
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
190
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
191
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
192
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
193
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
194
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
195
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
196
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
197
|
+
sum -= REAL_MUL_SYNTH(*(--window), *b0++);
|
|
198
|
+
|
|
199
|
+
while(ntom >= NTOM_MUL)
|
|
200
|
+
{
|
|
201
|
+
WRITE_SAMPLE(samples,sum,clip);
|
|
202
|
+
samples += step;
|
|
203
|
+
ntom -= NTOM_MUL;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
fr->ntom_val[channel] = ntom;
|
|
209
|
+
if(final) fr->buffer.fill = ((unsigned char *) samples - fr->buffer.data - (channel ? sizeof(SAMPLE_T) : 0));
|
|
210
|
+
|
|
211
|
+
return clip;
|
|
212
|
+
}
|
|
213
|
+
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/*
|
|
2
|
+
synth_real.c: The functions for synthesizing real (float) samples, at the end of decoding.
|
|
3
|
+
|
|
4
|
+
copyright 1995-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, heavily dissected and rearranged by Thomas Orgis
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#include "mpg123lib_intern.h"
|
|
10
|
+
#include "sample.h"
|
|
11
|
+
#include "debug.h"
|
|
12
|
+
|
|
13
|
+
#ifdef REAL_IS_FIXED
|
|
14
|
+
#error "Do not build this file with fixed point math!"
|
|
15
|
+
#else
|
|
16
|
+
/*
|
|
17
|
+
Part 3: All synth functions that produce float output.
|
|
18
|
+
What we need is just a special WRITE_SAMPLE. For the generic and i386 functions, that is.
|
|
19
|
+
The optimized synths would need to be changed internally to support float output.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#define SAMPLE_T real
|
|
23
|
+
#define WRITE_SAMPLE(samples,sum,clip) WRITE_REAL_SAMPLE(samples,sum,clip)
|
|
24
|
+
|
|
25
|
+
/* Part 3a: All straight 1to1 decoding functions */
|
|
26
|
+
#define BLOCK 0x40 /* One decoding block is 64 samples. */
|
|
27
|
+
|
|
28
|
+
#define SYNTH_NAME synth_1to1_real
|
|
29
|
+
#include "synth.h"
|
|
30
|
+
#undef SYNTH_NAME
|
|
31
|
+
|
|
32
|
+
/* Mono-related synths; they wrap over _some_ synth_1to1_real (could be generic, could be i386). */
|
|
33
|
+
#define SYNTH_NAME fr->synths.plain[r_1to1][f_real]
|
|
34
|
+
#define MONO_NAME synth_1to1_real_mono
|
|
35
|
+
#define MONO2STEREO_NAME synth_1to1_real_m2s
|
|
36
|
+
#include "synth_mono.h"
|
|
37
|
+
#undef SYNTH_NAME
|
|
38
|
+
#undef MONO_NAME
|
|
39
|
+
#undef MONO2STEREO_NAME
|
|
40
|
+
|
|
41
|
+
#ifdef OPT_X86
|
|
42
|
+
#define NO_AUTOINCREMENT
|
|
43
|
+
#define SYNTH_NAME synth_1to1_real_i386
|
|
44
|
+
#include "synth.h"
|
|
45
|
+
#undef SYNTH_NAME
|
|
46
|
+
/* i386 uses the normal mono functions. */
|
|
47
|
+
#undef NO_AUTOINCREMENT
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
#undef BLOCK
|
|
51
|
+
|
|
52
|
+
/* At least one optimized real decoder... */
|
|
53
|
+
#ifdef OPT_X86_64
|
|
54
|
+
/* Assembler routines. */
|
|
55
|
+
int synth_1to1_real_x86_64_asm(real *window, real *b0, real *samples, int bo1);
|
|
56
|
+
int synth_1to1_real_s_x86_64_asm(real *window, real *b0l, real *b0r, real *samples, int bo1);
|
|
57
|
+
void dct64_real_x86_64(real *out0, real *out1, real *samples);
|
|
58
|
+
/* Hull for C mpg123 API */
|
|
59
|
+
int synth_1to1_real_x86_64(real *bandPtr,int channel, mpg123_handle *fr, int final)
|
|
60
|
+
{
|
|
61
|
+
real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
|
|
62
|
+
|
|
63
|
+
real *b0, **buf;
|
|
64
|
+
int bo1;
|
|
65
|
+
|
|
66
|
+
if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
|
|
67
|
+
|
|
68
|
+
if(!channel)
|
|
69
|
+
{
|
|
70
|
+
fr->bo--;
|
|
71
|
+
fr->bo &= 0xf;
|
|
72
|
+
buf = fr->real_buffs[0];
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
{
|
|
76
|
+
samples++;
|
|
77
|
+
buf = fr->real_buffs[1];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if(fr->bo & 0x1)
|
|
81
|
+
{
|
|
82
|
+
b0 = buf[0];
|
|
83
|
+
bo1 = fr->bo;
|
|
84
|
+
dct64_real_x86_64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
{
|
|
88
|
+
b0 = buf[1];
|
|
89
|
+
bo1 = fr->bo+1;
|
|
90
|
+
dct64_real_x86_64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
synth_1to1_real_x86_64_asm(fr->decwin, b0, samples, bo1);
|
|
94
|
+
|
|
95
|
+
if(final) fr->buffer.fill += 256;
|
|
96
|
+
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
int synth_1to1_real_stereo_x86_64(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
|
|
101
|
+
{
|
|
102
|
+
real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
|
|
103
|
+
|
|
104
|
+
real *b0l, *b0r, **bufl, **bufr;
|
|
105
|
+
int bo1;
|
|
106
|
+
|
|
107
|
+
if(fr->have_eq_settings)
|
|
108
|
+
{
|
|
109
|
+
do_equalizer(bandPtr_l,0,fr->equalizer);
|
|
110
|
+
do_equalizer(bandPtr_r,1,fr->equalizer);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
fr->bo--;
|
|
114
|
+
fr->bo &= 0xf;
|
|
115
|
+
bufl = fr->real_buffs[0];
|
|
116
|
+
bufr = fr->real_buffs[1];
|
|
117
|
+
|
|
118
|
+
if(fr->bo & 0x1)
|
|
119
|
+
{
|
|
120
|
+
b0l = bufl[0];
|
|
121
|
+
b0r = bufr[0];
|
|
122
|
+
bo1 = fr->bo;
|
|
123
|
+
dct64_real_x86_64(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
|
|
124
|
+
dct64_real_x86_64(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
|
|
125
|
+
}
|
|
126
|
+
else
|
|
127
|
+
{
|
|
128
|
+
b0l = bufl[1];
|
|
129
|
+
b0r = bufr[1];
|
|
130
|
+
bo1 = fr->bo+1;
|
|
131
|
+
dct64_real_x86_64(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
|
|
132
|
+
dct64_real_x86_64(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
synth_1to1_real_s_x86_64_asm(fr->decwin, b0l, b0r, samples, bo1);
|
|
136
|
+
|
|
137
|
+
fr->buffer.fill += 256;
|
|
138
|
+
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
#endif
|
|
142
|
+
|
|
143
|
+
#ifdef OPT_SSE
|
|
144
|
+
/* Assembler routines. */
|
|
145
|
+
int synth_1to1_real_sse_asm(real *window, real *b0, real *samples, int bo1);
|
|
146
|
+
int synth_1to1_real_s_sse_asm(real *window, real *b0l, real *b0r, real *samples, int bo1);
|
|
147
|
+
void dct64_real_sse(real *out0, real *out1, real *samples);
|
|
148
|
+
/* Hull for C mpg123 API */
|
|
149
|
+
int synth_1to1_real_sse(real *bandPtr,int channel, mpg123_handle *fr, int final)
|
|
150
|
+
{
|
|
151
|
+
real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
|
|
152
|
+
|
|
153
|
+
real *b0, **buf;
|
|
154
|
+
int bo1;
|
|
155
|
+
|
|
156
|
+
if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
|
|
157
|
+
|
|
158
|
+
if(!channel)
|
|
159
|
+
{
|
|
160
|
+
fr->bo--;
|
|
161
|
+
fr->bo &= 0xf;
|
|
162
|
+
buf = fr->real_buffs[0];
|
|
163
|
+
}
|
|
164
|
+
else
|
|
165
|
+
{
|
|
166
|
+
samples++;
|
|
167
|
+
buf = fr->real_buffs[1];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if(fr->bo & 0x1)
|
|
171
|
+
{
|
|
172
|
+
b0 = buf[0];
|
|
173
|
+
bo1 = fr->bo;
|
|
174
|
+
dct64_real_sse(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
|
|
175
|
+
}
|
|
176
|
+
else
|
|
177
|
+
{
|
|
178
|
+
b0 = buf[1];
|
|
179
|
+
bo1 = fr->bo+1;
|
|
180
|
+
dct64_real_sse(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
synth_1to1_real_sse_asm(fr->decwin, b0, samples, bo1);
|
|
184
|
+
|
|
185
|
+
if(final) fr->buffer.fill += 256;
|
|
186
|
+
|
|
187
|
+
return 0;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
int synth_1to1_real_stereo_sse(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
|
|
191
|
+
{
|
|
192
|
+
real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
|
|
193
|
+
|
|
194
|
+
real *b0l, *b0r, **bufl, **bufr;
|
|
195
|
+
int bo1;
|
|
196
|
+
|
|
197
|
+
if(fr->have_eq_settings)
|
|
198
|
+
{
|
|
199
|
+
do_equalizer(bandPtr_l,0,fr->equalizer);
|
|
200
|
+
do_equalizer(bandPtr_r,1,fr->equalizer);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
fr->bo--;
|
|
204
|
+
fr->bo &= 0xf;
|
|
205
|
+
bufl = fr->real_buffs[0];
|
|
206
|
+
bufr = fr->real_buffs[1];
|
|
207
|
+
|
|
208
|
+
if(fr->bo & 0x1)
|
|
209
|
+
{
|
|
210
|
+
b0l = bufl[0];
|
|
211
|
+
b0r = bufr[0];
|
|
212
|
+
bo1 = fr->bo;
|
|
213
|
+
dct64_real_sse(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
|
|
214
|
+
dct64_real_sse(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
|
|
215
|
+
}
|
|
216
|
+
else
|
|
217
|
+
{
|
|
218
|
+
b0l = bufl[1];
|
|
219
|
+
b0r = bufr[1];
|
|
220
|
+
bo1 = fr->bo+1;
|
|
221
|
+
dct64_real_sse(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
|
|
222
|
+
dct64_real_sse(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
synth_1to1_real_s_sse_asm(fr->decwin, b0l, b0r, samples, bo1);
|
|
226
|
+
|
|
227
|
+
fr->buffer.fill += 256;
|
|
228
|
+
|
|
229
|
+
return 0;
|
|
230
|
+
}
|
|
231
|
+
#endif
|
|
232
|
+
|
|
233
|
+
#ifdef OPT_NEON
|
|
234
|
+
/* Assembler routines. */
|
|
235
|
+
int synth_1to1_real_neon_asm(real *window, real *b0, real *samples, int bo1);
|
|
236
|
+
int synth_1to1_real_s_neon_asm(real *window, real *b0l, real *b0r, real *samples, int bo1);
|
|
237
|
+
void dct64_real_neon(real *out0, real *out1, real *samples);
|
|
238
|
+
/* Hull for C mpg123 API */
|
|
239
|
+
int synth_1to1_real_neon(real *bandPtr,int channel, mpg123_handle *fr, int final)
|
|
240
|
+
{
|
|
241
|
+
real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
|
|
242
|
+
|
|
243
|
+
real *b0, **buf;
|
|
244
|
+
int bo1;
|
|
245
|
+
|
|
246
|
+
if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
|
|
247
|
+
|
|
248
|
+
if(!channel)
|
|
249
|
+
{
|
|
250
|
+
fr->bo--;
|
|
251
|
+
fr->bo &= 0xf;
|
|
252
|
+
buf = fr->real_buffs[0];
|
|
253
|
+
}
|
|
254
|
+
else
|
|
255
|
+
{
|
|
256
|
+
samples++;
|
|
257
|
+
buf = fr->real_buffs[1];
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if(fr->bo & 0x1)
|
|
261
|
+
{
|
|
262
|
+
b0 = buf[0];
|
|
263
|
+
bo1 = fr->bo;
|
|
264
|
+
dct64_real_neon(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
|
|
265
|
+
}
|
|
266
|
+
else
|
|
267
|
+
{
|
|
268
|
+
b0 = buf[1];
|
|
269
|
+
bo1 = fr->bo+1;
|
|
270
|
+
dct64_real_neon(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
synth_1to1_real_neon_asm(fr->decwin, b0, samples, bo1);
|
|
274
|
+
|
|
275
|
+
if(final) fr->buffer.fill += 256;
|
|
276
|
+
|
|
277
|
+
return 0;
|
|
278
|
+
}
|
|
279
|
+
int synth_1to1_real_stereo_neon(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
|
|
280
|
+
{
|
|
281
|
+
real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
|
|
282
|
+
|
|
283
|
+
real *b0l, *b0r, **bufl, **bufr;
|
|
284
|
+
int bo1;
|
|
285
|
+
|
|
286
|
+
if(fr->have_eq_settings)
|
|
287
|
+
{
|
|
288
|
+
do_equalizer(bandPtr_l,0,fr->equalizer);
|
|
289
|
+
do_equalizer(bandPtr_r,1,fr->equalizer);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
fr->bo--;
|
|
293
|
+
fr->bo &= 0xf;
|
|
294
|
+
bufl = fr->real_buffs[0];
|
|
295
|
+
bufr = fr->real_buffs[1];
|
|
296
|
+
|
|
297
|
+
if(fr->bo & 0x1)
|
|
298
|
+
{
|
|
299
|
+
b0l = bufl[0];
|
|
300
|
+
b0r = bufr[0];
|
|
301
|
+
bo1 = fr->bo;
|
|
302
|
+
dct64_real_neon(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
|
|
303
|
+
dct64_real_neon(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
|
|
304
|
+
}
|
|
305
|
+
else
|
|
306
|
+
{
|
|
307
|
+
b0l = bufl[1];
|
|
308
|
+
b0r = bufr[1];
|
|
309
|
+
bo1 = fr->bo+1;
|
|
310
|
+
dct64_real_neon(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
|
|
311
|
+
dct64_real_neon(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
synth_1to1_real_s_neon_asm(fr->decwin, b0l, b0r, samples, bo1);
|
|
315
|
+
|
|
316
|
+
fr->buffer.fill += 256;
|
|
317
|
+
|
|
318
|
+
return 0;
|
|
319
|
+
}
|
|
320
|
+
#endif
|
|
321
|
+
|
|
322
|
+
#ifndef NO_DOWNSAMPLE
|
|
323
|
+
|
|
324
|
+
/*
|
|
325
|
+
Part 3b: 2to1 synth. Only generic and i386.
|
|
326
|
+
*/
|
|
327
|
+
#define BLOCK 0x20 /* One decoding block is 32 samples. */
|
|
328
|
+
|
|
329
|
+
#define SYNTH_NAME synth_2to1_real
|
|
330
|
+
#include "synth.h"
|
|
331
|
+
#undef SYNTH_NAME
|
|
332
|
+
|
|
333
|
+
/* Mono-related synths; they wrap over _some_ synth_2to1_real (could be generic, could be i386). */
|
|
334
|
+
#define SYNTH_NAME fr->synths.plain[r_2to1][f_real]
|
|
335
|
+
#define MONO_NAME synth_2to1_real_mono
|
|
336
|
+
#define MONO2STEREO_NAME synth_2to1_real_m2s
|
|
337
|
+
#include "synth_mono.h"
|
|
338
|
+
#undef SYNTH_NAME
|
|
339
|
+
#undef MONO_NAME
|
|
340
|
+
#undef MONO2STEREO_NAME
|
|
341
|
+
|
|
342
|
+
#ifdef OPT_X86
|
|
343
|
+
#define NO_AUTOINCREMENT
|
|
344
|
+
#define SYNTH_NAME synth_2to1_real_i386
|
|
345
|
+
#include "synth.h"
|
|
346
|
+
#undef SYNTH_NAME
|
|
347
|
+
/* i386 uses the normal mono functions. */
|
|
348
|
+
#undef NO_AUTOINCREMENT
|
|
349
|
+
#endif
|
|
350
|
+
|
|
351
|
+
#undef BLOCK
|
|
352
|
+
|
|
353
|
+
/*
|
|
354
|
+
Part 3c: 4to1 synth. Only generic and i386.
|
|
355
|
+
*/
|
|
356
|
+
#define BLOCK 0x10 /* One decoding block is 16 samples. */
|
|
357
|
+
|
|
358
|
+
#define SYNTH_NAME synth_4to1_real
|
|
359
|
+
#include "synth.h"
|
|
360
|
+
#undef SYNTH_NAME
|
|
361
|
+
|
|
362
|
+
/* Mono-related synths; they wrap over _some_ synth_4to1_real (could be generic, could be i386). */
|
|
363
|
+
#define SYNTH_NAME fr->synths.plain[r_4to1][f_real]
|
|
364
|
+
#define MONO_NAME synth_4to1_real_mono
|
|
365
|
+
#define MONO2STEREO_NAME synth_4to1_real_m2s
|
|
366
|
+
#include "synth_mono.h"
|
|
367
|
+
#undef SYNTH_NAME
|
|
368
|
+
#undef MONO_NAME
|
|
369
|
+
#undef MONO2STEREO_NAME
|
|
370
|
+
|
|
371
|
+
#ifdef OPT_X86
|
|
372
|
+
#define NO_AUTOINCREMENT
|
|
373
|
+
#define SYNTH_NAME synth_4to1_real_i386
|
|
374
|
+
#include "synth.h"
|
|
375
|
+
#undef SYNTH_NAME
|
|
376
|
+
/* i386 uses the normal mono functions. */
|
|
377
|
+
#undef NO_AUTOINCREMENT
|
|
378
|
+
#endif
|
|
379
|
+
|
|
380
|
+
#undef BLOCK
|
|
381
|
+
|
|
382
|
+
#endif /* NO_DOWNSAMPLE */
|
|
383
|
+
|
|
384
|
+
#ifndef NO_NTOM
|
|
385
|
+
/*
|
|
386
|
+
Part 3d: ntom synth.
|
|
387
|
+
Same procedure as above... Just no extra play anymore, straight synth that may use an optimized dct64.
|
|
388
|
+
*/
|
|
389
|
+
|
|
390
|
+
/* These are all in one header, there's no flexibility to gain. */
|
|
391
|
+
#define SYNTH_NAME synth_ntom_real
|
|
392
|
+
#define MONO_NAME synth_ntom_real_mono
|
|
393
|
+
#define MONO2STEREO_NAME synth_ntom_real_m2s
|
|
394
|
+
#include "synth_ntom.h"
|
|
395
|
+
#undef SYNTH_NAME
|
|
396
|
+
#undef MONO_NAME
|
|
397
|
+
#undef MONO2STEREO_NAME
|
|
398
|
+
|
|
399
|
+
#endif
|
|
400
|
+
|
|
401
|
+
#undef SAMPLE_T
|
|
402
|
+
#undef WRITE_SAMPLE
|
|
403
|
+
|
|
404
|
+
#endif /* non-fixed type */
|