2011年9月26日月曜日

Foobar2000-WSH Panel Mod 小枝『アルバム単位での連続再生』

Foobarでは連続再生はプレイリストとトラックにしか対応していない。

このスクリプトは一応強引にアルバム単位での連続再生に対応させたもの。

   1:  /*_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   2:  
   3:      アルバム単位での連続再生
   4:  
   5:  _/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
   6:  //変数定義
   7:  var show_text = "";
   8:  var album_title = "";
   9:  var sys_stat = true;
  10:  var DT_WORDBREAK = 0x00000010;
  11:  var renzoku = false;
  12:  var v = fb.volume;
  13:  return_stat();
  14:   
  15:  function on_size(){
  16:      ww = window.Width;
  17:      wh = window.Height;
  18:  }
  19:   
  20:  function on_paint(gr) {
  21:      on_size();
  22:      var g_font = gdi.Font("Tahoma", 12, 0);
  23:      gr.FillSolidRect(0, 0, ww, wh, 0);
  24:      gr.GdiDrawText(show_text, g_font, 1, 0, 0, ww, wh,DT_WORDBREAK);
  25:  }
  26:   
  27:  function on_mouse_lbtn_up(x, y) {
  28:      if (renzoku){
  29:          renzoku=false;
  30:      }
  31:      else{
  32:          if(fb.PlaybackOrder<2){
  33:              renzoku=true;
  34:          }
  35:      }
  36:      album_title=fb.TitleFormat("%album%").Eval(true);
  37:      return_stat();
  38:      window.repaint();
  39:  }
  40:   
  41:  function on_playback_new_track(metadb){
  42:      if (renzoku){
  43:          if (sys_stat){
  44:              if (fb.TitleFormat("%album%").Eval(true)!=album_title){
  45:                  sys_stat = false;
  46:                  v = fb.Volume;
  47:                  fb.VolumeMute();
  48:                  fb.Prev();
  49:              }
  50:          }
  51:          else {
  52:              if (fb.TitleFormat("%album%").Eval(true)!=album_title){
  53:                  sys_stat = true;
  54:                  fb.Next();
  55:                  fb.volume = v;
  56:              }
  57:              else{
  58:                  fb.Prev();
  59:              }
  60:          }
  61:      }
  62:      return_stat();
  63:      window.repaint();
  64:  }
  65:   
  66:  function on_playback_starting(){
  67:      if (fb.TitleFormat("%album%").Eval(true)!=album_title){
  68:          renzoku = false;
  69:      }
  70:  }
  71:   
  72:  function on_playlist_switch(){
  73:      renzoku = false;
  74:  }
  75:   
  76:  function on_playback_order_changed(){
  77:      if(fb.PlaybackOrder>1){
  78:          renzoku=false;
  79:      }
  80:      return_stat();
  81:      window.repaint();
  82:  }
  83:   
  84:  function return_stat(){
  85:      show_text = "現在『" +
  86:          fb.TitleFormat("%album%").Eval(true) + "』を再生中です\n"
  87:          + "このパネルをクリックすることで、アルバム単位での連続再生をOn/Offできます。\n\n";
  88:      if (renzoku){
  89:          show_text += "現在連続再生はONになっています。\n";
  90:      }
  91:      else{
  92:          show_text += "現在連続再生はOFFになっています。\n";
  93:      }
  94:      if(fb.PlaybackOrder>1){
  95:          show_text += "PlayBackOrderを確認してください。\n"
  96:              +"このスクリプトは[Default/Repeat(playlist)]でないと動作しません。\n";
  97:      }
  98:  }

ソースコードはこちらにも掲載している。

http://pastie.org/2586564

 

アルゴリズムというか仕組みは、連続再生をONされた時に、そのアルバムのタイトルを覚えておいて、違うものが再生されたら戻りまくって、

もう一回違うアルバムのタイトルが出てきたら、ひとつ前に戻ることによって連続再生に対応させている。

かなり強引なので公式で対応されることを強く望む。

 

ちなみにアルバムの最終トラック数を取得して、その分だけ戻る手段を取る方法もあるにはある

なぜこのような形式にしたのかというと・・・

 

 

以下のような場合、最終トラック数は14になるが、14も戻ってしまえば意図通りに動かないからである。

強引なりに少し考えてますw



0 件のコメント:

コメントを投稿