-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPiano.cs
executable file
·101 lines (77 loc) · 2.55 KB
/
Piano.cs
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Media.Media3D;
using Sanford.Multimedia.Midi;
using System.Threading;
using System.Windows.Forms;
namespace PianoKeyboard
{
class Piano
{
public void Send(ChannelMessage message)
{
int LowNoteID = 0;
int HighNoteID = 87;
Byte b ;
if (message.Command == ChannelCommand.NoteOn &&
message.Data1 >= LowNoteID && message.Data1 <= HighNoteID)
{
b = (byte) (message.Data1 -21) ;
KeyDown(b);
}
else if (message.Command == ChannelCommand.NoteOff &&
message.Data1 >= LowNoteID && message.Data1 <= HighNoteID)
{
b = (byte) (message.Data1 - 21);
KeyUp(b);
}
}
private List<PianoKey> _PianoKeys = new List<PianoKey>();
public List<PianoKey> PianoKeys
{
get { return _PianoKeys; }
set { _PianoKeys = value; }
}
public Piano(Viewport3D mainViewport, float whiteKeyWidth,float keyGap,float blackKeyWidth,float keyLength,float keyHeight,float blackKeyLengthRatio)
{
float runningTotalOrigin = 0;
for (byte i = 0; i < 88; i++)
{
PianoKey pk = new PianoKey(mainViewport, i, runningTotalOrigin, keyLength, keyHeight, whiteKeyWidth);
_PianoKeys.Add(pk);
if ( !pk.IsNextKeyBlack )
{
runningTotalOrigin = runningTotalOrigin + whiteKeyWidth + keyGap;
}
}
}
public void KeyDown(byte i)
{
_PianoKeys[i].KeyDown = true;
_PianoKeys[i].Draw(null);
}
public void KeyUp(byte i)
{
_PianoKeys[i].KeyDown = false;
_PianoKeys[i].Draw(null);
}
public void Draw(Viewport3D mainViewport)
{
foreach (PianoKey pk in _PianoKeys)
{
pk.Draw(mainViewport);
}
}
}
}