Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / av / FLAudio.js @ 9

History | View | Annotate | Download (3.31 KB)

1 9 andrej.cim
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6
7
8
if(!dojo._hasResource["dojox.av.FLAudio"]){
9
dojo._hasResource["dojox.av.FLAudio"]=true;
10
dojo.provide("dojox.av.FLAudio");
11
dojo.experimental("dojox.av.FLAudio");
12
dojo.require("dojox.embed.Flash");
13
dojo.require("dojox.timing.doLater");
14
dojo.declare("dojox.av.FLAudio",null,{id:"",initialVolume:0.7,initialPan:0,isDebug:false,statusInterval:200,_swfPath:dojo.moduleUrl("dojox.av","resources/audio.swf"),constructor:function(_1){
15
dojo.global.swfIsInHTML=function(){
16
return true;
17
};
18
dojo.mixin(this,_1||{});
19
if(!this.id){
20
this.id="flaudio_"+new Date().getTime();
21
}
22
this.domNode=dojo.doc.createElement("div");
23
dojo.style(this.domNode,{postion:"relative",width:"1px",height:"1px",top:"1px",left:"1px"});
24
dojo.body().appendChild(this.domNode);
25
this.init();
26
},init:function(){
27
this._subs=[];
28
this.initialVolume=this._normalizeVolume(this.initialVolume);
29
var _2={path:this._swfPath.uri,width:"1px",height:"1px",minimumVersion:9,expressInstall:true,params:{wmode:"transparent"},vars:{id:this.id,autoPlay:this.autoPlay,initialVolume:this.initialVolume,initialPan:this.initialPan,statusInterval:this.statusInterval,isDebug:this.isDebug}};
30
this._sub("mediaError","onError");
31
this._sub("filesProgress","onLoadStatus");
32
this._sub("filesAllLoaded","onAllLoaded");
33
this._sub("mediaPosition","onPlayStatus");
34
this._sub("mediaEnd","onComplete");
35
this._sub("mediaMeta","onID3");
36
this._flashObject=new dojox.embed.Flash(_2,this.domNode);
37
this._flashObject.onError=function(_3){
38
console.warn("Flash Error:",_3);
39
alert(_3);
40
};
41
this._flashObject.onLoad=dojo.hitch(this,function(_4){
42
this.flashMedia=_4;
43
this.isPlaying=this.autoPlay;
44
this.isStopped=!this.autoPlay;
45
this.onLoad(this.flashMedia);
46
});
47
},load:function(_5){
48
if(dojox.timing.doLater(this.flashMedia,this)){
49
return false;
50
}
51
if(!_5.url){
52
throw new Error("An url is required for loading media");
53
return false;
54
}else{
55
_5.url=this._normalizeUrl(_5.url);
56
}
57
this.flashMedia.load(_5);
58
return _5.url;
59
},doPlay:function(_6){
60
this.flashMedia.doPlay(_6);
61
},pause:function(_7){
62
this.flashMedia.pause(_7);
63
},stop:function(_8){
64
this.flashMedia.doStop(_8);
65
},setVolume:function(_9){
66
this.flashMedia.setVolume(_9);
67
},setPan:function(_a){
68
this.flashMedia.setPan(_a);
69
},getVolume:function(_b){
70
return this.flashMedia.getVolume(_b);
71
},getPan:function(_c){
72
return this.flashMedia.getPan(_c);
73
},getPosition:function(_d){
74
return this.flashMedia.getPosition(_d);
75
},onError:function(_e){
76
console.warn("SWF ERROR:",_e);
77
},onLoadStatus:function(_f){
78
},onAllLoaded:function(){
79
},onPlayStatus:function(_10){
80
},onComplete:function(_11){
81
},onLoad:function(){
82
},onID3:function(evt){
83
},destroy:function(){
84
if(!this.flashMedia){
85
this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
86
return;
87
}
88
dojo.forEach(this._subs,function(s){
89
dojo.unsubscribe(s);
90
});
91
dojo.forEach(this._cons,function(c){
92
dojo.disconnect(c);
93
});
94
this._flashObject.destroy();
95
},_sub:function(_12,_13){
96
dojo.subscribe(this.id+"/"+_12,this,_13);
97
},_normalizeVolume:function(vol){
98
if(vol>1){
99
while(vol>1){
100
vol*=0.1;
101
}
102
}
103
return vol;
104
},_normalizeUrl:function(_14){
105
if(_14&&_14.toLowerCase().indexOf("http")<0){
106
var loc=window.location.href.split("/");
107
loc.pop();
108
loc=loc.join("/")+"/";
109
_14=loc+_14;
110
}
111
return _14;
112
}});
113
}