#!ruby # -*- mode: ruby; coding: utf-8 -*- # Last updated: <2016/12/13 20:14:21 +0900> # # gosuを使ってサウンドが鳴らせるかテスト。 # 音量変更や再生速度変更ができるか試してみる。 # # Aキー : 通常再生 # Bキー : 音量を小さくして再生 # Cキー : 低速再生 # Dキー : 高速再生 # Eキー : ループ再生 # Pキー : ポーズ/ポーズ解除 # Vキー : 音量を0に # Zキー : 再生停止 # # 動作確認環境: # Windows10 x64 + Ruby 2.2.6 p396 mingw32 + gosu 0.10.8 require 'gosu' class MyWindow < Gosu::Window def initialize super 320, 240, false self.caption = 'Sound Play Test' @fnt = Gosu::Font.new(20) # wavファイルを読み込む @sound = Gosu::Sample.new("tmp_voice.wav") @si = nil # SampleInstance @play_msg = "" @pause_msg = "" end def update if @si if @si.playing? # 再生中? @play_msg = "Playing" else @play_msg = "Stopped" end if @si.paused? # ポーズ中? @pause_msg = "Paused" else @pause_msg = "Not Paused" end else # まだ鳴らしてない @play_msg = "Not Play Start" @pause_msg = "Not Play Start" end end def draw @fnt.draw("Push A,B,C,D,E,P,V and Z", 4, 4, 0) # 再生状態、ポーズ状態を表示 @fnt.draw(@play_msg, 4, 30, 0) @fnt.draw(@pause_msg, 4, 50, 0) end def button_down(id) close if id == Gosu::KbEscape end # キーが離された時に呼ばれる def button_up(id) @si = @sound.play if id == Gosu::KbA # 通常再生 @si = @sound.play(0.2, 1, false) if id == Gosu::KbB # 音量小 @si = @sound.play(1, 0.5, false) if id == Gosu::KbC # 再生速度を遅く @si = @sound.play(1, 2.0, false) if id == Gosu::KbD # 再生速度を早く @si = @sound.play(1, 1, true) if id == Gosu::KbE # ループ再生 if @si if id == Gosu::KbZ if @si.playing? # 再生中? @si.stop # サウンドを停止 end elsif id == Gosu::KbP if @si.paused? # ポーズ中? @si.resume # ポーズ解除 elsif @si.playing? # 再生中? @si.pause # ポーズ(一時停止) end elsif id == Gosu::KbV if @si.playing? @si.volume = 0 # ボリュームを0に end end end end end window = MyWindow.new window.show