diff options
author | Andrew Cady <d@jerkface.net> | 2014-01-17 11:02:52 -0500 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2014-01-17 11:04:04 -0500 |
commit | 6a7389a5e257f52dc45c5251207868e68041b759 (patch) | |
tree | b45654d35dc8965b44d90a0680f1594f675572f6 | |
parent | 0693006606d8e14754effcce75787014433117d6 (diff) |
save channel information in keysDown sets
-rw-r--r-- | AlsaSeq.hs | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -40,8 +40,10 @@ showPitch x = | |||
40 | let (octave, pitch) = Haskore.Basic.Pitch.fromInt $ fromIntegral x | 40 | let (octave, pitch) = Haskore.Basic.Pitch.fromInt $ fromIntegral x |
41 | in Haskore.Basic.Pitch.classFormat pitch (show octave) | 41 | in Haskore.Basic.Pitch.classFormat pitch (show octave) |
42 | 42 | ||
43 | -- TODO: don't filter percussion here. | ||
43 | pitchWords set = map showPitch $ pitchList set | 44 | pitchWords set = map showPitch $ pitchList set |
44 | pitchList set = map Event.unPitch $ Set.toList set | 45 | pitchList set = map Event.unPitch $ map (\ (c, n) -> n) $ filter (\ (Event.Channel c, n) -> c /= 20) $ Set.toList set |
46 | pitchLists set = map (\ (c, n) -> (Event.unChannel c, Event.unPitch n)) $ filter (\ (Event.Channel c, n) -> c /= 20) $ Set.toList set | ||
45 | 47 | ||
46 | prettyNote :: Event.Note -> String | 48 | prettyNote :: Event.Note -> String |
47 | prettyNote (Event.Note noteChannel noteNote noteVelocity noteOffVelocity noteDuration) = | 49 | prettyNote (Event.Note noteChannel noteNote noteVelocity noteOffVelocity noteDuration) = |
@@ -137,12 +139,12 @@ parseAlsaEvents h keysDown immediate = loop keysDown | |||
137 | Event.NoteEv Event.NoteOn n -> do | 139 | Event.NoteEv Event.NoteOn n -> do |
138 | immediate ev | 140 | immediate ev |
139 | if (Event.unVelocity (Event.noteVelocity n) == 0) then | 141 | if (Event.unVelocity (Event.noteVelocity n) == 0) then |
140 | loop (Set.delete (Event.noteNote n) keysDown) | 142 | loop (Set.delete (Event.noteChannel n, Event.noteNote n) keysDown) |
141 | else | 143 | else |
142 | loop (Set.insert (Event.noteNote n) keysDown) | 144 | loop (Set.insert (Event.noteChannel n, Event.noteNote n) keysDown) |
143 | Event.NoteEv Event.NoteOff n -> do | 145 | Event.NoteEv Event.NoteOff n -> do |
144 | immediate ev | 146 | immediate ev |
145 | loop (Set.delete (Event.noteNote n) keysDown) | 147 | loop (Set.delete (Event.noteChannel n, Event.noteNote n) keysDown) |
146 | _ -> loop keysDown | 148 | _ -> loop keysDown |
147 | 149 | ||
148 | forwardNoteEvent h q publicAddr ev = do | 150 | forwardNoteEvent h q publicAddr ev = do |