Advertisement
Guest User

Untitled

a guest
Sep 19th, 2015
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.55 KB | None | 0 0
  1. class Thread
  2. def Thread.exclusive
  3. _old = Thread.critical
  4. begin
  5. Thread.critical = true
  6. return yield
  7. ensure
  8. Thread.critical = _old
  9. end
  10. end
  11. end
  12.  
  13.  
  14.  
  15. def getPlayMusic
  16. return MiniRegistry.get(MiniRegistry::HKEY_CURRENT_USER,
  17. "SOFTWARE\\Enterbrain\\RGSS","PlayMusic",true)
  18. end
  19.  
  20. def getPlaySound
  21. return MiniRegistry.get(MiniRegistry::HKEY_CURRENT_USER,
  22. "SOFTWARE\\Enterbrain\\RGSS","PlaySound",true)
  23. end
  24.  
  25.  
  26.  
  27. class AudioContext
  28. attr_reader :context
  29.  
  30. def initialize
  31. init = Win32API.new("audio.dll", "AudioContextInitialize", '', 'l')
  32. @context=init.call()
  33. end
  34.  
  35. def dispose
  36. if @context!=0
  37. init = Win32API.new("audio.dll", "AudioContextFree", 'l', '')
  38. init.call(context)
  39. @context=0
  40. end
  41. end
  42. end
  43.  
  44.  
  45.  
  46. #####################################
  47. # Needed because RGSS doesn't call at_exit procs on exit
  48. # Exit is not called when game is reset (using F12)
  49. $AtExitProcs=[] if !$AtExitProcs
  50.  
  51. def exit(code=0)
  52. for p in $AtExitProcs
  53. p.call
  54. end
  55. raise SystemExit.new(code)
  56. end
  57.  
  58. def at_exit(&block)
  59. $AtExitProcs.push(Proc.new(&block))
  60. end
  61.  
  62. #####################################
  63. # Works around a problem with FileTest.exist
  64. # if directory contains accent marks
  65. def safeExists?(f)
  66. ret=false
  67. File.open(f,"rb") { ret=true } rescue nil
  68. return ret
  69. end
  70.  
  71.  
  72.  
  73. module AudioState
  74. w32_LL = Win32API.new("kernel32.dll", "LoadLibrary", 'p', 'l') # :nodoc:
  75. w32_FL = Win32API.new("kernel32.dll", "FreeLibrary", 'p', 'l')# :nodoc:
  76. if safeExists?("audio.dll")
  77. @handle = w32_LL.call("audio.dll")
  78. at_exit { w32_FL.call(@handle) }
  79. AudioContextIsActive=Win32API.new("audio.dll","AudioContextIsActive","l","l")# :nodoc:
  80. AudioContextPlay=Win32API.new("audio.dll","AudioContextPlay","lpllll","")# :nodoc:
  81. AudioContextStop=Win32API.new("audio.dll","AudioContextStop","l","")# :nodoc:
  82. AudioContextFadeOut=Win32API.new("audio.dll","AudioContextFadeOut","ll","")# :nodoc:
  83. AudioContextGetPosition=Win32API.new("audio.dll","AudioContextGetPosition","l","l")# :nodoc:
  84. AudioContextFadeIn=Win32API.new("audio.dll","AudioContextFadeIn","ll","")# :nodoc:
  85. AudioContextSetVolume=Win32API.new("audio.dll","AudioContextSetVolume","ll","")# :nodoc:
  86. AudioContextSEPlay=Win32API.new("audio.dll","AudioContextSEPlay","lplll","")# :nodoc:
  87. if !@MEContext
  88. @MEContext=AudioContext.new
  89. at_exit { @MEContext.dispose }
  90. end
  91. if !@BGMContext
  92. @BGMContext=AudioContext.new
  93. at_exit { @BGMContext.dispose }
  94. end
  95. if !@BGSContext
  96. @BGSContext=AudioContext.new
  97. at_exit { @BGSContext.dispose }
  98. end
  99. if !@SEContext
  100. @SEContext=AudioContext.new
  101. at_exit { @SEContext.dispose }
  102. end
  103. else
  104. AudioContextIsActive=nil# :nodoc:
  105. AudioContextPlay=nil# :nodoc:
  106. AudioContextStop=nil# :nodoc:
  107. AudioContextFadeOut=nil# :nodoc:
  108. AudioContextGetPosition=nil# :nodoc:
  109. AudioContextFadeIn=nil# :nodoc:
  110. AudioContextSetVolume=nil# :nodoc:
  111. AudioContextSEPlay=nil# :nodoc:
  112. end
  113. @channel=nil
  114. @bgm=nil
  115. @name=""
  116. @pitch=100
  117. @bgmVolume=100.0
  118. @meVolume=100.0
  119. @bgsVolume=100.0
  120. @seVolume=100.0
  121. def self.setBgmVolume(volume) #VOLUME
  122. @bgmVolume=volume #VOLUME
  123. end #VOLUME
  124. def self.setMeVolume(volume) #VOLUME
  125. @meVolume=volume #VOLUME
  126. end #VOLUME
  127. def self.setBgsVolume(volume) #VOLUME
  128. @bgsVolume=volume #VOLUME
  129. end #VOLUME
  130. def self.setSeVolume(volume) #VOLUME
  131. @seVolume=volume #VOLUME
  132. end #VOLUME
  133.  
  134. def self.setWaitingBGM(bgm,volume,pitch,position)
  135. @waitingBGM=[bgm,volume,pitch,position]
  136. end
  137.  
  138. def self.bgmActive?
  139. return !@BGMContext ? false : (AudioContextIsActive.call(@BGMContext.context)!=0)
  140. end
  141.  
  142. def self.meActive?
  143. return !@MEContext ? false : (AudioContextIsActive.call(@MEContext.context)!=0)
  144. end
  145.  
  146. def self.waitingBGM; @waitingBGM; end
  147. def self.context; @BGMContext ? @BGMContext.context : nil; end
  148. def self.meContext; @MEContext ? @MEContext.context : nil; end
  149. def self.bgsContext; @BGSContext ? @BGSContext.context : nil; end
  150. def self.seContext; @SEContext ? @SEContext.context : nil; end
  151. def self.system; @system; end
  152. def self.bgm; @bgm; end
  153. def self.name; @name; end
  154. def self.pitch; @pitch; end
  155. def self.volume; @volume; end
  156.  
  157. def self.waitingBGM=(value);
  158. Thread.exclusive { @waitingBGM=value; }
  159. end
  160.  
  161. def self.volume=(value); @volume=value; end
  162. def self.bgm=(value); @bgm=value; end
  163. def self.name=(value); @name=value; end
  164. def self.pitch=(value); @pitch=value; end
  165. end
  166.  
  167.  
  168.  
  169. def Audio_bgm_playing?
  170. AudioState.channel!=nil
  171. end
  172.  
  173. def Audio_bgm_name
  174. AudioState.name
  175. end
  176.  
  177. def Audio_bgm_pitch
  178. AudioState.pitch
  179. end
  180.  
  181. def Audio_bgm_play(name, volume, pitch, position = 0)
  182. volume=0 if !getPlayMusic()
  183. begin
  184. filename = canonicalize(RTP.getAudioPath(name))
  185. if AudioState.meActive?
  186. AudioState.setWaitingBGM(filename,volume,pitch,position)
  187. return
  188. end
  189. AudioState::AudioContextPlay.call(AudioState.context,filename,volume,pitch,position,1)
  190. AudioState.name=filename
  191. AudioState.volume=volume
  192. AudioState.pitch=pitch
  193. rescue Hangup
  194. rescue
  195. p $!.message,$!.backtrace
  196. end
  197. end
  198.  
  199. def audio_control_volume(volume) #VOLUME
  200. SoundEnvelope.changeDiscrete2(0,volume) #VOLUME
  201. end #VOLUME
  202.  
  203. def Audio_me_play(name, volume, pitch, position = 0)
  204. volume=0 if !getPlayMusic()
  205. begin
  206. filename = canonicalize(RTP.getAudioPath(name))
  207. if AudioState.bgmActive?
  208. bgmPosition=Kernel.Audio_bgm_get_position
  209. AudioState.setWaitingBGM(
  210. AudioState.name,
  211. AudioState.volume,
  212. AudioState.pitch,
  213. bgmPosition
  214. )
  215. AudioState::AudioContextStop.call(AudioState.context)
  216. end
  217. AudioState::AudioContextPlay.call(AudioState.meContext,filename,
  218. volume,pitch,position,0)
  219. rescue
  220. p $!.message,$!.backtrace
  221. end
  222. end
  223.  
  224. def Audio_me_fade(ms)
  225. AudioState::AudioContextFadeOut.call(AudioState.meContext,ms)
  226. end
  227.  
  228. def Audio_me_stop()
  229. AudioState::AudioContextStop.call(AudioState.meContext)
  230. end
  231.  
  232. def Audio_bgm_stop()
  233. begin
  234. AudioState::AudioContextStop.call(AudioState.context)
  235. AudioState.waitingBGM=nil
  236. AudioState.name = ""
  237. rescue
  238. p $!.message,$!.backtrace
  239. end
  240. end
  241.  
  242. def Audio_bgm_get_position
  243. return AudioState::AudioContextGetPosition.call(AudioState.context)
  244. end
  245.  
  246. def Audio_bgm_fade(ms)
  247. AudioState::AudioContextFadeOut.call(AudioState.context,ms.to_i)
  248. end
  249.  
  250. def Audio_bgm_fadein(ms)
  251. AudioState::AudioContextFadeIn.call(AudioState.context,ms.to_i)
  252. end
  253.  
  254. def Audio_bgm_get_volume
  255. return 0 if !AudioState.bgmActive?
  256. return AudioState.volume
  257. end
  258.  
  259. def Audio_bgm_set_volume(volume)
  260. return if !AudioState.bgmActive?
  261. AudioState.volume = volume * 1.0
  262. AudioState::AudioContextSetVolume.call(AudioState.context,volume.to_i)
  263. end
  264.  
  265. def Audio_bgs_play(name, volume, pitch, position = 0)
  266. volume=0 if !getPlaySound()
  267. begin
  268. filename = canonicalize(RTP.getAudioPath(name))
  269. AudioState::AudioContextPlay.call(AudioState.bgsContext,filename,
  270. volume,pitch,position,0)
  271. rescue
  272. p $!.message,$!.backtrace
  273. end
  274. end
  275.  
  276. def Audio_bgs_fade(ms)
  277. AudioState::AudioContextFadeOut.call(AudioState.bgsContext,ms)
  278. end
  279.  
  280. def Audio_bgs_stop()
  281. AudioState::AudioContextStop.call(AudioState.bgsContext)
  282. end
  283.  
  284. def Audio_se_play(name, volume, pitch, position = 0)
  285. volume=0 if !getPlaySound()
  286. begin
  287. filename = canonicalize(RTP.getAudioPath(name))
  288. AudioState::AudioContextSEPlay.call(AudioState.seContext,filename,
  289. volume,pitch,position)
  290. rescue
  291. p $!.message,$!.backtrace
  292. end
  293. end
  294.  
  295. def Audio_se_stop()
  296. AudioState::AudioContextStop.call(AudioState.seContext)
  297. end
  298.  
  299.  
  300.  
  301. ####################################################
  302. if safeExists?("audio.dll")
  303.  
  304. module Graphics
  305. if !defined?(audiomodule_update)
  306. class << self
  307. alias audiomodule_update update
  308. end
  309. end
  310.  
  311. def self.update
  312. Audio.update
  313. audiomodule_update
  314. end
  315. end
  316.  
  317.  
  318.  
  319. module Audio
  320. @@musicstate=nil
  321. @@soundstate=nil
  322.  
  323. def self.update
  324. return if Graphics.frame_count%10!=0
  325. if AudioState.waitingBGM && !AudioState.meActive?
  326. waitbgm=AudioState.waitingBGM
  327. AudioState.waitingBGM=nil
  328. bgm_play(waitbgm[0],waitbgm[1],waitbgm[2],waitbgm[3])
  329. end
  330. end
  331.  
  332. def self.bgm_play(name,volume=80,pitch=100,position=nil)
  333. begin
  334. if position==nil || position==0
  335. Kernel.Audio_bgm_play(name,volume,pitch,0)
  336. else
  337. Kernel.Audio_bgm_play(name,volume,pitch,position)
  338. Kernel.Audio_bgm_fadein(500)
  339. end
  340. rescue Hangup
  341. bgm_play(name,volume,pitch,position)
  342. end
  343. end
  344.  
  345. def self.bgm_fade(ms)
  346. Kernel.Audio_bgm_fade(ms)
  347. end
  348.  
  349. def self.bgm_stop
  350. Kernel.Audio_bgm_stop()
  351. end
  352.  
  353. def self.bgm_position
  354. ret=Kernel.Audio_bgm_get_position
  355. return ret
  356. end
  357.  
  358. def self.me_play(name,volume=80,pitch=100)
  359. Kernel.Audio_me_play(name,volume,pitch,0)
  360. end
  361.  
  362. def self.me_fade(ms)
  363. Kernel.Audio_me_fade(ms)
  364. end
  365.  
  366. def self.me_stop
  367. Kernel.Audio_me_stop()
  368. end
  369.  
  370. def self.bgs_play(name,volume=80,pitch=100)
  371. Kernel.Audio_bgs_play(name,volume,pitch,0)
  372. end
  373.  
  374. def self.bgs_fade(ms)
  375. Kernel.Audio_bgs_fade(ms)
  376. end
  377.  
  378. def self.bgs_stop
  379. Kernel.Audio_bgs_stop()
  380. end
  381.  
  382. =begin
  383. def self.se_play(name,volume=80,pitch=100)
  384. Kernel.Audio_se_play(name,volume,pitch,0)
  385. end
  386. def self.se_stop
  387. Kernel.Audio_se_stop()
  388. end
  389. =end
  390. end
  391.  
  392.  
  393.  
  394. end # safeExists?("audio.dll")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement