Songle Widget API (version 1)
Summary
Songle Widget API allows the programmer to create and control Songle Widgets by writing a simple piece of JavaScript code.
1. Basics
By inserting the script tag and adding data-api and data-url attributes to any block elements, Songle Widgets are automatically initialized upon page loading.
A. Embed by HTML Code
<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. Embed by JavaScript Code
<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);
}
Since data-api attribute of embed code is used to distinguish each Songle Widget, its value is recommended to be unique for each widget.
2. Hello,Songle Widget!!
In the following example, a pop-up dialog appears when Songle Widget API is ready to be used.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
console.log("Hello,Songle Widget!!");
}
3. Example
Songle Widget API enables your program to react to a music-related event (such as beats and chords) by using the event handler of JavaScript.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.on("beatPlay",
function(e)
{
switch(e.beat.position)
{
case 1:
// You can write code for the 1st beat ...
console.log("1st beat");
break;
case 2:
// You can write code for the 2nd beat ...
console.log("2nd beat");
break;
case 3:
// You can write code for the 3rd beat ...
console.log("3rd beat");
break;
case 4:
// You can write code for the 4th beat ...
console.log("4th beat");
break;
}
});
songleWidget.play(); // Start playing song.
}
動作要件
| Web browser | Version |
|---|---|
| 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 |
| Option name | Explanation | Default value | Required? |
|---|---|---|---|
data-api | Specifies unique string when using the API. | "" | No |
data-url | Specifies the URL of the original song or video. (e.g. www.youtube.com/watch?v=PqJNc9KVIZE) | "" | Yes |
data-api-create-callback-name | Specifies the name of the callback method, called when the Songle Widget DOM element is created. | "onSongleWidgetCreate" | No |
data-api-error-callback-name | Specifies the name of the callback method, called when the initialization of the API fails. | "onSongleWidgetError" | No |
data-api-ready-callback-name | Specifies the name of the callback method, called when the initialization of the API succeeds. | "onSongleWidgetReady" | No |
data-api-beat-auto-reload | Enables auto-update of the beat (pulse) information when 1 is specified. | "0" | No |
data-api-chord-auto-reload | Enables auto-update of the chord information when 1 is specified. | "0" | No |
data-api-melody-auto-reload | Enables auto-update of the melody information when 1 is specified. | "0" | No |
data-api-chorus-auto-reload | Enables auto-update of the chorus part information when 1 is specified. | "0" | No |
data-api-beat-disabled | Skips loading the beat (pulse) information when 1 is specified. | "0" | No |
data-api-chord-disabled | Skips loading the chord information when 1 is specified. | "0" | No |
data-api-melody-disabled | Skips loading the melody information when 1 is specified. | "0" | No |
data-api-chorus-disabled | Skips loading the chorus part information when 1 is specified. | "0" | No |
data-api-beat-revision | Forces the widget to load the specified revision of the beat (pulse) information. If 0 is specified, load the newest revision. | "0" | No |
data-api-chord-revision | Forces the widget to load the specified revision of the chord information. If 0 is specified, load the newest revision. | "0" | No |
data-api-melody-revision | Forces the widget to load the specified revision of the melody information. If 0 is specified, load the newest revision. | "0" | No |
data-api-chorus-revision | Forces the widget to load the specified revision of the chorus part information. If 0 is specified, load the newest revision. | "0" | No |
data-song-auto-play | Enables auto-play (automatically starts playing the music or video) if 1 is specified. This option is only available for a YouTube video and MP3 file. | "0" | No |
data-song-auto-loop | Enables auto-loop (automatically restarts playing the music or video when reaching its end) if 1 is specified. This option is only available for a YouTube video and MP3 file. | "0" | No |
data-song-start-at | Specifies the starting position of playing the music or video. [seconds] If chorus is specified, playing starts at the first chorus part highlighted in orange.If repeat is specified, playing starts at the first repeat segment highlighted in blue. | "0" | No |
data-song-volume | Specifies the initial volume. [0 - 100] | "auto" | No |
data-songle-widget-ctrl | Shows the playback control if 1 is specified. | "1" | No |
data-songle-widget-ctrl-enter-color | Specifies the color of the playback control when the mouse is hoverred. | "#e17" | No |
data-songle-widget-ctrl-leave-color | Specifies the color of the playback control when the mouse is left. | "#000" | No |
data-songle-widget-ctrl-link-color | Specifies the color of the information text. | "#e17" | No |
data-songle-widget-size-w | Specifies the width of the Songle Widget. [px] If auto is specified, the widget automatically fits to the parent element. | "275" | No |
data-songle-widget-size-h | Specifies the height of the Songle Widget. [px] If auto is specified, the widget automatically fits to the parent element. | "100" | No |
data-video-player-size-w | Specifies the width of the video player. [px] If auto is specified, the player automatically fits to the parent element. | "275" | No |
data-video-player-size-h | Specifies the height of the video player. [px] If auto is specified, the player automatically fits to the parent element. | "155" | No |
data-nn-transparent | If 1 is specified, enables wmode. This option is only available for Niconico videos. | "0" | No |
data-yt-ctrl | If 1 is specified, shows playback controls of the video player. This option is only available for YouTube videos. | "0" | No |
data-yt-info | If 1 is specified, shows detailed information of the video player. This option is only available for YouTube videos. | "0" | No |
data-yt-quality | Specifies the quality of the video. This option is only available for YouTube videos. | "small" | No |
Executed when a DOM element of a Songle Widget is instantiated. (The method needs to be defined prior to loading Songle Widget library.)
|
Status code (Type:Number) |
Explanation |
|---|---|
| - | This status code is reserved for future usage. |
window.onSongleWidgetCreate =
function(apiKey, songleWidget)
{
console.log("status: " + songleWidget.status);
}
Executed when a Songle Widget fails to initialize. (The method needs to be defined prior to loading Songle Widget library.)
|
Status code (Type:Number) |
Explanation |
|---|---|
| 100 | Original song is deleted and could not be embedded. |
| 101 | Original song is not allowed to be embedded in an external website. |
| 200 | Music structure loading has been suspended. |
| 201 | Music structure could not be loaded. |
window.onSongleWidgetError =
function(apiKey, songleWidget)
{
console.log("status: " + songleWidget.status);
}
Executed when a Songle Widget has been successfully initialized. (The method needs to be defined prior to loading Songle Widget library.)
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
console.log("Hello,Songle Widget!!");
}
dataset.api
Returns the value of data-api provided to embed code.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
console.log(songleWidget.dataset.api);
}
dataset.url
Returns the value of data-url provided to embed code.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
console.log(songleWidget.dataset.url);
}
mode
Returns the execution mode.
|
Execution mode (Type:String) |
Explanation |
|---|---|
mp3
|
Music player mode |
nn-video
|
Video player mode (Niconico video) |
yt-video
|
Video player mode (YouTube) |
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
switch(songleWidget.mode)
{
case SongleWidgetAPI.MP3_MODE: // "mp3"
console.log("Songle Widget is mp3 mode.");
break;
case SongleWidgetAPI.NN_VIDEO_MODE: // "nn-video"
console.log("Songle Widget is nn-video mode.");
break;
case SongleWidgetAPI.YT_VIDEO_MODE: // "yt-video"
console.log("Songle Widget is yt-video mode.");
break;
}
}
uuid
Returns the UUID of the Songle Widget.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
console.log(songleWidget.uuid);
}
videoID
Returns the video ID. (only available when hosting Niconico and YouTube videos)
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
console.log(songleWidget.videoID);
}
isPlaying
Returns true when the status is playing.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
if(songleWidget.isPlaying)
console.log("Songle Widget is playing now.");
}
, 1000 / 30); // 30 [FPS]
}
isPaused
Returns true when the status is paused.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
if(songleWidget.isPaused)
console.log("Songle Widget is paused now.");
}
, 1000 / 30); // 30 [FPS]
}
isStopped
Returns true when the status is stopped.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
if(songleWidget.isStopped)
console.log("Songle Widget is stopped now.");
}
, 1000 / 30); // 30 [FPS]
}
isSeeking
Returns true when the status is seeking.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
if(songleWidget.isSeeking)
console.log("Songle Widget is seeking now.");
}
, 1000 / 30); // 30 [FPS]
}
bpm
Returns the current tempo.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.bpm + " [bpm]");
}
, 1000 / 30); // 30 [FPS]
}
currentBeat
Returns the current pulse.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.currentBeat);
}
, 1000 / 30); // 30 [FPS]
}
currentChord
Returns the current chord.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.currentChord);
}
, 1000 / 30); // 30 [FPS]
}
currentNote
Returns the current note.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.currentNote);
}
, 1000 / 30); // 30 [FPS]
}
currentChorus / currentChorusSegment
Returns the current chorus (highlighted in orange).
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.currentChorusSegment);
}
, 1000 / 30); // 30 [FPS]
}
currentRepeat / currentRepeatSegment
Returns the current repeating segment (highlighted in orange or blue).
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.currentRepeatSegment);
}
, 1000 / 30); // 30 [FPS]
}
isPlayingChorus / isPlayingChorusSegment
Returns true if the chorus part is being played.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.isPlayingChorusSegment);
}
, 1000 / 30); // 30 [FPS]
}
isPlayingRepeat / isPlayingRepeatSegment
Returns true if the repeating segment is being played.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.isPlayingRepeatSegment);
}
, 1000 / 30); // 30 [FPS]
}
duration
Returns the duration of the music.
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 / 30); // 30 [FPS]
}
position
Returns the current playback position of the music.
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 / 30); // 30 [FPS]
}
loadedRatio
Returns the proportion of music being loaded. [0 to 1]
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.loadedRatio * 100 + " [%]");
}
, 1000 / 30); // 30 [FPS]
}
playedRatio
Returns the proportion of music being played.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
setInterval(
function()
{
console.log(songleWidget.playedRatio * 100 + " [%]");
}
, 1000 / 30); // 30 [FPS]
}
volume
Returns the current volume; set the volume.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.volume = SongleWidgetAPI.MIN_VOLUME; // Min volume.
songleWidget.volume = SongleWidgetAPI.MAX_VOLUME; // Max volume.
songleWidget.volume *= 0.9; // - 10 [%]
songleWidget.volume *= 1.1; // + 10 [%]
}
song
Returns the music structure.
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
Callback functions sometimes fail to be called in a timely manner. This typically happens when there are too many beats (pulses) in a short amount of time. Shortening the polling interval (default 200 milliseconds) could potentially solve the issue.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.eventPollingInterval = 1; // 1 [ms]
}
beatEventPriority
Specifies the priority of event detection for beats (pulses). The default value is 3. Setting a larger value results in the higher priority.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.beatEventPriority = 3;
}
beatEventTimingOffset
Specifies the timing offset for calling beat (pulse) event callbacks. The default value is -175 milliseconds.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.beatEventTimingOffset = -175; // -175 [ms]
}
chordEventPriority
Specifies the priority of event detection for chords. The default value is 2. Setting a larger value results in the higher priority.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.chordEventPriority = 2;
}
chordEventTimingOffset
Specifies the timing offset for calling chord event callbacks. The default value is -175 milliseconds.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.chordEventTimingOffset = -175; // -175 [ms]
}
noteEventPriority
Specifies the priority of event detection for melodies. The default value is 1. Setting a larger value results in the higher priority.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.noteEventPriority = 1;
}
noteEventTimingOffset
Specifies the timing offset for calling melody event callbacks. The default value is -175 milliseconds.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.noteEventTimingOffset = -175; // -175 [ms]
}
chorusSegmentEventPriority
Specifies the priority of event detection for chorus parts (highlighted in orange). The default value is 5. Setting a larger value results in the higher priority.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.chorusSegmentEventPriority = 5;
}
chorusSegmentEventTimingOffset
Specifies the timing offset for calling chorus part (highlighted in orange) event callbacks. The default value is -175 milliseconds.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.chorusSegmentEventTimingOffset = -175; // -175 [ms]
}
repeatSegmentEventPriority
Specifies the priority of event detection for repeating segments. The default value is 4. Setting a larger value results in the higher priority.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.repeatSegmentEventPriority = 4;
}
repeatSegmentEventTimingOffset
Specifies the timing offset for calling repeating segment event callbacks. The default value is -175 milliseconds.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.repeatSegmentEventTimingOffset = -175; // -175 [ms]
}
on(trapName, trapFunction, options)
Bind an event listener to the specified event type.
|
Event (Type:String) |
Synonym (Type:String) |
Explanation |
|---|---|---|
beatEnter
|
beatPlay
|
Called at the beginning of a beat (pulse). |
beatLeave
|
- | Called at the end of a beat (pulse). |
chordEnter
|
chordPlay
|
Called at the beginning of a chord event. |
chordLeave
|
- | Called at the end of a chord event. |
noteEnter
|
notePlay
|
Called at the beginning of a melody event. |
noteLave
|
- | Called at the end of a melody event. |
chorusSegmentEnter
|
chorusEnter
|
Called at the beginning of a chorus part highlighted in orange. |
chorusSegmentLeave
|
chorusLeave
|
Called at the end of a chorus part highlighted in orange. |
repeatSegmentEnter
|
repeatEnter
|
Called at the beginning of a repeat segment highlighted in orange or blue. |
repeatSegmentLeave
|
repeatLeave
|
Called at the end of a repeat segment highlighted in orange or blue. |
reload
|
- | Called when the music structure information is updated. |
remove
|
- | Called when the music structure information is deleted. |
play
|
- | Called when the playback begins. |
pause
|
- | Called when the playback is paused. |
stop
|
- | Called when the playback is stopped. |
seek
|
- | Called when the playback position is changed. |
loadingProgress
|
- | Called when there is a progress in loading the music or video. |
playingProgress
|
- | Called when there is a progress in playing the music or video. |
finish
|
- | Called when the playback reaches the end. |
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(trapName)
Removes an event listener for the specified event type.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.off("beatPlay");
songleWidget.off("chordPlay");
songleWidget.off("notePlay");
songleWidget.off("chorusEnter");
songleWidget.off("repeatEnter");
}
play()
Start playing the music or video.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.play();
}
pause()
Pause playing the music or video.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.pause();
}
stop()
Stop playing the music or video.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.stop();
}
seekTo(milliseconds)
Moves the current playback position to the specified time.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.seekTo(SongleWidgetAPI.secondsToMilliseconds(30)); // Seek to 30 seconds.
}
seekToPrevChorus()
Moves the current playback position to the beginning of the previous closest chorus part.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.seekToPrevChorus();
}
seekToNextChorus()
Moves the current playback position to the beginning of the next closest chorus part.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.seekToNextChorus();
}
seekToPrevRepeat()
Moves the current playback position to the beginning of the previous closest repeat segment.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.seekToPrevRepeat();
}
seekToNextRepeat()
Moves the current playback position to the beginning of the next closest repeat segment.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.seekToNextRepeat();
}
setAllEventTimingOffset(milliseconds)
Specifies the timing offset for calling all event callbacks. The default value is -175 milliseconds.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.setAllEventTimingOffset(-175); // -175 [ms]
}
remove()
Removes the Songle Widget and releases all resources allocated for the widget.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.remove();
}
computeAverageVolume(songleWidget)
Calculate the average volume of the song.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
songleWidget.volume = SongleWidgetAPI.computeAverageVolume(songleWidget);
}
computeOffsetFromRepeatSegmentBy(songleWidget, options)
Calculate the offset time in milliseconds before the specified repeat segment.
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(options)
Create a Songle Widget instance.
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()
Look for a Songle Widget within the current web page.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
var songleWidgets = SongleWidgetAPI.findSongleWidgets();
songleWidgets[ 0 ].play(); // Start playing song.
}
findSongleWidgetsByAPI(api)
Look for a Songle Widget within the current web page by specifying dataset.api.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
var songleWidgets = SongleWidgetAPI.findSongleWidgetsByAPI(songleWidget.dataset.api);
songleWidgets[ 0 ].play(); // Start playing song.
}
findSongleWidgetsByURL(url)
Look for a Songle Widget within the current web page by specifying dataset.url.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
var songleWidgets = SongleWidgetAPI.findSongleWidgetsByURL(songleWidget.dataset.url);
songleWidgets[ 0 ].play(); // Start playing song.
}
findSongleWidgetsByMode(mode)
Look for Songle Widgets within the current web page by specifying mode.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
var songleWidgets = SongleWidgetAPI.findSongleWidgetsByMode(songleWidget.mode);
songleWidgets[ 0 ].play(); // Start playing song.
}
findSongleWidgetsByUUID(uuid)
Look for a Songle Widget within the current web page by specifying the UUID.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
var songleWidgets = SongleWidgetAPI.findSongleWidgetsByUUID(songleWidget.uuid);
songleWidgets[ 0 ].play(); // Start playing song.
}
findSongleWidgetsByVideoID(videoID)
Look for a Songle Widget within the current web page by specifying the videoID.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
var songleWidgets = SongleWidgetAPI.findSongleWidgetsByVideoID(songleWidget.videoID);
songleWidgets[ 0 ].play(); // Start playing song.
}
findPrevRepeatSegmentRepeatBy(songleWidget, options)
Look for the closest repeat segment before the specified position.
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(songleWidget, options)
Look for the closest repeat segment after the specified position.
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(songleWidget, options)
Merge two repeat segments.
window.onSongleWidgetReady =
function(apiKey, songleWidget)
{
SongleWidgetAPI.mergeRepeatSegments(songleWidget, {
repeatSegmentIndexA: 0,
repeatSegmentIndexB: 5
}); // [ repeat, repeat, repeat, ... ]
}
millisecondsToSeconds(milliseconds)
Convert the specified time from milliseconds to seconds.
console.log(SongleWidgetAPI.millisecondsToSeconds(60000));
millisecondsToMinutes(milliseconds)
Convert the specified time from milliseconds to minutes.
console.log(SongleWidgetAPI.millisecondsToMinutes(60000));
secondsToMilliseconds(seconds)
Convert the specified time from seconds to milliseconds.
console.log(SongleWidgetAPI.secondsToMilliseconds(1.0));
minutesToMilliseconds(minutes)
Convert the specified time from minutes to milliseconds.
console.log(SongleWidgetAPI.minutesToMilliseconds(1.0));
version
Returns the version number.
console.log(SongleWidgetAPI.version); // x.x.x
/api/v1/song.{json|xml}
Retrieves the song information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/beat.{json|xml}
Retrieves the song structure regarding the beat information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
| revision_id | Returns the version number of the song structure. | 0 | No |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/beat_revisions.{json|xml}
Returns the list of revisions of the song structure regarding the beat information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/chord.{json|xml}
Retrieves the song structure regarding the chord information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
| revision_id | Returns the version number of the song structure. | 0 | No |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/chord_revisions.{json|xml}
Returns the list of revisions of the song structure regarding the chord information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/melody.{json|xml}
Retrieves the song structure regarding the melody information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
| revision_id | Returns the version number of the song structure. | 0 | No |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/melody_revisions.{json|xml}
Returns the list of revisions of the song structure regarding the melody information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/chorus.{json|xml}
Retrieves the song structure regarding the chorus information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
| revision_id | Returns the version number of the song structure. | 0 | No |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/song/chorus_revisions.{json|xml}
Returns the list of revisions of the song structure regarding the chorus information.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| url | Specifies the URL of the original song or video. | "" | Yes |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 404 | The song is not registered yet. |
| 500 | An unknown server error has occurred. |
Example
/api/v1/songs/search.{json|xml}
Search songs.
Request
| Parameter name | Explanation | Default value | Required? |
|---|---|---|---|
| q | Specifies the search query. | "" | Yes |
Response
| Status | Explanation |
|---|---|
| 200 | OK |
| 500 | An unknown server error has occurred. |