命令リファレンス 


Ymplayer.getPlayerStatus

MusicPlayerから、「Midi,Oggの状態」「再生中のMidi,Oggの情報」「コンピュータ内の日付と時刻」
「ディスプレイの解像度」「OSのバージョン」「ジョイスティックの接続状態」が取得できます。
※ このメソッドを使う前にsetGettingPlayerStatus()で、MusicPlayerの状態取得機能を有効にする必要があります

情報取得する手順を簡単に表すと、
setGettingPlayerStatus()updatePlayInfo()getPlayerStatus() → 下記のメソッド」です。
※ 「updatePlayInfo() → getPlayerStatus()」の間はMusicPlayerに反映される時間が必要なので、1フレーム以上時間を置く必要があります。

状態取得機能は、MusicPlayerがfilesフォルダに「YMPStatus.dat」を書き込み、
そのファイルを読み取ることで行っています。
このメソッドを呼び出すと、「YMPStatus.dat」を読み込みます

※ 状態取得した情報は、ファイル読み書きのタイムラグにより少し遅れることがあります。
  setGettingPlayerStatus()の引数を大きい値にすると、その分タイムラグが大きくなります

情報は下記のメソッドから取得してください
ver2.10から、変数を直接参照する方法は非推奨になりました

書式

getPlayerStatus(scope)
scope
情報取得する項目の範囲
0やnullを設定、または省略すると、すべての項目を取得します

scope が 1以上 のとき取得する項目

scope が 2以上 のとき取得する項目

scope が 3以上 のとき取得する項目

scope が 4以上 のとき取得する項目

scope が 5以上 のとき取得する項目

scope が 6以上 のとき取得する項目

戻り値

情報取得に成功したら0
失敗したら-1


例1を実際に実行するとわかりやすいと思います。

例1

(予め test.mid をTonyuに登録しておいてください)
(予め test.ogg をプロジェクトのフォルダに置いてください)
(全ての項目を表示するためプログラムが長くなってしまいましたが、長いだけなので、そこまで難しくありません)
←・→キーで更新頻度を調節すると、情報が取得できます
Z, X, C, V キー:Midiの 再生, 停止, 一時停止, 再開、 Shiftキーを押しながらだとOggに対して命令する。
extends SpriteChar;

setFont("MS ゴシック"); // 文字をそろえやすくなる
$mplayer = new Ymplayer();

x = -99; y = -99; // 邪魔くさいので画面外へ移動

interval = 1; // 更新頻度
$mplayer.setGetMode(interval); // 更新頻度調節
$mplayer.updatePlayInfo();     // 更新

while (1) {
  // 「Shift + キー」でOgg、ShiftなしでMidi に対して命令する
  if (getkey(16) > 0) bgmType = 2; else bgmType = 1;
  if (getkey(90) == 1) {
    if (bgmType == 1) $mplayer.play($se_test  , 1); // Z:繰り返し再生
    else              $mplayer.play("test.ogg", 1); // 
  }
  if (getkey(88) == 1) $mplayer.stop(bgmType);      // X:停止
  if (getkey(67) == 1) $mplayer.pause(bgmType);     // C:一時停止
  if (getkey(86) == 1) $mplayer.restart(bgmType);   // V:一時停止から再開

  if ((getkey(37)==1 || getkey(37)>5) && interval > 0) { // ←:頻度上げる・無効
    interval -= 1 + (getkey(37)>60)*19;
    if (interval < 0) interval = 0;
    $mplayer.setGetMode(interval); // 更新頻度調節
    $mplayer.updatePlayInfo();     // 更新
  }
  if ((getkey(39)==1 || getkey(39)>5) && interval < 1000) { // →:頻度下げる・有効
    interval += 1 + (getkey(39)>60)*19;
    if (interval > 1000) interval = 1000;
    $mplayer.setGetMode(interval); // 更新頻度調節
    $mplayer.updatePlayInfo();     // 更新
  }

  $mplayer.getPlayerStatus(); // 状態取得
  // ↑毎回呼び出す必要はありません
  // 5フレームに1回など読み込み頻度を少なくすることを勧めます

  drawText(0, 11* 0 , "Midi演奏状態                            :" + $mplayer.getPlayerMidiStatus()   , $clWhite, 9);
  drawText(0, 11* 1 , "再生中のMidi番号                        :" + $mplayer.getPlayerMidiPlayNo()   , $clWhite, 9);
  drawText(0, 11* 2 , "Midiデータ内のテンポ                    :" + $mplayer.getPlayerMidiTempo()    , $clWhite, 9);
  drawText(0, 11* 3 , "現在のMidiのティック                    :" + $mplayer.getPlayerMidiTick()     , $clWhite, 9);
  drawText(0, 11* 4 , "Midiデータ内での現在の演奏時間(ミリ秒)  :" + $mplayer.getPlayerMidiTime()     , $clWhite, 9);
  drawText(0, 11* 5 , "Midiを再生してからのループ回数          :" + $mplayer.getPlayerMidiLoopCount(), $clWhite, 9);
  drawText(0, 11* 6 , "演奏中のMidiの、ベースカウント          :" + $mplayer.getMidiTimeBase()       , $clWhite, 9);
  drawText(0, 11* 7 , "演奏中のMidiの、総ティック              :" + $mplayer.getMidiTotalTick()      , $clWhite, 9);
  drawText(0, 11* 8 , "演奏中のMidiの、総演奏時間(ミリ秒)      :" + $mplayer.getMidiTotalTime()      , $clWhite, 9);
  drawText(0, 11* 9 , "演奏中のMidiの、最初の発音ティック      :" + $mplayer.getMidiFirstNoteTick()  , $clWhite, 9);
  drawText(0, 11*10 , "演奏中のMidiの、最初の発音の時間(ミリ秒):" + $mplayer.getMidiFirstNoteTime()  , $clWhite, 9);
  drawText(0, 11*11 , "演奏中のMidiの、最後の発音ティック      :" + $mplayer.getMidiLastNoteTick()   , $clWhite, 9);
  drawText(0, 11*12 , "演奏中のMidiの、最後の発音の時間(ミリ秒):" + $mplayer.getMidiLastNoteTime()   , $clWhite, 9);
  drawText(0, 11*13 , "演奏中のMidiの、CC#111のティック        :" + $mplayer.getMidiLoopTick()       , $clWhite, 9);
  drawText(0, 11*14 , "演奏中のMidiの、CC#111の位置(ミリ秒)    :" + $mplayer.getMidiLoopTime()       , $clWhite, 9);

  drawText(0, 11*16, "Ogg演奏状態                          :" + $mplayer.getPlayerOggStatus()   , $clWhite, 9);
  drawText(0, 11*17, "再生中のOggのファイル名              :" + $mplayer.getPlayerOggPlayName() , $clWhite, 9);
  drawText(0, 11*18, "Oggデータ内での現在の再生時間(ミリ秒):" + $mplayer.getPlayerOggTime()     , $clWhite, 9);
  drawText(0, 11*19, "Oggを再生してからのループ回数        :" + $mplayer.getPlayerOggLoopCount(), $clWhite, 9);
  drawText(0, 11*20, "再生中のOggの、チャンネル数          :" + $mplayer.getOggChannels()       , $clWhite, 9);
  drawText(0, 11*21, "再生中のOggの、サンプリングレート    :" + $mplayer.getOggSamplingRate()   , $clWhite, 9);
  drawText(0, 11*22, "再生中のOggの、総再生時間(ミリ秒)    :" + $mplayer.getOggTotalTime()      , $clWhite, 9);
  drawText(0, 11*23, "再生中のOggの、総サンプリング数      :" + $mplayer.getOggTotalSamples()   , $clWhite, 9);
  drawText(0, 11*24, "再生中のOggの、Oggループ開始位置     :" + $mplayer.getOggFileLoopStart()  , $clWhite, 9);
  drawText(0, 11*25, "再生中のOggの、Oggループ終了位置     :" + $mplayer.getOggFileLoopEnd()    , $clWhite, 9);

  if      ($mplayer.getTimeDayOfWeek() == 0) timeDayOfWeekText = " (日)";
  else if ($mplayer.getTimeDayOfWeek() == 1) timeDayOfWeekText = " (月)";
  else if ($mplayer.getTimeDayOfWeek() == 2) timeDayOfWeekText = " (火)";
  else if ($mplayer.getTimeDayOfWeek() == 3) timeDayOfWeekText = " (水)";
  else if ($mplayer.getTimeDayOfWeek() == 4) timeDayOfWeekText = " (木)";
  else if ($mplayer.getTimeDayOfWeek() == 5) timeDayOfWeekText = " (金)";
  else if ($mplayer.getTimeDayOfWeek() == 6) timeDayOfWeekText = " (土)";

  drawText(0, 11*27, "日付 : " + $mplayer.getTimeYear()
                           +"/"+ $mplayer.getTimeMonth()
                           +"/"+ $mplayer.getTimeDay()
                               + timeDayOfWeekText
                               , $clWhite, 9);
  drawText(0, 11*28, "時刻 : " + $mplayer.getTimeHour()
                           +":"+ $mplayer.getTimeMinute()
                           +":"+ $mplayer.getTimeSecond()
                           +"."+ ($mplayer.getTimeMilliSecond() / 100 % 10)
                               + ($mplayer.getTimeMilliSecond() / 10  % 10)
                               + ($mplayer.getTimeMilliSecond()       % 10)
                               , $clWhite, 9);

  drawText(0, 11*29, "ディスプレイの解像度の幅             :" + $mplayer.getDisplayWidth()    , $clWhite, 9);
  drawText(0, 11*30, "ディスプレイの解像度の高さ           :" + $mplayer.getDisplayHeight()    , $clWhite, 9);

  if      ($mplayer.getOSPlatformId() == 1) osPlatformNameText = "Windows 9x";
  else if ($mplayer.getOSPlatformId() == 2) osPlatformNameText = "Windows NT";
  else                                      osPlatformNameText = "不明";

  drawText(320, 11*0, "OSの種類              :" + osPlatformNameText          , $clWhite, 9);
  drawText(320, 11*1, "OSのメジャーバージョン:" + $mplayer.getOSMajorVersion(), $clWhite, 9);
  drawText(320, 11*2, "OSのマイナーバージョン:" + $mplayer.getOSMinorVersion(), $clWhite, 9);

  if ($mplayer.getJoystickOn(0) == 1) joystick1_OnText = "ある"; else joystick1_OnText = "ない";
  if ($mplayer.getJoystickOn(1) == 1) joystick2_OnText = "ある"; else joystick2_OnText = "ない";
  drawText(320, 11*4, "ジョイスティックID1:" + joystick1_OnText, $clWhite, 9);
  drawText(320, 11*5, "ジョイスティックID2:" + joystick2_OnText, $clWhite, 9);

  drawText(0, 11*32 , "更新頻度:" + interval, $clWhite, 12);
  drawText(0, 11*33, "← →:更新頻度を調節" , $clYellow, 12, 1);

  update();
}

戻る