/**
* Hilo
* Copyright 2015 alibaba.com
* Licensed under the MIT License
*/
/**
*
*
* 使用示例:
*
* var audio = WebSound.getAudio({
* src: 'test.mp3',
* loop: false,
* volume: 1
* }).on('load', function(e){
* console.log('load');
* }).on('end', function(e){
* console.log('end');
* }).play();
*
* @class 声音播放管理器。
* @static
* @module hilo/media/WebSound
* @requires hilo/core/Hilo
* @requires hilo/media/HTMLAudio
* @requires hilo/media/WebAudio
*/
var WebSound = {
_audios: {},
/**
* 激活音频功能。注意:需用户事件触发此方法才有效。目前仅对WebAudio有效。
*/
enableAudio: function(){
if(WebAudio.isSupported){
WebAudio.enable();
}
},
/**
* 获取音频对象。优先使用WebAudio。
* @param {String|Object} source 若source为String,则为音频src地址;若为Object,则需包含src属性。
* @returns {WebAudio|HTMLAudio} 音频播放对象实例。
*/
getAudio: function(source){
source = this._normalizeSource(source);
var audio = this._audios[source.src];
if(!audio){
if(WebAudio.isSupported){
audio = new WebAudio(source);
}else if(HTMLAudio.isSupported){
audio = new HTMLAudio(source);
}
this._audios[source.src] = audio;
}
return audio;
},
/**
* 删除音频对象。
* @param {String|Object} source 若source为String,则为音频src地址;若为Object,则需包含src属性。
*/
removeAudio: function(source){
var src = typeof source === 'string' ? source : source.src;
var audio = this._audios[src];
if(audio){
audio.stop();
audio.off();
this._audios[src] = null;
delete this._audios[src];
}
},
/**
* @private
*/
_normalizeSource: function(source){
var result = {};
if(typeof source === 'string') result = {src:source};
else Hilo.copy(result, source);
return result;
}
};