-
Notifications
You must be signed in to change notification settings - Fork 0
/
Grooveshark.lua
119 lines (104 loc) · 2.51 KB
/
Grooveshark.lua
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
scriptId = 'com.exa.grooveshark'
description = [[
Grooveshark Contoller based on PaulBernhardt Slacker
No need for a plugin it uses the default Grooveshark shortcuts.
Controls:
- thumbToPinky, to enable controls (automatically locks)
- Wave left/right to next/prev tracks
- Fist to play/pause
]]
active = false
locked = true
appTitle = ""
ENABLED_TIMEOUT = 5200
UNLOCK_HOLD_DURATION = 400
unlocking = 0
function onForegroundWindowChange(app, title)
-- myo.debug("onForegroundWindowChange: " .. app .. ", " .. title)
local foundGrooveshark = string.match(title, "^Grooveshark") ~= nil
if (foundGrooveshark) then
appTitle = title
myo.debug("Grooveshark controls now active")
else
myo.debug("Grooveshark controls now inactive")
end
return foundGrooveshark or active
end
function activeAppName()
return appTitle
end
function onPoseEdge(pose, edge)
pose = conditionallySwapWave(pose)
if (edge == "on") then
if (pose == "thumbToPinky") then
unlocking = myo.getTimeMilliseconds()
--toggleLock()
elseif (not locked) then
myo.debug("onPoseEdge: " .. pose .. ": " .. edge)
if (pose == "waveOut") then
onWaveOut()
extendUnlock()
elseif (pose == "fist") then
onFist()
extendUnlock()
elseif (pose == "waveIn") then
onWaveIn()
extendUnlock()
elseif (pose == "fingersSpread") then
onFingersSpread()
extendUnlock()
end
end
end
end
function onPeriodic()
local now = myo.getTimeMilliseconds()
if (unlocking > 0 and now > unlocking + UNLOCK_HOLD_DURATION) then
toggleLock()
unlocking = 0
return
end
if not locked then
if (now - enabledSince) > ENABLED_TIMEOUT then
toggleLock()
end
end
end
function toggleLock()
locked = not locked
-- myo.vibrate("short")
if (not locked) then
-- Vibrate twice on unlock
myo.debug("Unlocked")
myo.vibrate("short")
enabledSince = myo.getTimeMilliseconds()
else
myo.debug("Locked")
end
end
function onWaveOut()
myo.debug("Next")
myo.keyboard("right_arrow","press","control")
end
function onWaveIn()
myo.debug("Previous")
myo.keyboard("left_arrow","press","control")
end
function onFist()
myo.debug("Play/Pause")
myo.keyboard("spacebar", "press")
end
function conditionallySwapWave(pose)
if myo.getArm() == "left" then
if pose == "waveIn" then
pose = "waveOut"
elseif pose == "waveOut" then
pose = "waveIn"
end
end
return pose
end
function extendUnlock()
local now = myo.getTimeMilliseconds()
enabledSince = now
end