Skip to content

Commit 813cac2

Browse files
committed
UI+Canvas+Visualisation: canvasToggle/Render
1 parent 3b45d07 commit 813cac2

File tree

5 files changed

+75
-40
lines changed

5 files changed

+75
-40
lines changed

api/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
var loaded = false;
66

77
window.api = {
8-
version: "0.8.10",
8+
version: "0.8.11",
99
thumbnail: {}
1010
};
1111

api/visualisations.js

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@
44

55
var
66
that,
7-
requestId,
8-
jqOldVisu = dom.empty,
7+
obj,
8+
enable = false,
99
visu = {},
10+
jqOldVisu = dom.empty,
1011
selectedVisu = $.noop,
11-
analyser = api.audio.analyser,
12-
ctxAudio = api.audio.ctx,
13-
canvas = dom.screenCanvas[ 0 ],
14-
ctxCanvas = canvas.getContext( "2d" ),
15-
enable = false,
16-
frameInfo = {
17-
ctxCanvas: ctxCanvas,
18-
analyser: analyser
19-
}
12+
analyser = api.audio.analyser
2013
;
2114

15+
if ( analyser ) {
16+
analyser.fftSize = 4096;
17+
obj = {
18+
analyser: analyser,
19+
data: new Uint8Array( analyser.frequencyBinCount )
20+
}
21+
}
22+
2223
api.visualisations = that = {
2324
add: function( name, fn ) {
2425
visu[ name ] = fn;
@@ -29,40 +30,31 @@ api.visualisations = that = {
2930
return that;
3031
},
3132
select: function( name ) {
32-
selectedVisu = visu[ name ] || $.noop;
33-
jqOldVisu.removeClass( "selected" );
34-
jqOldVisu = dom.ctrlVisualList.find( "[data-name='" + name + "']" ).addClass( "selected" );
35-
return that;
36-
},
37-
enable: function() {
38-
function frame( timestamp ) {
39-
selectedVisu( frameInfo );
40-
requestId = requestAnimationFrame( frame );
33+
if ( selectedVisu !== visu[ name ] ) {
34+
selectedVisu = visu[ name ] || $.noop;
35+
jqOldVisu.removeClass( "selected" );
36+
jqOldVisu = dom.ctrlVisualList.find( "[data-name='" + name + "']" ).addClass( "selected" );
37+
if ( enable ) {
38+
that.toggle( true );
39+
}
4140
}
42-
if ( !ctxAudio ) {
43-
ui.visualisationsToggle( enable = false );
44-
api.error.throw( "WEBAUDIO" );
45-
} else if ( !enable ) {
46-
analyser.fftSize = 4096;
47-
frameInfo.data = new Uint8Array( analyser.frequencyBinCount );
48-
requestId = requestAnimationFrame( frame );
49-
ui.visualisationsToggle( enable = true );
50-
}
51-
return that;
52-
},
53-
disable: function() {
54-
if ( enable ) {
55-
ctxCanvas.clearRect( 0, 0, canvas.width, canvas.height );
56-
cancelAnimationFrame( requestId );
57-
}
58-
ui.visualisationsToggle( enable = false );
5941
return that;
6042
},
6143
toggle: function( b ) {
6244
if ( typeof b !== "boolean" ) {
6345
b = !enable;
6446
}
65-
return b ? that.enable() : that.disable();
47+
if ( b && !api.audio.ctx ) {
48+
b = false;
49+
api.error.throw( "WEBAUDIO" );
50+
}
51+
ui
52+
.canvasToggle( b )
53+
.canvasRender( b && selectedVisu, obj )
54+
.visualisationsToggle( b )
55+
;
56+
enable = b;
57+
return that;
6658
}
6759
};
6860

index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@
226226
<script src="ui/actionDesc.js"></script>
227227
<script src="ui/brightness.js"></script>
228228
<script src="ui/buffered.js"></script>
229+
<script src="ui/canvas.js"></script>
229230
<script src="ui/currentTimeDuration.js"></script>
230231
<script src="ui/fileDetach.js"></script>
231232
<script src="ui/fileSelect.js"></script>

main.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui/canvas.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"use strict";
2+
3+
(function() {
4+
5+
var
6+
requestId,
7+
jqCanvas = dom.screenCanvas,
8+
canvas = jqCanvas[ 0 ],
9+
ctx = canvas.getContext( "2d" )
10+
;
11+
12+
$.extend( ui, {
13+
canvasDisplay: false,
14+
canvasToggle: function( b ) {
15+
if ( typeof b !== "boolean" ) {
16+
b = !ui.canvasDisplay;
17+
}
18+
if ( b !== ui.canvasDisplay ) {
19+
ui.canvasDisplay = b;
20+
jqCanvas.toggle( b );
21+
}
22+
return ui;
23+
},
24+
canvasRender: function( fn, obj ) {
25+
function frame( timestamp ) {
26+
obj.timestamp = timestamp;
27+
fn( obj );
28+
requestId = requestAnimationFrame( frame );
29+
}
30+
ctx.clearRect( 0, 0, canvas.width, canvas.height );
31+
cancelAnimationFrame( requestId );
32+
if ( fn ) {
33+
obj = $.extend( obj, {
34+
ctxCanvas: ctx
35+
});
36+
requestId = requestAnimationFrame( frame );
37+
}
38+
return ui;
39+
}
40+
});
41+
42+
})();

0 commit comments

Comments
 (0)