forked from LeenkxTeam/LNXSDK
78 lines
1.4 KiB
Haxe
78 lines
1.4 KiB
Haxe
package kha.js;
|
|
|
|
import js.html.AudioElement;
|
|
import kha.audio1.AudioChannel;
|
|
|
|
class AEAudioChannel implements kha.audio1.AudioChannel {
|
|
var element: AudioElement;
|
|
var stopped = false;
|
|
var looping: Bool;
|
|
|
|
public function new(element: AudioElement, looping: Bool) {
|
|
this.element = element;
|
|
this.looping = looping;
|
|
}
|
|
|
|
public function play(): Void {
|
|
stopped = false;
|
|
element.play();
|
|
}
|
|
|
|
public function pause(): Void {
|
|
try {
|
|
element.pause();
|
|
}
|
|
catch (e:Dynamic) {
|
|
trace(e);
|
|
}
|
|
}
|
|
|
|
public function stop(): Void {
|
|
try {
|
|
element.pause();
|
|
element.currentTime = 0;
|
|
stopped = true;
|
|
}
|
|
catch (e:Dynamic) {
|
|
trace(e);
|
|
}
|
|
}
|
|
|
|
public var length(get, never): Float; // Seconds
|
|
|
|
function get_length(): Float {
|
|
if (Math.isFinite(element.duration)) {
|
|
return element.duration;
|
|
}
|
|
else {
|
|
return Math.POSITIVE_INFINITY;
|
|
}
|
|
}
|
|
|
|
public var position(get, set): Float; // Seconds
|
|
|
|
function get_position(): Float {
|
|
return element.currentTime;
|
|
}
|
|
|
|
function set_position(value: Float): Float {
|
|
return element.currentTime = value;
|
|
}
|
|
|
|
public var volume(get, set): Float;
|
|
|
|
function get_volume(): Float {
|
|
return element.volume;
|
|
}
|
|
|
|
function set_volume(value: Float): Float {
|
|
return element.volume = value;
|
|
}
|
|
|
|
public var finished(get, never): Bool;
|
|
|
|
function get_finished(): Bool {
|
|
return stopped || (!looping && position >= length);
|
|
}
|
|
}
|