exobud.js
上传用户:comthink
上传日期:2021-05-06
资源大小:1280k
文件大小:18k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

HTML/CSS

  1. <!--
  2. var objMmInfo = null;
  3. var intMmCnt = 0;
  4. var intSelMmCnt = 0;
  5. var intActMmCnt = 0;
  6. var cActIdx = 0;
  7. var cActTit = "nAnT";
  8. var strMmInfo = "ExoBUD 媒体档案信息";
  9. var blnfpl = false;
  10. var blnEnabled = false;
  11. var blnEOT = false;
  12. var arrSelMm = null;
  13. var arrActMm = null;
  14. var intExobudStat = 0;
  15. var tidTLab = null;
  16. var tidErr = null;
  17. var tidMsg = null;
  18. var intErrCnt = 0;
  19. var blnRept = false;
  20. // 这是「自动连续播放」的设定。一般来说,播放一首音乐完毕后就会自动跳到下一首。
  21. // 但是如果您要播放的媒体是视讯档案(例如:MV)的话,最好将这个设定值改为 false 。
  22. //    true = 自动连续播放
  23. //   false = 不要自动连续播放,让使用者自行挑选下一首曲目
  24. var blnAutoProc = true;
  25. // 设定播放面板上所显示的时间长度,预设是以正常方式(Elapse)抑或倒数方式(Lapse)显示:
  26. //    true = 以正常方式显示时间长度,即动态地显示曲目已播放的时间
  27. //   false = 以倒数方式显示时间长度,即动态地显示曲目剩余的时间
  28. var blnElaps = true;
  29. // 设定播放每首曲目之间的延迟时间(Delay Time),单位是毫秒(msec)。
  30. // 每100毫秒代表0.1秒,默认值是500毫秒(即0.5秒),最少也要设为100毫秒。
  31. var intDelay = 500;
  32. // wmpInit() 函式: 使用 wmp-obj v7.x 链接库建立环境设定
  33. function wmpInit(){
  34.  var wmps = Exobud.settings;
  35.  var wmpc = Exobud.ClosedCaption;
  36.  wmps.autoStart = true;
  37.  wmps.balance = 0;
  38.  wmps.enableErrorDialogs = false;
  39.  wmps.invokeURLs = false;
  40.  wmps.mute = false;
  41.  wmps.playCount = 1;
  42.  wmps.rate = 1;
  43.  wmps.volume = 100;
  44.  if(blnUseSmi){wmpc.captioningID="capText"; capText.style.display="";}
  45.  Exobud.enabled = true;
  46. }
  47. // mkMmPath() 函式: 准备建立 Multi-object 的数组
  48. function mkMmPath(u,t,f,s){
  49.  this.mmUrl = u;
  50.  this.mmTit = t;
  51.  this.mmDur = 0;
  52.  this.selMm = f;
  53.  this.actMm = f;
  54.  if(blnUseSmi){this.mmSmi=s;}
  55. }
  56. // mkList() 函式: 建立 Multi-object 的数组
  57. function mkList(u,t,s,f){
  58.  var cu = u;
  59.  var ct = t;
  60.  var cs = s;
  61.  var cf = f;
  62.  var idx = 0;
  63.  if(objMmInfo == null){objMmInfo=new Array(); idx=0;}
  64.  else {idx=objMmInfo.length;}
  65.  if(u=="" || u==null){cu="mms://";}
  66.  if(t=="" || t==null){ct="nAnT";}
  67.  if(f=="f" || f=="F"){cf="f";}
  68.  else {cf="t"; intSelMmCnt++;}
  69.  if(blnUseSmi){
  70.    objMmInfo[idx]=new mkMmPath(cu,ct,cf,cs);
  71.  } else {
  72.    objMmInfo[idx]=new mkMmPath(cu,ct,cf);
  73.  }
  74.  intActMmCnt = intSelMmCnt;
  75.  intMmCnt = objMmInfo.length;
  76. }
  77. // mkSel() 函式: 建立已选取播放项目(Selected Media)的数组
  78. function mkSel(){
  79.  arrSelMm = null;
  80.  intSelMmCnt = 0;
  81.  var selidx = 0;
  82.  if(intMmCnt<=0){intExobudStat=1; blnEnabled=false; return;} // 没有任何播放清单项目
  83.  arrSelMm = new Array();
  84.  for(var i=0; i<intMmCnt; i++){
  85.    if(objMmInfo[i].selMm =="t"){arrSelMm[selidx]=i;selidx++;}
  86.  }
  87.  intSelMmCnt=arrSelMm.length;
  88.  if(intSelMmCnt<=0){blnEnabled=false; intExobudStat=2; arrSelMm=null; return;}
  89.  else {blnEnabled=true; mkAct();}
  90. }
  91. // mkAct() 函式: 建立已启用播放项目(Activated Media)的数组
  92. function mkAct(){
  93.  arrActMm = null;
  94.  intActMmCnt = 0;
  95.  var selidx = 0;
  96.  var actidx = 0;
  97.  if(blnEnabled){
  98.    arrActMm=new Array();
  99.    for(var i=0; i<intSelMmCnt; i++){
  100.      selidx=arrSelMm[i];
  101.      if(objMmInfo[selidx].actMm=="t"){arrActMm[actidx]=selidx; actidx++;}
  102.    }
  103.    intActMmCnt=arrActMm.length;
  104.  }
  105.  else { return;}
  106.  if(intActMmCnt<=0){blnEOT=true;arrActMm=null;}
  107.  else {blnEOT=false;}
  108. }
  109. // chkAllSel() 函式: 全部选取所有的播放清单项目
  110. function chkAllSel(){
  111.  for(var i=0; i<intMmCnt; i++){
  112.    objMmInfo[i].selMm="t";
  113.    objMmInfo[i].actMm="t";
  114.  }
  115.  mkSel();
  116. }
  117. // chkAllDesel() 函式: 不选取所有的播放清单项目
  118. function chkAllDesel(){
  119.  for(var i=0; i<intMmCnt; i++){
  120.    objMmInfo[i].selMm="f";
  121.    objMmInfo[i].actMm="f";
  122.  }
  123.  mkSel();
  124. }
  125. // chkItemSel() 函式: 选取或不选取播放清单项目
  126. function chkItemSel(idx){
  127.  if(objMmInfo[idx].selMm =="t"){
  128.    objMmInfo[idx].selMm="f";objMmInfo[idx].actMm="f";
  129.  } else {
  130.    objMmInfo[idx].selMm="t";objMmInfo[idx].actMm="t";
  131.  }
  132.  mkSel();
  133. }
  134. // chkItemAct() 函式: 将某个已启用播放项目(Activated Media)冻结
  135. function chkItemAct(idx){
  136.  objMmInfo[idx].actMm="f";
  137.  mkAct();
  138. }
  139. // mkSelAct() 函式: 将已选取播放项目(Selected Media)加入到已启用播放项目(Activated Media)
  140. function mkSelAct(){
  141.  var idx=0;
  142.  for(var i=0; i<intSelMmCnt; i++){
  143.    idx=arrSelMm[i];
  144.    objMmInfo[idx].actMm="t";
  145.  }
  146.  mkAct();
  147. }
  148. // initExobud() 函式: 初始化 ExoBUD MP(II) 媒体播放程序
  149. function initExobud(){
  150.  wmpInit();
  151.  mkSel();
  152.  blnfpl = false;
  153.  if(!blnShowVolCtrl) {
  154.    document.images['vmute'].style.display = "none";
  155.    document.images['vdn'].style.display = "none";
  156.    document.images['vup'].style.display = "none";
  157.  }
  158.  if(!blnShowPlist){ document.images['plist'].style.display = "none";}
  159.  if(blnRept){imgChange('rept',1);}
  160.  else {imgChange('rept',0);}
  161.  if(blnRndPlay){imgChange('pmode',1);}
  162.  else {imgChange('pmode',0);}
  163.  showTLab();
  164.  disp1.innerHTML = "東泗中學同學錄 网站媒体播放程序";
  165.  if(blnStatusBar){ window.status=('東泗中學同學錄 媒体播放程序');}
  166.  if(blnAutoStart){startExobud();}
  167. }
  168. // startExobud() 函式: 开始播放曲目
  169. function startExobud(){
  170.  var wmps = Exobud.playState;
  171.  if(wmps==2){Exobud.controls.play(); return;}
  172.  if(wmps==3){ return;}
  173.  blnfpl=false;
  174.  if(!blnEnabled){waitMsg();return;}
  175.  if(blnEOT){mkSelAct();}
  176.  if(intErrCnt>0){intErrCnt=0;tidErr=setTimeout('retryPlay(),1000');return;}
  177.  if(blnRndPlay){rndPlay();}
  178.  else {cActIdx=arrActMm[0]; selMmPlay(cActIdx);}
  179. }
  180. // selMmPlay() 函式: 处理媒体标题
  181. function selMmPlay(idx){
  182.  clearTimeout(tidErr);
  183.  cActIdx=idx;
  184.  var trknum=idx+1;
  185.  var ctit =objMmInfo[idx].mmTit;
  186.  if(ctit=="nAnT"){ctit="(没有媒体标题)"}
  187.  if(blnUseSmi){Exobud.ClosedCaption.SAMIFileName = objMmInfo[idx].mmSmi;}
  188.  Exobud.URL = objMmInfo[idx].mmUrl;
  189.  cActTit = "T" + trknum + ". " + ctit;
  190.  disp1.innerHTML = cActTit;
  191.  if(blnStatusBar){ window.status=(cActTit);}
  192.  chkItemAct(cActIdx);
  193. }
  194. // wmpPlay() 函式: 使用 wmp-obj v7.x 链接库播放曲目
  195. function wmpPlay(){Exobud.controls.play();}
  196. // wmpStop() 函式: 停止播放曲目及显示「就绪」状态讯息
  197. function wmpStop(){
  198.  intErrCnt=0;
  199.  clearTimeout(tidErr);
  200.  clearInterval(tidTLab);
  201.  imgChange("stopt",1);
  202.  imgChange("pauzt",0);
  203.  imgChange("scope",0);
  204.  showTLab();
  205.  mkSelAct();
  206.  Exobud.controls.stop();
  207.  Exobud.close();
  208.  disp1.innerHTML = "東泗中學同學錄 媒体播放器 [就绪]";
  209.  if(blnStatusBar){ window.status=('995在线 媒体播放器 [就绪]');return true;}
  210. }
  211. // wmpPause() 函式: 使用 wmp-obj v7.x 链接库暂停播放曲目
  212. function wmpPause(){Exobud.controls.pause();}
  213. // wmpPP() 函式: 在暂停播放和继续播放之间进行切换
  214. function wmpPP(){
  215.  var wmps = Exobud.playState;
  216.  var wmpc = Exobud.controls;
  217.  clearInterval(tidTLab);
  218.  clearTimeout(tidMsg);
  219.  if(wmps==2){wmpc.play();}
  220.  if(wmps==3){wmpc.pause(); disp2.innerHTML="暂停"; tidMsg=setTimeout('rtnTLab()',1500);}
  221.  return;
  222. }
  223. // rndPlay() 函式: 随机播放(Random Play)的运算方式
  224. function rndPlay(){
  225.  if(!blnEnabled){waitMsg();return;}
  226.  intErrCnt=0;
  227.  var idx=Math.floor(Math.random() * intActMmCnt);
  228.  cActIdx=arrActMm[idx];
  229.  selMmPlay(cActIdx);
  230. }
  231. // playAuto() 函式: 对已启用播放项目进行「自动连续播放」的处理
  232. // 这是根据上面 blnAutoProc 的设定值而决定的动作。
  233. function playAuto(){
  234.  if(blnRept){selMmPlay(cActIdx);return;}
  235.  if(!blnAutoProc){wmpStop();return;}
  236.  if(blnfpl){wmpStop();return;}
  237.  if(!blnEnabled){wmpStop();return;}
  238.  if(blnEOT){
  239.    if(blnLoopTrk){startExobud();}
  240.    else {wmpStop();}
  241.  } else {
  242.    if(blnRndPlay){rndPlay();}
  243.    else {cActIdx=arrActMm[0]; selMmPlay(cActIdx);}
  244.  }
  245. }
  246. // 播放使用者在播放清单上所点选的单一曲目
  247. function selPlPlay(idx){
  248.  blnfpl=true;
  249.  selMmPlay(idx);
  250. }
  251. // playPrev() 函式: 播放上一首已启用播放项目
  252. function playPrev(){
  253.  var wmps = Exobud.playState;
  254.  if(wmps==2 || wmps==3){Exobud.controls.stop();}
  255.  blnfpl=false;
  256.  if(!blnEnabled){waitMsg();return;}
  257.  if(blnEOT){mkSelAct();}
  258.  intErrCnt=0;
  259.  if(blnRndPlay){rndPlay();}
  260.  else {
  261.    var idx=cActIdx;
  262.    var blnFind=false;
  263.    for(var i=0;i<intSelMmCnt;i++){ if(cActIdx==arrSelMm[i]){idx=i-1; blnFind=true;}}
  264.    if(!blnFind){startExobud();return;}
  265.    if(idx<0){idx=intSelMmCnt-1;cActIdx=arrSelMm[idx];}
  266.    else {cActIdx=arrSelMm[idx];}
  267.    selMmPlay(cActIdx);
  268.  }
  269. }
  270. // playNext() 函式: 播放下一首已启用播放项目
  271. function playNext(){
  272.  var wmps = Exobud.playState;
  273.  if(wmps==2 || wmps==3){Exobud.controls.stop();}
  274.  blnfpl=false;
  275.  if(!blnEnabled){waitMsg();return;}
  276.  if(blnEOT){mkSelAct();}
  277.  intErrCnt=0;
  278.  if(blnRndPlay){rndPlay();}
  279.  else {
  280.    var idx=cActIdx;
  281.    var blnFind=false;
  282.    for(var i=0;i<intSelMmCnt;i++){ if(cActIdx==arrSelMm[i]){idx=i+1; blnFind=true;}}
  283.    if(!blnFind){startExobud();return;}
  284.    if(idx>=intSelMmCnt){idx=0;cActIdx=arrSelMm[idx];}
  285.    else {cActIdx=arrSelMm[idx];}
  286.    selMmPlay(cActIdx);
  287.  }
  288. }
  289. // retryPlay() 函式: 再次尝试联机到媒体档案
  290. function retryPlay(){
  291.  selMmPlay(cActIdx);
  292. }
  293. // chkRept() 函式: 切换是否重复播放目前的曲目(已启用播放项目)
  294. function chkRept(){
  295.  var wmps = Exobud.playState;
  296.  if(wmps==3){clearInterval(tidTLab);}
  297.  if(blnRept){
  298.    blnRept=false; imgChange('rept',0); disp2.innerHTML="不重复播放";
  299.  } else {
  300.    blnRept=true; imgChange('rept',1); disp2.innerHTML="重复播放";
  301.  }
  302.  tidMsg=setTimeout('rtnTLab()',1000);
  303. }
  304. // chgPMode() 函式: 切换以循序(Sequential)抑或随机(Random)的方式来播放媒体项目
  305. function chgPMode(){
  306.  var wmps = Exobud.playState;
  307.  if(wmps==3){clearInterval(tidTLab);}
  308.  if(blnRndPlay){
  309.    blnRndPlay=false; imgChange('pmode',0); disp2.innerHTML="循序播放";
  310.  } else {
  311.    blnRndPlay=true; imgChange('pmode',1); disp2.innerHTML="随机播放";
  312.  }
  313.  tidMsg=setTimeout('rtnTLab()',1000);
  314. }
  315. // evtOSChg() 函式: 以弹出窗口方式显示媒体档案信息
  316. function evtOSChg(f){
  317. //   以下是状态值 (f) 的说明:
  318. //    0(未定义)       8(转换媒体中)   9(寻找媒体中)  10(联机媒体中)  11(加载媒体中)
  319. //   12(开启媒体中)  13(媒体已开启)  20(等待播放中)  21(正在开启不明的连结)
  320.  if(f==8){capText.innerHTML="ExoBUD MP(II) 字幕显示系统(SMI)";}
  321.  if(f==13){
  322.    var strTitle = Exobud.currentMedia.getItemInfo("Title");
  323.    if(strTitle.length <= 0){strTitle = "(未命名的标题)"}
  324.    var strAuthor = Exobud.currentMedia.getItemInfo("Author");
  325.    if(strAuthor.length <= 0){strAuthor = "(未命名的演出者)"}
  326.    var strCopy = Exobud.currentMedia.getItemInfo("Copyright");
  327.    if(strCopy.length <= 0){strCopy = "(没有著作权信息)"}
  328.    var strType = Exobud.currentMedia.getItemInfo("MediaType");
  329.    var strDur = Exobud.currentMedia.durationString;
  330.    var strUrl = Exobud.URL;
  331.    var trknum = cActIdx+1;
  332.    var ctit = objMmInfo[cActIdx].mmTit;
  333.    if(ctit=="nAnT"){
  334.      objMmInfo[cActIdx].mmTit = strAuthor + " - " + strTitle;
  335.      ctit = strAuthor + " - " + strTitle;
  336.      cActTit = "T" + trknum + ". " + ctit;
  337.      disp1.innerHTML = cActTit;
  338.    }
  339.    strMmInfo  = "  标题: " + strTitle + " (形式: " + strType +")" + "nn";
  340.    strMmInfo += " 演出者: " + strAuthor + "nn";
  341.    strMmInfo += "档案位置: " + strUrl + "nn";
  342.    strMmInfo += " 著作权: " + strCopy + "nn";
  343.    strMmInfo += "时间长度: " + strDur + "nnn";
  344.    strMmInfo += "   Brought to you by ExoBUD MP(II).n";
  345.    strMmInfo += "   Copyright(C) 1999-2003 Jinwoong Yu.n";
  346.    strMmInfo += "   ALL RIGHTS RESERVED.n";
  347.    if(blnShowMmInfo){alert(strMmInfo);}
  348.  }
  349. }
  350. // evtPSChg() 函式: 切换播放程序的动作
  351. function evtPSChg(f){
  352. //   以下是状态值 (f) 的说明:
  353. //    0(未定义)       1(已停止播放)   2(已暂停播放)   3(正在播放中)   4(向前搜索)     5(向后搜索)
  354. //    6(缓冲处理中)   7(等待中)       8(已播放完毕)   9(转换曲目中)  10(就绪状态)
  355.  switch(f){
  356.    case 1:
  357.      evtStop();
  358.      break;
  359.    case 2:
  360.      evtPause();
  361.      break;
  362.    case 3:
  363.      evtPlay();
  364.      break;
  365.    case 8:
  366.      setTimeout('playAuto()', intDelay);
  367.      break;
  368.  }
  369. }
  370. // evtWmpBuff() 函式: 对媒体档案进行缓冲处理(Buffering)的动作
  371. function evtWmpBuff(f){
  372.  if(f){
  373.    disp2.innerHTML = "缓冲处理中";
  374.    var msg = "(缓冲处理中) " + cActTit;
  375.    disp1.innerHTML = msg;
  376.    if(blnStatusBar){ window.status=(msg);}
  377.  } else {
  378.    disp1.innerHTML = cActTit; showTLab();
  379.  }
  380. }
  381. // evtWmpError() 函式: 当无法联机到媒体档案时,显示错误讯息
  382. function evtWmpError(){
  383.  intErrCnt++;
  384.  Exobud.Error.clearErrorQueue();
  385.  if(intErrCnt<=1){
  386.    disp2.innerHTML = "尝试联机 (" + intErrCnt + ")";
  387.    var msg = "(尝试第 " + intErrCnt + " 次联机) " + cActTit;
  388.    disp1.innerHTML = "<无法播放> " + cActTit;
  389.    if(blnStatusBar){ window.status=(msg);}
  390.    tidErr=setTimeout('retryPlay()',1000);
  391.  } else {
  392.    clearTimeout(tidErr);
  393.    intErrCnt=0;showTLab();
  394.    var msg = "已放弃尝试再联机。现在将会播放下一首曲目。";
  395.    if(blnStatusBar){ window.status=(msg);}
  396.    setTimeout('playAuto()',1000);}
  397. }
  398. // evtStop() 函式: 停止播放
  399. function evtStop(){
  400.  clearTimeout(tidErr);
  401.  clearInterval(tidTLab);
  402.  showTLab();
  403.  intErrCnt=0;
  404.  imgChange("pauzt",0);
  405.  imgChange("playt",0);
  406.  imgChange("scope",0);
  407.  disp1.innerHTML = "[等待播放下一首曲目]";
  408.  if(blnStatusBar){ window.status=('[等待播放下一首曲目]');return true;}
  409. }
  410. // evtPause() 函式: 暂停播放
  411. function evtPause(){
  412.  imgChange("pauzt",1)
  413.  imgChange("playt",0);
  414.  imgChange("stopt",0);
  415.  imgChange("scope",0);
  416.  clearInterval(tidTLab);
  417.  showTLab();
  418. }
  419. // evtPlay() 函式: 开始播放
  420. function evtPlay(){
  421.  imgChange("pauzt",0)
  422.  imgChange("playt",1);
  423.  imgChange("stopt",0);
  424.  imgChange("scope",1);
  425.  tidTLab=setInterval('showTLab()',1000);
  426. }
  427. // showTLab() 函式: 显示时间长度
  428. function showTLab(){
  429.  var ps = Exobud.playState;
  430.  if(ps==2 || ps==3){
  431.    var cp=Exobud.controls.currentPosition;
  432.    var cps=Exobud.controls.currentPositionString;
  433.    var dur=Exobud.currentMedia.duration;
  434.    var durs=Exobud.currentMedia.durationString;
  435.    if(blnElaps){
  436.      disp2.innerHTML = cps + " | " + durs;
  437.      var msg = cActTit + " (" + cps + " | " + durs + ")";
  438.      if(ps==2){msg = "(暂停) " + msg;}
  439.      if(blnStatusBar){ window.status=(msg);return true;}
  440.    } else {
  441.      var laps = dur-cp;
  442.      var strLaps = wmpTime(laps);
  443.      disp2.innerHTML = strLaps + " | " + durs;
  444.      var msg = cActTit + " (" + strLaps + " | " + durs + ")";
  445.      if(ps==2){msg = "(暂停) " + msg;}
  446.      if(blnStatusBar){ window.status=(msg);return true;}
  447.    }
  448.  } else {
  449.    disp2.innerHTML = "00:00 | 00:00";
  450.  }
  451. }
  452. // chgTimeFmt() 函式: 变更时间长度的显示方式
  453. function chgTimeFmt(){
  454.  var wmps = Exobud.playState;
  455.  if(wmps==3){clearInterval(tidTLab);}
  456.  if(blnElaps){
  457.    blnElaps=false; disp2.innerHTML="倒数方式";
  458.  } else {
  459.    blnElaps=true; disp2.innerHTML="正常方式";
  460.  }
  461.  tidMsg=setTimeout('rtnTLab()',1000);
  462. }
  463. // rtnTLab() 函式: 传回时间长度
  464. function rtnTLab(){
  465.  clearTimeout(tidMsg);
  466.  var wmps = Exobud.playState;
  467.  if(wmps==3){tidTLab=setInterval('showTLab()',1000);}
  468.  else {showTLab();}
  469. }
  470. // wmpTime() 函式: 计算时间长度
  471. function wmpTime(dur){
  472.  var hh, min, sec, timeLabel;
  473.  hh=Math.floor(dur/3600);
  474.  min=Math.floor(dur/60)%60;
  475.  sec=Math.floor(dur%60);
  476.  if(isNaN(min)){ return "00:00";}
  477.  if(isNaN(hh) || hh==0){timeLabel="";}
  478.  else {
  479.    if(hh>9){timeLabel = hh.toString() + ":";}
  480.    else {timeLabel = "0" + hh.toString() + ":";}
  481.  }
  482.  if(min>9){timeLabel = timeLabel + min.toString() + ":";}
  483.  else {timeLabel = timeLabel + "0" + min.toString() + ":";}
  484.  if(sec>9){timeLabel = timeLabel + sec.toString();}
  485.  else {timeLabel = timeLabel + "0" + sec.toString();}
  486.  return timeLabel;
  487. }
  488. // wmpVolUp(), wmpVolDn(), wmpMute() 这几个都是用来调校音量的函式。(单位:%)
  489. // vmax 代表最大音量(100), vmin 代表最小音量(0), vdep 代表调校音量的间隔(建议设为5至20之间)
  490. // 您只可以在 vmin, vmax, vdep 设为0至100之间的整数数值,vmin 和 vdep 数值不可以大过 vmax。
  491. var vmax = 100;
  492. var vmin = 0;
  493. var vdep = 10;
  494. // wmpVolUp() 函式: 增加音量(Volume Up)
  495. function wmpVolUp(){
  496.  var wmps = Exobud.playState;
  497.  if(wmps==3){clearInterval(tidTLab);}
  498.  var ps = Exobud.settings;
  499.  if(ps.mute){ps.mute=false; disp2.innerHTML="音量恢复"; imgChange('vmute',0);}
  500.  else {
  501.    if(ps.volume >= (vmax-vdep)){ps.volume = vmax;}
  502.    else {ps.volume = ps.volume + vdep;}
  503.    disp2.innerHTML = "音量: " + ps.volume + "%";
  504.  }
  505.  tidMsg=setTimeout('rtnTLab()',1000);
  506. }
  507. // wmpVolDn() 函式: 减少音量(Volume Down)
  508. function wmpVolDn(){
  509.  var wmps = Exobud.playState;
  510.  if(wmps==3){clearInterval(tidTLab);}
  511.  var ps = Exobud.settings;
  512.  if(ps.mute){ps.mute=false; disp2.innerHTML="音量恢复"; imgChange('vmute',0);}
  513.  else {
  514.    if(ps.volume <= vdep){ps.volume = vmin;}
  515.    else {ps.volume = ps.volume - vdep;}
  516.    disp2.innerHTML = "音量: " + ps.volume + "%";
  517.  }
  518.  tidMsg=setTimeout('rtnTLab()',1000);
  519. }
  520. // wmpMute() 函式: 静音模式(Mute)
  521. function wmpMute(){
  522.  var wmps = Exobud.playState;
  523.  if(wmps==3){clearInterval(tidTLab);}
  524.  var ps = Exobud.settings;
  525.  if(!ps.mute){
  526.    ps.mute=true; disp2.innerHTML="开启静音模式"; imgChange("vmute",1);
  527.  } else {
  528.    ps.mute=false; disp2.innerHTML="关闭静音模式"; imgChange("vmute",0);
  529.  }
  530.  tidMsg=setTimeout('rtnTLab()',1000);
  531. }
  532. // waitMsg() 函式: 显示因播放清单空白而无法播放的讯息
  533. function waitMsg(){
  534.  capText.innerHTML="ExoBUD MP(II) 字幕显示系统(SMI)";
  535.  if(intExobudStat==1){disp1.innerHTML = "无法播放 - 播放清单上没有设定任何曲目。";}
  536.  if(intExobudStat==2){disp1.innerHTML = "无法播放 - 您没有选取播放清单上任何一首曲目。";}
  537.  if(blnStatusBar){
  538.    if(intExobudStat==1){ window.status=('无法播放 - 播放清单上没有设定任何曲目。'); return true;}
  539.    if(intExobudStat==2){ window.status=('无法播放 - 您没有选取播放清单上任何一首曲目。'); return true;}
  540.  }
  541. }
  542. // openPlist() 函式: 以弹出窗口显示播放清单内容
  543. function openPlist(){
  544.  window.open("exobudpl.htm","mplist","top=120,left=320,width=280,height=480,scrollbars=no,resizable=yes,copyhistory=no");
  545. }
  546. // chkWmpState() 函式: 当播放程序动作变更时,传回 playState 的状态值
  547. function chkWmpState(){
  548. //   以下是状态值的说明:
  549. //    0(未定义)       1(已停止播放)   2(已暂停播放)   3(正在播放中)   4(向前搜索)     5(向后搜索)
  550. //    6(缓冲处理中)   7(等待中)       8(已播放完毕)   9(转换曲目中)  10(就绪状态)
  551.  return Exobud.playState;
  552. }
  553. // chkWmpOState() 函式: 当播放程序开启媒体档案准备播放时,传回 openState 的状态值
  554. function chkWmpOState(){
  555. //   以下是状态值的说明:
  556. //    0(未定义)       8(转换媒体中)   9(寻找媒体中)  10(联机媒体中)  11(加载媒体中)
  557. //   12(开启媒体中)  13(媒体已开启)  20(等待播放中)  21(正在开启不明的连结)
  558.  return Exobud.openState;
  559. }
  560. // chkOnline() 函式: 检查使用者的联机状态 (不一定每款面板都会使用)
  561. function chkOnline(){
  562. // 传回值: true(已联机到网际网络) false(没有联机到网际网络)
  563.  return Exobud.isOnline;
  564. }
  565. // vizExobud() 函式: 点选连到 ExoBUD MP 播放器原作者的官方网站[韩文] (不一定每款面板都会使用)
  566. function vizExobud(){
  567. // 使用范例: <span onClick="vizExobud()" style="cursor:hand" title="到访 ExoBUD MP 原作者 Jinwoong Yu 的网站 [韩文]">
  568.  window.open("http://exobud.nayana.org","vizExobud");
  569. }
  570. //-->