-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFaders.kt
143 lines (127 loc) · 5.37 KB
/
Faders.kt
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
140
141
142
143
@file:JvmName("Faders")
package com.harry1453.klaunchpad.examples
import com.harry1453.klaunchpad.api.Color
import com.harry1453.klaunchpad.api.Launchpad
import com.harry1453.klaunchpad.api.open
// Try changing this value to observe the different modes.
const val bipolarMode = true
@Suppress("ConstantConditionIf")
suspend fun main() {
val inputDeviceInfo = Launchpad.listMidiInputDevices()
.firstOrNull { it.name == "Launchpad MK2" } ?: error("Could not find the Launchpad's MIDI input!")
val outputDeviceInfo = Launchpad.listMidiOutputDevices()
.firstOrNull { it.name == "Launchpad MK2" } ?: error("Could not find the Launchpad's MIDI output!")
val launchpad = Launchpad.connectToLaunchpadMK2(inputDeviceInfo.open(), outputDeviceInfo.open())
Runtime.getRuntime().addShutdownHook(Thread { launchpad.close() })
val color1 = Color(0, 0, 255)
val color2 = Color(255, 100, 50)
val color3 = Color(0, 50, 255)
val color4 = Color(255, 50, 255)
val color5 = Color(0, 255, 0)
val color6 = Color(255, 50, 0)
val color7 = Color(200, 200, 255)
val color8 = Color(255, 0, 0)
val color9 = Color(0, 255, 255)
var fader0value: Byte = 15.toByte()
var fader1value: Byte = 31.toByte()
var fader2value: Byte = 47.toByte()
var fader3value: Byte = 63.toByte()
var fader4value: Byte = 79.toByte()
var fader5value: Byte = 95.toByte()
var fader6value: Byte = 111.toByte()
var fader7value: Byte = 127.toByte()
if (bipolarMode) {
fader0value = (fader0value - 63).toByte()
fader1value = (fader1value - 63).toByte()
fader2value = (fader2value - 63).toByte()
fader3value = (fader3value - 63).toByte()
fader4value = (fader4value - 63).toByte()
fader5value = (fader5value - 63).toByte()
fader6value = (fader6value - 63).toByte()
fader7value = (fader7value - 63).toByte()
}
var faderMode = true
fun faderValueToString(faderValue: Byte): String {
val value = faderValue.toString()
return when(value.length) {
1 -> " $value"
2 -> " $value"
else -> value
}
}
fun printFaderValues() {
print("\rFader 1: ${faderValueToString(fader0value)}, Fader 2: ${faderValueToString(fader1value)}, Fader 3: ${faderValueToString(fader2value)}, Fader 4: ${faderValueToString(fader3value)}, Fader 5: ${faderValueToString(fader4value)}, Fader 6: ${faderValueToString(fader5value)}, Fader 7: ${faderValueToString(fader6value)}, Fader 8: ${faderValueToString(fader7value)}")
}
fun exitFaderView() {
launchpad.exitFaderView()
launchpad.setPadLight(launchpad.getPad(4, 8), Color(0, 255, 0))
launchpad.setPadLight(launchpad.getPad(7, 8), Color(0, 0, 50))
faderMode = false
}
fun setupFaderView() {
launchpad.setupFaderView(mapOf(
0 to Pair(color1, fader0value),
1 to Pair(color2, fader1value),
2 to Pair(color3, fader2value),
3 to Pair(color4, fader3value),
4 to Pair(color5, fader4value),
5 to Pair(color6, fader5value),
6 to Pair(color7, fader6value),
7 to Pair(color8, fader7value)
), bipolar = bipolarMode)
launchpad.setPadLight(launchpad.getPad(4, 8), Color(0, 50, 0))
launchpad.setPadLight(launchpad.getPad(7, 8), Color(0, 0, 255))
// We can't do a bulk update because it bugs the launchpad (fader lights don't update)
(0..7).forEach {
val pad = launchpad.getPad(8, it) ?: return@forEach
launchpad.setPadLight(pad, color9)
}
faderMode = true
}
launchpad.setPadButtonListener { pad, pressed, _ ->
if (!faderMode && !(pad.gridY == 8 && (pad.gridX == 4 || pad.gridX == 7))) { // Don't update the mode buttons when not in fader mode
if (pressed) {
launchpad.setPadLight(pad, color5)
} else {
launchpad.clearPadLight(pad)
}
}
if (pressed) {
if (pad.gridX == 8) {
var faderValue = (pad.gridY * 127 / 7).toByte()
if (bipolarMode) faderValue = (faderValue - 63).toByte()
(0..7).forEach {
launchpad.updateFader(it, faderValue)
}
fader0value = faderValue
fader1value = faderValue
fader2value = faderValue
fader3value = faderValue
fader4value = faderValue
fader5value = faderValue
fader6value = faderValue
fader7value = faderValue
printFaderValues()
} else if (pad.gridX == 4 && pad.gridY == 8) { // Session Button
exitFaderView()
} else if (pad.gridX == 7 && pad.gridY == 8) { // Mixer Button
setupFaderView()
}
}
}
launchpad.setFaderUpdateListener { faderIndex, faderValue ->
when(faderIndex) {
0 -> fader0value = faderValue
1 -> fader1value = faderValue
2 -> fader2value = faderValue
3 -> fader3value = faderValue
4 -> fader4value = faderValue
5 -> fader5value = faderValue
6 -> fader6value = faderValue
7 -> fader7value = faderValue
}
printFaderValues()
}
setupFaderView()
printFaderValues()
}