import {Dictionary} from '../../common/lang/Dictionary';
import {LoggerUtil} from '../../common/lang/LoggerUtil';
import {ObjectBase} from '../../common/lang/ObjectBase';
import {ObjectUtil} from '../../common/lang/ObjectUtil';
import {ClassUtil} from '../../common/reflect/ClassUtil';
import {ServiceUtil} from '../../core/ServiceUtil';
import {EnvironmentService} from '../../core/service/EnvironmentService';
import {Audio} from './Audio';
import {AudioBuffer} from './AudioBuffer';
//==========================================================
// 音频环境。
//
// @author sunpeng
// @history 150714
//==========================================================
export class AudioContext extends ObjectBase {
//..........................................................
// @attribute
//o._handle = MO.Class.register(o, new MO.AGetter('_handle'));
protected _handle = null;
// @attribute
//o._buffers = MO.Class.register(o, new MO.AGetter('_buffers'));
protected _buffers: Dictionary = null;
//==========================================================
// 构造处理。
//
// @method
//==========================================================
public constructor() {
super();
// 设置属性
this._buffers = new Dictionary();
}
//==========================================================
// 创建声音资源。
//
// @method
// @param uri:String 网络地址
// @return AudioBufferSourceNode 音频缓冲
//==========================================================
public setup(uri) {
var o = this;
// 设置属性
//o._audioBuffers = new FDictionary();
// 创建环境
var context = null;
if ((window as any).AudioContext) {
context = new AudioContext();
} else if ((window as any).webkitAudioContext) {
context = new (window as any).webkitAudioContext();
}
if (!context) {
return LoggerUtil.error(o, 'Invalid audio context.');
}
o._handle = context;
}
//==========================================================
// 检查音频是否加载完成。
//
// @method
// @param uri:String 网络地址
// @return bool 是否已加载
//==========================================================
public createBuffer(uri) {
var o = this;
var url = ServiceUtil.find(EnvironmentService).parse(uri);
// 创建缓冲
var buffer = null;
o._handle = null;
if (o._handle) {
buffer = ClassUtil.create(AudioBuffer);
buffer.setContext(o);
} else {
buffer = ClassUtil.create(Audio);
}
buffer.loadUrl(url);
return buffer;
}
//==========================================================
// 释放处理。
//
// @method
//==========================================================
public dispose() {
// 释放属性
this._buffers = ObjectUtil.dispose(this._buffers);
// 父处理
super.dispose();
}
}