Songle Widget API (version 1)

概要

 Songle Widget API は Songle Widget を JavaScript から操作するための機能です。

1. 利用準備

 この機能を利用するためには、埋め込みコードに任意の文字列が設定された data-api 属性を追加するか、このサービスが提供する API スクリプトをあなたのウェブサイト上で事前に読み込んでおきます。

A. 埋め込みコードから利用する
<div data-api="songle-widget-api-example" data-url="www.youtube.com/watch?v=PqJNc9KVIZE" id="songle-widget"></div>
<script src="https://widget.songle.jp/v1/widgets.js"></script>
B. API スクリプトから利用する
<script src="https://widget.songle.jp/v1/api.js"></script>
window.onload =
  function()
  {
    var songleWidgetElement =
      SongleWidgetAPI.createSongleWidgetElement({
        api: "songle-widget-api-example",
        url: "www.youtube.com/watch?v=PqJNc9KVIZE"
      });

    document.body.appendChild(songleWidgetElement);
  }

 埋め込みコードの data-api 属性に与える任意の文字列は、複数のプレーヤを利用する際に各プレーヤを操作するために必要になるため、ユニークであることが推奨されます。

2. Hello,Songle Widget!!

 Songle Widget の準備が完了すると window.onSongleWidgetReady が実行されます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log("Hello,Songle Widget!!");
  }
3. サンプルプログラム

 音楽プレーヤの操作以外にも音楽理解技術によるなどをブラウザのイベントとして処理することができます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.on("beatPlay",
      function(e)
      {
        switch(e.beat.position)
        {
          case 1:
            // 1 拍目の処理をここに記述
            console.log("1st beat");
            break;

          case 2:
            // 2 拍目の処理をここに記述
            console.log("2nd beat");
            break;

          case 3:
            // 3 拍目の処理をここに記述
            console.log("3rd beat");
            break;

          case 4:
            // 4 拍目の処理をここに記述
            console.log("4th beat");
            break;
        }
      });

    songleWidget.play(); // 再生開始
  }

動作要件

ウェブブラウザ バージョン
Microsoft Internet Explorer 9,10,11
Microsoft Edge 14
Mozilla Firefox 48
Google Chrome 52 (recommended)
Safari 9
Opera 39
Android Browser 51
Google Chrome for Android 51
オプション名説明デフォルト値必須
data-apiAPI を利用する際、任意の文字列を指定します。""No
data-url配信元サイトの URL を指定します。
(例:www.youtube.com/watch?v=PqJNc9KVIZE
""Yes
data-api-create-callback-nameDOM Element が作成された際に実行するメソッド名を指定します。"onSongleWidgetCreate"No
data-api-error-callback-nameAPI の初期化に失敗した際に実行するメソッド名を指定します。"onSongleWidgetError"No
data-api-ready-callback-nameAPI の初期化に成功した際に実行するメソッド名を指定します。"onSongleWidgetReady"No
data-api-beat-auto-reload1 の場合、に関する音楽地図の自動更新を行います。"0"No
data-api-chord-auto-reload1 の場合、和音に関する音楽地図の自動更新を行います。"0"No
data-api-melody-auto-reload1 の場合、メロディに関する音楽地図の自動更新を行います。"0"No
data-api-chorus-auto-reload1 の場合、サビに関する音楽地図の自動更新を行います。"0"No
data-api-beat-disabled1 の場合、に関する音楽地図のダウンロードをスキップします。"0"No
data-api-chord-disabled1 の場合、和音に関する音楽地図のダウンロードをスキップします。"0"No
data-api-melody-disabled1 の場合、メロディに関する音楽地図のダウンロードをスキップします。"0"No
data-api-chorus-disabled1 の場合、サビに関する音楽地図のダウンロードをスキップします。"0"No
data-api-beat-revisionに関する音楽地図のバージョンを指定のバージョンに固定します。
0 の場合、最新版の音楽地図をダウンロードします。
"0"No
data-api-chord-revision和音に関する音楽地図のバージョンを指定のバージョンに固定します。
0 の場合、最新版の音楽地図をダウンロードします。
"0"No
data-api-melody-revisionメロディに関する音楽地図のバージョンを指定のバージョンに固定します。
0 の場合、最新版の音楽地図をダウンロードします。
"0"No
data-api-chorus-revisionサビに関する音楽地図のバージョンを指定のバージョンに固定します。
0 の場合、最新版の音楽地図をダウンロードします。
"0"No
data-song-auto-play1 の場合、自動再生を有効にします(YouTube / mp3 のみ)。"0"No
data-song-auto-loop1 の場合、自動繰返を有効にします(YouTube / mp3 のみ)。"0"No
data-song-start-at初回再生時の再生位置を時刻(秒)指定します。
chorus の場合、最初の繰り返し区間(橙色)から再生します。
repeat の場合、最初の繰り返し区間(青色)から再生します。
"0"No
data-song-volume初期音量を 0 ~ 100 の範囲で設定します。"auto"No
data-songle-widget-ctrl1 の場合、コントロールボタンを表示します。"1"No
data-songle-widget-ctrl-enter-colorマウスが触れた際、コントロールボタンの色を設定します。"#e17"No
data-songle-widget-ctrl-leave-colorマウスが離れた際、コントロールボタンの色を設定します。"#000"No
data-songle-widget-ctrl-link-colorリンクテキストのデザインを設定します。"#e17"No
data-songle-widget-size-wSongle Widget の横幅(ピクセル)を設定します。
auto の場合、埋め込まれた親要素のサイズに自動調節します。
"275"No
data-songle-widget-size-hSongle Widget の縦幅(ピクセル)を設定します。
auto の場合、埋め込まれた親要素のサイズに自動調節します。
"100"No
data-video-player-size-w動画プレーヤの横幅(ピクセル)を設定します。
auto の場合、埋め込まれた親要素のサイズに自動調節します。
"275"No
data-video-player-size-h動画プレーヤの縦幅(ピクセル)を設定します。
auto の場合、埋め込まれた親要素のサイズに自動調節します。
"155"No
data-nn-transparent1 の場合 wmode を有効にします(ニコニコ動画のみ)。"0"No
data-yt-ctrl1 の場合、動画プレーヤの制御表示を有効にします(YouTube のみ)。"0"No
data-yt-info1 の場合、動画プレーヤの詳細表示を有効にします(YouTube のみ)。"0"No
data-yt-quality動画プレーヤの品質を設定します(YouTube のみ)。"small"No

onSongleWidgetCreate

Songle Widget の DOM Element が作成されたタイミングで実行されます(このメソッドは、事前に定義しておく必要があります)。

ステータス説明
-このステータスは、将来のために予約されています。
window.onSongleWidgetCreate =
  function(apiKey, songleWidget)
  {
    console.log("status: " + songleWidget.status);
  }

onSongleWidgetError

Songle Widget の初期化が失敗したタイミングで実行されます(このメソッドは、事前に定義しておく必要があります)。

ステータス説明
100配信元の楽曲は、削除されているため埋め込むことができませんでした。
101配信元の楽曲は、許可されてないため埋め込むことができませんでした。
200音楽地図のダウンロードが中断しました。
201音楽地図のダウンロードが失敗しました。
300配信元の音源(mp3)のダウンロードに失敗しました。
window.onSongleWidgetError =
  function(apiKey, songleWidget)
  {
    console.log("status: " + songleWidget.status);
  }

onSongleWidgetReady

Songle Widget の初期化が成功したタイミングで実行されます(このメソッドは、事前に定義しておく必要があります)。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log("Hello,Songle Widget!!");
  }

onSongleWidgetReload

TBD

window.onSongleWidgetReload =
  function(apiKey, songleWidget)
  {
    console.log("Songle Widget was reloaded!!");
  }

onSongleWidgetRemove

TBD

window.onSongleWidgetRemove =
  function(apiKey, songleWidget)
  {
    console.log("Songle Widget was removed!!");
  }

dataset.api

埋め込みオプションに与えられた data-api の値を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log(songleWidget.dataset.api);
  }

dataset.url

埋め込みオプションに与えられた data-url の値を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log(songleWidget.dataset.url);
  }

mode

起動モードを返します。

起動モード説明
SongleWidgetAPI.MP3_MODE音楽プレーヤモード
SongleWidgetAPI.NN_VIDEO_MODE動画プレーヤモード(ニコニコ動画)
SongleWidgetAPI.YT_VIDEO_MODE動画プレーヤモード(YouTube)
window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    switch(songleWidget.mode)
    {
      case SongleWidgetAPI.MP3_MODE:
        console.log("Songle Widget is mp3 mode.");
        break;

      case SongleWidgetAPI.NN_VIDEO_MODE:
        console.log("Songle Widget is nn video mode.");
        break;

      case SongleWidgetAPI.YT_VIDEO_MODE:
        console.log("Songle Widget is yt video mode.");
        break;
    }
  }

uuid

UUID を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log(songleWidget.uuid);
  }

videoID

動画 ID を返します(ニコニコ動画 / YouTube のみ)。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log(songleWidget.videoID);
  }

rootElement

TBD

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    console.log(songleWidget.rootElement);
  }

isPlaying

ステータスが playing の場合 true を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        if(songleWidget.isPlaying)
          console.log("Songle Widget is playing now.");
      }
    , 1000);
  }

isPaused

ステータスが paused の場合 true を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        if(songleWidget.isPaused)
          console.log("Songle Widget is paused now.");
      }
    , 1000);
  }

isStopped

ステータスが stopped の場合 true を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        if(songleWidget.isStopped)
          console.log("Songle Widget is stopped now.");
      }
    , 1000);
  }

isSeeking

ステータスが seeking の場合 true を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        if(songleWidget.isSeeking)
          console.log("Songle Widget is seeking now.");
      }
    , 1000);
  }

bpm

現在の bpm を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.bpm + " [bpm]");
      }
    , 1000);
  }

currentBeat

現在の拍を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.currentBeat);
      }
    , 1000);
  }

currentChord

現在の和音を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.currentChord);
      }
    , 1000);
  }

currentNote

現在のメロディを返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.currentNote);
      }
    , 1000);
  }

currentChorusSegment

現在のサビ(橙色の繰り返し)区間情報を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.currentChorusSegment);
      }
    , 1000);
  }

currentRepeatSegment

現在のサビ(橙色の繰り返し・青色の繰り返し)区間情報を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.currentRepeatSegment);
      }
    , 1000);
  }

isPlayingChorusSegment

(橙色の繰り返し)区間を再生中の場合 true を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.isPlayingChorusSegment);
      }
    , 1000);
  }

isPlayingRepeatSegment

(橙色の繰り返し・青色の繰り返し)区間を再生中の場合 true を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.isPlayingRepeatSegment);
      }
    , 1000);
  }

duration

楽曲の再生時間を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.duration.milliseconds + " [ms]");
        console.log(songleWidget.duration.seconds + " [sec]");
        console.log(songleWidget.duration.minutes + " [min]");
      }
    , 1000);
  }

position

楽曲の再生位置を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.position.milliseconds + " [ms]");
        console.log(songleWidget.position.seconds + " [sec]");
        console.log(songleWidget.position.minutes + " [min]");
      }
    , 1000);
  }

loadedRatio

楽曲のロードされた割合を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.loadedRatio * 100 + " [%]");
      }
    , 1000);
  }

playedRatio

楽曲のプレイされた割合を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    setInterval(
      function()
      {
        console.log(songleWidget.playedRatio * 100 + " [%]");
      }
    , 1000);
  }

volume

音量を操作します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.volume = SongleWidgetAPI.MIN_VOLUME; // Min volume.

    songleWidget.volume = SongleWidgetAPI.MAX_VOLUME; // Max volume.
  }

song

楽曲情報(タイトルなど)及び、を返します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    /*
      [...].song.url

      [...].song.id
      [...].song.title
      [...].song.permalink
      [...].song.duration
      [...].song.position
      [...].song.rmsAmplitude

      [...].song.artist.id
      [...].song.artist.name

      [...].song.scene.beats
      [...].song.scene.beats[ beatIndex ].index
      [...].song.scene.beats[ beatIndex ].start
      [...].song.scene.beats[ beatIndex ].position

      [...].song.scene.chords
      [...].song.scene.chords[ chordIndex ].index
      [...].song.scene.chords[ chordIndex ].start
      [...].song.scene.chords[ chordIndex ].duration
      [...].song.scene.chords[ chordIndex ].name

      [...].song.scene.notes
      [...].song.scene.notes[ noteIndex ].index
      [...].song.scene.notes[ noteIndex ].start
      [...].song.scene.notes[ noteIndex ].duration
      [...].song.scene.notes[ noteIndex ].pitch
      [...].song.scene.notes[ noteIndex ].number

      [...].song.scene.chorusSegments
      [...].song.scene.chorusSegments[ chorusSegmentIndex ].index
      [...].song.scene.chorusSegments[ chorusSegmentIndex ].duration
      [...].song.scene.chorusSegments[ chorusSegmentIndex ].repeats
      [...].song.scene.chorusSegments[ chorusSegmentIndex ].repeats[ repeatIndex ].index
      [...].song.scene.chorusSegments[ chorusSegmentIndex ].repeats[ repeatIndex ].start
      [...].song.scene.chorusSegments[ chorusSegmentIndex ].repeats[ repeatIndex ].duration

      [...].song.scene.repeatSegments
      [...].song.scene.repeatSegments[ repeatSegmentIndex ].index
      [...].song.scene.repeatSegments[ repeatSegmentIndex ].duration
      [...].song.scene.repeatSegments[ repeatSegmentIndex ].repeats
      [...].song.scene.repeatSegments[ repeatSegmentIndex ].repeats[ repeatIndex ].index
      [...].song.scene.repeatSegments[ repeatSegmentIndex ].repeats[ repeatIndex ].start
      [...].song.scene.repeatSegments[ repeatSegmentIndex ].repeats[ repeatIndex ].duration
    */
    console.log(songleWidget.song);
  }

eventPollingInterval

拍の間隔などが極端に短い楽曲は、イベント検出が遅延することがあります。イベント検出は、ポーリングモデルにより実装されてため、タイミングにより次の検出タイミングまで遅延します。この値を小さくすることで、この問題を回避することができます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.eventPollingInterval = 1; // 1 [ms]
  }

beatEventPriority

拍に関するイベント検出の優先度(デフォルト3)を設定します。優先度は、大きいほど優先的に処理されます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.beatEventPriority = 3;
  }

beatEventTimingOffset

拍に関するイベントの実行タイミングのオフセットを設定します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.beatEventTimingOffset = -100; // -100 [ms]
  }

chordEventPriority

和音に関するイベント検出の優先度(デフォルト2)を設定します。優先度は、大きいほど優先的に処理されます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.chordEventPriority = 2;
  }

chordEventTimingOffset

和音に関するイベントの実行タイミングのオフセットを設定します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.chordEventTimingOffset = -100; // -100 [ms]
  }

noteEventPriority

メロディに関するイベント検出の優先度(デフォルト1)を設定します。優先度は、大きいほど優先的に処理されます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.noteEventPriority = 1;
  }

noteEventTimingOffset

メロディに関するイベントの実行タイミングのオフセットを設定します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.noteEventTimingOffset = -100; // -100 [ms]
  }

chorusSegmentEventPriority

サビ(橙色の繰り返し)区間に関するイベント検出の優先度(デフォルト5)を設定します。優先度は、大きいほど優先的に処理されます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.chorusSegmentEventPriority = 5;
  }

chorusSegmentEventTimingOffset

サビ(橙色の繰り返し)区間に関するイベントの実行タイミングのオフセットを設定します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.chorusSegmentEventTimingOffset = -100; // -100 [ms]
  }

repeatSegmentEventPriority

サビ(青色の繰り返し)区間に関するイベント検出の優先度(デフォルト4)を設定します。優先度は、大きいほど優先的に処理されます。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.repeatSegmentEventPriority = 4;
  }

repeatSegmentEventTimingOffset

サビ(青色の繰り返し)区間に関するイベントの実行タイミングのオフセットを設定します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.repeatSegmentEventTimingOffset = -100; // -100 [ms]
  }

on

任意のイベントに対してイベントリスナーを登録します。

イベント別名説明
beatEnterbeatPlayの開始イベントが発生した。
beatLeave-の終了イベントが発生した。
chordEnterchordPlayの開始イベントが発生した。
chordLeave-の終了イベントが発生した。
noteEnternotePlayの開始イベントが発生した。
noteLave-の終了イベントが発生した。
chorusSegmentEnterchorusEnter(橙色の繰り返し)区間の開始イベントが発生した。
chorusSegmentLeavechorusLeave(橙色の繰り返し)区間の終了イベントが発生した。
repeatSegmentEnterrepeatEnter(橙色の繰り返し・青色の繰り返し)区間の開始イベントが発生した。
repeatSegmentLeaverepeatLeave(橙色の繰り返し・青色の繰り返し)区間の終了イベントが発生した。
reload-Songle Widget()が更新された。
remove-Songle Widget()が削除された。
play-再生した。
pause-一時停止した。
stop-停止した。
seek-シークした。
loadingProgress-楽曲のロードされた割合に変化があった。
playingProgress-楽曲のプレイされた割合に変化があった。
finish-最後まで再生した。
window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.on("beatPlay",
      function(e)
      {
        /*
          [...].beat.prev.index
          [...].beat.prev.start
          [...].beat.prev.position

          [...].beat.index
          [...].beat.start
          [...].beat.position

          [...].beat.next.index
          [...].beat.next.start
          [...].beat.next.position
        */
        console.log(e);
      });

    songleWidget.on("chordPlay",
      function(e)
      {
        /*
          [...].chord.prev.index
          [...].chord.prev.start
          [...].chord.prev.duration
          [...].chord.prev.name

          [...].chord.index
          [...].chord.start
          [...].chord.duration
          [...].chord.name

          [...].chord.next.index
          [...].chord.next.start
          [...].chord.next.duration
          [...].chord.next.name
        */
        console.log(e);
      });

    songleWidget.on("notePlay",
      function(e)
      {
        /*
          [...].note.prev.index
          [...].note.prev.start
          [...].note.prev.duration
          [...].note.prev.pitch
          [...].note.prev.number

          [...].note.index
          [...].note.start
          [...].note.duration
          [...].note.pitch
          [...].note.number

          [...].note.next.index
          [...].note.next.start
          [...].note.next.duration
          [...].note.next.pitch
          [...].note.next.number
        */
        console.log(e);
      });

    songleWidget.on("chorusEnter",
      function(e)
      {
        /*
          [...].repeat.index
          [...].repeat.start
          [...].repeat.duration

          [...].segment.index
          [...].segment.duration
        */
        console.log(e);
      });

    songleWidget.on("repeatEnter",
      function(e)
      {
        /*
          [...].repeat.index
          [...].repeat.start
          [...].repeat.duration

          [...].segment.index
          [...].segment.duration
        */
        console.log(e);
      });
  }

off

任意のイベントに対してイベントリスナーを削除します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.off("beatPlay");

    songleWidget.off("chordPlay");

    songleWidget.off("notePlay");

    songleWidget.off("chorusEnter");

    songleWidget.off("repeatEnter");
  }

play

再生します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.play();
  }

pause

一時停止します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.pause();
  }

stop

停止します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.stop();
  }

seekTo

指定の再生位置(ミリ秒)にシークします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.seekTo(SongleWidgetAPI.secondsToMilliseconds(30)); // Seek to 30 seconds.
  }

seekToPrevChorus

現在の再生位置より 1 つ前の(橙色の繰り返し)区間の先頭にシークします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.seekToPrevChorus();
  }

seekToNextChorus

現在の再生位置より 1 つ先の(橙色の繰り返し)区間の先頭にシークします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.seekToNextChorus();
  }

seekToPrevRepeat

現在の再生位置より 1 つ前の(橙色の繰り返し・青色の繰り返し)区間の先頭にシークします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.seekToPrevRepeat();
  }

seekToNextRepeat

現在の再生位置より 1 つ先の(橙色の繰り返し・青色の繰り返し)区間の先頭にシークします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.seekToNextRepeat();
  }

setAllEventTimingOffset

全イベントの実行タイミングのオフセットを設定します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.setAllEventTimingOffset(-100); // -100 [ms]
  }

serialize

音楽地図をシリアライズします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.serialize();
  }

remove

確保されたリソースを解放します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.remove();
  }

DEFAULT_SONGLE_WIDGET_SIZE_W

TBD

DEFAULT_SONGLE_WIDGET_SIZE_H

TBD

DEFAULT_VIDEO_PLAYER_SIZE_W

TBD

DEFAULT_VIDEO_PLAYER_SIZE_H

TBD

MIN_SONGLE_WIDGET_SIZE_W

TBD

MIN_SONGLE_WIDGET_SIZE_H

TBD

MIN_VIDEO_PLAYER_SIZE_W

TBD

MIN_VIDEO_PLAYER_SIZE_H

TBD

MIN_VOLUME

TBD

MAX_VOLUME

TBD

MP3_MODE

TBD

NN_VIDEO_MODE

TBD

YT_VIDEO_MODE

TBD

SOURCE_SONGLE_WIDGET

TBD

SOURCE_MP3

TBD

SOURCE_NN_VIDEO

TBD

SOURCE_YT_VIDEO

TBD

computeAverageVolume

平均音量を計算します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    songleWidget.volume = SongleWidgetAPI.computeAverageVolume(songleWidget);
  }

computeOffsetFromRepeatSegmentBy

指定の繰り返し区間に入るの指定拍数前の時間(オフセット)を計算します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var offset =
      SongleWidgetAPI.computeOffsetFromRepeatSegmentBy(songleWidget, {
        beatCount: 4,
        repeatSegmentIndex: 0
      }); // e.g. 1600 [ms]

    songleWidget.on("chorusEnter",
      function()
      {
      }, { offset: offset });
  }

createSongleWidgetElement

埋め込みコードを生成します。

window.onload =
  function()
  {
    document.body.appendChild(
      SongleWidgetAPI.createSongleWidgetElement({
        api: "songle-widget-api-example",
        url: "www.youtube.com/watch?v=PqJNc9KVIZE",
        songAutoPlay: false,
        songAutoLoop: false,
        onCreate:
          function(songleWidget)
          {
            console.log("status: " + songleWidget.status);
          },
        onError:
          function(songleWidget)
          {
            console.log("status: " + songleWidget.status);
          },
        onReady:
          function(songleWidget)
          {
            console.log("Hello,Songle Widget!!");
          }
      }));
  }

findSongleWidgets

ページ内の制御可能な Songle Widget を検索します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var songleWidgets = SongleWidgetAPI.findSongleWidgets();
    songleWidgets[ 0 ].play(); // Start playing song.
  }

findSongleWidgetsByAPI

ページ内の制御可能な Songle Widget を dataset.api から検索します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var songleWidgets = SongleWidgetAPI.findSongleWidgetsByAPI(songleWidget.dataset.api);
    songleWidgets[ 0 ].play(); // Start playing song.
  }

findSongleWidgetsByURL

ページ内の制御可能な Songle Widget を dataset.url から検索します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var songleWidgets = SongleWidgetAPI.findSongleWidgetsByURL(songleWidget.dataset.url);
    songleWidgets[ 0 ].play(); // Start playing song.
  }

findSongleWidgetsByMode

ページ内の制御可能な Songle Widget を mode から検索します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var songleWidgets = SongleWidgetAPI.findSongleWidgetsByMode(songleWidget.mode);
    songleWidgets[ 0 ].play(); // Start playing song.
  }

findSongleWidgetsByUUID

ページ内の制御可能な Songle Widget を uuid から検索します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var songleWidgets = SongleWidgetAPI.findSongleWidgetsByUUID(songleWidget.uuid);
    songleWidgets[ 0 ].play(); // Start playing song.
  }

findSongleWidgetsByVideoID

ページ内の制御可能な Songle Widget を videoID から検索します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var songleWidgets = SongleWidgetAPI.findSongleWidgetsByVideoID(songleWidget.videoID);
    songleWidgets[ 0 ].play(); // Start playing song.
  }

findPrevRepeatSegmentRepeatBy

指定時刻より前に対して、指定範囲の最も近い繰り返し区間を探します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var chorusSegmentRepeat
      = SongleWidgetAPI.findPrevRepeatSegmentRepeatBy(songleWidget, {
        position: songleWidget.position.milliseconds,
        repeatSegmentIndexA: 0,
        repeatSegmentIndexB: 0
      });

    if(chorusSegmentRepeat)
      songleWidget.seekTo(chorusSegmentRepeat.start); // Seek to prev chorus segment.
  }

findNextRepeatSegmentRepeatBy

指定時刻より後に対して、指定範囲の最も近い繰り返し区間を探します。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    var chorusSegmentRepeat
      = SongleWidgetAPI.findNextRepeatSegmentRepeatBy(songleWidget, {
        position: songleWidget.position.milliseconds,
        repeatSegmentIndexA: 0,
        repeatSegmentIndexB: 0
      });

    if(chorusSegmentRepeat)
      songleWidget.seekTo(chorusSegmentRepeat.start); // Seek to next chorus segment.
  }

mergeRepeatSegments

指定範囲の繰り返し区間をマージします。

window.onSongleWidgetReady =
  function(apiKey, songleWidget)
  {
    SongleWidgetAPI.mergeRepeatSegments(songleWidget, {
      repeatSegmentIndexA: 0,
      repeatSegmentIndexB: 5
    }); // [ repeat, repeat, repeat, ... ]
  }

millisecondsToSeconds

ミリ秒から秒に変換します。

console.log(SongleWidgetAPI.millisecondsToSeconds(60000));

millisecondsToMinutes

ミリ秒から分に変換します。

console.log(SongleWidgetAPI.millisecondsToMinutes(60000));

secondsToMilliseconds

秒からミリ秒に変換します。

console.log(SongleWidgetAPI.secondsToMilliseconds(1.0));

minutesToMilliseconds

分からミリ秒に変換します。

console.log(SongleWidgetAPI.minutesToMilliseconds(1.0));

version

バージョン情報を返します。

console.log(SongleWidgetAPI.version);

/api/v1/song.{json|xml}

楽曲の情報を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/beat.{json|xml}

拍に関する音楽地図を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
revision音楽地図のバージョンを指定します。0No
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/beat_revisions.{json|xml}

拍に関する音楽地図のバージョン一覧を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/chord.{json|xml}

和音に関する音楽地図を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
revision音楽地図のバージョンを指定します。0No
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/chord_revisions.{json|xml}

和音に関する音楽地図のバージョン一覧を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/melody.{json|xml}

メロディに関する音楽地図を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
revision音楽地図のバージョンを指定します。0No
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/melody_revisions.{json|xml}

メロディに関する音楽地図のバージョン一覧を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/chorus.{json|xml}

サビに関する音楽地図を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
revision音楽地図のバージョンを指定します。0No
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/chorus_revisions.{json|xml}

サビに関する音楽地図のバージョン一覧を取得します。

リクエスト
パラメータ名説明デフォルト値必須
url配信元サイトの URL を指定します。""Yes
レスポンス
ステータス説明
200OK
404登録されていない楽曲です。
500不明なエラーが発生しました。
サンプル

サンプルリクエスト

/api/v1/song/search.{json|xml}

楽曲を検索します。

リクエスト
パラメータ名説明デフォルト値必須
q検索文字列を指定します。""Yes
レスポンス
ステータス説明
200OK
500不明なエラーが発生しました。
サンプル

サンプルリクエスト