#!ruby # -*- mode: ruby; coding: utf-8 -*- # Last updated: <2021/08/18 09:25:23 +0900> # # Ogg stream play example with vaudiorb require "dxruby" require_relative "VAudio" title = "Ogg stream play example with vaudiorb" Window.caption = title fnt = Font.new(24) pan = 0.0 volume = 100.0 # set use filetype VAudio.enableFileType("OGG", true) VAudio.enableFileType("MP3", false) VAudio.enableFileType("MIDI", false) VAudio.enableFileType("FLAC", false) VAudio.init(Window.hWnd) # init vAudio s = VAudio.loadStream("loop_bgm.ogg") # load ogg totaltime = s.getTotalTime # get total time s.setVolume(volume) # set volume s.setPan(pan) # set pan s.setRepeat(true) # loop enable s.setLoopPoints(totaltime / 2, -1) # set loop points effects = VAudio::EFFECTS.keys effect_idx = 0 Window.loop do break if Input.keyPush?(K_ESCAPE) # Left, Right key : set pan (Left: -1.0, Center: 0.0, Right: 1.0) if Input.x != 0 pan += Input.x * 0.02 pan = -1.0 if pan < -1.0 pan = 1.0 if pan > 1.0 s.setPan(pan) end # Up, Down key : set volume (0.0 - 100.0) if Input.y != 0 volume -= Input.y volume = 0.0 if volume < 0.0 volume = 100.0 if volume > 100.0 s.setVolume(volume) end # E key : set effect type if Input.keyPush?(K_E) effect_idx = (effect_idx + 1) % effects.length efname = effects[effect_idx] s.setEffect(VAudio::EFFECTS[efname]) end # R key : reset pan, volume and effect if Input.keyPush?(K_R) pan = 0.0 volume = 100.0 effect_idx = 0 s.setPan(pan) s.setVolume(volume) s.setEffect(VAudio::EFFECTS["NONE"]) end # Z key : play if Input.keyPush?(K_Z) s.play(:loop => true, :pan => pan, :volume => volume) # s.play end s.stop if Input.keyPush?(K_X) # X key : stop (pause) s.resume if Input.keyPush?(K_C) # C key : resume s.fadeout(1500) if Input.keyPush?(K_V) # V key : fadeout s.resumeFadein(1500) if Input.keyPush?(K_B) # B key : resume fadein s.fadein(1500) if Input.keyPush?(K_N) # N key : fadein # draw text y = 2 dy = 26 [ title, "", "Z: Play", "X: Stop (Pause)", "C: Resume", "V: Fadeout", "B: Resume Fadein", "N: Fadein", "E: Effects", "Left Right: pan", "Up Down: volume", "R: Reset pan, volume, effects", ].each do |m| Window.draw_font(8, y, m, fnt) y += dy end y += dy * 0.5 Window.draw_font(8, y, "pan: #{s.getPan}", fnt) y += dy Window.draw_font(8, y, "volume: #{s.getVolume}", fnt) y += dy Window.draw_font(8, y, "effect: #{effects[effect_idx]}", fnt) y += dy ct = s.getCurrentTime tt = s.getTotalTime playing = ((s.isPlaying) ? "Playing" : "Stopped") tm = sprintf("%08d / %08d (msec) : %s", ct, tt, playing) Window.draw_font(8, y, tm, fnt) end s.free VAudio.free