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.
Files changed (421) hide show
  1. data/.yardopts +1 -0
  2. data/LICENSE +13 -0
  3. data/README.md +265 -0
  4. data/ext/seal/extconf.rb +45 -0
  5. data/include/al/al.h +724 -0
  6. data/include/al/alc.h +277 -0
  7. data/include/al/efx-presets.h +402 -0
  8. data/include/al/efx.h +758 -0
  9. data/include/mpg123/mpg123.h +1034 -0
  10. data/include/ogg/config_types.h +25 -0
  11. data/include/ogg/ogg.h +210 -0
  12. data/include/ogg/os_types.h +147 -0
  13. data/include/seal.h +23 -0
  14. data/include/seal/buf.h +143 -0
  15. data/include/seal/core.h +95 -0
  16. data/include/seal/efs.h +112 -0
  17. data/include/seal/err.h +93 -0
  18. data/include/seal/fmt.h +58 -0
  19. data/include/seal/listener.h +103 -0
  20. data/include/seal/raw.h +86 -0
  21. data/include/seal/rvb.h +520 -0
  22. data/include/seal/src.h +413 -0
  23. data/include/seal/stream.h +81 -0
  24. data/include/vorbis/codec.h +243 -0
  25. data/include/vorbis/vorbisfile.h +206 -0
  26. data/mpg123/AUTHORS +150 -0
  27. data/mpg123/COPYING +773 -0
  28. data/mpg123/ChangeLog +3 -0
  29. data/mpg123/INSTALL +111 -0
  30. data/mpg123/Makefile.am +99 -0
  31. data/mpg123/Makefile.in +1043 -0
  32. data/mpg123/NEWS +1200 -0
  33. data/mpg123/NEWS.libmpg123 +133 -0
  34. data/mpg123/README +203 -0
  35. data/mpg123/TODO +38 -0
  36. data/mpg123/aclocal.m4 +1168 -0
  37. data/mpg123/build/config.guess +1530 -0
  38. data/mpg123/build/config.sub +1782 -0
  39. data/mpg123/build/depcomp +707 -0
  40. data/mpg123/build/install-sh +527 -0
  41. data/mpg123/build/ltmain.sh +9655 -0
  42. data/mpg123/build/missing +330 -0
  43. data/mpg123/configure +20267 -0
  44. data/mpg123/configure.ac +2178 -0
  45. data/mpg123/doc/ACCURACY +2 -0
  46. data/mpg123/doc/BENCHMARKING +110 -0
  47. data/mpg123/doc/BUGS +3 -0
  48. data/mpg123/doc/CONTACT +17 -0
  49. data/mpg123/doc/LICENSE +22 -0
  50. data/mpg123/doc/Makefile.am +32 -0
  51. data/mpg123/doc/Makefile.in +490 -0
  52. data/mpg123/doc/PATENTS +39 -0
  53. data/mpg123/doc/README.3DNOW +56 -0
  54. data/mpg123/doc/README.gain +171 -0
  55. data/mpg123/doc/README.remote +218 -0
  56. data/mpg123/doc/ROAD_TO_LGPL +270 -0
  57. data/mpg123/doc/THANKS +13 -0
  58. data/mpg123/doc/TODO +63 -0
  59. data/mpg123/doc/doxy_examples.c +21 -0
  60. data/mpg123/doc/doxygen.conf +41 -0
  61. data/mpg123/doc/doxyhead.xhtml +12 -0
  62. data/mpg123/doc/examples/dump_seekindex.c +41 -0
  63. data/mpg123/doc/examples/extract_frames.c +92 -0
  64. data/mpg123/doc/examples/feedseek.c +238 -0
  65. data/mpg123/doc/examples/id3dump.c +178 -0
  66. data/mpg123/doc/examples/mpg123_to_wav.c +118 -0
  67. data/mpg123/doc/examples/mpglib.c +92 -0
  68. data/mpg123/doc/examples/scan.c +47 -0
  69. data/mpg123/doc/libmpg123_speed.txt +84 -0
  70. data/mpg123/equalize.dat +37 -0
  71. data/mpg123/libmpg123.pc.in +11 -0
  72. data/mpg123/m4/addrconfig.m4 +34 -0
  73. data/mpg123/m4/libtool.m4 +7982 -0
  74. data/mpg123/m4/ltoptions.m4 +384 -0
  75. data/mpg123/m4/ltsugar.m4 +123 -0
  76. data/mpg123/m4/ltversion.m4 +23 -0
  77. data/mpg123/m4/lt~obsolete.m4 +98 -0
  78. data/mpg123/makedll.sh +19 -0
  79. data/mpg123/man1/mpg123.1 +512 -0
  80. data/mpg123/mpg123.spec +68 -0
  81. data/mpg123/mpg123.spec.in +68 -0
  82. data/mpg123/ports/MSVC++/2005/libmpg123/libmpg123.vcproj +741 -0
  83. data/mpg123/ports/MSVC++/2008/dump_seekindex/dump_seekindex.vcproj +194 -0
  84. data/mpg123/ports/MSVC++/2008/feedseek/feedseek.vcproj +195 -0
  85. data/mpg123/ports/MSVC++/2008/libmpg123/libmpg123.vcproj +1357 -0
  86. data/mpg123/ports/MSVC++/2008/mpg123.sln +44 -0
  87. data/mpg123/ports/MSVC++/2008/mpglib/mpglib.vcproj +191 -0
  88. data/mpg123/ports/MSVC++/2008/scan/scan.vcproj +195 -0
  89. data/mpg123/ports/MSVC++/2008clr/2008clr.sln +81 -0
  90. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Program.cs +435 -0
  91. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Properties/AssemblyInfo.cs +36 -0
  92. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/ReplaceReaderclr.csproj +72 -0
  93. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Program.cs +331 -0
  94. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Properties/AssemblyInfo.cs +36 -0
  95. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/feedseekclr.csproj +71 -0
  96. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Program.cs +79 -0
  97. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Properties/AssemblyInfo.cs +36 -0
  98. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/scanclr.csproj +70 -0
  99. data/mpg123/ports/MSVC++/2008clr/mpg123clr/AssemblyInfo.cpp +76 -0
  100. data/mpg123/ports/MSVC++/2008clr/mpg123clr/ReadMe.txt +165 -0
  101. data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.cpp +91 -0
  102. data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.h +130 -0
  103. data/mpg123/ports/MSVC++/2008clr/mpg123clr/dllmain.cpp +19 -0
  104. data/mpg123/ports/MSVC++/2008clr/mpg123clr/enum.h +218 -0
  105. data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.cpp +48 -0
  106. data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.h +134 -0
  107. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.cpp +92 -0
  108. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.h +132 -0
  109. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.cpp +138 -0
  110. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.h +152 -0
  111. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.cpp +896 -0
  112. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.h +953 -0
  113. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.rc +102 -0
  114. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.vcproj +328 -0
  115. data/mpg123/ports/MSVC++/2008clr/mpg123clr/resource.h +14 -0
  116. data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.cpp +8 -0
  117. data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.h +38 -0
  118. data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.cpp +166 -0
  119. data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.h +265 -0
  120. data/mpg123/ports/MSVC++/2008clr/mpg123clr/targetver.h +24 -0
  121. data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.cpp +67 -0
  122. data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.h +111 -0
  123. data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj +90 -0
  124. data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj.filters +6 -0
  125. data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj +95 -0
  126. data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj.filters +6 -0
  127. data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj +960 -0
  128. data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj.user +3 -0
  129. data/mpg123/ports/MSVC++/2010/libmpg123/yasm.exe +0 -0
  130. data/mpg123/ports/MSVC++/2010/mpg123.sln +38 -0
  131. data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj +93 -0
  132. data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj.filters +6 -0
  133. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/CORE_FileIn.H +15 -0
  134. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/SourceFilter_MP3.H +139 -0
  135. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_Def.H +206 -0
  136. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_FileIn.H +167 -0
  137. data/mpg123/ports/MSVC++/CMP3Stream/README +4 -0
  138. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_FileIn.CPP +462 -0
  139. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Log.CPP +122 -0
  140. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Mutex.CPP +35 -0
  141. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/SourceFilter_MP3Stream.CPP +586 -0
  142. data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/PLACE_LIBMPG123_SOURCES_HERE +0 -0
  143. data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/libMPG123.vcproj +245 -0
  144. data/mpg123/ports/MSVC++/config.h +35 -0
  145. data/mpg123/ports/MSVC++/examples/feedseek.c +240 -0
  146. data/mpg123/ports/MSVC++/examples/scan.c +47 -0
  147. data/mpg123/ports/MSVC++/mpg123.h +46 -0
  148. data/mpg123/ports/MSVC++/msvc.c +59 -0
  149. data/mpg123/ports/README +26 -0
  150. data/mpg123/ports/Sony_PSP/Makefile.psp +38 -0
  151. data/mpg123/ports/Sony_PSP/README +11 -0
  152. data/mpg123/ports/Sony_PSP/config.h +368 -0
  153. data/mpg123/ports/Sony_PSP/readers.c.patch +2 -0
  154. data/mpg123/ports/Xcode/config.h +197 -0
  155. data/mpg123/ports/Xcode/mpg123.h +17 -0
  156. data/mpg123/ports/Xcode/mpg123.xcodeproj/project.pbxproj +670 -0
  157. data/mpg123/ports/mpg123_.pas +478 -0
  158. data/mpg123/scripts/benchmark-cpu.pl +56 -0
  159. data/mpg123/scripts/tag_lyrics.py +76 -0
  160. data/mpg123/src/Makefile.am +186 -0
  161. data/mpg123/src/Makefile.in +1097 -0
  162. data/mpg123/src/audio.c +725 -0
  163. data/mpg123/src/audio.h +106 -0
  164. data/mpg123/src/buffer.c +312 -0
  165. data/mpg123/src/buffer.h +45 -0
  166. data/mpg123/src/common.c +240 -0
  167. data/mpg123/src/common.h +29 -0
  168. data/mpg123/src/config.h.in +436 -0
  169. data/mpg123/src/control_generic.c +809 -0
  170. data/mpg123/src/equalizer.c +48 -0
  171. data/mpg123/src/genre.c +271 -0
  172. data/mpg123/src/genre.h +15 -0
  173. data/mpg123/src/getlopt.c +148 -0
  174. data/mpg123/src/getlopt.h +77 -0
  175. data/mpg123/src/httpget.c +700 -0
  176. data/mpg123/src/httpget.h +66 -0
  177. data/mpg123/src/legacy_module.c +74 -0
  178. data/mpg123/src/libmpg123/Makefile.am +141 -0
  179. data/mpg123/src/libmpg123/Makefile.in +919 -0
  180. data/mpg123/src/libmpg123/compat.c +138 -0
  181. data/mpg123/src/libmpg123/compat.h +178 -0
  182. data/mpg123/src/libmpg123/dct36_3dnow.S +505 -0
  183. data/mpg123/src/libmpg123/dct36_3dnowext.S +512 -0
  184. data/mpg123/src/libmpg123/dct64.c +174 -0
  185. data/mpg123/src/libmpg123/dct64_3dnow.S +712 -0
  186. data/mpg123/src/libmpg123/dct64_3dnowext.S +714 -0
  187. data/mpg123/src/libmpg123/dct64_altivec.c +315 -0
  188. data/mpg123/src/libmpg123/dct64_i386.c +336 -0
  189. data/mpg123/src/libmpg123/dct64_i486.c +342 -0
  190. data/mpg123/src/libmpg123/dct64_mmx.S +811 -0
  191. data/mpg123/src/libmpg123/dct64_neon.S +297 -0
  192. data/mpg123/src/libmpg123/dct64_neon_float.S +270 -0
  193. data/mpg123/src/libmpg123/dct64_sse.S +454 -0
  194. data/mpg123/src/libmpg123/dct64_sse_float.S +401 -0
  195. data/mpg123/src/libmpg123/dct64_x86_64.S +464 -0
  196. data/mpg123/src/libmpg123/dct64_x86_64_float.S +426 -0
  197. data/mpg123/src/libmpg123/debug.h +171 -0
  198. data/mpg123/src/libmpg123/decode.h +268 -0
  199. data/mpg123/src/libmpg123/dither.c +119 -0
  200. data/mpg123/src/libmpg123/dither.h +23 -0
  201. data/mpg123/src/libmpg123/equalizer.c +17 -0
  202. data/mpg123/src/libmpg123/equalizer_3dnow.S +70 -0
  203. data/mpg123/src/libmpg123/feature.c +106 -0
  204. data/mpg123/src/libmpg123/format.c +521 -0
  205. data/mpg123/src/libmpg123/frame.c +1046 -0
  206. data/mpg123/src/libmpg123/frame.h +410 -0
  207. data/mpg123/src/libmpg123/gapless.h +119 -0
  208. data/mpg123/src/libmpg123/getbits.h +100 -0
  209. data/mpg123/src/libmpg123/getcpuflags.S +91 -0
  210. data/mpg123/src/libmpg123/getcpuflags.h +47 -0
  211. data/mpg123/src/libmpg123/huffman.h +340 -0
  212. data/mpg123/src/libmpg123/icy.c +32 -0
  213. data/mpg123/src/libmpg123/icy.h +38 -0
  214. data/mpg123/src/libmpg123/icy2utf8.c +438 -0
  215. data/mpg123/src/libmpg123/icy2utf8.h +10 -0
  216. data/mpg123/src/libmpg123/id3.c +999 -0
  217. data/mpg123/src/libmpg123/id3.h +43 -0
  218. data/mpg123/src/libmpg123/index.c +134 -0
  219. data/mpg123/src/libmpg123/index.h +59 -0
  220. data/mpg123/src/libmpg123/intsym.h +256 -0
  221. data/mpg123/src/libmpg123/l12_integer_tables.h +278 -0
  222. data/mpg123/src/libmpg123/l2tables.h +164 -0
  223. data/mpg123/src/libmpg123/l3_integer_tables.h +1002 -0
  224. data/mpg123/src/libmpg123/layer1.c +155 -0
  225. data/mpg123/src/libmpg123/layer2.c +371 -0
  226. data/mpg123/src/libmpg123/layer3.c +2053 -0
  227. data/mpg123/src/libmpg123/lfs_alias.c +252 -0
  228. data/mpg123/src/libmpg123/lfs_wrap.c +751 -0
  229. data/mpg123/src/libmpg123/libmpg123.c +1607 -0
  230. data/mpg123/src/libmpg123/mangle.h +74 -0
  231. data/mpg123/src/libmpg123/mpeghead.h +87 -0
  232. data/mpg123/src/libmpg123/mpg123.h.in +1075 -0
  233. data/mpg123/src/libmpg123/mpg123lib_intern.h +338 -0
  234. data/mpg123/src/libmpg123/ntom.c +148 -0
  235. data/mpg123/src/libmpg123/optimize.c +964 -0
  236. data/mpg123/src/libmpg123/optimize.h +219 -0
  237. data/mpg123/src/libmpg123/parse.c +1179 -0
  238. data/mpg123/src/libmpg123/parse.h +25 -0
  239. data/mpg123/src/libmpg123/reader.h +137 -0
  240. data/mpg123/src/libmpg123/readers.c +1235 -0
  241. data/mpg123/src/libmpg123/sample.h +152 -0
  242. data/mpg123/src/libmpg123/stringbuf.c +163 -0
  243. data/mpg123/src/libmpg123/synth.c +816 -0
  244. data/mpg123/src/libmpg123/synth.h +196 -0
  245. data/mpg123/src/libmpg123/synth_3dnow.S +318 -0
  246. data/mpg123/src/libmpg123/synth_3dnowext.S +6 -0
  247. data/mpg123/src/libmpg123/synth_8bit.c +142 -0
  248. data/mpg123/src/libmpg123/synth_8bit.h +86 -0
  249. data/mpg123/src/libmpg123/synth_altivec.c +1057 -0
  250. data/mpg123/src/libmpg123/synth_arm.S +271 -0
  251. data/mpg123/src/libmpg123/synth_arm_accurate.S +287 -0
  252. data/mpg123/src/libmpg123/synth_i486.c +252 -0
  253. data/mpg123/src/libmpg123/synth_i586.S +336 -0
  254. data/mpg123/src/libmpg123/synth_i586_dither.S +375 -0
  255. data/mpg123/src/libmpg123/synth_mmx.S +125 -0
  256. data/mpg123/src/libmpg123/synth_mono.h +64 -0
  257. data/mpg123/src/libmpg123/synth_neon.S +123 -0
  258. data/mpg123/src/libmpg123/synth_neon_accurate.S +173 -0
  259. data/mpg123/src/libmpg123/synth_neon_float.S +149 -0
  260. data/mpg123/src/libmpg123/synth_neon_s32.S +168 -0
  261. data/mpg123/src/libmpg123/synth_ntom.h +213 -0
  262. data/mpg123/src/libmpg123/synth_real.c +404 -0
  263. data/mpg123/src/libmpg123/synth_s32.c +411 -0
  264. data/mpg123/src/libmpg123/synth_sse.S +6 -0
  265. data/mpg123/src/libmpg123/synth_sse3d.h +246 -0
  266. data/mpg123/src/libmpg123/synth_sse_accurate.S +294 -0
  267. data/mpg123/src/libmpg123/synth_sse_float.S +241 -0
  268. data/mpg123/src/libmpg123/synth_sse_s32.S +306 -0
  269. data/mpg123/src/libmpg123/synth_stereo_neon.S +175 -0
  270. data/mpg123/src/libmpg123/synth_stereo_neon_accurate.S +262 -0
  271. data/mpg123/src/libmpg123/synth_stereo_neon_float.S +220 -0
  272. data/mpg123/src/libmpg123/synth_stereo_neon_s32.S +247 -0
  273. data/mpg123/src/libmpg123/synth_stereo_sse_accurate.S +508 -0
  274. data/mpg123/src/libmpg123/synth_stereo_sse_float.S +416 -0
  275. data/mpg123/src/libmpg123/synth_stereo_sse_s32.S +540 -0
  276. data/mpg123/src/libmpg123/synth_stereo_x86_64.S +335 -0
  277. data/mpg123/src/libmpg123/synth_stereo_x86_64_accurate.S +454 -0
  278. data/mpg123/src/libmpg123/synth_stereo_x86_64_float.S +396 -0
  279. data/mpg123/src/libmpg123/synth_stereo_x86_64_s32.S +473 -0
  280. data/mpg123/src/libmpg123/synth_x86_64.S +244 -0
  281. data/mpg123/src/libmpg123/synth_x86_64_accurate.S +301 -0
  282. data/mpg123/src/libmpg123/synth_x86_64_float.S +259 -0
  283. data/mpg123/src/libmpg123/synth_x86_64_s32.S +312 -0
  284. data/mpg123/src/libmpg123/synths.h +52 -0
  285. data/mpg123/src/libmpg123/tabinit.c +294 -0
  286. data/mpg123/src/libmpg123/tabinit_mmx.S +210 -0
  287. data/mpg123/src/libmpg123/testcpu.c +35 -0
  288. data/mpg123/src/libmpg123/true.h +14 -0
  289. data/mpg123/src/local.c +63 -0
  290. data/mpg123/src/local.h +21 -0
  291. data/mpg123/src/metaprint.c +373 -0
  292. data/mpg123/src/metaprint.h +17 -0
  293. data/mpg123/src/module.c +306 -0
  294. data/mpg123/src/module.h +48 -0
  295. data/mpg123/src/mpg123.c +1405 -0
  296. data/mpg123/src/mpg123app.h +171 -0
  297. data/mpg123/src/output/Makefile.am +213 -0
  298. data/mpg123/src/output/Makefile.in +1238 -0
  299. data/mpg123/src/output/aix.c +300 -0
  300. data/mpg123/src/output/alib.c +209 -0
  301. data/mpg123/src/output/alsa.c +297 -0
  302. data/mpg123/src/output/arts.c +117 -0
  303. data/mpg123/src/output/coreaudio.c +370 -0
  304. data/mpg123/src/output/dummy.c +78 -0
  305. data/mpg123/src/output/esd.c +167 -0
  306. data/mpg123/src/output/hp.c +184 -0
  307. data/mpg123/src/output/jack.c +450 -0
  308. data/mpg123/src/output/mint.c +197 -0
  309. data/mpg123/src/output/nas.c +335 -0
  310. data/mpg123/src/output/openal.c +197 -0
  311. data/mpg123/src/output/os2.c +665 -0
  312. data/mpg123/src/output/oss.c +319 -0
  313. data/mpg123/src/output/portaudio.c +255 -0
  314. data/mpg123/src/output/pulse.c +164 -0
  315. data/mpg123/src/output/sdl.c +206 -0
  316. data/mpg123/src/output/sgi.c +213 -0
  317. data/mpg123/src/output/sndio.c +161 -0
  318. data/mpg123/src/output/sun.c +281 -0
  319. data/mpg123/src/output/win32.c +229 -0
  320. data/mpg123/src/playlist.c +596 -0
  321. data/mpg123/src/playlist.h +52 -0
  322. data/mpg123/src/resolver.c +319 -0
  323. data/mpg123/src/resolver.h +25 -0
  324. data/mpg123/src/sfifo.c +146 -0
  325. data/mpg123/src/sfifo.h +95 -0
  326. data/mpg123/src/streamdump.c +74 -0
  327. data/mpg123/src/streamdump.h +20 -0
  328. data/mpg123/src/term.c +479 -0
  329. data/mpg123/src/term.h +81 -0
  330. data/mpg123/src/tests/noise.c +52 -0
  331. data/mpg123/src/tests/plain_id3.c +109 -0
  332. data/mpg123/src/tests/seek_accuracy.c +261 -0
  333. data/mpg123/src/tests/seek_whence.c +56 -0
  334. data/mpg123/src/tests/testtext.h +34 -0
  335. data/mpg123/src/tests/text.c +80 -0
  336. data/mpg123/src/wav.c +464 -0
  337. data/mpg123/src/wavhead.h +68 -0
  338. data/mpg123/src/win32_net.c +599 -0
  339. data/mpg123/src/win32_support.c +191 -0
  340. data/mpg123/src/win32_support.h +152 -0
  341. data/mpg123/src/xfermem.c +321 -0
  342. data/mpg123/src/xfermem.h +74 -0
  343. data/mpg123/windows-builds.sh +137 -0
  344. data/msvc/lib/OpenAL32.lib +0 -0
  345. data/spec/fixtures/heal.ogg +0 -0
  346. data/spec/fixtures/tone_up.wav +0 -0
  347. data/spec/seal/buffer_spec.rb +37 -0
  348. data/spec/seal/core_spec.rb +29 -0
  349. data/spec/seal/effect_slot_spec.rb +38 -0
  350. data/spec/seal/listener_spec.rb +33 -0
  351. data/spec/seal/reverb_spec.rb +51 -0
  352. data/spec/seal/source_spec.rb +370 -0
  353. data/spec/seal/stream_spec.rb +38 -0
  354. data/spec/spec_helper.rb +45 -0
  355. data/spec/support/attribute_examples.rb +75 -0
  356. data/spec/support/audio_object_with_format.rb +27 -0
  357. data/spec/support/movable_object.rb +22 -0
  358. data/src/libogg/bitwise.c +857 -0
  359. data/src/libogg/framing.c +2093 -0
  360. data/src/libvorbis/backends.h +144 -0
  361. data/src/libvorbis/bitrate.c +253 -0
  362. data/src/libvorbis/bitrate.h +59 -0
  363. data/src/libvorbis/block.c +1046 -0
  364. data/src/libvorbis/codebook.c +484 -0
  365. data/src/libvorbis/codebook.h +119 -0
  366. data/src/libvorbis/codec_internal.h +167 -0
  367. data/src/libvorbis/envelope.c +375 -0
  368. data/src/libvorbis/envelope.h +80 -0
  369. data/src/libvorbis/floor0.c +221 -0
  370. data/src/libvorbis/floor1.c +1100 -0
  371. data/src/libvorbis/highlevel.h +58 -0
  372. data/src/libvorbis/info.c +668 -0
  373. data/src/libvorbis/lookup.c +94 -0
  374. data/src/libvorbis/lookup.h +32 -0
  375. data/src/libvorbis/lookup_data.h +192 -0
  376. data/src/libvorbis/lpc.c +160 -0
  377. data/src/libvorbis/lpc.h +29 -0
  378. data/src/libvorbis/lsp.c +456 -0
  379. data/src/libvorbis/lsp.h +28 -0
  380. data/src/libvorbis/mapping0.c +816 -0
  381. data/src/libvorbis/masking.h +785 -0
  382. data/src/libvorbis/mdct.c +563 -0
  383. data/src/libvorbis/mdct.h +71 -0
  384. data/src/libvorbis/misc.h +57 -0
  385. data/src/libvorbis/os.h +186 -0
  386. data/src/libvorbis/psy.c +1206 -0
  387. data/src/libvorbis/psy.h +154 -0
  388. data/src/libvorbis/registry.c +45 -0
  389. data/src/libvorbis/registry.h +32 -0
  390. data/src/libvorbis/res0.c +889 -0
  391. data/src/libvorbis/scales.h +90 -0
  392. data/src/libvorbis/sharedbook.c +579 -0
  393. data/src/libvorbis/smallft.c +1255 -0
  394. data/src/libvorbis/smallft.h +34 -0
  395. data/src/libvorbis/synthesis.c +184 -0
  396. data/src/libvorbis/vorbisfile.c +2337 -0
  397. data/src/libvorbis/window.c +2135 -0
  398. data/src/libvorbis/window.h +26 -0
  399. data/src/rubyext.c +2329 -0
  400. data/src/seal/buf.c +124 -0
  401. data/src/seal/core.c +283 -0
  402. data/src/seal/efs.c +74 -0
  403. data/src/seal/err.c +118 -0
  404. data/src/seal/fmt.c +86 -0
  405. data/src/seal/listener.c +111 -0
  406. data/src/seal/mpg.c +174 -0
  407. data/src/seal/mpg.h +24 -0
  408. data/src/seal/ov.c +180 -0
  409. data/src/seal/ov.h +22 -0
  410. data/src/seal/raw.c +59 -0
  411. data/src/seal/reader.c +102 -0
  412. data/src/seal/reader.h +59 -0
  413. data/src/seal/rvb.c +368 -0
  414. data/src/seal/src.c +654 -0
  415. data/src/seal/stream.c +109 -0
  416. data/src/seal/threading.c +66 -0
  417. data/src/seal/threading.h +20 -0
  418. data/src/seal/wav.c +297 -0
  419. data/src/seal/wav.h +23 -0
  420. data/src/win32api.rb +29 -0
  421. metadata +563 -0
@@ -0,0 +1,119 @@
1
+ /********************************************************************
2
+ * *
3
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7
+ * *
8
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
9
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
10
+ * *
11
+ ********************************************************************
12
+
13
+ function: basic shared codebook operations
14
+ last mod: $Id: codebook.h 17030 2010-03-25 06:52:55Z xiphmont $
15
+
16
+ ********************************************************************/
17
+
18
+ #ifndef _V_CODEBOOK_H_
19
+ #define _V_CODEBOOK_H_
20
+
21
+ #include <ogg/ogg.h>
22
+
23
+ /* This structure encapsulates huffman and VQ style encoding books; it
24
+ doesn't do anything specific to either.
25
+
26
+ valuelist/quantlist are nonNULL (and q_* significant) only if
27
+ there's entry->value mapping to be done.
28
+
29
+ If encode-side mapping must be done (and thus the entry needs to be
30
+ hunted), the auxiliary encode pointer will point to a decision
31
+ tree. This is true of both VQ and huffman, but is mostly useful
32
+ with VQ.
33
+
34
+ */
35
+
36
+ typedef struct static_codebook{
37
+ long dim; /* codebook dimensions (elements per vector) */
38
+ long entries; /* codebook entries */
39
+ long *lengthlist; /* codeword lengths in bits */
40
+
41
+ /* mapping ***************************************************************/
42
+ int maptype; /* 0=none
43
+ 1=implicitly populated values from map column
44
+ 2=listed arbitrary values */
45
+
46
+ /* The below does a linear, single monotonic sequence mapping. */
47
+ long q_min; /* packed 32 bit float; quant value 0 maps to minval */
48
+ long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */
49
+ int q_quant; /* bits: 0 < quant <= 16 */
50
+ int q_sequencep; /* bitflag */
51
+
52
+ long *quantlist; /* map == 1: (int)(entries^(1/dim)) element column map
53
+ map == 2: list of dim*entries quantized entry vals
54
+ */
55
+ int allocedp;
56
+ } static_codebook;
57
+
58
+ typedef struct codebook{
59
+ long dim; /* codebook dimensions (elements per vector) */
60
+ long entries; /* codebook entries */
61
+ long used_entries; /* populated codebook entries */
62
+ const static_codebook *c;
63
+
64
+ /* for encode, the below are entry-ordered, fully populated */
65
+ /* for decode, the below are ordered by bitreversed codeword and only
66
+ used entries are populated */
67
+ float *valuelist; /* list of dim*entries actual entry values */
68
+ ogg_uint32_t *codelist; /* list of bitstream codewords for each entry */
69
+
70
+ int *dec_index; /* only used if sparseness collapsed */
71
+ char *dec_codelengths;
72
+ ogg_uint32_t *dec_firsttable;
73
+ int dec_firsttablen;
74
+ int dec_maxlength;
75
+
76
+ /* The current encoder uses only centered, integer-only lattice books. */
77
+ int quantvals;
78
+ int minval;
79
+ int delta;
80
+ } codebook;
81
+
82
+ extern void vorbis_staticbook_destroy(static_codebook *b);
83
+ extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source);
84
+ extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
85
+ extern void vorbis_book_clear(codebook *b);
86
+
87
+ extern float *_book_unquantize(const static_codebook *b,int n,int *map);
88
+ extern float *_book_logdist(const static_codebook *b,float *vals);
89
+ extern float _float32_unpack(long val);
90
+ extern long _float32_pack(float val);
91
+ extern int _best(codebook *book, float *a, int step);
92
+ extern int _ilog(unsigned int v);
93
+ extern long _book_maptype1_quantvals(const static_codebook *b);
94
+
95
+ extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);
96
+ extern long vorbis_book_codeword(codebook *book,int entry);
97
+ extern long vorbis_book_codelen(codebook *book,int entry);
98
+
99
+
100
+
101
+ extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b);
102
+ extern static_codebook *vorbis_staticbook_unpack(oggpack_buffer *b);
103
+
104
+ extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b);
105
+
106
+ extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
107
+ extern long vorbis_book_decodevs_add(codebook *book, float *a,
108
+ oggpack_buffer *b,int n);
109
+ extern long vorbis_book_decodev_set(codebook *book, float *a,
110
+ oggpack_buffer *b,int n);
111
+ extern long vorbis_book_decodev_add(codebook *book, float *a,
112
+ oggpack_buffer *b,int n);
113
+ extern long vorbis_book_decodevv_add(codebook *book, float **a,
114
+ long off,int ch,
115
+ oggpack_buffer *b,int n);
116
+
117
+
118
+
119
+ #endif
@@ -0,0 +1,167 @@
1
+ /********************************************************************
2
+ * *
3
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7
+ * *
8
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
9
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
10
+ * *
11
+ ********************************************************************
12
+
13
+ function: libvorbis codec headers
14
+ last mod: $Id: codec_internal.h 16227 2009-07-08 06:58:46Z xiphmont $
15
+
16
+ ********************************************************************/
17
+
18
+ #ifndef _V_CODECI_H_
19
+ #define _V_CODECI_H_
20
+
21
+ #include "envelope.h"
22
+ #include "codebook.h"
23
+
24
+ #define BLOCKTYPE_IMPULSE 0
25
+ #define BLOCKTYPE_PADDING 1
26
+ #define BLOCKTYPE_TRANSITION 0
27
+ #define BLOCKTYPE_LONG 1
28
+
29
+ #define PACKETBLOBS 15
30
+
31
+ typedef struct vorbis_block_internal{
32
+ float **pcmdelay; /* this is a pointer into local storage */
33
+ float ampmax;
34
+ int blocktype;
35
+
36
+ oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
37
+ blob [PACKETBLOBS/2] points to
38
+ the oggpack_buffer in the
39
+ main vorbis_block */
40
+ } vorbis_block_internal;
41
+
42
+ typedef void vorbis_look_floor;
43
+ typedef void vorbis_look_residue;
44
+ typedef void vorbis_look_transform;
45
+
46
+ /* mode ************************************************************/
47
+ typedef struct {
48
+ int blockflag;
49
+ int windowtype;
50
+ int transformtype;
51
+ int mapping;
52
+ } vorbis_info_mode;
53
+
54
+ typedef void vorbis_info_floor;
55
+ typedef void vorbis_info_residue;
56
+ typedef void vorbis_info_mapping;
57
+
58
+ #include "psy.h"
59
+ #include "bitrate.h"
60
+
61
+ typedef struct private_state {
62
+ /* local lookup storage */
63
+ envelope_lookup *ve; /* envelope lookup */
64
+ int window[2];
65
+ vorbis_look_transform **transform[2]; /* block, type */
66
+ drft_lookup fft_look[2];
67
+
68
+ int modebits;
69
+ vorbis_look_floor **flr;
70
+ vorbis_look_residue **residue;
71
+ vorbis_look_psy *psy;
72
+ vorbis_look_psy_global *psy_g_look;
73
+
74
+ /* local storage, only used on the encoding side. This way the
75
+ application does not need to worry about freeing some packets'
76
+ memory and not others'; packet storage is always tracked.
77
+ Cleared next call to a _dsp_ function */
78
+ unsigned char *header;
79
+ unsigned char *header1;
80
+ unsigned char *header2;
81
+
82
+ bitrate_manager_state bms;
83
+
84
+ ogg_int64_t sample_count;
85
+ } private_state;
86
+
87
+ /* codec_setup_info contains all the setup information specific to the
88
+ specific compression/decompression mode in progress (eg,
89
+ psychoacoustic settings, channel setup, options, codebook
90
+ etc).
91
+ *********************************************************************/
92
+
93
+ #include "highlevel.h"
94
+ typedef struct codec_setup_info {
95
+
96
+ /* Vorbis supports only short and long blocks, but allows the
97
+ encoder to choose the sizes */
98
+
99
+ long blocksizes[2];
100
+
101
+ /* modes are the primary means of supporting on-the-fly different
102
+ blocksizes, different channel mappings (LR or M/A),
103
+ different residue backends, etc. Each mode consists of a
104
+ blocksize flag and a mapping (along with the mapping setup */
105
+
106
+ int modes;
107
+ int maps;
108
+ int floors;
109
+ int residues;
110
+ int books;
111
+ int psys; /* encode only */
112
+
113
+ vorbis_info_mode *mode_param[64];
114
+ int map_type[64];
115
+ vorbis_info_mapping *map_param[64];
116
+ int floor_type[64];
117
+ vorbis_info_floor *floor_param[64];
118
+ int residue_type[64];
119
+ vorbis_info_residue *residue_param[64];
120
+ static_codebook *book_param[256];
121
+ codebook *fullbooks;
122
+
123
+ vorbis_info_psy *psy_param[4]; /* encode only */
124
+ vorbis_info_psy_global psy_g_param;
125
+
126
+ bitrate_manager_info bi;
127
+ highlevel_encode_setup hi; /* used only by vorbisenc.c. It's a
128
+ highly redundant structure, but
129
+ improves clarity of program flow. */
130
+ int halfrate_flag; /* painless downsample for decode */
131
+ } codec_setup_info;
132
+
133
+ extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
134
+ extern void _vp_global_free(vorbis_look_psy_global *look);
135
+
136
+
137
+
138
+ typedef struct {
139
+ int sorted_index[VIF_POSIT+2];
140
+ int forward_index[VIF_POSIT+2];
141
+ int reverse_index[VIF_POSIT+2];
142
+
143
+ int hineighbor[VIF_POSIT];
144
+ int loneighbor[VIF_POSIT];
145
+ int posts;
146
+
147
+ int n;
148
+ int quant_q;
149
+ vorbis_info_floor1 *vi;
150
+
151
+ long phrasebits;
152
+ long postbits;
153
+ long frames;
154
+ } vorbis_look_floor1;
155
+
156
+
157
+
158
+ extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
159
+ const float *logmdct, /* in */
160
+ const float *logmask);
161
+ extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
162
+ int *A,int *B,
163
+ int del);
164
+ extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
165
+ vorbis_look_floor1 *look,
166
+ int *post,int *ilogmask);
167
+ #endif
@@ -0,0 +1,375 @@
1
+ /********************************************************************
2
+ * *
3
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7
+ * *
8
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
9
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
10
+ * *
11
+ ********************************************************************
12
+
13
+ function: PCM data envelope analysis
14
+ last mod: $Id: envelope.c 16227 2009-07-08 06:58:46Z xiphmont $
15
+
16
+ ********************************************************************/
17
+
18
+ #include <stdlib.h>
19
+ #include <string.h>
20
+ #include <stdio.h>
21
+ #include <math.h>
22
+ #include <ogg/ogg.h>
23
+ #include "vorbis/codec.h"
24
+ #include "codec_internal.h"
25
+
26
+ #include "os.h"
27
+ #include "scales.h"
28
+ #include "envelope.h"
29
+ #include "mdct.h"
30
+ #include "misc.h"
31
+
32
+ void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){
33
+ codec_setup_info *ci=vi->codec_setup;
34
+ vorbis_info_psy_global *gi=&ci->psy_g_param;
35
+ int ch=vi->channels;
36
+ int i,j;
37
+ int n=e->winlength=128;
38
+ e->searchstep=64; /* not random */
39
+
40
+ e->minenergy=gi->preecho_minenergy;
41
+ e->ch=ch;
42
+ e->storage=128;
43
+ e->cursor=ci->blocksizes[1]/2;
44
+ e->mdct_win=_ogg_calloc(n,sizeof(*e->mdct_win));
45
+ mdct_init(&e->mdct,n);
46
+
47
+ for(i=0;i<n;i++){
48
+ e->mdct_win[i]=sin(i/(n-1.)*M_PI);
49
+ e->mdct_win[i]*=e->mdct_win[i];
50
+ }
51
+
52
+ /* magic follows */
53
+ e->band[0].begin=2; e->band[0].end=4;
54
+ e->band[1].begin=4; e->band[1].end=5;
55
+ e->band[2].begin=6; e->band[2].end=6;
56
+ e->band[3].begin=9; e->band[3].end=8;
57
+ e->band[4].begin=13; e->band[4].end=8;
58
+ e->band[5].begin=17; e->band[5].end=8;
59
+ e->band[6].begin=22; e->band[6].end=8;
60
+
61
+ for(j=0;j<VE_BANDS;j++){
62
+ n=e->band[j].end;
63
+ e->band[j].window=_ogg_malloc(n*sizeof(*e->band[0].window));
64
+ for(i=0;i<n;i++){
65
+ e->band[j].window[i]=sin((i+.5)/n*M_PI);
66
+ e->band[j].total+=e->band[j].window[i];
67
+ }
68
+ e->band[j].total=1./e->band[j].total;
69
+ }
70
+
71
+ e->filter=_ogg_calloc(VE_BANDS*ch,sizeof(*e->filter));
72
+ e->mark=_ogg_calloc(e->storage,sizeof(*e->mark));
73
+
74
+ }
75
+
76
+ void _ve_envelope_clear(envelope_lookup *e){
77
+ int i;
78
+ mdct_clear(&e->mdct);
79
+ for(i=0;i<VE_BANDS;i++)
80
+ _ogg_free(e->band[i].window);
81
+ _ogg_free(e->mdct_win);
82
+ _ogg_free(e->filter);
83
+ _ogg_free(e->mark);
84
+ memset(e,0,sizeof(*e));
85
+ }
86
+
87
+ /* fairly straight threshhold-by-band based until we find something
88
+ that works better and isn't patented. */
89
+
90
+ static int _ve_amp(envelope_lookup *ve,
91
+ vorbis_info_psy_global *gi,
92
+ float *data,
93
+ envelope_band *bands,
94
+ envelope_filter_state *filters){
95
+ long n=ve->winlength;
96
+ int ret=0;
97
+ long i,j;
98
+ float decay;
99
+
100
+ /* we want to have a 'minimum bar' for energy, else we're just
101
+ basing blocks on quantization noise that outweighs the signal
102
+ itself (for low power signals) */
103
+
104
+ float minV=ve->minenergy;
105
+ float *vec=alloca(n*sizeof(*vec));
106
+
107
+ /* stretch is used to gradually lengthen the number of windows
108
+ considered prevoius-to-potential-trigger */
109
+ int stretch=max(VE_MINSTRETCH,ve->stretch/2);
110
+ float penalty=gi->stretch_penalty-(ve->stretch/2-VE_MINSTRETCH);
111
+ if(penalty<0.f)penalty=0.f;
112
+ if(penalty>gi->stretch_penalty)penalty=gi->stretch_penalty;
113
+
114
+ /*_analysis_output_always("lpcm",seq2,data,n,0,0,
115
+ totalshift+pos*ve->searchstep);*/
116
+
117
+ /* window and transform */
118
+ for(i=0;i<n;i++)
119
+ vec[i]=data[i]*ve->mdct_win[i];
120
+ mdct_forward(&ve->mdct,vec,vec);
121
+
122
+ /*_analysis_output_always("mdct",seq2,vec,n/2,0,1,0); */
123
+
124
+ /* near-DC spreading function; this has nothing to do with
125
+ psychoacoustics, just sidelobe leakage and window size */
126
+ {
127
+ float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2];
128
+ int ptr=filters->nearptr;
129
+
130
+ /* the accumulation is regularly refreshed from scratch to avoid
131
+ floating point creep */
132
+ if(ptr==0){
133
+ decay=filters->nearDC_acc=filters->nearDC_partialacc+temp;
134
+ filters->nearDC_partialacc=temp;
135
+ }else{
136
+ decay=filters->nearDC_acc+=temp;
137
+ filters->nearDC_partialacc+=temp;
138
+ }
139
+ filters->nearDC_acc-=filters->nearDC[ptr];
140
+ filters->nearDC[ptr]=temp;
141
+
142
+ decay*=(1./(VE_NEARDC+1));
143
+ filters->nearptr++;
144
+ if(filters->nearptr>=VE_NEARDC)filters->nearptr=0;
145
+ decay=todB(&decay)*.5-15.f;
146
+ }
147
+
148
+ /* perform spreading and limiting, also smooth the spectrum. yes,
149
+ the MDCT results in all real coefficients, but it still *behaves*
150
+ like real/imaginary pairs */
151
+ for(i=0;i<n/2;i+=2){
152
+ float val=vec[i]*vec[i]+vec[i+1]*vec[i+1];
153
+ val=todB(&val)*.5f;
154
+ if(val<decay)val=decay;
155
+ if(val<minV)val=minV;
156
+ vec[i>>1]=val;
157
+ decay-=8.;
158
+ }
159
+
160
+ /*_analysis_output_always("spread",seq2++,vec,n/4,0,0,0);*/
161
+
162
+ /* perform preecho/postecho triggering by band */
163
+ for(j=0;j<VE_BANDS;j++){
164
+ float acc=0.;
165
+ float valmax,valmin;
166
+
167
+ /* accumulate amplitude */
168
+ for(i=0;i<bands[j].end;i++)
169
+ acc+=vec[i+bands[j].begin]*bands[j].window[i];
170
+
171
+ acc*=bands[j].total;
172
+
173
+ /* convert amplitude to delta */
174
+ {
175
+ int p,this=filters[j].ampptr;
176
+ float postmax,postmin,premax=-99999.f,premin=99999.f;
177
+
178
+ p=this;
179
+ p--;
180
+ if(p<0)p+=VE_AMP;
181
+ postmax=max(acc,filters[j].ampbuf[p]);
182
+ postmin=min(acc,filters[j].ampbuf[p]);
183
+
184
+ for(i=0;i<stretch;i++){
185
+ p--;
186
+ if(p<0)p+=VE_AMP;
187
+ premax=max(premax,filters[j].ampbuf[p]);
188
+ premin=min(premin,filters[j].ampbuf[p]);
189
+ }
190
+
191
+ valmin=postmin-premin;
192
+ valmax=postmax-premax;
193
+
194
+ /*filters[j].markers[pos]=valmax;*/
195
+ filters[j].ampbuf[this]=acc;
196
+ filters[j].ampptr++;
197
+ if(filters[j].ampptr>=VE_AMP)filters[j].ampptr=0;
198
+ }
199
+
200
+ /* look at min/max, decide trigger */
201
+ if(valmax>gi->preecho_thresh[j]+penalty){
202
+ ret|=1;
203
+ ret|=4;
204
+ }
205
+ if(valmin<gi->postecho_thresh[j]-penalty)ret|=2;
206
+ }
207
+
208
+ return(ret);
209
+ }
210
+
211
+ #if 0
212
+ static int seq=0;
213
+ static ogg_int64_t totalshift=-1024;
214
+ #endif
215
+
216
+ long _ve_envelope_search(vorbis_dsp_state *v){
217
+ vorbis_info *vi=v->vi;
218
+ codec_setup_info *ci=vi->codec_setup;
219
+ vorbis_info_psy_global *gi=&ci->psy_g_param;
220
+ envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
221
+ long i,j;
222
+
223
+ int first=ve->current/ve->searchstep;
224
+ int last=v->pcm_current/ve->searchstep-VE_WIN;
225
+ if(first<0)first=0;
226
+
227
+ /* make sure we have enough storage to match the PCM */
228
+ if(last+VE_WIN+VE_POST>ve->storage){
229
+ ve->storage=last+VE_WIN+VE_POST; /* be sure */
230
+ ve->mark=_ogg_realloc(ve->mark,ve->storage*sizeof(*ve->mark));
231
+ }
232
+
233
+ for(j=first;j<last;j++){
234
+ int ret=0;
235
+
236
+ ve->stretch++;
237
+ if(ve->stretch>VE_MAXSTRETCH*2)
238
+ ve->stretch=VE_MAXSTRETCH*2;
239
+
240
+ for(i=0;i<ve->ch;i++){
241
+ float *pcm=v->pcm[i]+ve->searchstep*(j);
242
+ ret|=_ve_amp(ve,gi,pcm,ve->band,ve->filter+i*VE_BANDS);
243
+ }
244
+
245
+ ve->mark[j+VE_POST]=0;
246
+ if(ret&1){
247
+ ve->mark[j]=1;
248
+ ve->mark[j+1]=1;
249
+ }
250
+
251
+ if(ret&2){
252
+ ve->mark[j]=1;
253
+ if(j>0)ve->mark[j-1]=1;
254
+ }
255
+
256
+ if(ret&4)ve->stretch=-1;
257
+ }
258
+
259
+ ve->current=last*ve->searchstep;
260
+
261
+ {
262
+ long centerW=v->centerW;
263
+ long testW=
264
+ centerW+
265
+ ci->blocksizes[v->W]/4+
266
+ ci->blocksizes[1]/2+
267
+ ci->blocksizes[0]/4;
268
+
269
+ j=ve->cursor;
270
+
271
+ while(j<ve->current-(ve->searchstep)){/* account for postecho
272
+ working back one window */
273
+ if(j>=testW)return(1);
274
+
275
+ ve->cursor=j;
276
+
277
+ if(ve->mark[j/ve->searchstep]){
278
+ if(j>centerW){
279
+
280
+ #if 0
281
+ if(j>ve->curmark){
282
+ float *marker=alloca(v->pcm_current*sizeof(*marker));
283
+ int l,m;
284
+ memset(marker,0,sizeof(*marker)*v->pcm_current);
285
+ fprintf(stderr,"mark! seq=%d, cursor:%fs time:%fs\n",
286
+ seq,
287
+ (totalshift+ve->cursor)/44100.,
288
+ (totalshift+j)/44100.);
289
+ _analysis_output_always("pcmL",seq,v->pcm[0],v->pcm_current,0,0,totalshift);
290
+ _analysis_output_always("pcmR",seq,v->pcm[1],v->pcm_current,0,0,totalshift);
291
+
292
+ _analysis_output_always("markL",seq,v->pcm[0],j,0,0,totalshift);
293
+ _analysis_output_always("markR",seq,v->pcm[1],j,0,0,totalshift);
294
+
295
+ for(m=0;m<VE_BANDS;m++){
296
+ char buf[80];
297
+ sprintf(buf,"delL%d",m);
298
+ for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m].markers[l]*.1;
299
+ _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
300
+ }
301
+
302
+ for(m=0;m<VE_BANDS;m++){
303
+ char buf[80];
304
+ sprintf(buf,"delR%d",m);
305
+ for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m+VE_BANDS].markers[l]*.1;
306
+ _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
307
+ }
308
+
309
+ for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->mark[l]*.4;
310
+ _analysis_output_always("mark",seq,marker,v->pcm_current,0,0,totalshift);
311
+
312
+
313
+ seq++;
314
+
315
+ }
316
+ #endif
317
+
318
+ ve->curmark=j;
319
+ if(j>=testW)return(1);
320
+ return(0);
321
+ }
322
+ }
323
+ j+=ve->searchstep;
324
+ }
325
+ }
326
+
327
+ return(-1);
328
+ }
329
+
330
+ int _ve_envelope_mark(vorbis_dsp_state *v){
331
+ envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
332
+ vorbis_info *vi=v->vi;
333
+ codec_setup_info *ci=vi->codec_setup;
334
+ long centerW=v->centerW;
335
+ long beginW=centerW-ci->blocksizes[v->W]/4;
336
+ long endW=centerW+ci->blocksizes[v->W]/4;
337
+ if(v->W){
338
+ beginW-=ci->blocksizes[v->lW]/4;
339
+ endW+=ci->blocksizes[v->nW]/4;
340
+ }else{
341
+ beginW-=ci->blocksizes[0]/4;
342
+ endW+=ci->blocksizes[0]/4;
343
+ }
344
+
345
+ if(ve->curmark>=beginW && ve->curmark<endW)return(1);
346
+ {
347
+ long first=beginW/ve->searchstep;
348
+ long last=endW/ve->searchstep;
349
+ long i;
350
+ for(i=first;i<last;i++)
351
+ if(ve->mark[i])return(1);
352
+ }
353
+ return(0);
354
+ }
355
+
356
+ void _ve_envelope_shift(envelope_lookup *e,long shift){
357
+ int smallsize=e->current/e->searchstep+VE_POST; /* adjust for placing marks
358
+ ahead of ve->current */
359
+ int smallshift=shift/e->searchstep;
360
+
361
+ memmove(e->mark,e->mark+smallshift,(smallsize-smallshift)*sizeof(*e->mark));
362
+
363
+ #if 0
364
+ for(i=0;i<VE_BANDS*e->ch;i++)
365
+ memmove(e->filter[i].markers,
366
+ e->filter[i].markers+smallshift,
367
+ (1024-smallshift)*sizeof(*(*e->filter).markers));
368
+ totalshift+=shift;
369
+ #endif
370
+
371
+ e->current-=shift;
372
+ if(e->curmark>=0)
373
+ e->curmark-=shift;
374
+ e->cursor-=shift;
375
+ }