1
- var monoSynth ;
2
1
var polySynth ;
3
- var note ;
4
- var octave = 0 ;
2
+ var octave ;
5
3
6
4
var keysDown = { } ;
5
+ var colors = { } ;
6
+ var keys = { } ;
7
+ var notes = { } ;
7
8
9
+ var description ;
8
10
function setup ( ) {
9
- // monoSynth = new p5.MonoSynth();
10
- // monoSynth.loadPreset('punchyBass');
11
11
12
- polySynth = new p5 . PolySynth ( p5 . MonoSynth , 4 ) ;
12
+ polySynth = new p5 . PolySynth ( p5 . MonoSynth , 8 ) ;
13
+ stroke ( 0 ) ;
14
+ for ( var i = 0 ; i < 17 ; i ++ ) {
15
+ if ( i !== 11 && i !== 15 ) {
16
+ colors [ i ] = [ color ( 255 ) , false ] ;
17
+ }
18
+ }
19
+
20
+ keys = { 'A' :60 , 'W' :61 , 'S' :62 , 'E' :63 , 'D' :64 , 'F' :65 , 'T' :66 , 'G' :67 ,
21
+ 'Y' :68 , 'H' :69 , 'U' :70 , 'J' :71 , 'K' :72 , 'O' :73 , 'L' :74 } ;
22
+ notes = { 60 :0 , 62 :1 , 64 :2 , 65 :3 , 67 :4 , 69 :5 , 71 :6 , 72 :7 , 74 :8 ,
23
+ 61 : 9 , 63 :10 , 66 :12 , 68 :13 , 70 :14 , 73 :16 } ;
24
+ octave = 0 ;
25
+
26
+ description = createP ( 'p5.PolySynth is a handler class for monophonic extensions ' +
27
+ 'of the p5.AudioVoice class. Use the computer keyboard to play notes on ' +
28
+ 'the piano roll. Use UP_ARROW and DOWN_ARROW to change octave' ) ;
29
+ }
13
30
31
+ function draw ( ) {
32
+ background ( 255 ) ;
33
+ createCanvas ( 800 , 600 ) ;
34
+
35
+ //draw white keys
36
+ for ( var i = 0 ; i < 9 ; i ++ ) {
37
+ fill ( colors [ i ] [ 0 ] ) ;
38
+ rect ( 50 * i , 0 , 50 , 230 ) ;
39
+ }
40
+ //draw black keys
41
+ for ( var i = 9 ; i < 17 ; i ++ ) {
42
+ if ( i !== 11 && i !== 15 ) {
43
+ fill ( colors [ i ] [ 0 ] ) ;
44
+ rect ( 50 * ( i - 8 ) - 12.5 , 0 , 25 , 150 ) ;
45
+ }
46
+ }
47
+
14
48
}
15
49
16
50
function keyPressed ( ) {
@@ -20,9 +54,11 @@ function keyPressed() {
20
54
} else if ( keyCode === DOWN_ARROW ) {
21
55
octave -= 12 ;
22
56
}
23
- else {
24
- polySynth . noteAttack ( keyToMidi ( ) + octave ) ;
25
-
57
+ else if ( keyToMidi ( ) && keysDown [ key ] !== true ) {
58
+ polySynth . noteAttack ( keyToMidi ( ) + octave ) ;
59
+ var index = notes [ keyToMidi ( ) ] ;
60
+ colors [ index ] [ 1 ] = ! colors [ index ] [ 1 ] ;
61
+ colors [ index ] [ 1 ] ? colors [ index ] [ 0 ] = color ( random ( 255 ) , random ( 255 ) , random ( 255 ) ) : colors [ index ] [ 0 ] = color ( 255 ) ;
26
62
if ( keysDown [ key ] === undefined ) {
27
63
keysDown [ key ] = true ;
28
64
}
@@ -33,39 +69,15 @@ function keyReleased() {
33
69
Object . keys ( keysDown ) . forEach ( function ( key ) {
34
70
if ( ! keyIsDown ( key ) ) {
35
71
polySynth . noteRelease ( keyToMidi ( key ) + octave ) ;
72
+ var index = notes [ keyToMidi ( key ) ] ;
73
+ colors [ index ] [ 1 ] = ! colors [ index ] [ 1 ] ;
74
+ colors [ index ] [ 1 ] ? colors [ index ] [ 0 ] = color ( random ( 255 ) , random ( 255 ) , random ( 255 ) ) : colors [ index ] [ 0 ] = color ( 255 ) ;
36
75
delete keysDown [ key ] ;
37
76
}
38
77
} ) ;
39
78
}
40
79
41
-
42
80
function keyToMidi ( keyboard ) {
43
81
var thisKey = typeof keyboard === 'undefined' ? key : keyboard
44
- switch ( thisKey ) {
45
- case 'A' :
46
- return 60 ;
47
-
48
- case 'S' :
49
- return 62 ;
50
-
51
- case 'D' :
52
- return 64 ;
53
-
54
- case 'F' :
55
- return 65 ;
56
-
57
- case 'G' :
58
- return 67 ;
59
-
60
- case 'H' :
61
- return 69 ;
62
-
63
- case 'J' :
64
- return 71 ;
65
-
66
- case 'K' :
67
- return 72 ;
68
-
69
- }
70
-
82
+ return keys [ thisKey ] ;
71
83
}
0 commit comments