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