-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathviz.js
139 lines (126 loc) · 3.51 KB
/
viz.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// 再生したいメディアを指定
var media_url = "https://www.youtube.com/watch?v=msEN5bbIgbc";
// Tokenを指定(以下のURLからTokenを発行できます)
// http://api.songle.jp/user/
var accessToken = "YOUR_ACCESS_TOKEN";
var secretToken = "YOUR_SECRET_TOKEN";
var player;
// APIの準備が出来ると呼ばれる
window.onSongleWidgetAPIReady = function(SongleWidgetAPI){
window.SW = SongleWidgetAPI;
SW.System.defaultEndpointWebClientProtocol = "https:";
init();
}
window.init = function(){
if ( getUrlVars().master == "1" ) {
// masterの場合 (引数 master=1)
player = new SW.Player({
mediaElement: "div#widget" // プレイヤーを埋め込むDOMを指定
});
player.accessToken = accessToken;
player.secretToken = secretToken; // secretTokenをセットするとmasterになる
// 再生するメディアをセット
player.useMedia( media_url );
}
else {
// slaveの場合
player = new SW.Player();
player.accessToken = accessToken;
}
// slaveを同期させるプラグインを設定
player.addPlugin(new SW.Plugin.SongleSync());
// 利用するイベントのプラグインを設定
player.addPlugin(new SW.Plugin.Beat());
player.addPlugin(new SW.Plugin.Chorus());
player.addPlugin(new SW.Plugin.Chord());
// 各イベントに対応するアクションを設定
setBeatEvent();
setChordEvent();
setChorusEvent();
// masterの場合は動画を再生
if (getUrlVars().master == "1" ) {
// mediaReadyで動画が準備完了したら実行
player.on("mediaReady", function(){
// プレイヤー操作ボタン設定
setPlayerCtrl();
// 自動再生
setTimeout(function(){
player.play();
}, 1000);
})
}
}
// プレイヤー操作ボタン設定
window.setPlayerCtrl = function(){
// 再生
$("#widget_ctrl .play").click( function(){
player.play();
});
// 停止
$("#widget_ctrl .pause").click( function(){
player.pause();
});
// 先頭
$("#widget_ctrl .head").click( function(){
player.seekTo(0);
});
// サビ出し
$("#widget_ctrl .seekto_chorus").click( function(){
player.seekToNextChorusSectionItem()
});
$("#widget_ctrl").css({ display: "table" });
$(".memo").show();
}
// ビートでタイルの色を変える(cssで指定)
window.setBeatEvent = function(){
player.on( "beatEnter", function(e){
for(var i=1; i<=4; i++ ) {
li = $("#beats li.b" + i )
if (e.data.beat.number == i) {
li.addClass("current");
} else {
li.removeClass("current");
}
}
});
}
// コード左上に表示する
window.setChordEvent = function(){
player.on( "chordEnter", function(e){
if (e.data.chord.name != "N") {
$("#chord").text( e.data.chord.name );
} else {
$("#chord").text( "" );
}
});
}
// サビはビートの色を変更(cssで指定)し、右上に「サビ」と表示させる
window.setChorusEvent = function(){
player.on( "chorusSectionEnter", function(e){
$("#beats").addClass("chorus");
$("#chorus_alert").show();
});
player.on( "chorusSectionLeave", function(e){
$("#beats").removeClass("chorus");
$("#chorus_alert").hide();
});
}
// URLの引数を取得する関数
window.getUrlVars = function() {
var i, key, keySearch, len, p, param, val, vars;
vars = {};
param = location.search.substring(1).split('&');
for (i = 0, len = param.length; i < len; i++) {
p = param[i];
keySearch = p.search(/=/);
key = '';
if (keySearch !== -1) {
key = p.slice(0, keySearch);
val = p.slice(p.indexOf('=', 0) + 1);
if (key !== '') {
vars[key] = decodeURI(val);
}
}
}
return vars;
}