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,26 @@
|
|
|
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-2007 *
|
|
9
|
+
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
|
10
|
+
* *
|
|
11
|
+
********************************************************************
|
|
12
|
+
|
|
13
|
+
function: window functions
|
|
14
|
+
last mod: $Id: window.h 13293 2007-07-24 00:09:47Z xiphmont $
|
|
15
|
+
|
|
16
|
+
********************************************************************/
|
|
17
|
+
|
|
18
|
+
#ifndef _V_WINDOW_
|
|
19
|
+
#define _V_WINDOW_
|
|
20
|
+
|
|
21
|
+
extern float *_vorbis_window_get(int n);
|
|
22
|
+
extern void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
|
|
23
|
+
int lW,int W,int nW);
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
#endif
|
data/src/rubyext.c
ADDED
|
@@ -0,0 +1,2329 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ruby_binding.c is part of the Scorched End Audio Library (SEAL) and is
|
|
3
|
+
* licensed under the terms of the GNU Lesser General Public License.
|
|
4
|
+
* See COPYING attached with the library.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include <stdlib.h>
|
|
8
|
+
#include <seal.h>
|
|
9
|
+
#include "ruby.h"
|
|
10
|
+
|
|
11
|
+
static const char WAV_SYM[] = "wav";
|
|
12
|
+
static const char OV_SYM[] = "ov";
|
|
13
|
+
static const char MPG_SYM[] = "mpg";
|
|
14
|
+
|
|
15
|
+
static const char UNDETERMINED_SYM[] = "undetermined";
|
|
16
|
+
static const char STATIC_SYM[] = "static";
|
|
17
|
+
static const char STREAMING_SYM[] = "streaming";
|
|
18
|
+
|
|
19
|
+
static const char INITIAL_SYM[] = "initial";
|
|
20
|
+
static const char PLAYING_SYM[] = "playing";
|
|
21
|
+
static const char PAUSED_SYM[] = "paused";
|
|
22
|
+
static const char STOPPED_SYM[] = "stopped";
|
|
23
|
+
|
|
24
|
+
static VALUE mSeal;
|
|
25
|
+
static VALUE eSealError;
|
|
26
|
+
|
|
27
|
+
#define DEFINE_ALLOCATOR(obj) \
|
|
28
|
+
static \
|
|
29
|
+
VALUE \
|
|
30
|
+
alloc_##obj(VALUE klass) \
|
|
31
|
+
{ \
|
|
32
|
+
return alloc(klass, sizeof (seal_##obj##_t), free_##obj); \
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#define DEFINE_DEALLOCATOR(obj) \
|
|
36
|
+
static \
|
|
37
|
+
void \
|
|
38
|
+
free_##obj(void* obj) \
|
|
39
|
+
{ \
|
|
40
|
+
free_obj(obj, seal_destroy_##obj); \
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static
|
|
44
|
+
VALUE
|
|
45
|
+
name2sym(const char* name)
|
|
46
|
+
{
|
|
47
|
+
return ID2SYM(rb_intern(name));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static
|
|
51
|
+
void*
|
|
52
|
+
validate_memory(void* memory)
|
|
53
|
+
{
|
|
54
|
+
if (memory == 0)
|
|
55
|
+
rb_raise(eSealError, "%s", seal_get_err_msg(SEAL_CANNOT_ALLOC_MEM));
|
|
56
|
+
return memory;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static
|
|
60
|
+
void
|
|
61
|
+
check_seal_err(seal_err_t err)
|
|
62
|
+
{
|
|
63
|
+
if (err != SEAL_OK)
|
|
64
|
+
rb_raise(eSealError, "%s", seal_get_err_msg(err));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static
|
|
68
|
+
void
|
|
69
|
+
free_obj(void* obj, void *destroy)
|
|
70
|
+
{
|
|
71
|
+
((seal_err_t (*)(void*)) destroy)(obj);
|
|
72
|
+
free(obj);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
DEFINE_DEALLOCATOR(src)
|
|
76
|
+
DEFINE_DEALLOCATOR(buf)
|
|
77
|
+
DEFINE_DEALLOCATOR(rvb)
|
|
78
|
+
DEFINE_DEALLOCATOR(efs)
|
|
79
|
+
|
|
80
|
+
static
|
|
81
|
+
void
|
|
82
|
+
free_stream(void* stream)
|
|
83
|
+
{
|
|
84
|
+
free_obj(stream, seal_close_stream);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static
|
|
88
|
+
VALUE
|
|
89
|
+
alloc(VALUE klass, size_t size, void* free)
|
|
90
|
+
{
|
|
91
|
+
void* obj;
|
|
92
|
+
|
|
93
|
+
obj = validate_memory(calloc(1, size));
|
|
94
|
+
|
|
95
|
+
return Data_Wrap_Struct(klass, 0, free, obj);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
DEFINE_ALLOCATOR(src)
|
|
99
|
+
DEFINE_ALLOCATOR(buf)
|
|
100
|
+
DEFINE_ALLOCATOR(stream)
|
|
101
|
+
DEFINE_ALLOCATOR(rvb)
|
|
102
|
+
DEFINE_ALLOCATOR(efs)
|
|
103
|
+
|
|
104
|
+
static
|
|
105
|
+
void
|
|
106
|
+
extract_3float(VALUE rarr, float* x, float* y, float* z)
|
|
107
|
+
{
|
|
108
|
+
rarr = rb_convert_type(rarr, T_ARRAY, "Array", "to_a");
|
|
109
|
+
*x = NUM2DBL(rb_ary_entry(rarr, 0));
|
|
110
|
+
*y = NUM2DBL(rb_ary_entry(rarr, 1));
|
|
111
|
+
*z = NUM2DBL(rb_ary_entry(rarr, 2));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static
|
|
115
|
+
void
|
|
116
|
+
convert_bulk_float(VALUE* rtuple, float* tuple, int len)
|
|
117
|
+
{
|
|
118
|
+
int i;
|
|
119
|
+
for (i = 0; i < len; ++i)
|
|
120
|
+
rtuple[i] = rb_float_new(tuple[i]);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static
|
|
124
|
+
VALUE
|
|
125
|
+
set_obj_float(VALUE robj, VALUE rflt, void* set)
|
|
126
|
+
{
|
|
127
|
+
check_seal_err(((seal_err_t (*)(void*, float)) set)(
|
|
128
|
+
DATA_PTR(robj), NUM2DBL(rflt)
|
|
129
|
+
));
|
|
130
|
+
|
|
131
|
+
return rflt;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
static
|
|
135
|
+
VALUE
|
|
136
|
+
set_obj_int(VALUE robj, VALUE rnum, void* set)
|
|
137
|
+
{
|
|
138
|
+
check_seal_err(((seal_err_t (*)(void*, int)) set)(
|
|
139
|
+
DATA_PTR(robj), NUM2INT(rnum)
|
|
140
|
+
));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static
|
|
144
|
+
VALUE
|
|
145
|
+
set_obj_ulong(VALUE robj, VALUE rnum, void* set)
|
|
146
|
+
{
|
|
147
|
+
check_seal_err(((seal_err_t (*)(void*, int)) set)(
|
|
148
|
+
DATA_PTR(robj), NUM2ULONG(rnum)
|
|
149
|
+
));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
static
|
|
153
|
+
VALUE
|
|
154
|
+
set_obj_char(VALUE robj, VALUE rbool, void* set)
|
|
155
|
+
{
|
|
156
|
+
check_seal_err(((seal_err_t (*)(void*, char)) set)(
|
|
157
|
+
DATA_PTR(robj), RTEST(rbool)
|
|
158
|
+
));
|
|
159
|
+
|
|
160
|
+
return rbool;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
static
|
|
164
|
+
VALUE
|
|
165
|
+
set_obj_3float(VALUE robj, VALUE rarr, void* set)
|
|
166
|
+
{
|
|
167
|
+
float x, y, z;
|
|
168
|
+
|
|
169
|
+
extract_3float(rarr, &x, &y, &z);
|
|
170
|
+
check_seal_err(((seal_err_t (*)(void*, float, float, float)) set)(
|
|
171
|
+
DATA_PTR(robj), x, y, z
|
|
172
|
+
));
|
|
173
|
+
|
|
174
|
+
return rarr;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
static
|
|
178
|
+
void
|
|
179
|
+
get_obj_attr(VALUE robj, void* pvalue, void* get)
|
|
180
|
+
{
|
|
181
|
+
check_seal_err(((seal_err_t (*)(void*, void*)) get)(
|
|
182
|
+
DATA_PTR(robj), pvalue
|
|
183
|
+
));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
static
|
|
187
|
+
VALUE
|
|
188
|
+
get_obj_float(VALUE robj, void* get)
|
|
189
|
+
{
|
|
190
|
+
float flt;
|
|
191
|
+
|
|
192
|
+
get_obj_attr(robj, &flt, get);
|
|
193
|
+
|
|
194
|
+
return rb_float_new(flt);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
static
|
|
198
|
+
VALUE
|
|
199
|
+
get_obj_int(VALUE robj, void* get)
|
|
200
|
+
{
|
|
201
|
+
int integer;
|
|
202
|
+
|
|
203
|
+
get_obj_attr(robj, &integer, get);
|
|
204
|
+
|
|
205
|
+
return INT2NUM(integer);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
static
|
|
209
|
+
VALUE
|
|
210
|
+
get_obj_ulong(VALUE robj, void* get)
|
|
211
|
+
{
|
|
212
|
+
unsigned long long_integer;
|
|
213
|
+
|
|
214
|
+
get_obj_attr(robj, &long_integer, get);
|
|
215
|
+
|
|
216
|
+
return ULONG2NUM(long_integer);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
static
|
|
220
|
+
VALUE
|
|
221
|
+
get_obj_char(VALUE robj, void* get)
|
|
222
|
+
{
|
|
223
|
+
char bool;
|
|
224
|
+
|
|
225
|
+
get_obj_attr(robj, &bool, get);
|
|
226
|
+
|
|
227
|
+
return bool ? Qtrue : Qfalse;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
static
|
|
231
|
+
VALUE
|
|
232
|
+
get_obj_3float(VALUE robj, void* get)
|
|
233
|
+
{
|
|
234
|
+
float tuple[3];
|
|
235
|
+
VALUE rtuple[3];
|
|
236
|
+
|
|
237
|
+
check_seal_err(((seal_err_t (*)(void*, float*, float*, float*)) get)(
|
|
238
|
+
DATA_PTR(robj), tuple, tuple + 1, tuple + 2
|
|
239
|
+
));
|
|
240
|
+
convert_bulk_float(rtuple, tuple, 3);
|
|
241
|
+
|
|
242
|
+
return rb_ary_new4(3, rtuple);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
static
|
|
246
|
+
seal_fmt_t
|
|
247
|
+
map_format(VALUE symbol)
|
|
248
|
+
{
|
|
249
|
+
if (NIL_P(symbol))
|
|
250
|
+
return SEAL_UNKNOWN_FMT;
|
|
251
|
+
|
|
252
|
+
symbol = rb_convert_type(symbol, T_SYMBOL, "Symbol", "to_sym");
|
|
253
|
+
if (symbol == name2sym(WAV_SYM))
|
|
254
|
+
return SEAL_WAV_FMT;
|
|
255
|
+
else if (symbol == name2sym(OV_SYM))
|
|
256
|
+
return SEAL_OV_FMT;
|
|
257
|
+
else if (symbol == name2sym(MPG_SYM))
|
|
258
|
+
return SEAL_MPG_FMT;
|
|
259
|
+
else
|
|
260
|
+
return SEAL_UNKNOWN_FMT;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
static
|
|
264
|
+
void
|
|
265
|
+
input_audio(int argc, VALUE* argv, void* media, void* _input)
|
|
266
|
+
{
|
|
267
|
+
typedef seal_err_t inputter_t(void*, const char*, seal_fmt_t);
|
|
268
|
+
|
|
269
|
+
VALUE filename;
|
|
270
|
+
VALUE format;
|
|
271
|
+
|
|
272
|
+
inputter_t* input = (inputter_t*) _input;
|
|
273
|
+
rb_scan_args(argc, argv, "11", &filename, &format);
|
|
274
|
+
check_seal_err(input(media, rb_string_value_ptr(&filename),
|
|
275
|
+
map_format(format)));
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
static
|
|
279
|
+
VALUE
|
|
280
|
+
set_listener_3float(VALUE rarr, seal_err_t (*set)(float, float, float))
|
|
281
|
+
{
|
|
282
|
+
float x, y, z;
|
|
283
|
+
|
|
284
|
+
extract_3float(rarr, &x, &y, &z);
|
|
285
|
+
check_seal_err(set(x, y, z));
|
|
286
|
+
|
|
287
|
+
return rarr;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
static
|
|
291
|
+
VALUE
|
|
292
|
+
get_listener_3float(seal_err_t (*get)(float*, float*, float*))
|
|
293
|
+
{
|
|
294
|
+
float tuple[3];
|
|
295
|
+
VALUE rtuple[3];
|
|
296
|
+
|
|
297
|
+
check_seal_err(get(tuple, tuple + 1, tuple + 2));
|
|
298
|
+
convert_bulk_float(rtuple, tuple, 3);
|
|
299
|
+
|
|
300
|
+
return rb_ary_new4(3, rtuple);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
static
|
|
304
|
+
VALUE
|
|
305
|
+
set_listener_float(VALUE rflt, seal_err_t (*set)(float))
|
|
306
|
+
{
|
|
307
|
+
check_seal_err(set(NUM2DBL(rflt)));
|
|
308
|
+
|
|
309
|
+
return rflt;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
static
|
|
313
|
+
VALUE
|
|
314
|
+
get_listener_float(seal_err_t (*get)(float*))
|
|
315
|
+
{
|
|
316
|
+
float value;
|
|
317
|
+
|
|
318
|
+
check_seal_err(get(&value));
|
|
319
|
+
|
|
320
|
+
return rb_float_new(value);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
static
|
|
324
|
+
VALUE
|
|
325
|
+
src_op(VALUE rsrc, seal_err_t (*op)(seal_src_t*))
|
|
326
|
+
{
|
|
327
|
+
check_seal_err(op(DATA_PTR(rsrc)));
|
|
328
|
+
|
|
329
|
+
return rsrc;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
static
|
|
333
|
+
seal_stream_t*
|
|
334
|
+
extract_stream(VALUE rstream)
|
|
335
|
+
{
|
|
336
|
+
return DATA_PTR(rstream);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/*
|
|
340
|
+
* call-seq:
|
|
341
|
+
* Seal.startup -> nil
|
|
342
|
+
* Seal.startup(str) -> nil
|
|
343
|
+
*
|
|
344
|
+
* Initializes Seal by specifying the device name _str_. This function is
|
|
345
|
+
* not re-entrant nor thread-safe and should be called only once per Seal
|
|
346
|
+
* session. Match a call to <code>seal_startup</code> with a call to
|
|
347
|
+
* <code>seal_cleanup</code> and never call <code>seal_starup</code> twice in
|
|
348
|
+
* a row.
|
|
349
|
+
*/
|
|
350
|
+
static
|
|
351
|
+
VALUE
|
|
352
|
+
startup(int argc, VALUE* argv)
|
|
353
|
+
{
|
|
354
|
+
VALUE rstring;
|
|
355
|
+
|
|
356
|
+
rb_scan_args(argc, argv, "01", &rstring);
|
|
357
|
+
check_seal_err(seal_startup(NIL_P(rstring)
|
|
358
|
+
? 0 : rb_string_value_ptr(&rstring)));
|
|
359
|
+
|
|
360
|
+
return Qnil;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/*
|
|
364
|
+
* call-seq:
|
|
365
|
+
* Seal.cleanup -> nil
|
|
366
|
+
*
|
|
367
|
+
* Uninitializes Seal and invalidate all Seal objects. Thread-unsafe.
|
|
368
|
+
*/
|
|
369
|
+
static
|
|
370
|
+
VALUE
|
|
371
|
+
cleanup()
|
|
372
|
+
{
|
|
373
|
+
seal_cleanup();
|
|
374
|
+
|
|
375
|
+
return Qnil;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/*
|
|
379
|
+
* call-seq:
|
|
380
|
+
* Seal.per_source_effect_limit -> fixnum
|
|
381
|
+
*
|
|
382
|
+
* Returns the maximum number of effect slots a source can feed concurrently.
|
|
383
|
+
*/
|
|
384
|
+
static
|
|
385
|
+
VALUE
|
|
386
|
+
per_source_effect_limit()
|
|
387
|
+
{
|
|
388
|
+
return INT2NUM(seal_get_per_src_effect_limit());
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/*
|
|
392
|
+
* call-seq:
|
|
393
|
+
* Seal::Buffer.new(filename [, format]) -> buffer
|
|
394
|
+
*
|
|
395
|
+
* Initializes a new buffer and loads it with audio from _filename_. _format_
|
|
396
|
+
* specifies the format of the audio file; automatic recognition of the audio
|
|
397
|
+
* format will be attempted if _format_ is not specified. See Seal::Format for
|
|
398
|
+
* possible values. Sets all the attributes appropriately.
|
|
399
|
+
*/
|
|
400
|
+
static
|
|
401
|
+
VALUE
|
|
402
|
+
init_buf(int argc, VALUE* argv, VALUE rbuf)
|
|
403
|
+
{
|
|
404
|
+
seal_buf_t* buf;
|
|
405
|
+
|
|
406
|
+
buf = DATA_PTR(rbuf);
|
|
407
|
+
check_seal_err(seal_init_buf(buf));
|
|
408
|
+
input_audio(argc, argv, buf, seal_load2buf);
|
|
409
|
+
|
|
410
|
+
return rbuf;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/*
|
|
414
|
+
* call-seq:
|
|
415
|
+
* buffer.load(filename [, format]) -> buffer
|
|
416
|
+
*
|
|
417
|
+
* Loads audio from _filename_ to _buffer_ which must not be currently used by
|
|
418
|
+
* any source. Sets all the attributes appropriately. _format_ specifies the
|
|
419
|
+
* format of the audio file; automatic recognition of the audio format will be
|
|
420
|
+
* attempted if _format_ is not specified. See Seal::Format for possible
|
|
421
|
+
* values.Sets all the attributes appropriately.
|
|
422
|
+
*/
|
|
423
|
+
static
|
|
424
|
+
VALUE
|
|
425
|
+
load_buf(int argc, VALUE* argv, VALUE rbuf)
|
|
426
|
+
{
|
|
427
|
+
input_audio(argc, argv, DATA_PTR(rbuf), seal_load2buf);
|
|
428
|
+
|
|
429
|
+
return rbuf;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/*
|
|
433
|
+
* call-seq:
|
|
434
|
+
* buffer.size -> fixnum
|
|
435
|
+
*
|
|
436
|
+
* Gets the size, in bytes, of _buffer_.
|
|
437
|
+
*/
|
|
438
|
+
static
|
|
439
|
+
VALUE
|
|
440
|
+
get_buf_size(VALUE rbuf)
|
|
441
|
+
{
|
|
442
|
+
return get_obj_int(rbuf, seal_get_buf_size);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/*
|
|
446
|
+
* call-seq:
|
|
447
|
+
* buffer.frequency -> fixnum
|
|
448
|
+
*
|
|
449
|
+
* Gets the frequency (sample rate) of the audio contained in _buffer_.
|
|
450
|
+
*/
|
|
451
|
+
static
|
|
452
|
+
VALUE
|
|
453
|
+
get_buf_freq(VALUE rbuf)
|
|
454
|
+
{
|
|
455
|
+
return get_obj_int(rbuf, seal_get_buf_freq);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/*
|
|
459
|
+
* call-seq:
|
|
460
|
+
* buffer.bit_depth -> fixnum
|
|
461
|
+
*
|
|
462
|
+
* Gets the bit depth (bits per sample) of the audio contained in _buffer_.
|
|
463
|
+
*/
|
|
464
|
+
static
|
|
465
|
+
VALUE
|
|
466
|
+
get_buf_bps(VALUE rbuf)
|
|
467
|
+
{
|
|
468
|
+
return get_obj_int(rbuf, seal_get_buf_bps);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/*
|
|
472
|
+
* call-seq:
|
|
473
|
+
* buffer.channel_count -> fixnum
|
|
474
|
+
*
|
|
475
|
+
* Gets the number of channels of the audio contained in _buffer_.
|
|
476
|
+
*/
|
|
477
|
+
static
|
|
478
|
+
VALUE
|
|
479
|
+
get_buf_nchannels(VALUE rbuf)
|
|
480
|
+
{
|
|
481
|
+
return get_obj_int(rbuf, seal_get_buf_nchannels);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/*
|
|
485
|
+
* call-seq:
|
|
486
|
+
* Seal::Stream.new(filename [, format]) -> stream
|
|
487
|
+
* Seal::Stream.open(filename [, format]) -> stream
|
|
488
|
+
*
|
|
489
|
+
* Opens a audio stream from _filename_. _format_ specifies the format of the
|
|
490
|
+
* audio file; automatic recognition of the audio format will be attempted if
|
|
491
|
+
* _format_ is nil. See Seal::Format for possible values.
|
|
492
|
+
*/
|
|
493
|
+
static
|
|
494
|
+
VALUE
|
|
495
|
+
init_stream(int argc, VALUE* argv, VALUE rstream)
|
|
496
|
+
{
|
|
497
|
+
input_audio(argc, argv, DATA_PTR(rstream), seal_open_stream);
|
|
498
|
+
|
|
499
|
+
return rstream;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/*
|
|
503
|
+
* call-seq:
|
|
504
|
+
* stream.frequency -> fixnum
|
|
505
|
+
*
|
|
506
|
+
* Gets the frequency (sample rate) of the audio contained in _streamed_. The
|
|
507
|
+
* default is 0 when the stream is not opened.
|
|
508
|
+
*/
|
|
509
|
+
static
|
|
510
|
+
VALUE
|
|
511
|
+
get_stream_freq(VALUE rstream)
|
|
512
|
+
{
|
|
513
|
+
return INT2NUM(extract_stream(rstream)->attr.freq);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/*
|
|
517
|
+
* call-seq:
|
|
518
|
+
* stream.bit_depth -> fixnum
|
|
519
|
+
*
|
|
520
|
+
* Gets the bit depth (bits per sample) of the audio contained in _stream_.
|
|
521
|
+
* The default is 16 when the stream is not opened.
|
|
522
|
+
*/
|
|
523
|
+
static
|
|
524
|
+
VALUE
|
|
525
|
+
get_stream_bps(VALUE rstream)
|
|
526
|
+
{
|
|
527
|
+
return INT2NUM(extract_stream(rstream)->attr.bit_depth);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/*
|
|
531
|
+
* call-seq:
|
|
532
|
+
* stream.channel_count -> fixnum
|
|
533
|
+
*
|
|
534
|
+
* Gets the number of channels of the audio contained in _stream_. The default
|
|
535
|
+
* is 1 when the stream is not opened.
|
|
536
|
+
*/
|
|
537
|
+
static
|
|
538
|
+
VALUE
|
|
539
|
+
get_stream_nchannels(VALUE rstream)
|
|
540
|
+
{
|
|
541
|
+
return INT2NUM(extract_stream(rstream)->attr.nchannels);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/*
|
|
545
|
+
* call-seq:
|
|
546
|
+
* stream.rewind -> stream
|
|
547
|
+
*
|
|
548
|
+
* Rewinds _stream_ to the beginning.
|
|
549
|
+
*/
|
|
550
|
+
static
|
|
551
|
+
VALUE
|
|
552
|
+
rewind_stream(VALUE rstream)
|
|
553
|
+
{
|
|
554
|
+
seal_rewind_stream(DATA_PTR(rstream));
|
|
555
|
+
|
|
556
|
+
return rstream;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/*
|
|
560
|
+
* call-seq:
|
|
561
|
+
* stream.close -> stream
|
|
562
|
+
*
|
|
563
|
+
* Closes _stream_.
|
|
564
|
+
*/
|
|
565
|
+
static
|
|
566
|
+
VALUE
|
|
567
|
+
close_stream(VALUE rstream)
|
|
568
|
+
{
|
|
569
|
+
check_seal_err(seal_close_stream(DATA_PTR(rstream)));
|
|
570
|
+
|
|
571
|
+
return rstream;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/*
|
|
575
|
+
* call-seq:
|
|
576
|
+
* Seal::Source.new -> source
|
|
577
|
+
*
|
|
578
|
+
* Initializes a new source.
|
|
579
|
+
*/
|
|
580
|
+
static
|
|
581
|
+
VALUE
|
|
582
|
+
init_src(VALUE rsrc)
|
|
583
|
+
{
|
|
584
|
+
check_seal_err(seal_init_src(DATA_PTR(rsrc)));
|
|
585
|
+
|
|
586
|
+
return rsrc;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/*
|
|
590
|
+
* call-seq:
|
|
591
|
+
* source.play -> source
|
|
592
|
+
*
|
|
593
|
+
* Starts to play _source_. Applying to a playing source will restart the
|
|
594
|
+
* playback from the beginning thus reset the sampling offset too. If the
|
|
595
|
+
* source is a streaming source, restarting the playback will automatically
|
|
596
|
+
* rewind the stream to the beginning. Applying to an initial or stopped
|
|
597
|
+
* source will start start playing and change its state to State::PLAYING.
|
|
598
|
+
* Applying to a paused source will resume playing and change its state to
|
|
599
|
+
* State::PLAYING.
|
|
600
|
+
*/
|
|
601
|
+
static
|
|
602
|
+
VALUE
|
|
603
|
+
play_src(VALUE rsrc)
|
|
604
|
+
{
|
|
605
|
+
return src_op(rsrc, seal_play_src);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/*
|
|
609
|
+
* call-seq:
|
|
610
|
+
* source.pause -> source
|
|
611
|
+
*
|
|
612
|
+
* Pauses the playing of _source_. Applying to a playing source will change
|
|
613
|
+
* its state to State::PAUSED. Applying to an initial, paused or stopped
|
|
614
|
+
* source has no effect.
|
|
615
|
+
*/
|
|
616
|
+
static
|
|
617
|
+
VALUE
|
|
618
|
+
pause_src(VALUE rsrc)
|
|
619
|
+
{
|
|
620
|
+
return src_op(rsrc, seal_pause_src);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/*
|
|
624
|
+
* call-seq:
|
|
625
|
+
* source.stop -> source
|
|
626
|
+
*
|
|
627
|
+
* Stops the playing of _source_. Applying to a playing or paused source will
|
|
628
|
+
* change its state to State::STOPPED. Applying to an initial or stopped
|
|
629
|
+
* source has no effect. Resets the sampling offset.
|
|
630
|
+
*/
|
|
631
|
+
static
|
|
632
|
+
VALUE
|
|
633
|
+
stop_src(VALUE rsrc)
|
|
634
|
+
{
|
|
635
|
+
return src_op(rsrc, seal_stop_src);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
/*
|
|
639
|
+
* call-seq:
|
|
640
|
+
* source.rewind -> source
|
|
641
|
+
*
|
|
642
|
+
* Rewinds _source_ to the beginning. Applying to a playing, paused or stopped
|
|
643
|
+
* source will change its state to State::INITIAL. Applying to an initial
|
|
644
|
+
* source has no effect. The sampling offset will be reset to the beginning.
|
|
645
|
+
* Other attributes are preserved.
|
|
646
|
+
*/
|
|
647
|
+
static
|
|
648
|
+
VALUE
|
|
649
|
+
rewind_src(VALUE rsrc)
|
|
650
|
+
{
|
|
651
|
+
return src_op(rsrc, seal_rewind_src);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/*
|
|
655
|
+
* call-seq:
|
|
656
|
+
* source.buffer = buffer -> buffer
|
|
657
|
+
* source.buffer = nil -> nil
|
|
658
|
+
*
|
|
659
|
+
* Associates _buffer_ with _source_ so that the source is ready to play the
|
|
660
|
+
* audio contained in _buffer_. Can be applied only to sources in the initial
|
|
661
|
+
* or stopped states and that are not of streaming type. If successful, the
|
|
662
|
+
* source will become or remain as Type::STATIC.
|
|
663
|
+
*
|
|
664
|
+
* If nil is specified, the source will give up the buffer it has and will
|
|
665
|
+
* reset the source to Type::UNDETERMINED and the source state to
|
|
666
|
+
* State::STOPPED. It will not free the buffer.
|
|
667
|
+
*/
|
|
668
|
+
static
|
|
669
|
+
VALUE
|
|
670
|
+
set_src_buf(VALUE rsrc, VALUE rbuf)
|
|
671
|
+
{
|
|
672
|
+
seal_buf_t* buf;
|
|
673
|
+
|
|
674
|
+
if (NIL_P(rbuf)) {
|
|
675
|
+
src_op(rsrc, seal_detach_src_audio);
|
|
676
|
+
} else {
|
|
677
|
+
Data_Get_Struct(rbuf, seal_buf_t, buf);
|
|
678
|
+
check_seal_err(seal_set_src_buf(DATA_PTR(rsrc), buf));
|
|
679
|
+
}
|
|
680
|
+
rb_iv_set(rsrc, "@buffer", rbuf);
|
|
681
|
+
|
|
682
|
+
return rbuf;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
/*
|
|
686
|
+
* call-seq:
|
|
687
|
+
* source.buffer -> buffer
|
|
688
|
+
*
|
|
689
|
+
* Gets the buffer of _source_. The default is nil.
|
|
690
|
+
*/
|
|
691
|
+
static
|
|
692
|
+
VALUE
|
|
693
|
+
get_src_buf(VALUE rsrc)
|
|
694
|
+
{
|
|
695
|
+
return rb_iv_get(rsrc, "@buffer");
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/*
|
|
699
|
+
* call-seq:
|
|
700
|
+
* source.stream = stream -> stream
|
|
701
|
+
* source.stream = nil
|
|
702
|
+
*
|
|
703
|
+
* Associates (opened) _stream_ with _source_ so that audio data can be
|
|
704
|
+
* continuously fetched from a file rather than loading everything to memory
|
|
705
|
+
* at once. Can be applied to sources in any playing state but not on static
|
|
706
|
+
* sources. When replacing an attached stream, the new stream must have the
|
|
707
|
+
* same audio format as the old one. Also be aware of the fact that in this
|
|
708
|
+
* case there could still be some chunks of the old stream at the front of the
|
|
709
|
+
* streaming queue waiting to be played. If successful, the source will become
|
|
710
|
+
* or remain as Type::STREAMING. The streaming queue will be filled after this
|
|
711
|
+
* call returns; after the queue starts to be played, #update should be called
|
|
712
|
+
* to refill the queue.
|
|
713
|
+
*
|
|
714
|
+
* If nil is specified, the source will give up the stream it has and will
|
|
715
|
+
* reset the source to Type::UNDETERMINED and the source state to
|
|
716
|
+
* State::STOPPED. It will not free the stream.
|
|
717
|
+
*/
|
|
718
|
+
static
|
|
719
|
+
VALUE
|
|
720
|
+
set_src_stream(VALUE rsrc, VALUE rstream)
|
|
721
|
+
{
|
|
722
|
+
seal_stream_t* stream;
|
|
723
|
+
|
|
724
|
+
if (NIL_P(rstream)) {
|
|
725
|
+
src_op(rsrc, seal_detach_src_audio);
|
|
726
|
+
} else {
|
|
727
|
+
Data_Get_Struct(rstream, seal_stream_t, stream);
|
|
728
|
+
check_seal_err(seal_set_src_stream(DATA_PTR(rsrc), stream));
|
|
729
|
+
}
|
|
730
|
+
rb_iv_set(rsrc, "@stream", rstream);
|
|
731
|
+
|
|
732
|
+
return rstream;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/*
|
|
736
|
+
* call-seq:
|
|
737
|
+
* source.stream -> stream
|
|
738
|
+
*
|
|
739
|
+
* Gets the stream of _source_. The default is nil.
|
|
740
|
+
*/
|
|
741
|
+
static
|
|
742
|
+
VALUE
|
|
743
|
+
get_src_stream(VALUE rsrc)
|
|
744
|
+
{
|
|
745
|
+
return rb_iv_get(rsrc, "@stream");
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/*
|
|
749
|
+
* call-seq:
|
|
750
|
+
* source.update -> source
|
|
751
|
+
*
|
|
752
|
+
* Updates _source_. If _source_ is not up-to-date, the playback will end
|
|
753
|
+
* before the end of the stream is reached. Does nothing if _source_ is not a
|
|
754
|
+
* streaming source. Also does nothing if auto update is on.
|
|
755
|
+
*/
|
|
756
|
+
static
|
|
757
|
+
VALUE update_src(VALUE rsrc)
|
|
758
|
+
{
|
|
759
|
+
return src_op(rsrc, seal_update_src);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/*
|
|
763
|
+
* call-seq:
|
|
764
|
+
* source.position = [flt, flt, flt] -> [flt, flt, flt]
|
|
765
|
+
*
|
|
766
|
+
* Sets the position of _source_ in a right-handed Cartesian coordinate
|
|
767
|
+
* system. Use of NaN and infinity is undefined.
|
|
768
|
+
*/
|
|
769
|
+
static
|
|
770
|
+
VALUE
|
|
771
|
+
set_src_pos(VALUE rsrc, VALUE value)
|
|
772
|
+
{
|
|
773
|
+
return set_obj_3float(rsrc, value, seal_set_src_pos);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/*
|
|
777
|
+
* call-seq:
|
|
778
|
+
* source.position -> [flt, flt, flt]
|
|
779
|
+
*
|
|
780
|
+
* Gets the position of _source_. The default is ( 0.0, 0.0, 0.0 ).
|
|
781
|
+
*/
|
|
782
|
+
static
|
|
783
|
+
VALUE
|
|
784
|
+
get_src_pos(VALUE rsrc)
|
|
785
|
+
{
|
|
786
|
+
return get_obj_3float(rsrc, seal_get_src_pos);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
/*
|
|
790
|
+
* call-seq:
|
|
791
|
+
* source.velocity = [flt, flt, flt] -> [flt, flt, flt]
|
|
792
|
+
*
|
|
793
|
+
* Sets the velocity of _source_ in a right-handed Cartesian coordinate
|
|
794
|
+
* system. The velocity of the source does not affect its position but is a
|
|
795
|
+
* factor used during the Doppler effect emulation. Use of NaN is undefined.
|
|
796
|
+
*
|
|
797
|
+
*/
|
|
798
|
+
static
|
|
799
|
+
VALUE
|
|
800
|
+
set_src_vel(VALUE rsrc, VALUE value)
|
|
801
|
+
{
|
|
802
|
+
return set_obj_3float(rsrc, value, seal_set_src_vel);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/*
|
|
806
|
+
* call-seq:
|
|
807
|
+
* source.velocity -> [flt, flt, flt]
|
|
808
|
+
*
|
|
809
|
+
* Gets the velocity of _source_. The default is ( 0.0, 0.0, 0.0 ).
|
|
810
|
+
*/
|
|
811
|
+
static
|
|
812
|
+
VALUE
|
|
813
|
+
get_src_vel(VALUE rsrc)
|
|
814
|
+
{
|
|
815
|
+
return get_obj_3float(rsrc, seal_get_src_vel);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
/*
|
|
819
|
+
* call-seq:
|
|
820
|
+
* source.pitch = flt -> [flt, flt, flt]
|
|
821
|
+
*
|
|
822
|
+
* Sets the pitch shift multiplier of _source_. 1.0 means identity; each
|
|
823
|
+
* reduction by 1/2 means a pitch shift of -12 semitones; each doubling means
|
|
824
|
+
* a pitch shift of 12 semitones. Use of 0.0 is undefined. The valid range is
|
|
825
|
+
* (0.0, +inf.).
|
|
826
|
+
*/
|
|
827
|
+
static
|
|
828
|
+
VALUE
|
|
829
|
+
set_src_pitch(VALUE rsrc, VALUE value)
|
|
830
|
+
{
|
|
831
|
+
return set_obj_float(rsrc, value, seal_set_src_pitch);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
/*
|
|
835
|
+
* call-seq:
|
|
836
|
+
* source.pitch -> flt
|
|
837
|
+
*
|
|
838
|
+
* Gets the pitch of _source_. The default is 1.0.
|
|
839
|
+
*/
|
|
840
|
+
static
|
|
841
|
+
VALUE
|
|
842
|
+
get_src_pitch(VALUE rsrc)
|
|
843
|
+
{
|
|
844
|
+
return get_obj_float(rsrc, seal_get_src_pitch);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/*
|
|
848
|
+
* call-seq:
|
|
849
|
+
* source.gain = flt -> [flt, flt, flt]
|
|
850
|
+
*
|
|
851
|
+
* Sets the scalar amplitude multiplier of _source_ in the interval
|
|
852
|
+
* [0.0, +inf.). 1.0 means that the sound is unattenuated; 0.5 means an
|
|
853
|
+
* attenuation of 6 dB; 0.0 means silence.
|
|
854
|
+
*/
|
|
855
|
+
static
|
|
856
|
+
VALUE
|
|
857
|
+
set_src_gain(VALUE rsrc, VALUE value)
|
|
858
|
+
{
|
|
859
|
+
return set_obj_float(rsrc, value, seal_set_src_gain);
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
/*
|
|
863
|
+
* call-seq:
|
|
864
|
+
* source.gain -> flt
|
|
865
|
+
*
|
|
866
|
+
* Gets the gain of _source_. The default is 1.0.
|
|
867
|
+
*/
|
|
868
|
+
static
|
|
869
|
+
VALUE
|
|
870
|
+
get_src_gain(VALUE rsrc)
|
|
871
|
+
{
|
|
872
|
+
return get_obj_float(rsrc, seal_get_src_gain);
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/*
|
|
876
|
+
* call-seq:
|
|
877
|
+
* source.auto = true or false -> true or false
|
|
878
|
+
*
|
|
879
|
+
* Sets whether _source_ should be automatically updated asynchronously by a
|
|
880
|
+
* background thread. If this thread is running, user calls to #update does
|
|
881
|
+
* nothing. If auto update is disabled after it is enabled, it will take
|
|
882
|
+
* effect the next time the source gets played.
|
|
883
|
+
*/
|
|
884
|
+
static
|
|
885
|
+
VALUE
|
|
886
|
+
set_src_auto(VALUE rsrc, VALUE value)
|
|
887
|
+
{
|
|
888
|
+
return set_obj_char(rsrc, value, seal_set_src_auto);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/*
|
|
892
|
+
* call-seq:
|
|
893
|
+
* source.auto -> true or false
|
|
894
|
+
*
|
|
895
|
+
* Determines if _source_ is automatically updated. The default is true.
|
|
896
|
+
*/
|
|
897
|
+
static
|
|
898
|
+
VALUE
|
|
899
|
+
is_src_auto(VALUE rsrc)
|
|
900
|
+
{
|
|
901
|
+
return get_obj_char(rsrc, seal_is_src_auto);
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
/*
|
|
905
|
+
* call-seq:
|
|
906
|
+
* source.relative = true or false -> true or false
|
|
907
|
+
*
|
|
908
|
+
* Sets whether _source_'s position, velocity, cone and direction are all
|
|
909
|
+
* relative to the listener position.
|
|
910
|
+
*/
|
|
911
|
+
static
|
|
912
|
+
VALUE
|
|
913
|
+
set_src_relative(VALUE rsrc, VALUE value)
|
|
914
|
+
{
|
|
915
|
+
return set_obj_char(rsrc, value, seal_set_src_relative);
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
/*
|
|
919
|
+
* call-seq:
|
|
920
|
+
* source.relative -> true or false
|
|
921
|
+
*
|
|
922
|
+
* Determines if _source_ is relative. The default is false.
|
|
923
|
+
*/
|
|
924
|
+
static
|
|
925
|
+
VALUE
|
|
926
|
+
is_src_relative(VALUE rsrc)
|
|
927
|
+
{
|
|
928
|
+
return get_obj_char(rsrc, seal_is_src_relative);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
/*
|
|
932
|
+
* call-seq:
|
|
933
|
+
* source.looping = true or false -> true or false
|
|
934
|
+
*
|
|
935
|
+
* Sets whether the playback of _source_ is looping. A looping source will
|
|
936
|
+
* never enter State::STOPPED; it will immediate enter State::INITIAL and then
|
|
937
|
+
* State::Playing after it reaches the end of the last buffer.
|
|
938
|
+
*/
|
|
939
|
+
static
|
|
940
|
+
VALUE
|
|
941
|
+
set_src_looping(VALUE rsrc, VALUE value)
|
|
942
|
+
{
|
|
943
|
+
return set_obj_char(rsrc, value, seal_set_src_looping);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
/*
|
|
947
|
+
* call-seq:
|
|
948
|
+
* source.looping -> true or false
|
|
949
|
+
*
|
|
950
|
+
* Determines if _source_ is looping. The default is false (0).
|
|
951
|
+
*/
|
|
952
|
+
static
|
|
953
|
+
VALUE
|
|
954
|
+
is_src_looping(VALUE rsrc)
|
|
955
|
+
{
|
|
956
|
+
return get_obj_char(rsrc, seal_is_src_looping);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
/*
|
|
960
|
+
* call-seq:
|
|
961
|
+
* source.queue_size = fixnum -> true or false
|
|
962
|
+
*
|
|
963
|
+
* Sets the size of the streaming queue internally used by _source_. The queue
|
|
964
|
+
* maintains a multiple buffering mechanism when streaming the audio data.
|
|
965
|
+
* Multiple bufferring allows buffers in the queue to be processed while the
|
|
966
|
+
* one at the front of the queue is still being played. A queue of size 2
|
|
967
|
+
* (double buffering) may still be inefficient in CPU-, and I/O-bound
|
|
968
|
+
* situations while triple, or even quad buffering generally produces better
|
|
969
|
+
* sound quality in non-memory-bound situations. _fixnum_ must be in the
|
|
970
|
+
* interval [2, 63].
|
|
971
|
+
*/
|
|
972
|
+
static
|
|
973
|
+
VALUE
|
|
974
|
+
set_src_queue_size(VALUE rsrc, VALUE value)
|
|
975
|
+
{
|
|
976
|
+
return set_obj_int(rsrc, value, seal_set_src_queue_size);
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
/*
|
|
980
|
+
* call-seq:
|
|
981
|
+
* source.queue_size -> fixnum
|
|
982
|
+
*
|
|
983
|
+
* Gets the size, in byte, of _source_'s streaming queue. The default is 3.
|
|
984
|
+
*/
|
|
985
|
+
static
|
|
986
|
+
VALUE
|
|
987
|
+
get_src_queue_size(VALUE rsrc)
|
|
988
|
+
{
|
|
989
|
+
return get_obj_int(rsrc, seal_get_src_queue_size);
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
/*
|
|
993
|
+
* call-seq:
|
|
994
|
+
* source.chunk_size = fixnum -> true or false
|
|
995
|
+
*
|
|
996
|
+
* Sets the maximum size, in byte, of the audio chunk which buffers the audio
|
|
997
|
+
* data constantly fetched from an audio stream. Using small chunks may cause
|
|
998
|
+
* playback to occur before the required audio chunk is ready, which in turn
|
|
999
|
+
* causes unexpected stop of playback. _fixnum_ must be in the interval
|
|
1000
|
+
* \[9216, 16773120] and must be a multiple of 9216; non-multiple value will be
|
|
1001
|
+
* adjusted to the closest smaller multiple automatically.
|
|
1002
|
+
*/
|
|
1003
|
+
static
|
|
1004
|
+
VALUE
|
|
1005
|
+
set_src_chunk_size(VALUE rsrc, VALUE value)
|
|
1006
|
+
{
|
|
1007
|
+
return set_obj_int(rsrc, value, seal_set_src_chunk_size);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
/*
|
|
1011
|
+
* call-seq:
|
|
1012
|
+
* source.chunk_size -> fixnum
|
|
1013
|
+
*
|
|
1014
|
+
* Gets the size, in byte, of _source_'s streaming chunk. The default is
|
|
1015
|
+
* 36864.
|
|
1016
|
+
*/
|
|
1017
|
+
static
|
|
1018
|
+
VALUE
|
|
1019
|
+
get_src_chunk_size(VALUE rsrc)
|
|
1020
|
+
{
|
|
1021
|
+
return get_obj_int(rsrc, seal_get_src_chunk_size);
|
|
1022
|
+
}
|
|
1023
|
+
/*
|
|
1024
|
+
* call-seq:
|
|
1025
|
+
* source.type -> :streaming or :static
|
|
1026
|
+
*
|
|
1027
|
+
* Gets the type of _source_.
|
|
1028
|
+
*/
|
|
1029
|
+
static
|
|
1030
|
+
VALUE
|
|
1031
|
+
get_src_type(VALUE rsrc)
|
|
1032
|
+
{
|
|
1033
|
+
seal_src_type_t type;
|
|
1034
|
+
|
|
1035
|
+
check_seal_err(seal_get_src_type(DATA_PTR(rsrc), &type));
|
|
1036
|
+
switch (type) {
|
|
1037
|
+
case SEAL_STATIC:
|
|
1038
|
+
return name2sym(STATIC_SYM);
|
|
1039
|
+
case SEAL_STREAMING:
|
|
1040
|
+
return name2sym(STREAMING_SYM);
|
|
1041
|
+
default:
|
|
1042
|
+
return name2sym(UNDETERMINED_SYM);
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
/*
|
|
1047
|
+
* call-seq:
|
|
1048
|
+
* source.state -> :playing, :paused, :stopped or :initial
|
|
1049
|
+
*
|
|
1050
|
+
* Gets the state of _source_.
|
|
1051
|
+
*/
|
|
1052
|
+
static
|
|
1053
|
+
VALUE
|
|
1054
|
+
get_src_state(VALUE rsrc)
|
|
1055
|
+
{
|
|
1056
|
+
seal_src_state_t state;
|
|
1057
|
+
|
|
1058
|
+
check_seal_err(seal_get_src_state(DATA_PTR(rsrc), &state));
|
|
1059
|
+
switch (state) {
|
|
1060
|
+
case SEAL_PLAYING:
|
|
1061
|
+
return name2sym(PLAYING_SYM);
|
|
1062
|
+
case SEAL_PAUSED:
|
|
1063
|
+
return name2sym(PAUSED_SYM);
|
|
1064
|
+
case SEAL_STOPPED:
|
|
1065
|
+
return name2sym(STOPPED_SYM);
|
|
1066
|
+
default:
|
|
1067
|
+
return name2sym(INITIAL_SYM);
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
/*
|
|
1072
|
+
* call-seq:
|
|
1073
|
+
* reverb.load(preset) -> reverb
|
|
1074
|
+
*
|
|
1075
|
+
* Loads the specified reverb paramter preset into _reverb_.
|
|
1076
|
+
*/
|
|
1077
|
+
static
|
|
1078
|
+
VALUE
|
|
1079
|
+
load_rvb(VALUE rrvb, VALUE rpreset)
|
|
1080
|
+
{
|
|
1081
|
+
seal_rvb_t* rvb;
|
|
1082
|
+
|
|
1083
|
+
Data_Get_Struct(rrvb, seal_rvb_t, rvb);
|
|
1084
|
+
check_seal_err(seal_load_rvb(DATA_PTR(rrvb), NUM2INT(rpreset)));
|
|
1085
|
+
|
|
1086
|
+
return rrvb;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
/*
|
|
1090
|
+
* call-seq:
|
|
1091
|
+
* Seal::Reverb.new -> reverb
|
|
1092
|
+
* Seal::Reverb.new(preset) -> reverb
|
|
1093
|
+
*
|
|
1094
|
+
* Initializes a new reverb effect. If a preset is specified, initializes
|
|
1095
|
+
* the reverb object to load the preset.
|
|
1096
|
+
*/
|
|
1097
|
+
static
|
|
1098
|
+
VALUE
|
|
1099
|
+
init_rvb(int argc, VALUE* argv, VALUE rrvb)
|
|
1100
|
+
{
|
|
1101
|
+
seal_rvb_t* rvb;
|
|
1102
|
+
VALUE rpreset;
|
|
1103
|
+
|
|
1104
|
+
rvb = DATA_PTR(rrvb);
|
|
1105
|
+
check_seal_err(seal_init_rvb(rvb));
|
|
1106
|
+
|
|
1107
|
+
rb_scan_args(argc, argv, "01", &rpreset);
|
|
1108
|
+
if (!NIL_P(rpreset))
|
|
1109
|
+
load_rvb(rrvb, rpreset);
|
|
1110
|
+
|
|
1111
|
+
return rrvb;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
/*
|
|
1115
|
+
* call-seq:
|
|
1116
|
+
* reverb.density = flt -> flt
|
|
1117
|
+
*
|
|
1118
|
+
* Sets the modal density of _reverb_ in the interval [0.0, 1.0]. The
|
|
1119
|
+
* density controls the coloration of the late reverb. The Lower the value,
|
|
1120
|
+
* the more coloration.
|
|
1121
|
+
*/
|
|
1122
|
+
static
|
|
1123
|
+
VALUE
|
|
1124
|
+
set_rvb_density(VALUE rrvb, VALUE value)
|
|
1125
|
+
{
|
|
1126
|
+
return set_obj_float(rrvb, value, seal_set_rvb_density);
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
/*
|
|
1130
|
+
* call-seq:
|
|
1131
|
+
* reverb.density -> flt
|
|
1132
|
+
*
|
|
1133
|
+
* Gets the density of _reverb_. The default is 1.0.
|
|
1134
|
+
*/
|
|
1135
|
+
static
|
|
1136
|
+
VALUE
|
|
1137
|
+
get_rvb_density(VALUE rrvb)
|
|
1138
|
+
{
|
|
1139
|
+
return get_obj_float(rrvb, seal_get_rvb_density);
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
/*
|
|
1143
|
+
* call-seq:
|
|
1144
|
+
* reverb.diffusion = flt -> flt
|
|
1145
|
+
*
|
|
1146
|
+
* Sets the diffusion of _reverb_ in the interval [0.0, 1.0]. The diffusion
|
|
1147
|
+
* controls the echo density in the reverberation decay. Reducing diffusion
|
|
1148
|
+
* gives the reverberation a more "grainy" character that is especially
|
|
1149
|
+
* noticeable with percussive sound sources. If you set a diffusion value of
|
|
1150
|
+
* 0.0, the later reverberation sounds like a succession of distinct echoes.
|
|
1151
|
+
*/
|
|
1152
|
+
static
|
|
1153
|
+
VALUE
|
|
1154
|
+
set_rvb_diffusion(VALUE rrvb, VALUE value)
|
|
1155
|
+
{
|
|
1156
|
+
return set_obj_float(rrvb, value, seal_set_rvb_diffusion);
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
/*
|
|
1160
|
+
* call-seq:
|
|
1161
|
+
* reverb.diffusion -> flt
|
|
1162
|
+
*
|
|
1163
|
+
* Gets the diffusion of _reverb_. The default is 1.0.
|
|
1164
|
+
*/
|
|
1165
|
+
static
|
|
1166
|
+
VALUE
|
|
1167
|
+
get_rvb_diffusion(VALUE rrvb)
|
|
1168
|
+
{
|
|
1169
|
+
return get_obj_float(rrvb, seal_get_rvb_diffusion);
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
/*
|
|
1173
|
+
* call-seq:
|
|
1174
|
+
* reverb.gain = flt -> flt
|
|
1175
|
+
*
|
|
1176
|
+
* Sets the gain of _reverb_ in the interval [0.0, 1.0], or from -100 dB (no
|
|
1177
|
+
* reflected sound at all) to 0 dB (the maximum amount). The gain is the
|
|
1178
|
+
* master volume control for the reflected sound (both early reflections and
|
|
1179
|
+
* reverberation) that the reverb effect adds to all sources. It sets the
|
|
1180
|
+
* maximum amount of reflections and reverberation added to the final sound
|
|
1181
|
+
* mix.
|
|
1182
|
+
*/
|
|
1183
|
+
static
|
|
1184
|
+
VALUE
|
|
1185
|
+
set_rvb_gain(VALUE rrvb, VALUE value)
|
|
1186
|
+
{
|
|
1187
|
+
return set_obj_float(rrvb, value, seal_set_rvb_gain);
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
/*
|
|
1191
|
+
* call-seq:
|
|
1192
|
+
* reverb.gain -> flt
|
|
1193
|
+
*
|
|
1194
|
+
* Gets the gain of _reverb_. The default is 0.32.
|
|
1195
|
+
*/
|
|
1196
|
+
static
|
|
1197
|
+
VALUE
|
|
1198
|
+
get_rvb_gain(VALUE rrvb)
|
|
1199
|
+
{
|
|
1200
|
+
return get_obj_float(rrvb, seal_get_rvb_gain);
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
/*
|
|
1204
|
+
* call-seq:
|
|
1205
|
+
* reverb.hfgain = flt -> flt
|
|
1206
|
+
*
|
|
1207
|
+
* Sets the high-frequency gain of _reverb_ in the interval [0.0, 1.0], or
|
|
1208
|
+
* from -100 dB (virtually no reflected sound) to 0 dB (no filter). The high-
|
|
1209
|
+
* frequency gain further tweaks reflected sound by attenuating it at high
|
|
1210
|
+
* frequencies. It controls a low-pass filter that applies globally to the
|
|
1211
|
+
* reflected sound of all sound sources feeding the particular instance of the
|
|
1212
|
+
* reverb effect.
|
|
1213
|
+
*/
|
|
1214
|
+
static
|
|
1215
|
+
VALUE
|
|
1216
|
+
set_rvb_hfgain(VALUE rrvb, VALUE value)
|
|
1217
|
+
{
|
|
1218
|
+
return set_obj_float(rrvb, value, seal_set_rvb_hfgain);
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
/*
|
|
1222
|
+
* call-seq:
|
|
1223
|
+
* reverb.hfgain -> flt
|
|
1224
|
+
*
|
|
1225
|
+
* Gets the high-frequency gain of _reverb_. The default is 0.89.
|
|
1226
|
+
*/
|
|
1227
|
+
static
|
|
1228
|
+
VALUE
|
|
1229
|
+
get_rvb_hfgain(VALUE rrvb)
|
|
1230
|
+
{
|
|
1231
|
+
return get_obj_float(rrvb, seal_get_rvb_hfgain);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
/*
|
|
1235
|
+
* call-seq:
|
|
1236
|
+
* reverb.decay_time = flt -> flt
|
|
1237
|
+
*
|
|
1238
|
+
* Sets the decay time of _reverb_ in the interval [0.1, 20.0], typically
|
|
1239
|
+
* from a small room with very dead surfaces to a large room with very live
|
|
1240
|
+
* surfaces.
|
|
1241
|
+
*/
|
|
1242
|
+
static
|
|
1243
|
+
VALUE
|
|
1244
|
+
set_rvb_decay_time(VALUE rrvb, VALUE value)
|
|
1245
|
+
{
|
|
1246
|
+
return set_obj_float(rrvb, value, seal_set_rvb_decay_time);
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
/*
|
|
1250
|
+
* call-seq:
|
|
1251
|
+
* reverb.decay_time -> flt
|
|
1252
|
+
*
|
|
1253
|
+
* Gets the decay time of _reverb_. The default is 1.49.
|
|
1254
|
+
*/
|
|
1255
|
+
static
|
|
1256
|
+
VALUE
|
|
1257
|
+
get_rvb_decay_time(VALUE rrvb)
|
|
1258
|
+
{
|
|
1259
|
+
return get_obj_float(rrvb, seal_get_rvb_decay_time);
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
/*
|
|
1263
|
+
* call-seq:
|
|
1264
|
+
* reverb.hfdecay_ratio = flt -> flt
|
|
1265
|
+
*
|
|
1266
|
+
* Sets the high-frequency decay ratio, or the spectral quality of the decay
|
|
1267
|
+
* time of _reverb_ in the interval [0.1, 2.0]. It is the ratio of
|
|
1268
|
+
* high-frequency decay time relative to the time set by decay Time. 1.0 means
|
|
1269
|
+
* neutral: the decay time is equal for all frequencies. As this value
|
|
1270
|
+
* increases above 1.0, the high-frequency decay time increases so it's longer
|
|
1271
|
+
* than the decay time at low frequencies. You hear a more brilliant
|
|
1272
|
+
* reverberation with a longer decay at high frequencies. As this value
|
|
1273
|
+
* decreases below 1.0, the high-frequency decay time decreases so it's
|
|
1274
|
+
* shorter than the decay time of the low frequencies. You hear a more natural
|
|
1275
|
+
* reverberation.
|
|
1276
|
+
*/
|
|
1277
|
+
static
|
|
1278
|
+
VALUE
|
|
1279
|
+
set_rvb_hfdecay_ratio(VALUE rrvb, VALUE value)
|
|
1280
|
+
{
|
|
1281
|
+
return set_obj_float(rrvb, value, seal_set_rvb_hfdecay_ratio);
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
/*
|
|
1285
|
+
* call-seq:
|
|
1286
|
+
* reverb.hfdecay_ratio -> flt
|
|
1287
|
+
*
|
|
1288
|
+
* Gets the high-frequency decay ratio of _reverb_. The default is 0.83.
|
|
1289
|
+
*/
|
|
1290
|
+
static
|
|
1291
|
+
VALUE
|
|
1292
|
+
get_rvb_hfdecay_ratio(VALUE rrvb)
|
|
1293
|
+
{
|
|
1294
|
+
return get_obj_float(rrvb, seal_get_rvb_hfdecay_ratio);
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
/*
|
|
1298
|
+
* call-seq:
|
|
1299
|
+
* reverb.reflections_gain = flt -> flt
|
|
1300
|
+
*
|
|
1301
|
+
* Sets the reflections gain, or the overall amount of initial reflections
|
|
1302
|
+
* relative to the gain of _reverb_ in the interval [0.0, 3.16], or from
|
|
1303
|
+
* -100 dB (no initial reflections at all) to 10 dB. The reflections gain is
|
|
1304
|
+
* corrected by the value of the gain property and does not affect the
|
|
1305
|
+
* subsequent reverberation decay.
|
|
1306
|
+
*
|
|
1307
|
+
* You can increase the amount of initial reflections to simulate a more
|
|
1308
|
+
* narrow space or closer walls, especially effective if you associate the
|
|
1309
|
+
* initial reflections increase with a reduction in reflections delays by
|
|
1310
|
+
* lowering the value of the reflection delay property. To simulate open or
|
|
1311
|
+
* semi-open environments, you can maintain the amount of early reflections
|
|
1312
|
+
* while reducing the value of the late gain property, which controls later
|
|
1313
|
+
* reflections.
|
|
1314
|
+
*/
|
|
1315
|
+
static
|
|
1316
|
+
VALUE
|
|
1317
|
+
set_rvb_reflections_gain(VALUE rrvb, VALUE value)
|
|
1318
|
+
{
|
|
1319
|
+
return set_obj_float(rrvb, value, seal_set_rvb_reflections_gain);
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
/*
|
|
1323
|
+
* call-seq:
|
|
1324
|
+
* reverb.reflections_gain -> flt
|
|
1325
|
+
*
|
|
1326
|
+
* Gets the reflections gain of _reverb_. The default is 0.05.
|
|
1327
|
+
*/
|
|
1328
|
+
static
|
|
1329
|
+
VALUE
|
|
1330
|
+
get_rvb_reflections_gain(VALUE rrvb)
|
|
1331
|
+
{
|
|
1332
|
+
return get_obj_float(rrvb, seal_get_rvb_reflections_gain);
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
/*
|
|
1336
|
+
* call-seq:
|
|
1337
|
+
* reverb.reflections_delay = flt -> flt
|
|
1338
|
+
*
|
|
1339
|
+
* Sets the reflections delay of _reverb_ in the interval [0.0, 0.3] (in
|
|
1340
|
+
* seconds). It is the amount of delay between the arrival time of the direct
|
|
1341
|
+
* path from the source to the first reflection from the source. You can
|
|
1342
|
+
* reduce or increase this delay to simulate closer or more distant reflective
|
|
1343
|
+
* surfaces and therefore control the perceived size of the room.
|
|
1344
|
+
*/
|
|
1345
|
+
static
|
|
1346
|
+
VALUE
|
|
1347
|
+
set_rvb_reflections_delay(VALUE rrvb, VALUE value)
|
|
1348
|
+
{
|
|
1349
|
+
return set_obj_float(rrvb, value, seal_set_rvb_reflections_delay);
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
/*
|
|
1353
|
+
* call-seq:
|
|
1354
|
+
* reverb.reflections_delay -> flt
|
|
1355
|
+
*
|
|
1356
|
+
* Gets the reflections delay of _reverb_. The default is 0.007.
|
|
1357
|
+
*/
|
|
1358
|
+
static
|
|
1359
|
+
VALUE
|
|
1360
|
+
get_rvb_reflections_delay(VALUE rrvb)
|
|
1361
|
+
{
|
|
1362
|
+
return get_obj_float(rrvb, seal_get_rvb_reflections_delay);
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
/*
|
|
1366
|
+
* call-seq:
|
|
1367
|
+
* reverb.late_gain = flt -> flt
|
|
1368
|
+
*
|
|
1369
|
+
* Sets the late gain, or the overall amount of later reverberation relative
|
|
1370
|
+
* to the gain of _reverb_ in the interval [0.0, 10.0], or from -100 dB (no
|
|
1371
|
+
* late reverberation at all) to 20 dB.
|
|
1372
|
+
*
|
|
1373
|
+
* Note that late gain and decay time are independent properties: if you
|
|
1374
|
+
* adjust decay time without changing late gain, the total intensity (the
|
|
1375
|
+
* averaged square of the amplitude) of the late reverberation remains
|
|
1376
|
+
* constant.
|
|
1377
|
+
*/
|
|
1378
|
+
static
|
|
1379
|
+
VALUE
|
|
1380
|
+
set_rvb_late_gain(VALUE rrvb, VALUE value)
|
|
1381
|
+
{
|
|
1382
|
+
return set_obj_float(rrvb, value, seal_set_rvb_late_gain);
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
/*
|
|
1386
|
+
* call-seq:
|
|
1387
|
+
* reverb.late_gain -> flt
|
|
1388
|
+
*
|
|
1389
|
+
* Gets the late gain of _reverb_. The default is 1.26.
|
|
1390
|
+
*/
|
|
1391
|
+
static
|
|
1392
|
+
VALUE
|
|
1393
|
+
get_rvb_late_gain(VALUE rrvb)
|
|
1394
|
+
{
|
|
1395
|
+
return get_obj_float(rrvb, seal_get_rvb_late_gain);
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
/*
|
|
1399
|
+
* call-seq:
|
|
1400
|
+
* reverb.late_delay = flt -> flt
|
|
1401
|
+
*
|
|
1402
|
+
* Sets the late delay of _reverb_ in the interval [0.0, 0.1] (in second)
|
|
1403
|
+
* It defines the begin time of the late reverberation relative to the time of
|
|
1404
|
+
* the initial reflection (the first of the early reflections). Reducing or
|
|
1405
|
+
* increasing late delay is useful for simulating a smaller or larger room.
|
|
1406
|
+
*/
|
|
1407
|
+
static
|
|
1408
|
+
VALUE
|
|
1409
|
+
set_rvb_late_delay(VALUE rrvb, VALUE value)
|
|
1410
|
+
{
|
|
1411
|
+
return set_obj_float(rrvb, value, seal_set_rvb_late_delay);
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
/*
|
|
1415
|
+
* call-seq:
|
|
1416
|
+
* reverb.late_delay -> flt
|
|
1417
|
+
*
|
|
1418
|
+
* Gets the late delay of _reverb_. The default is 0.011.
|
|
1419
|
+
*/
|
|
1420
|
+
static
|
|
1421
|
+
VALUE
|
|
1422
|
+
get_rvb_late_delay(VALUE rrvb)
|
|
1423
|
+
{
|
|
1424
|
+
return get_obj_float(rrvb, seal_get_rvb_late_delay);
|
|
1425
|
+
}
|
|
1426
|
+
/*
|
|
1427
|
+
* call-seq:
|
|
1428
|
+
* reverb.air_absorbtion_hfgain = flt -> flt
|
|
1429
|
+
*
|
|
1430
|
+
* Sets the air absorption high-frequency gain of _reverb_ in the interval
|
|
1431
|
+
* [0.892, 1.0]. It controls the distance-dependent attenuation at high
|
|
1432
|
+
* frequencies caused by the propagation medium. It applies to reflected sound
|
|
1433
|
+
* only. You can use this value to simulate sound transmission through foggy
|
|
1434
|
+
* air, dry air, smoky atmosphere, and so on. The default value 0.994
|
|
1435
|
+
* (-0.05 dB) per meter, which roughly corresponds to typical condition of
|
|
1436
|
+
* atmospheric humidity, temperature, and so on. Lowering the value simulates
|
|
1437
|
+
* a more absorbent medium (more humidity in the air, for example); raising
|
|
1438
|
+
* the value simulates a less absorbent medium (dry desert air, for example).
|
|
1439
|
+
*/
|
|
1440
|
+
static
|
|
1441
|
+
VALUE
|
|
1442
|
+
set_rvb_air_absorbtion_hfgain(VALUE rrvb, VALUE value)
|
|
1443
|
+
{
|
|
1444
|
+
return set_obj_float(rrvb, value, seal_set_rvb_air_absorbtion_hfgain);
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
/*
|
|
1448
|
+
* call-seq:
|
|
1449
|
+
* reverb.air_absorbtion_hfgain -> flt
|
|
1450
|
+
*
|
|
1451
|
+
* Gets the air absorbtion high-frequency gain of _reverb_. The default is
|
|
1452
|
+
* 0.994.
|
|
1453
|
+
*/
|
|
1454
|
+
static
|
|
1455
|
+
VALUE
|
|
1456
|
+
get_rvb_air_absorbtion_hfgain(VALUE rrvb)
|
|
1457
|
+
{
|
|
1458
|
+
return get_obj_float(rrvb, seal_get_rvb_air_absorbtion_hfgain);
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
/*
|
|
1462
|
+
* call-seq:
|
|
1463
|
+
* reverb.room_rolloff_factor = flt -> flt
|
|
1464
|
+
*
|
|
1465
|
+
* Sets the room rolloff factor of _reverb_ in the interval [0.0, 10.0]. It
|
|
1466
|
+
* is one of two methods available to attenuate the reflected sound
|
|
1467
|
+
* (containing both reflections and reverberation) according to source-
|
|
1468
|
+
* listener distance. It is defined the same way as the global rolloff factor,
|
|
1469
|
+
* but operates on reverb sound instead of direct-path sound. Setting the room
|
|
1470
|
+
* rolloff factor value to 1.0 specifies that the reflected sound will decay
|
|
1471
|
+
* by 6 dB every time the distance doubles. Any value other than 1.0 is
|
|
1472
|
+
* equivalent to a scaling factor applied to the quantity specified by
|
|
1473
|
+
* ((source listener distance) - (Reference Distance)). Reference Distance is
|
|
1474
|
+
* an OpenAL source parameter that specifies the inner border for distance
|
|
1475
|
+
* rolloff effects: if the source comes closer to the listener than the
|
|
1476
|
+
* reference distance, the direct-path sound isn't increased as the source
|
|
1477
|
+
* comes closer to the listener, and neither is the reflected sound.
|
|
1478
|
+
*
|
|
1479
|
+
* The default value of Room Rolloff Factor is 0.0 because, by default, the
|
|
1480
|
+
* reverb effect naturally manages the reflected sound level automatically for
|
|
1481
|
+
* each sound source to simulate the natural rolloff of reflected sound vs.
|
|
1482
|
+
* distance in typical rooms. (Note that this isn't the case if the source
|
|
1483
|
+
* property @TODO is set to false.) You can use this value as an option to
|
|
1484
|
+
* automatic control so you can exaggerate or replace the default
|
|
1485
|
+
* automatically-controlled rolloff.
|
|
1486
|
+
*/
|
|
1487
|
+
static
|
|
1488
|
+
VALUE
|
|
1489
|
+
set_rvb_room_rolloff_factor(VALUE rrvb, VALUE value)
|
|
1490
|
+
{
|
|
1491
|
+
return set_obj_float(rrvb, value, seal_set_rvb_room_rolloff_factor);
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
/*
|
|
1495
|
+
* call-seq:
|
|
1496
|
+
* reverb.room_rolloff_factor -> flt
|
|
1497
|
+
*
|
|
1498
|
+
* Gets the room rolloff factor of _reverb_. The default is 0.0.
|
|
1499
|
+
*/
|
|
1500
|
+
static
|
|
1501
|
+
VALUE
|
|
1502
|
+
get_rvb_room_rolloff_factor(VALUE rrvb)
|
|
1503
|
+
{
|
|
1504
|
+
return get_obj_float(rrvb, seal_get_rvb_room_rolloff_factor);
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
/*
|
|
1508
|
+
* call-seq:
|
|
1509
|
+
* reverb.hfdecay_limited = true or false -> true or false
|
|
1510
|
+
*
|
|
1511
|
+
* Sets whether the high-frequency decay time automatically stays below a
|
|
1512
|
+
* limit value that's derived from the setting of the air absorption high-
|
|
1513
|
+
* frequency gain. This limit applies regardless of the setting of the
|
|
1514
|
+
* decay high-frequency ratio, and the limit doesn't affect the value of decay
|
|
1515
|
+
* high-frequency ratio. This limit, when on, maintains a natural sounding
|
|
1516
|
+
* reverberation decay by allowing you to increase the value of decay time
|
|
1517
|
+
* without the risk of getting an unnaturally long decay time at high
|
|
1518
|
+
* frequencies. If this flag is set to false, high-frequency decay time isn't
|
|
1519
|
+
* automatically limited.
|
|
1520
|
+
*/
|
|
1521
|
+
static
|
|
1522
|
+
VALUE
|
|
1523
|
+
set_rvb_hfdecay_limited(VALUE rrvb, VALUE value)
|
|
1524
|
+
{
|
|
1525
|
+
return set_obj_char(rrvb, value, seal_set_rvb_hfdecay_limited);
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
/*
|
|
1529
|
+
* call-seq:
|
|
1530
|
+
* reverb.hfdecay_limited -> true or false
|
|
1531
|
+
*
|
|
1532
|
+
* Determines if the high-frequency decay of _reverb_ is limited. The default
|
|
1533
|
+
* is true.
|
|
1534
|
+
*/
|
|
1535
|
+
static
|
|
1536
|
+
VALUE
|
|
1537
|
+
is_rvb_hfdecay_limited(VALUE rrvb)
|
|
1538
|
+
{
|
|
1539
|
+
return get_obj_char(rrvb, seal_is_rvb_hfdecay_limited);
|
|
1540
|
+
}
|
|
1541
|
+
|
|
1542
|
+
/*
|
|
1543
|
+
* call-seq:
|
|
1544
|
+
* effect_slot.effect = effect -> effect
|
|
1545
|
+
*
|
|
1546
|
+
* Fills _effect_slot_ with _effect_, then _effect_slot_ will become ready to
|
|
1547
|
+
* feed sources. Pass nil to unfill the slot.
|
|
1548
|
+
*/
|
|
1549
|
+
static
|
|
1550
|
+
VALUE
|
|
1551
|
+
set_efs_effect(VALUE rslot, VALUE reffect)
|
|
1552
|
+
{
|
|
1553
|
+
void* effect;
|
|
1554
|
+
seal_err_t err;
|
|
1555
|
+
|
|
1556
|
+
if (NIL_P(reffect)) {
|
|
1557
|
+
err = seal_set_efs_effect(DATA_PTR(rslot), 0);
|
|
1558
|
+
} else {
|
|
1559
|
+
Data_Get_Struct(reffect, void*, effect);
|
|
1560
|
+
err = seal_set_efs_effect(DATA_PTR(rslot), effect);
|
|
1561
|
+
}
|
|
1562
|
+
check_seal_err(err);
|
|
1563
|
+
rb_iv_set(rslot, "@effect", reffect);
|
|
1564
|
+
|
|
1565
|
+
return reffect;
|
|
1566
|
+
}
|
|
1567
|
+
|
|
1568
|
+
/*
|
|
1569
|
+
* call-seq:
|
|
1570
|
+
* EffectSlot.new -> effect_slot
|
|
1571
|
+
* EffectSlot.new(effect) -> effect_slot
|
|
1572
|
+
*
|
|
1573
|
+
* Initializes a new effect slot. If an effect object is specified,
|
|
1574
|
+
* initializes the effect slot to have that effect object associated.
|
|
1575
|
+
*/
|
|
1576
|
+
static
|
|
1577
|
+
VALUE
|
|
1578
|
+
init_efs(int argc, VALUE* argv, VALUE rslot)
|
|
1579
|
+
{
|
|
1580
|
+
VALUE reffect;
|
|
1581
|
+
|
|
1582
|
+
rb_scan_args(argc, argv, "01", &reffect);
|
|
1583
|
+
check_seal_err(seal_init_efs(DATA_PTR(rslot)));
|
|
1584
|
+
if (!NIL_P(reffect))
|
|
1585
|
+
set_efs_effect(rslot, reffect);
|
|
1586
|
+
|
|
1587
|
+
return rslot;
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
/*
|
|
1591
|
+
* call-seq:
|
|
1592
|
+
* effect_slot.effect -> effect
|
|
1593
|
+
*
|
|
1594
|
+
* Gets the effect object in _effect_slot_. The default is nil.
|
|
1595
|
+
*/
|
|
1596
|
+
static
|
|
1597
|
+
VALUE
|
|
1598
|
+
get_efs_effect(VALUE rslot)
|
|
1599
|
+
{
|
|
1600
|
+
return rb_iv_get(rslot, "@effect");
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
/*
|
|
1604
|
+
* call-seq:
|
|
1605
|
+
* slot.feed(index, source) -> slot
|
|
1606
|
+
*
|
|
1607
|
+
* Mixes a sound effect loaded into _effect_slot_ with _source_'s output.
|
|
1608
|
+
* Later calls to this function with a different effect slot and the same
|
|
1609
|
+
* index will override the old effect slot association.
|
|
1610
|
+
*/
|
|
1611
|
+
static
|
|
1612
|
+
VALUE
|
|
1613
|
+
feed_efs(VALUE rslot, VALUE rindex, VALUE rsrc)
|
|
1614
|
+
{
|
|
1615
|
+
seal_src_t* src;
|
|
1616
|
+
|
|
1617
|
+
Data_Get_Struct(rsrc, seal_src_t, src);
|
|
1618
|
+
check_seal_err(seal_feed_efs(DATA_PTR(rslot), NUM2INT(rindex), src));
|
|
1619
|
+
|
|
1620
|
+
return rslot;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
/*
|
|
1624
|
+
* call-seq:
|
|
1625
|
+
* effect_slot.gain = flt -> flt
|
|
1626
|
+
*
|
|
1627
|
+
* Sets the output level of _effect_slot_ in the interval [0.0, 1.0]. A
|
|
1628
|
+
* value of 0.0 mutes the output.
|
|
1629
|
+
*/
|
|
1630
|
+
static
|
|
1631
|
+
VALUE
|
|
1632
|
+
set_efs_gain(VALUE refs, VALUE value)
|
|
1633
|
+
{
|
|
1634
|
+
return set_obj_float(refs, value, seal_set_efs_gain);
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
/*
|
|
1638
|
+
* call-seq:
|
|
1639
|
+
* effect_slot.gain -> flt
|
|
1640
|
+
*
|
|
1641
|
+
* Gets the output level of _effect_slot_ in the interval. The default is
|
|
1642
|
+
* 1.0.
|
|
1643
|
+
*/
|
|
1644
|
+
static
|
|
1645
|
+
VALUE
|
|
1646
|
+
get_efs_gain(VALUE refs)
|
|
1647
|
+
{
|
|
1648
|
+
return get_obj_float(refs, seal_get_efs_gain);
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1651
|
+
/*
|
|
1652
|
+
* call-seq:
|
|
1653
|
+
* effect_slot.auto = true or false -> true or false
|
|
1654
|
+
*
|
|
1655
|
+
* Sets whether the effect should have automatic adjustments based on the
|
|
1656
|
+
* physical positions of the sources and the listener.
|
|
1657
|
+
*/
|
|
1658
|
+
static
|
|
1659
|
+
VALUE
|
|
1660
|
+
set_efs_auto(VALUE refs, VALUE value)
|
|
1661
|
+
{
|
|
1662
|
+
return set_obj_char(refs, value, seal_set_efs_auto);
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1665
|
+
/*
|
|
1666
|
+
* call-seq:
|
|
1667
|
+
* effect_slot.auto -> true or false
|
|
1668
|
+
*
|
|
1669
|
+
* Determines if the effect is automatically adjusted. The default is true
|
|
1670
|
+
* (nonzero).
|
|
1671
|
+
*/
|
|
1672
|
+
static
|
|
1673
|
+
VALUE
|
|
1674
|
+
is_efs_auto(VALUE refs)
|
|
1675
|
+
{
|
|
1676
|
+
return get_obj_char(refs, seal_is_efs_auto);
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
/*
|
|
1680
|
+
* call-seq:
|
|
1681
|
+
* Seal.listener -> listener
|
|
1682
|
+
*
|
|
1683
|
+
* Gets the singleton Listener instance.
|
|
1684
|
+
*/
|
|
1685
|
+
static
|
|
1686
|
+
VALUE
|
|
1687
|
+
get_listener()
|
|
1688
|
+
{
|
|
1689
|
+
return rb_const_get(mSeal, rb_intern("LISTENER"));
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
/*
|
|
1693
|
+
* call-seq:
|
|
1694
|
+
* Seal.listener.gain = flt -> [flt, flt, flt]
|
|
1695
|
+
*
|
|
1696
|
+
* Sets the master scalar amplitude multiplier of the listener which applies
|
|
1697
|
+
* to all the sources. 1.0 means that the sound is unattenuated; 0.5 means
|
|
1698
|
+
* an attenuation of 6 dB; 0.0 means silence. The valid range is [0.0, +inf.).
|
|
1699
|
+
*/
|
|
1700
|
+
static
|
|
1701
|
+
VALUE
|
|
1702
|
+
set_listener_gain(VALUE rlistener, VALUE value)
|
|
1703
|
+
{
|
|
1704
|
+
return set_listener_float(value, seal_set_listener_gain);
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
/*
|
|
1708
|
+
* call-seq:
|
|
1709
|
+
* Seal.listener.gain -> flt
|
|
1710
|
+
*
|
|
1711
|
+
* Gets the gain of the listener. The default is 1.0.
|
|
1712
|
+
*/
|
|
1713
|
+
static
|
|
1714
|
+
VALUE
|
|
1715
|
+
get_listener_gain(VALUE rlistener, VALUE value)
|
|
1716
|
+
{
|
|
1717
|
+
return get_listener_float(seal_get_listener_gain);
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
/*
|
|
1721
|
+
* call-seq:
|
|
1722
|
+
* Seal.listener.position = [flt, flt, flt] -> [flt, flt, flt]
|
|
1723
|
+
*
|
|
1724
|
+
* Sets the position of the listener in a right-handed Cartesian coordinate
|
|
1725
|
+
* system. Use of NaN and infinity is undefined.
|
|
1726
|
+
*/
|
|
1727
|
+
static
|
|
1728
|
+
VALUE
|
|
1729
|
+
set_listener_pos(VALUE rlistener, VALUE value)
|
|
1730
|
+
{
|
|
1731
|
+
return set_listener_3float(value, seal_set_listener_pos);
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
/*
|
|
1735
|
+
* call-seq:
|
|
1736
|
+
* Seal.listener.position -> [flt, flt, flt]
|
|
1737
|
+
*
|
|
1738
|
+
* Gets the position of the listener. The default is ( 0.0, 0.0, 0.0 ).
|
|
1739
|
+
*/
|
|
1740
|
+
static
|
|
1741
|
+
VALUE
|
|
1742
|
+
get_listener_pos(VALUE rlistener, VALUE value)
|
|
1743
|
+
{
|
|
1744
|
+
return get_listener_3float(seal_get_listener_pos);
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1747
|
+
/*
|
|
1748
|
+
* call-seq:
|
|
1749
|
+
* Seal.listener.velocity = flt, flt, flt -> [flt, flt, flt]
|
|
1750
|
+
*
|
|
1751
|
+
* Sets the velocity of the listener in a right-handed Cartesian coordinate
|
|
1752
|
+
* system. The velocity of the listener does not affect its position but is a
|
|
1753
|
+
* factor used during the Doppler effect emulation.
|
|
1754
|
+
*/
|
|
1755
|
+
static
|
|
1756
|
+
VALUE
|
|
1757
|
+
set_listener_vel(VALUE rlistener, VALUE value)
|
|
1758
|
+
{
|
|
1759
|
+
return set_listener_3float(value, seal_set_listener_vel);
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
|
|
1763
|
+
/*
|
|
1764
|
+
* call-seq:
|
|
1765
|
+
* Seal.listener.velocity -> [flt, flt, flt]
|
|
1766
|
+
*
|
|
1767
|
+
* Gets the velocity of the listener. The default is ( 0.0, 0.0, 0.0 ).
|
|
1768
|
+
*/
|
|
1769
|
+
static
|
|
1770
|
+
VALUE
|
|
1771
|
+
get_listener_vel(VALUE rlistener, VALUE value)
|
|
1772
|
+
{
|
|
1773
|
+
return get_listener_3float(seal_get_listener_vel);
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
/*
|
|
1777
|
+
* call-seq:
|
|
1778
|
+
* Seal.listener.orientation = [flt, flt, flt], [flt, flt, flt]
|
|
1779
|
+
* -> [[flt, flt, flt], [flt, flt, flt]]
|
|
1780
|
+
*
|
|
1781
|
+
* Sets the orientation of the listener. The argument must be a pair of
|
|
1782
|
+
* 3-tuple consisting of an 'at' vector and an 'up' vector, where the 'at'
|
|
1783
|
+
* vector represents the 'forward' direction of the listener and the 'up'
|
|
1784
|
+
* vector represents the 'up' direction for the listener. These two vectors
|
|
1785
|
+
* must be linearly independent, must not be NaN and must not be normalized.
|
|
1786
|
+
* Otherwise, the operation is undefined.
|
|
1787
|
+
*/
|
|
1788
|
+
static
|
|
1789
|
+
VALUE
|
|
1790
|
+
set_listener_orien(VALUE rlistener, VALUE rarr)
|
|
1791
|
+
{
|
|
1792
|
+
float orien[6];
|
|
1793
|
+
|
|
1794
|
+
rarr = rb_convert_type(rarr, T_ARRAY, "Array", "to_a");
|
|
1795
|
+
extract_3float(rb_ary_entry(rarr, 0), orien, orien + 1, orien + 2);
|
|
1796
|
+
extract_3float(rb_ary_entry(rarr, 1), orien + 3, orien + 4, orien + 5);
|
|
1797
|
+
check_seal_err(seal_set_listener_orien(orien));
|
|
1798
|
+
|
|
1799
|
+
return rarr;
|
|
1800
|
+
}
|
|
1801
|
+
|
|
1802
|
+
/*
|
|
1803
|
+
* call-seq:
|
|
1804
|
+
* Seal.listener.orientation -> [[flt, flt, flt], [flt, flt, flt]]
|
|
1805
|
+
*
|
|
1806
|
+
* Gets the orientation of the listener. The default is
|
|
1807
|
+
* ((0.0, 0.0, -1.0), (0.0, 1.0, 0.0)).
|
|
1808
|
+
*
|
|
1809
|
+
* Examples:
|
|
1810
|
+
* # at references the `at' vector [flt, flt, flt]
|
|
1811
|
+
* # up references the `up' vector [flt, flt, flt]
|
|
1812
|
+
* at, up = Seal.listener.orientation
|
|
1813
|
+
* # at_x references the x component of the `at' vector
|
|
1814
|
+
* # ...
|
|
1815
|
+
* # up_z references the z component of the `up' vector
|
|
1816
|
+
* (at_x, at_y, ay_z), (up_x, up_y, up_z) = Seal.listener.orientation
|
|
1817
|
+
*/
|
|
1818
|
+
static
|
|
1819
|
+
VALUE
|
|
1820
|
+
get_listener_orien(VALUE rlistener)
|
|
1821
|
+
{
|
|
1822
|
+
float tuple[6];
|
|
1823
|
+
VALUE rtuple[6];
|
|
1824
|
+
VALUE orien[2];
|
|
1825
|
+
|
|
1826
|
+
check_seal_err(seal_get_listener_orien(tuple));
|
|
1827
|
+
convert_bulk_float(rtuple, tuple, 6);
|
|
1828
|
+
orien[0] = rb_ary_new4(3, rtuple);
|
|
1829
|
+
orien[1] = rb_ary_new4(3, rtuple + 3);
|
|
1830
|
+
|
|
1831
|
+
return rb_ary_new4(2, orien);
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1834
|
+
static
|
|
1835
|
+
void
|
|
1836
|
+
singletonify(VALUE klass)
|
|
1837
|
+
{
|
|
1838
|
+
rb_undef_alloc_func(klass);
|
|
1839
|
+
rb_undef_method(rb_singleton_class(klass), "new");
|
|
1840
|
+
}
|
|
1841
|
+
|
|
1842
|
+
/*
|
|
1843
|
+
* Document-module: Seal::Format
|
|
1844
|
+
*
|
|
1845
|
+
* A collection of supported audio formats.
|
|
1846
|
+
*/
|
|
1847
|
+
|
|
1848
|
+
/*
|
|
1849
|
+
* Document-class: Seal::SealError
|
|
1850
|
+
*
|
|
1851
|
+
* The Seal Exception class.
|
|
1852
|
+
*/
|
|
1853
|
+
|
|
1854
|
+
static
|
|
1855
|
+
void
|
|
1856
|
+
bind_core(void)
|
|
1857
|
+
{
|
|
1858
|
+
VALUE mFormat;
|
|
1859
|
+
|
|
1860
|
+
mSeal = rb_define_module("Seal");
|
|
1861
|
+
mFormat = rb_define_module_under(mSeal, "Format");
|
|
1862
|
+
|
|
1863
|
+
eSealError = rb_define_class_under(mSeal, "SealError", rb_eException);
|
|
1864
|
+
rb_define_singleton_method(mSeal, "startup", startup, -1);
|
|
1865
|
+
rb_define_singleton_method(mSeal, "cleanup", cleanup, 0);
|
|
1866
|
+
rb_define_singleton_method(mSeal, "per_source_effect_limit",
|
|
1867
|
+
per_source_effect_limit, 0);
|
|
1868
|
+
/* A string indicating the version of Seal. */
|
|
1869
|
+
rb_define_const(mSeal, "VERSION", rb_str_new2(seal_get_version()));
|
|
1870
|
+
/* WAVE format. */
|
|
1871
|
+
rb_define_const(mFormat, "WAV", name2sym(WAV_SYM));
|
|
1872
|
+
/* Ogg Vorbis format. */
|
|
1873
|
+
rb_define_const(mFormat, "OV", name2sym(OV_SYM));
|
|
1874
|
+
/* MPEG audio format. */
|
|
1875
|
+
rb_define_const(mFormat, "MPG", name2sym(MPG_SYM));
|
|
1876
|
+
}
|
|
1877
|
+
|
|
1878
|
+
/*
|
|
1879
|
+
* Document-class: Seal::Buffer
|
|
1880
|
+
*
|
|
1881
|
+
* Buffers are essentially abstract representations of the (raw) audio data
|
|
1882
|
+
* and are used by sources. Buffers are most suitable for small-sized sound
|
|
1883
|
+
* effect which can be efficiently loaded to memory at once. Streams, on the
|
|
1884
|
+
* other hand, are more suitable for long audio such as background music.
|
|
1885
|
+
*/
|
|
1886
|
+
static
|
|
1887
|
+
void
|
|
1888
|
+
bind_buf(void)
|
|
1889
|
+
{
|
|
1890
|
+
VALUE cBuffer = rb_define_class_under(mSeal, "Buffer", rb_cObject);
|
|
1891
|
+
|
|
1892
|
+
rb_define_alloc_func(cBuffer, alloc_buf);
|
|
1893
|
+
rb_define_method(cBuffer, "initialize", init_buf, -1);
|
|
1894
|
+
rb_define_method(cBuffer, "load", load_buf, -1);
|
|
1895
|
+
rb_define_method(cBuffer, "size", get_buf_size, 0);
|
|
1896
|
+
rb_define_method(cBuffer, "frequency", get_buf_freq, 0);
|
|
1897
|
+
rb_define_method(cBuffer, "bit_depth", get_buf_bps, 0);
|
|
1898
|
+
rb_define_method(cBuffer, "channel_count", get_buf_nchannels, 0);
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
/*
|
|
1902
|
+
* Document-class: Seal::Stream
|
|
1903
|
+
*
|
|
1904
|
+
* Streams are used by streaming sources to avoid loading big audio into
|
|
1905
|
+
* memory. It is the front end for various decoders.
|
|
1906
|
+
*/
|
|
1907
|
+
static
|
|
1908
|
+
void
|
|
1909
|
+
bind_stream(void)
|
|
1910
|
+
{
|
|
1911
|
+
VALUE cStream = rb_define_class_under(mSeal, "Stream", rb_cObject);
|
|
1912
|
+
|
|
1913
|
+
rb_define_alloc_func(cStream, alloc_stream);
|
|
1914
|
+
rb_define_method(cStream, "initialize", init_stream, -1);
|
|
1915
|
+
rb_define_method(cStream, "frequency", get_stream_freq, 0);
|
|
1916
|
+
rb_define_method(cStream, "bit_depth", get_stream_bps, 0);
|
|
1917
|
+
rb_define_method(cStream, "channel_count", get_stream_nchannels, 0);
|
|
1918
|
+
rb_define_method(cStream, "rewind", rewind_stream, 0);
|
|
1919
|
+
rb_define_method(cStream, "close", close_stream, 0);
|
|
1920
|
+
rb_define_alias(rb_singleton_class(cStream), "open", "new");
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1923
|
+
/*
|
|
1924
|
+
* Document-class: Seal::Source
|
|
1925
|
+
*
|
|
1926
|
+
* Sources are abstract representations of sound sources which emit sound in
|
|
1927
|
+
* Euclidean space.
|
|
1928
|
+
*/
|
|
1929
|
+
|
|
1930
|
+
/*
|
|
1931
|
+
* Document-module: Seal::Source::State
|
|
1932
|
+
*
|
|
1933
|
+
* A collection of Source states.
|
|
1934
|
+
*/
|
|
1935
|
+
|
|
1936
|
+
/*
|
|
1937
|
+
* Document-module: Seal::Source::Type
|
|
1938
|
+
*
|
|
1939
|
+
* A collection of Source types.
|
|
1940
|
+
*/
|
|
1941
|
+
static
|
|
1942
|
+
void
|
|
1943
|
+
bind_src(void)
|
|
1944
|
+
{
|
|
1945
|
+
VALUE cSource = rb_define_class_under(mSeal, "Source", rb_cObject);
|
|
1946
|
+
VALUE mState = rb_define_module_under(cSource, "State");
|
|
1947
|
+
VALUE mType = rb_define_module_under(cSource, "Type");
|
|
1948
|
+
|
|
1949
|
+
rb_define_alloc_func(cSource, alloc_src);
|
|
1950
|
+
rb_define_method(cSource, "initialize", init_src, 0);
|
|
1951
|
+
rb_define_method(cSource, "play", play_src, 0);
|
|
1952
|
+
rb_define_method(cSource, "pause", pause_src, 0);
|
|
1953
|
+
rb_define_method(cSource, "stop", stop_src, 0);
|
|
1954
|
+
rb_define_method(cSource, "rewind", rewind_src, 0);
|
|
1955
|
+
rb_define_method(cSource, "buffer=", set_src_buf, 1);
|
|
1956
|
+
rb_define_method(cSource, "buffer", get_src_buf, 0);
|
|
1957
|
+
rb_define_method(cSource, "stream=", set_src_stream, 1);
|
|
1958
|
+
rb_define_method(cSource, "stream", get_src_stream, 0);
|
|
1959
|
+
rb_define_method(cSource, "update", update_src, 0);
|
|
1960
|
+
rb_define_method(cSource, "position=", set_src_pos, 1);
|
|
1961
|
+
rb_define_method(cSource, "position", get_src_pos, 0);
|
|
1962
|
+
rb_define_method(cSource, "velocity=", set_src_vel, 1);
|
|
1963
|
+
rb_define_method(cSource, "velocity", get_src_vel, 0);
|
|
1964
|
+
rb_define_method(cSource, "pitch=", set_src_pitch, 1);
|
|
1965
|
+
rb_define_method(cSource, "pitch", get_src_pitch, 0);
|
|
1966
|
+
rb_define_method(cSource, "gain=", set_src_gain, 1);
|
|
1967
|
+
rb_define_method(cSource, "gain", get_src_gain, 0);
|
|
1968
|
+
rb_define_method(cSource, "auto=", set_src_auto, 1);
|
|
1969
|
+
rb_define_method(cSource, "auto", is_src_auto, 0);
|
|
1970
|
+
rb_define_alias(cSource, "auto?", "auto");
|
|
1971
|
+
rb_define_method(cSource, "relative=", set_src_relative, 1);
|
|
1972
|
+
rb_define_method(cSource, "relative", is_src_relative, 0);
|
|
1973
|
+
rb_define_alias(cSource, "relative?", "relative");
|
|
1974
|
+
rb_define_method(cSource, "looping=", set_src_looping, 1);
|
|
1975
|
+
rb_define_method(cSource, "looping", is_src_looping, 0);
|
|
1976
|
+
rb_define_alias(cSource, "looping?", "looping");
|
|
1977
|
+
rb_define_method(cSource, "queue_size=", set_src_queue_size, 1);
|
|
1978
|
+
rb_define_method(cSource, "queue_size", get_src_queue_size, 0);
|
|
1979
|
+
rb_define_method(cSource, "chunk_size=", set_src_chunk_size, 1);
|
|
1980
|
+
rb_define_method(cSource, "chunk_size", get_src_chunk_size, 0);
|
|
1981
|
+
rb_define_method(cSource, "type", get_src_type, 0);
|
|
1982
|
+
rb_define_method(cSource, "state", get_src_state, 0);
|
|
1983
|
+
|
|
1984
|
+
/* Indicates a source is in initial state. */
|
|
1985
|
+
rb_define_const(mState, "INITIAL", name2sym(INITIAL_SYM));
|
|
1986
|
+
/* Indicates a source is playing. */
|
|
1987
|
+
rb_define_const(mState, "PLAYING", name2sym(PLAYING_SYM));
|
|
1988
|
+
/* Indicates a source is paused from playing. */
|
|
1989
|
+
rb_define_const(mState, "PAUSED", name2sym(PAUSED_SYM));
|
|
1990
|
+
/* Indicates a source is stopped from playing. */
|
|
1991
|
+
rb_define_const(mState, "STOPPED", name2sym(STOPPED_SYM));
|
|
1992
|
+
|
|
1993
|
+
/* Sources with no audio attached. */
|
|
1994
|
+
rb_define_const(mType, "UNDETERMINED", name2sym(UNDETERMINED_SYM));
|
|
1995
|
+
/* Sources with an audio buffer attached. */
|
|
1996
|
+
rb_define_const(mType, "STATIC", name2sym(STATIC_SYM));
|
|
1997
|
+
/* Sources with an audio stream attached. */
|
|
1998
|
+
rb_define_const(mType, "STREAMING", name2sym(STREAMING_SYM));
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
/*
|
|
2002
|
+
* Document-class: Seal::Reverb
|
|
2003
|
+
*
|
|
2004
|
+
* A Reverb object is a set of parameters that define a reverberation effect.
|
|
2005
|
+
* Effect objects can be put into an effect slot for sources to use.
|
|
2006
|
+
*/
|
|
2007
|
+
static
|
|
2008
|
+
void
|
|
2009
|
+
bind_rvb(void)
|
|
2010
|
+
{
|
|
2011
|
+
VALUE cReverb = rb_define_class_under(mSeal, "Reverb", rb_cObject);
|
|
2012
|
+
VALUE mPreset = rb_define_module_under(cReverb, "Preset");
|
|
2013
|
+
VALUE mCastle = rb_define_module_under(mPreset, "Castle");
|
|
2014
|
+
VALUE mFactory = rb_define_module_under(mPreset, "Factory");
|
|
2015
|
+
VALUE mIcePalace = rb_define_module_under(mPreset, "IcePalace");
|
|
2016
|
+
VALUE mSpaceStation = rb_define_module_under(mPreset, "SpaceStation");
|
|
2017
|
+
VALUE mWoodenGalleon = rb_define_module_under(mPreset, "WoodenGalleon");
|
|
2018
|
+
VALUE mSports = rb_define_module_under(mPreset, "Sports");
|
|
2019
|
+
VALUE mPrefab = rb_define_module_under(mPreset, "Prefab");
|
|
2020
|
+
VALUE mDome = rb_define_module_under(mPreset, "Dome");
|
|
2021
|
+
VALUE mPipe = rb_define_module_under(mPreset, "Pipe");
|
|
2022
|
+
VALUE mOutdoors = rb_define_module_under(mPreset, "Outdoors");
|
|
2023
|
+
VALUE mMood = rb_define_module_under(mPreset, "Mood");
|
|
2024
|
+
VALUE mDriving = rb_define_module_under(mPreset, "Driving");
|
|
2025
|
+
VALUE mCity = rb_define_module_under(mPreset, "City");
|
|
2026
|
+
VALUE mMisc = rb_define_module_under(mPreset, "Misc");
|
|
2027
|
+
|
|
2028
|
+
rb_define_alloc_func(cReverb, alloc_rvb);
|
|
2029
|
+
rb_define_method(cReverb, "initialize", init_rvb, -1);
|
|
2030
|
+
rb_define_method(cReverb, "load", load_rvb, 1);
|
|
2031
|
+
rb_define_method(cReverb, "density=", set_rvb_density, 1);
|
|
2032
|
+
rb_define_method(cReverb, "density", get_rvb_density, 0);
|
|
2033
|
+
rb_define_method(cReverb, "diffusion=", set_rvb_diffusion, 1);
|
|
2034
|
+
rb_define_method(cReverb, "diffusion", get_rvb_diffusion, 0);
|
|
2035
|
+
rb_define_method(cReverb, "gain=", set_rvb_gain, 1);
|
|
2036
|
+
rb_define_method(cReverb, "gain", get_rvb_gain, 0);
|
|
2037
|
+
rb_define_method(cReverb, "hfgain=", set_rvb_hfgain, 1);
|
|
2038
|
+
rb_define_method(cReverb, "hfgain", get_rvb_hfgain, 0);
|
|
2039
|
+
rb_define_method(cReverb, "decay_time=", set_rvb_decay_time, 1);
|
|
2040
|
+
rb_define_method(cReverb, "decay_time", get_rvb_decay_time, 0);
|
|
2041
|
+
rb_define_method(cReverb, "hfdecay_ratio=", set_rvb_hfdecay_ratio, 1);
|
|
2042
|
+
rb_define_method(cReverb, "hfdecay_ratio", get_rvb_hfdecay_ratio, 0);
|
|
2043
|
+
rb_define_method(cReverb, "reflections_gain=",
|
|
2044
|
+
set_rvb_reflections_gain, 1);
|
|
2045
|
+
rb_define_method(cReverb, "reflections_gain",
|
|
2046
|
+
get_rvb_reflections_gain, 0);
|
|
2047
|
+
rb_define_method(cReverb, "reflections_delay=",
|
|
2048
|
+
set_rvb_reflections_delay, 1);
|
|
2049
|
+
rb_define_method(cReverb, "reflections_delay",
|
|
2050
|
+
get_rvb_reflections_delay, 0);
|
|
2051
|
+
rb_define_method(cReverb, "late_gain=", set_rvb_late_gain, 1);
|
|
2052
|
+
rb_define_method(cReverb, "late_gain", get_rvb_late_gain, 0);
|
|
2053
|
+
rb_define_method(cReverb, "late_delay=", set_rvb_late_delay, 1);
|
|
2054
|
+
rb_define_method(cReverb, "late_delay", get_rvb_late_delay, 0);
|
|
2055
|
+
rb_define_method(cReverb, "air_absorbtion_hfgain=",
|
|
2056
|
+
set_rvb_air_absorbtion_hfgain, 1);
|
|
2057
|
+
rb_define_method(cReverb, "air_absorbtion_hfgain",
|
|
2058
|
+
get_rvb_air_absorbtion_hfgain, 0);
|
|
2059
|
+
rb_define_method(cReverb, "room_rolloff_factor=",
|
|
2060
|
+
set_rvb_room_rolloff_factor, 1);
|
|
2061
|
+
rb_define_method(cReverb, "room_rolloff_factor",
|
|
2062
|
+
get_rvb_room_rolloff_factor, 0);
|
|
2063
|
+
rb_define_method(cReverb, "hfdecay_limited=",
|
|
2064
|
+
set_rvb_hfdecay_limited, 1);
|
|
2065
|
+
rb_define_method(cReverb, "hfdecay_limited",
|
|
2066
|
+
is_rvb_hfdecay_limited, 0);
|
|
2067
|
+
rb_define_alias(cReverb, "hfdecay_limited?", "hfdecay_limited");
|
|
2068
|
+
|
|
2069
|
+
rb_define_const(mPreset, "GENERIC", INT2NUM(SEAL_GENERIC_REVERB));
|
|
2070
|
+
rb_define_const(mPreset, "PADDEDCELL", INT2NUM(SEAL_PADDEDCELL_REVERB));
|
|
2071
|
+
rb_define_const(mPreset, "ROOM", INT2NUM(SEAL_ROOM_REVERB));
|
|
2072
|
+
rb_define_const(mPreset, "BATHROOM", INT2NUM(SEAL_BATHROOM_REVERB));
|
|
2073
|
+
rb_define_const(mPreset, "LIVINGROOM", INT2NUM(SEAL_LIVINGROOM_REVERB));
|
|
2074
|
+
rb_define_const(mPreset, "STONEROOM", INT2NUM(SEAL_STONEROOM_REVERB));
|
|
2075
|
+
rb_define_const(mPreset, "AUDITORIUM", INT2NUM(SEAL_AUDITORIUM_REVERB));
|
|
2076
|
+
rb_define_const(mPreset, "CONCERTHALL", INT2NUM(SEAL_CONCERTHALL_REVERB));
|
|
2077
|
+
rb_define_const(mPreset, "CAVE", INT2NUM(SEAL_CAVE_REVERB));
|
|
2078
|
+
rb_define_const(mPreset, "ARENA", INT2NUM(SEAL_ARENA_REVERB));
|
|
2079
|
+
rb_define_const(mPreset, "HANGAR", INT2NUM(SEAL_HANGAR_REVERB));
|
|
2080
|
+
rb_define_const(mPreset, "CARPETEDHALLWAY",
|
|
2081
|
+
INT2NUM(SEAL_CARPETEDHALLWAY_REVERB));
|
|
2082
|
+
rb_define_const(mPreset, "HALLWAY", INT2NUM(SEAL_HALLWAY_REVERB));
|
|
2083
|
+
rb_define_const(mPreset, "STONECORRIDOR",
|
|
2084
|
+
INT2NUM(SEAL_STONECORRIDOR_REVERB));
|
|
2085
|
+
rb_define_const(mPreset, "ALLEY", INT2NUM(SEAL_ALLEY_REVERB));
|
|
2086
|
+
rb_define_const(mPreset, "FOREST", INT2NUM(SEAL_FOREST_REVERB));
|
|
2087
|
+
rb_define_const(mPreset, "CITY", INT2NUM(SEAL_CITY_REVERB));
|
|
2088
|
+
rb_define_const(mPreset, "MOUNTAINS", INT2NUM(SEAL_MOUNTAINS_REVERB));
|
|
2089
|
+
rb_define_const(mPreset, "QUARRY", INT2NUM(SEAL_QUARRY_REVERB));
|
|
2090
|
+
rb_define_const(mPreset, "PLAIN", INT2NUM(SEAL_PLAIN_REVERB));
|
|
2091
|
+
rb_define_const(mPreset, "PARKINGLOT", INT2NUM(SEAL_PARKINGLOT_REVERB));
|
|
2092
|
+
rb_define_const(mPreset, "SEWERPIPE", INT2NUM(SEAL_SEWERPIPE_REVERB));
|
|
2093
|
+
rb_define_const(mPreset, "UNDERWATER", INT2NUM(SEAL_UNDERWATER_REVERB));
|
|
2094
|
+
rb_define_const(mPreset, "DRUGGED", INT2NUM(SEAL_DRUGGED_REVERB));
|
|
2095
|
+
rb_define_const(mPreset, "DIZZY", INT2NUM(SEAL_DIZZY_REVERB));
|
|
2096
|
+
rb_define_const(mPreset, "PSYCHOTIC", INT2NUM(SEAL_PSYCHOTIC_REVERB));
|
|
2097
|
+
|
|
2098
|
+
rb_define_const(mCastle, "SMALLROOM",
|
|
2099
|
+
INT2NUM(SEAL_CASTLE_SMALLROOM_REVERB));
|
|
2100
|
+
rb_define_const(mCastle, "SHORTPASSAGE",
|
|
2101
|
+
INT2NUM(SEAL_CASTLE_SHORTPASSAGE_REVERB));
|
|
2102
|
+
rb_define_const(mCastle, "MEDIUMROOM",
|
|
2103
|
+
INT2NUM(SEAL_CASTLE_MEDIUMROOM_REVERB));
|
|
2104
|
+
rb_define_const(mCastle, "LARGEROOM",
|
|
2105
|
+
INT2NUM(SEAL_CASTLE_LARGEROOM_REVERB));
|
|
2106
|
+
rb_define_const(mCastle, "LONGPASSAGE",
|
|
2107
|
+
INT2NUM(SEAL_CASTLE_LONGPASSAGE_REVERB));
|
|
2108
|
+
rb_define_const(mCastle, "HALL", INT2NUM(SEAL_CASTLE_HALL_REVERB));
|
|
2109
|
+
rb_define_const(mCastle, "CUPBOARD", INT2NUM(SEAL_CASTLE_CUPBOARD_REVERB));
|
|
2110
|
+
rb_define_const(mCastle, "COURTYARD",
|
|
2111
|
+
INT2NUM(SEAL_CASTLE_COURTYARD_REVERB));
|
|
2112
|
+
rb_define_const(mCastle, "ALCOVE", INT2NUM(SEAL_CASTLE_ALCOVE_REVERB));
|
|
2113
|
+
|
|
2114
|
+
rb_define_const(mFactory, "SMALLROOM",
|
|
2115
|
+
INT2NUM(SEAL_FACTORY_SMALLROOM_REVERB));
|
|
2116
|
+
rb_define_const(mFactory, "SHORTPASSAGE",
|
|
2117
|
+
INT2NUM(SEAL_FACTORY_SHORTPASSAGE_REVERB));
|
|
2118
|
+
rb_define_const(mFactory, "MEDIUMROOM",
|
|
2119
|
+
INT2NUM(SEAL_FACTORY_MEDIUMROOM_REVERB));
|
|
2120
|
+
rb_define_const(mFactory, "LARGEROOM",
|
|
2121
|
+
INT2NUM(SEAL_FACTORY_LARGEROOM_REVERB));
|
|
2122
|
+
rb_define_const(mFactory, "LONGPASSAGE",
|
|
2123
|
+
INT2NUM(SEAL_FACTORY_LONGPASSAGE_REVERB));
|
|
2124
|
+
rb_define_const(mFactory, "HALL", INT2NUM(SEAL_FACTORY_HALL_REVERB));
|
|
2125
|
+
rb_define_const(mFactory, "CUPBOARD",
|
|
2126
|
+
INT2NUM(SEAL_FACTORY_CUPBOARD_REVERB));
|
|
2127
|
+
rb_define_const(mFactory, "COURTYARD",
|
|
2128
|
+
INT2NUM(SEAL_FACTORY_COURTYARD_REVERB));
|
|
2129
|
+
rb_define_const(mFactory, "ALCOVE",
|
|
2130
|
+
INT2NUM(SEAL_FACTORY_ALCOVE_REVERB));
|
|
2131
|
+
|
|
2132
|
+
rb_define_const(mIcePalace, "SMALLROOM",
|
|
2133
|
+
INT2NUM(SEAL_ICEPALACE_SMALLROOM_REVERB));
|
|
2134
|
+
rb_define_const(mIcePalace, "SHORTPASSAGE",
|
|
2135
|
+
INT2NUM(SEAL_ICEPALACE_SHORTPASSAGE_REVERB));
|
|
2136
|
+
rb_define_const(mIcePalace, "MEDIUMROOM",
|
|
2137
|
+
INT2NUM(SEAL_ICEPALACE_MEDIUMROOM_REVERB));
|
|
2138
|
+
rb_define_const(mIcePalace, "LARGEROOM",
|
|
2139
|
+
INT2NUM(SEAL_ICEPALACE_LARGEROOM_REVERB));
|
|
2140
|
+
rb_define_const(mIcePalace, "LONGPASSAGE",
|
|
2141
|
+
INT2NUM(SEAL_ICEPALACE_LONGPASSAGE_REVERB));
|
|
2142
|
+
rb_define_const(mIcePalace, "HALL",
|
|
2143
|
+
INT2NUM(SEAL_ICEPALACE_HALL_REVERB));
|
|
2144
|
+
rb_define_const(mIcePalace, "CUPBOARD",
|
|
2145
|
+
INT2NUM(SEAL_ICEPALACE_CUPBOARD_REVERB));
|
|
2146
|
+
rb_define_const(mIcePalace, "COURTYARD",
|
|
2147
|
+
INT2NUM(SEAL_ICEPALACE_COURTYARD_REVERB));
|
|
2148
|
+
rb_define_const(mIcePalace, "ALCOVE",
|
|
2149
|
+
INT2NUM(SEAL_ICEPALACE_ALCOVE_REVERB));
|
|
2150
|
+
|
|
2151
|
+
rb_define_const(mSpaceStation, "SMALLROOM",
|
|
2152
|
+
INT2NUM(SEAL_SPACESTATION_SMALLROOM_REVERB));
|
|
2153
|
+
rb_define_const(mSpaceStation, "SHORTPASSAGE",
|
|
2154
|
+
INT2NUM(SEAL_SPACESTATION_SHORTPASSAGE_REVERB));
|
|
2155
|
+
rb_define_const(mSpaceStation, "MEDIUMROOM",
|
|
2156
|
+
INT2NUM(SEAL_SPACESTATION_MEDIUMROOM_REVERB));
|
|
2157
|
+
rb_define_const(mSpaceStation, "LARGEROOM",
|
|
2158
|
+
INT2NUM(SEAL_SPACESTATION_LARGEROOM_REVERB));
|
|
2159
|
+
rb_define_const(mSpaceStation, "LONGPASSAGE",
|
|
2160
|
+
INT2NUM(SEAL_SPACESTATION_LONGPASSAGE_REVERB));
|
|
2161
|
+
rb_define_const(mSpaceStation, "HALL",
|
|
2162
|
+
INT2NUM(SEAL_SPACESTATION_HALL_REVERB));
|
|
2163
|
+
rb_define_const(mSpaceStation, "CUPBOARD",
|
|
2164
|
+
INT2NUM(SEAL_SPACESTATION_CUPBOARD_REVERB));
|
|
2165
|
+
rb_define_const(mSpaceStation, "ALCOVE",
|
|
2166
|
+
INT2NUM(SEAL_SPACESTATION_ALCOVE_REVERB));
|
|
2167
|
+
rb_define_const(mWoodenGalleon, "SMALLROOM",
|
|
2168
|
+
INT2NUM(SEAL_WOODEN_SMALLROOM_REVERB));
|
|
2169
|
+
rb_define_const(mWoodenGalleon, "SHORTPASSAGE",
|
|
2170
|
+
INT2NUM(SEAL_WOODEN_SHORTPASSAGE_REVERB));
|
|
2171
|
+
rb_define_const(mWoodenGalleon, "MEDIUMROOM",
|
|
2172
|
+
INT2NUM(SEAL_WOODEN_MEDIUMROOM_REVERB));
|
|
2173
|
+
rb_define_const(mWoodenGalleon, "LARGEROOM",
|
|
2174
|
+
INT2NUM(SEAL_WOODEN_LARGEROOM_REVERB));
|
|
2175
|
+
rb_define_const(mWoodenGalleon, "LONGPASSAGE",
|
|
2176
|
+
INT2NUM(SEAL_WOODEN_LONGPASSAGE_REVERB));
|
|
2177
|
+
rb_define_const(mWoodenGalleon, "HALL", INT2NUM(SEAL_WOODEN_HALL_REVERB));
|
|
2178
|
+
rb_define_const(mWoodenGalleon, "CUPBOARD",
|
|
2179
|
+
INT2NUM(SEAL_WOODEN_CUPBOARD_REVERB));
|
|
2180
|
+
rb_define_const(mWoodenGalleon, "COURTYARD",
|
|
2181
|
+
INT2NUM(SEAL_WOODEN_COURTYARD_REVERB));
|
|
2182
|
+
rb_define_const(mWoodenGalleon, "ALCOVE",
|
|
2183
|
+
INT2NUM(SEAL_WOODEN_ALCOVE_REVERB));
|
|
2184
|
+
|
|
2185
|
+
rb_define_const(mSports, "EMPTYSTADIUM",
|
|
2186
|
+
INT2NUM(SEAL_SPORT_EMPTYSTADIUM_REVERB));
|
|
2187
|
+
rb_define_const(mSports, "SQUASHCOURT",
|
|
2188
|
+
INT2NUM(SEAL_SPORT_SQUASHCOURT_REVERB));
|
|
2189
|
+
rb_define_const(mSports, "SMALLSWIMMINGPOOL",
|
|
2190
|
+
INT2NUM(SEAL_SPORT_SMALLSWIMMINGPOOL_REVERB));
|
|
2191
|
+
rb_define_const(mSports, "LARGESWIMMINGPOOL",
|
|
2192
|
+
INT2NUM(SEAL_SPORT_LARGESWIMMINGPOOL_REVERB));
|
|
2193
|
+
rb_define_const(mSports, "GYMNASIUM",
|
|
2194
|
+
INT2NUM(SEAL_SPORT_GYMNASIUM_REVERB));
|
|
2195
|
+
rb_define_const(mSports, "FULLSTADIUM",
|
|
2196
|
+
INT2NUM(SEAL_SPORT_FULLSTADIUM_REVERB));
|
|
2197
|
+
rb_define_const(mSports, "STADIUMTANNOY",
|
|
2198
|
+
INT2NUM(SEAL_SPORT_STADIUMTANNOY_REVERB));
|
|
2199
|
+
|
|
2200
|
+
rb_define_const(mPrefab, "WORKSHOP", INT2NUM(SEAL_PREFAB_WORKSHOP_REVERB));
|
|
2201
|
+
rb_define_const(mPrefab, "SCHOOLROOM",
|
|
2202
|
+
INT2NUM(SEAL_PREFAB_SCHOOLROOM_REVERB));
|
|
2203
|
+
rb_define_const(mPrefab, "PRACTISEROOM",
|
|
2204
|
+
INT2NUM(SEAL_PREFAB_PRACTISEROOM_REVERB));
|
|
2205
|
+
rb_define_const(mPrefab, "OUTHOUSE", INT2NUM(SEAL_PREFAB_OUTHOUSE_REVERB));
|
|
2206
|
+
rb_define_const(mPrefab, "CARAVAN", INT2NUM(SEAL_PREFAB_CARAVAN_REVERB));
|
|
2207
|
+
|
|
2208
|
+
rb_define_const(mDome, "TOMB", INT2NUM(SEAL_DOME_TOMB_REVERB));
|
|
2209
|
+
rb_define_const(mDome, "SAINTPAULS", INT2NUM(SEAL_DOME_SAINTPAULS_REVERB));
|
|
2210
|
+
|
|
2211
|
+
rb_define_const(mPipe, "SMALL", INT2NUM(SEAL_PIPE_SMALL_REVERB));
|
|
2212
|
+
rb_define_const(mPipe, "LONGTHIN", INT2NUM(SEAL_PIPE_LONGTHIN_REVERB));
|
|
2213
|
+
rb_define_const(mPipe, "LARGE", INT2NUM(SEAL_PIPE_LARGE_REVERB));
|
|
2214
|
+
rb_define_const(mPipe, "RESONANT", INT2NUM(SEAL_PIPE_RESONANT_REVERB));
|
|
2215
|
+
|
|
2216
|
+
rb_define_const(mOutdoors, "BACKYARD",
|
|
2217
|
+
INT2NUM(SEAL_OUTDOORS_BACKYARD_REVERB));
|
|
2218
|
+
rb_define_const(mOutdoors, "ROLLINGPLAINS",
|
|
2219
|
+
INT2NUM(SEAL_OUTDOORS_ROLLINGPLAINS_REVERB));
|
|
2220
|
+
rb_define_const(mOutdoors, "DEEPCANYON",
|
|
2221
|
+
INT2NUM(SEAL_OUTDOORS_DEEPCANYON_REVERB));
|
|
2222
|
+
rb_define_const(mOutdoors, "CREEK",
|
|
2223
|
+
INT2NUM(SEAL_OUTDOORS_CREEK_REVERB));
|
|
2224
|
+
rb_define_const(mOutdoors, "VALLEY",
|
|
2225
|
+
INT2NUM(SEAL_OUTDOORS_VALLEY_REVERB));
|
|
2226
|
+
|
|
2227
|
+
rb_define_const(mMood, "HEAVEN",
|
|
2228
|
+
INT2NUM(SEAL_MOOD_HEAVEN_REVERB));
|
|
2229
|
+
rb_define_const(mMood, "HELL",
|
|
2230
|
+
INT2NUM(SEAL_MOOD_HELL_REVERB));
|
|
2231
|
+
rb_define_const(mMood, "MEMORY",
|
|
2232
|
+
INT2NUM(SEAL_MOOD_MEMORY_REVERB));
|
|
2233
|
+
|
|
2234
|
+
rb_define_const(mDriving, "COMMENTATOR",
|
|
2235
|
+
INT2NUM(SEAL_DRIVING_COMMENTATOR_REVERB));
|
|
2236
|
+
rb_define_const(mDriving, "PITGARAGE",
|
|
2237
|
+
INT2NUM(SEAL_DRIVING_PITGARAGE_REVERB));
|
|
2238
|
+
rb_define_const(mDriving, "INCAR_RACER",
|
|
2239
|
+
INT2NUM(SEAL_DRIVING_INCAR_RACER_REVERB));
|
|
2240
|
+
rb_define_const(mDriving, "INCAR_SPORTS",
|
|
2241
|
+
INT2NUM(SEAL_DRIVING_INCAR_SPORTS_REVERB));
|
|
2242
|
+
rb_define_const(mDriving, "INCAR_LUXURY",
|
|
2243
|
+
INT2NUM(SEAL_DRIVING_INCAR_LUXURY_REVERB));
|
|
2244
|
+
rb_define_const(mDriving, "FULLGRANDSTAND",
|
|
2245
|
+
INT2NUM(SEAL_DRIVING_FULLGRANDSTAND_REVERB));
|
|
2246
|
+
rb_define_const(mDriving, "EMPTYGRANDSTAND",
|
|
2247
|
+
INT2NUM(SEAL_DRIVING_EMPTYGRANDSTAND_REVERB));
|
|
2248
|
+
rb_define_const(mDriving, "TUNNEL", INT2NUM(SEAL_DRIVING_TUNNEL_REVERB));
|
|
2249
|
+
|
|
2250
|
+
rb_define_const(mCity, "STREETS", INT2NUM(SEAL_CITY_STREETS_REVERB));
|
|
2251
|
+
rb_define_const(mCity, "SUBWAY", INT2NUM(SEAL_CITY_SUBWAY_REVERB));
|
|
2252
|
+
rb_define_const(mCity, "MUSEUM", INT2NUM(SEAL_CITY_MUSEUM_REVERB));
|
|
2253
|
+
rb_define_const(mCity, "LIBRARY", INT2NUM(SEAL_CITY_LIBRARY_REVERB));
|
|
2254
|
+
rb_define_const(mCity, "UNDERPASS", INT2NUM(SEAL_CITY_UNDERPASS_REVERB));
|
|
2255
|
+
rb_define_const(mCity, "ABANDONED", INT2NUM(SEAL_CITY_ABANDONED_REVERB));
|
|
2256
|
+
|
|
2257
|
+
rb_define_const(mMisc, "DUSTYROOM", INT2NUM(SEAL_DUSTYROOM_REVERB));
|
|
2258
|
+
rb_define_const(mMisc, "CHAPEL", INT2NUM(SEAL_CHAPEL_REVERB));
|
|
2259
|
+
rb_define_const(mMisc, "SMALLWATERROOM",
|
|
2260
|
+
INT2NUM(SEAL_SMALLWATERROOM_REVERB));
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2263
|
+
/*
|
|
2264
|
+
* Document-class: Seal::EffectSlot
|
|
2265
|
+
*
|
|
2266
|
+
* EffectSlot is the container type for effects. A source can mix an effect in
|
|
2267
|
+
* an effect slot to filter the output sound.
|
|
2268
|
+
*/
|
|
2269
|
+
static
|
|
2270
|
+
void
|
|
2271
|
+
bind_efs(void)
|
|
2272
|
+
{
|
|
2273
|
+
VALUE cEffectSlot = rb_define_class_under(mSeal, "EffectSlot", rb_cObject);
|
|
2274
|
+
|
|
2275
|
+
rb_define_alloc_func(cEffectSlot, alloc_efs);
|
|
2276
|
+
rb_define_method(cEffectSlot, "initialize", init_efs, -1);
|
|
2277
|
+
rb_define_method(cEffectSlot, "effect=", set_efs_effect, 1);
|
|
2278
|
+
rb_define_method(cEffectSlot, "effect", get_efs_effect, 0);
|
|
2279
|
+
rb_define_method(cEffectSlot, "feed", feed_efs, 2);
|
|
2280
|
+
rb_define_method(cEffectSlot, "gain=", set_efs_gain, 1);
|
|
2281
|
+
rb_define_method(cEffectSlot, "gain", get_efs_gain, 0);
|
|
2282
|
+
rb_define_method(cEffectSlot, "auto=", set_efs_auto, 1);
|
|
2283
|
+
rb_define_method(cEffectSlot, "auto", is_efs_auto, 0);
|
|
2284
|
+
rb_define_alias(cEffectSlot, "auto?", "auto");
|
|
2285
|
+
}
|
|
2286
|
+
|
|
2287
|
+
/*
|
|
2288
|
+
* Document-class: Seal::Listener
|
|
2289
|
+
*
|
|
2290
|
+
* Listener has a singleton instance representing the sole listener who hears
|
|
2291
|
+
* the sound.
|
|
2292
|
+
*/
|
|
2293
|
+
static
|
|
2294
|
+
void
|
|
2295
|
+
bind_listener(void)
|
|
2296
|
+
{
|
|
2297
|
+
VALUE cListener = rb_define_class_under(mSeal, "Listener", rb_cObject);
|
|
2298
|
+
VALUE listener = rb_data_object_alloc(cListener, 0, 0, 0);
|
|
2299
|
+
|
|
2300
|
+
/* The singleton Listener instance. */
|
|
2301
|
+
rb_define_const(mSeal, "LISTENER", listener);
|
|
2302
|
+
rb_define_singleton_method(mSeal, "listener", get_listener, 0);
|
|
2303
|
+
singletonify(cListener);
|
|
2304
|
+
rb_define_method(cListener, "position=", set_listener_pos, 1);
|
|
2305
|
+
rb_define_method(cListener, "position", get_listener_pos, 0);
|
|
2306
|
+
rb_define_method(cListener, "velocity=", set_listener_vel, 1);
|
|
2307
|
+
rb_define_method(cListener, "velocity", get_listener_vel, 0);
|
|
2308
|
+
rb_define_method(cListener, "gain=", set_listener_gain, 1);
|
|
2309
|
+
rb_define_method(cListener, "gain", get_listener_gain, 0);
|
|
2310
|
+
rb_define_method(cListener, "orientation=", set_listener_orien, 1);
|
|
2311
|
+
rb_define_method(cListener, "orientation", get_listener_orien, 0);
|
|
2312
|
+
}
|
|
2313
|
+
|
|
2314
|
+
/*
|
|
2315
|
+
* Document-module: Seal
|
|
2316
|
+
*
|
|
2317
|
+
* The top-level namespace of Seal.
|
|
2318
|
+
*/
|
|
2319
|
+
void
|
|
2320
|
+
Init_seal(void)
|
|
2321
|
+
{
|
|
2322
|
+
bind_core();
|
|
2323
|
+
bind_buf();
|
|
2324
|
+
bind_stream();
|
|
2325
|
+
bind_src();
|
|
2326
|
+
bind_rvb();
|
|
2327
|
+
bind_efs();
|
|
2328
|
+
bind_listener();
|
|
2329
|
+
}
|