const PhSim = require(".");
/**
* @namespace
* @memberof PhSim
*/
var Audio = {}
/**
* @constructor
* @param {Object} p_audio - Static Audio Object
* @param {Function} onload
*/
Audio.AudioArray = function(p_audio,onload) {
// force load function if audio list is empty
this.array = [];
this.loaded_n = 0;
this.loaded = false;
this.onload = onload;
var self = this;
if(p_audio.length === 0) {
self.loaded = true;
self.onload();
}
for(var i = 0; i < p_audio.length; i++) {
var audio = document.createElement("audio");
var f = function() {
self.loaded_n++;
if(self.array.length === self.loaded_n) {
self.loaded = true;
self.onload();
audio.removeEventListener("canplaythrough",f);
}
}
audio.addEventListener("canplaythrough",f)
audio.src = p_audio[i].src;
audio.loop = p_audio[i].loop
this.array.push(audio);
}
}
/**
* Play audio by index.
* Alternative function: {@link PhSim#playAudioByIndex}
*
* @function
* @param {PhSim} phsim - PhSim instance.
* @param {Number} i - Index in audio array.
* @returns {Promise} - Promise that is fulfilled when the audio is played.
*/
Audio.playAudioByIndex = function(phsim,i) {
return phsim.audioArray.array[i].play();
}
/**
* Play audio by index
* Alternative function: {@link PhSim.Audio#playAudioByIndex}
*
* @function
* @param {PhSim} phsim - PhSim instance.
* @param {Number} i - Index in audio array.
* @returns {Promise} - Promise that is fulfilled when the audio is played.
*/
PhSim.prototype.playAudioByIndex = function(i) {
Audio.playAudioByIndex(this,i);
};
/**
* Pause audio by index.
* Alternative function: {@link PhSim#pauseAudioByIndex}
* @function
* @param {PhSim} phsim - PhSim instance.
* @param {Number} i
*/
Audio.pauseAudioByIndex = function(phsim,i) {
return phsim.audioArray.array[i].pause();
}
/**
* Pause audio by index.
* Alternative function: {@link PhSim.Audio#pauseAudioByIndex}
* @function
* @param {Number} i
*/
PhSim.prototype.pauseAudioByIndex = function(i) {
return Audio.pauseAudioByIndex(this,i);
}
/**
* Set volume by index
* Alternative function: {@link PhSim#setAudioVolByIndex}
* @function
* @param {PhSim} phsim - PhSim instance
* @param {Number} i - Index
* @param {Number} v - Volume
*/
Audio.setAudioVolByIndex = function(phsim,i,v) {
return phsim.audioArray.array[i].volume = v;
}
/**
* Set volume by index
* Alternative function: {@link PhSim.Audio#setAudioVolByIndex}
* @function
* @param {Number} i - Index
* @param {Number} v - Volume
*/
PhSim.prototype.setAudioVolByIndex = function(i,v) {
return Audio.setAudioVolByIndex(this,i,v);
}
/**
*
* Mute the `i`th element of the audio array.
*
* Alternative function: {@link PhSim#setAudioMuteByIndex}
*
* @function
* @param {Number} i
* @param {PhSim} phsim - PhSim instance
*/
Audio.setAudioMuteByIndex = function(phsim,i) {
return phsim.audioArray.array[i].muted = true;
}
/**
*
* Mute the `i`th element of the audio array.
*
* Alternative function: {@link PhSim.Audio#setAudioMuteByIndex}
*
* @function
* @param {PhSim} phsim - PhSim instance
*/
PhSim.prototype.setAudioMuteByIndex = function(i) {
return Audio.setAudioMuteByIndex(this,i);
}
/**
* @function
* @param {PhSIm} phsim - PhSim instance
* @param {Number} i - Index number
* @returns {Boolean} - True if paused, false otherwise.
*/
Audio.toggleAudioByIndex = function(phsim,i) {
return phsim.audioArray.array[i].muted = !phsim.audioArray.array[i].muted;
}
/**
* @function
* @param {Number} i
* @returns {Boolean} - True if paused, false otherwise.
*/
PhSim.prototype.toggleAudioByIndex = function(i) {
return Audio.toggleAudioByIndex(this,i);
}
module.exports = Audio;