openfl
Version:
A fast, productive library for 2D cross-platform development.
164 lines (146 loc) • 4.7 kB
JavaScript
// Class: lime._internal.backend.html5.HTML5AudioSource
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../../../hxClasses_stub").default;
var $hxEnums = require("./../../../../hxEnums_stub").default;
var $bind = require("./../../../../bind_stub").default;
var $import = require("./../../../../import_stub").default;
function Std() {return require("./../../../../Std");}
function lime_math_Vector4() {return require("./../../../../lime/math/Vector4");}
// Constructor
var HTML5AudioSource = function(parent) {
this.parent = parent;
this.id = -1;
this.gain = 1;
this.position = new (lime_math_Vector4().default)();
}
// Meta
HTML5AudioSource.__name__ = "lime._internal.backend.html5.HTML5AudioSource";
HTML5AudioSource.__isInterface__ = false;
HTML5AudioSource.prototype = {
dispose: function() {
},
init: function() {
},
play: function() {
if(this.playing || this.parent.buffer == null || this.parent.buffer.__srcHowl == null) {
return;
}
this.playing = true;
var time = this.getCurrentTime();
this.completed = false;
var cacheVolume = this.parent.buffer.__srcHowl._volume;
this.parent.buffer.__srcHowl._volume = this.parent.get_gain();
this.id = this.parent.buffer.__srcHowl.play();
this.parent.buffer.__srcHowl._volume = cacheVolume;
this.setPosition(this.parent.get_position());
this.parent.buffer.__srcHowl.on("end",$bind(this,this.howl_onEnd),this.id);
this.setCurrentTime(time);
},
pause: function() {
this.playing = false;
if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null) {
this.parent.buffer.__srcHowl.pause(this.id);
}
},
stop: function() {
this.playing = false;
if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null) {
this.parent.buffer.__srcHowl.stop(this.id);
this.parent.buffer.__srcHowl.off("end",$bind(this,this.howl_onEnd),this.id);
}
},
howl_onEnd: function() {
this.playing = false;
if(this.loops > 0) {
this.loops--;
this.stop();
this.play();
return;
} else if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null) {
this.parent.buffer.__srcHowl.stop(this.id);
this.parent.buffer.__srcHowl.off("end",$bind(this,this.howl_onEnd),this.id);
}
this.completed = true;
this.parent.onComplete.dispatch();
},
getCurrentTime: function() {
if(this.id == -1) {
return 0;
}
if(this.completed) {
return this.getLength();
} else if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null) {
var time = (Std().default).int(this.parent.buffer.__srcHowl.seek(this.id) * 1000) - this.parent.offset;
if(time < 0) {
return 0;
}
return time;
}
return 0;
},
setCurrentTime: function(value) {
if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null) {
var pos = (value + this.parent.offset) / 1000;
if(pos < 0) {
pos = 0;
}
this.parent.buffer.__srcHowl.seek(pos,this.id);
}
return value;
},
getGain: function() {
return this.gain;
},
setGain: function(value) {
if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null && this.id != -1) {
this.parent.buffer.__srcHowl.volume(value,this.id);
}
return this.gain = value;
},
getLength: function() {
if(this.length != 0) {
return this.length;
}
if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null) {
return (Std().default).int(this.parent.buffer.__srcHowl.duration() * 1000);
}
return 0;
},
setLength: function(value) {
return this.length = value;
},
getLoops: function() {
return this.loops;
},
setLoops: function(value) {
return this.loops = value;
},
getPitch: function() {
return this.parent.buffer.__srcHowl.rate();
},
setPitch: function(value) {
this.parent.buffer.__srcHowl.rate(value);
return this.getPitch();
},
getPosition: function() {
return this.position;
},
setPosition: function(value) {
this.position.x = value.x;
this.position.y = value.y;
this.position.z = value.z;
this.position.w = value.w;
if(this.parent.buffer != null && this.parent.buffer.__srcHowl != null && this.parent.buffer.__srcHowl.pos != null) {
this.parent.buffer.__srcHowl.pos(this.position.x,this.position.y,this.position.z,this.id);
}
return this.position;
}
};
HTML5AudioSource.prototype.__class__ = HTML5AudioSource.prototype.constructor = $hxClasses["lime._internal.backend.html5.HTML5AudioSource"] = HTML5AudioSource;
// Init
// Statics
// Export
exports.default = HTML5AudioSource;