Sha256: 79b282c9085f6221b73a487ab272d6ea360193fc68003e2a5b6e26f9e50e13e7
Contents?: true
Size: 1.44 KB
Versions: 2
Compression:
Stored size: 1.44 KB
Contents
require 'dxopal/remote_resource' module DXOpal class Sound < RemoteResource RemoteResource.add_class(Sound) # Return AudioContext def self.audio_context @@audio_context ||= %x{ new (window.AudioContext||window.webkitAudioContext) } end # Load remote sound (called via Window.load_resources) def self._load(path_or_url) snd = new(path_or_url) snd_promise = %x{ new Promise(function(resolve, reject) { var request = new XMLHttpRequest(); request.open('GET', #{path_or_url}, true); request.responseType = 'arraybuffer'; request.onload = function() { var audioData = request.response; var context = #{Sound.audio_context}; context.decodeAudioData(audioData, function(decoded) { snd['$decoded='](decoded); resolve(); }); }; request.send(); }); } return snd, snd_promise end def initialize(path_or_url) @path_or_url = path_or_url # Used in error message end attr_accessor :decoded # Play this sound once def play raise "Sound #{path_or_url} is not loaded yet" unless @decoded %x{ var context = #{Sound.audio_context}; var source = context.createBufferSource(); source.buffer = #{@decoded}; source.connect(context.destination); source.start(0); } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dxopal-1.1.0 | opal/dxopal/sound.rb |
dxopal-1.0.0 | opal/dxopal/sound.rb |