| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Sound.SC3.Lang.Control.Midi
Description
Trivial midi functions.
- b_join :: Bits a => a -> a -> a
- b_sep :: (Num t, Bits t) => t -> (t, t)
- data Midi_Message a
- = Chanel_Aftertouch a a
- | Control_Change a a a
- | Note_On a a a
- | Note_Off a a a
- | Polyphic_Key_Pressure a a a
- | Program_Change a a
- | Pitch_Bend a a
- | Unknown [a]
- data Control_Message a
- = All_Notes_Off a
- | All_Sound_Off a
- | Balance a a
- | Bank_Select a a
- | Breath_Controller a a
- | Expression_Controller a a
- | Foot_Controller a a
- | Local_Control a a
- | Modulation_Wheel a a
- | Mono_Mode_On a a
- | Omni_Mode_Off a
- | Omni_Mode_On a
- | Pan a a
- | Poly_Mode_On a
- | Portamento_On_Off a a
- | Portamento_Time a a
- | Reset_All_Controllers a a
- | Soft_Pedal_On_Off a a
- | Sostenuto_On_Off a a
- | Sustain_On_Off a a
- | Undefined
- control_message :: (Eq a, Num a) => (a, a, a) -> Control_Message a
- parse_b :: Integral n => Message -> [n]
- parse_c :: Integral n => Message -> [n]
- parse_m :: (Bits n, Integral n) => Message -> Midi_Message n
- type Node_Id = Int
- data KY a = KY (Map a Node_Id) Node_Id
- ky_init :: Node_Id -> KY a
- ky_alloc :: Ord a => KY a -> a -> (KY a, Node_Id)
- ky_free :: Ord a => KY a -> a -> (KY a, Node_Id)
- ky_get :: Ord a => KY a -> a -> Node_Id
- ky_all :: KY a -> [Node_Id]
- type Midi_Init_f st = UDP -> IO st
- type Midi_Recv_f st = UDP -> st -> Midi_Message Int -> IO st
- midi_act :: Midi_Recv_f st -> UDP -> st -> Message -> IO st
- run_midi :: Midi_Init_f st -> Midi_Recv_f st -> IO ()
- iterateM_ :: Monad m => st -> (st -> m st) -> m ()
Bits
b_join :: Bits a => a -> a -> a Source
Join two 7-bit values into a 14-bit value.
map (uncurry b_join) [(0,0),(0,64),(127,127)] == [0,8192,16383]
b_sep :: (Num t, Bits t) => t -> (t, t) Source
Inverse of b_join.
map b_sep [0,8192,16383] == [(0,0),(0,64),(127,127)]
Types
data Midi_Message a Source
Constructors
| Chanel_Aftertouch a a | |
| Control_Change a a a | |
| Note_On a a a | |
| Note_Off a a a | |
| Polyphic_Key_Pressure a a a | |
| Program_Change a a | |
| Pitch_Bend a a | |
| Unknown [a] |
Instances
| Eq a => Eq (Midi_Message a) | |
| Show a => Show (Midi_Message a) |
data Control_Message a Source
Control_Change midi messages have, in some cases, commonly
defined meanings.
Constructors
| All_Notes_Off a | |
| All_Sound_Off a | |
| Balance a a | |
| Bank_Select a a | |
| Breath_Controller a a | |
| Expression_Controller a a | |
| Foot_Controller a a | |
| Local_Control a a | |
| Modulation_Wheel a a | |
| Mono_Mode_On a a | |
| Omni_Mode_Off a | |
| Omni_Mode_On a | |
| Pan a a | |
| Poly_Mode_On a | |
| Portamento_On_Off a a | |
| Portamento_Time a a | |
| Reset_All_Controllers a a | |
| Soft_Pedal_On_Off a a | |
| Sostenuto_On_Off a a | |
| Sustain_On_Off a a | |
| Undefined |
Instances
| Eq a => Eq (Control_Message a) | |
| Show a => Show (Control_Message a) |
control_message :: (Eq a, Num a) => (a, a, a) -> Control_Message a Source
Control_Change midi messages may, in some cases, have commonly
defined meanings.
control_message (0,123,0) == All_Notes_Off 0
OSC
parse_c :: Integral n => Message -> [n] Source
Variant of parse_b that give status byte as low and high.
parse_m :: (Bits n, Integral n) => Message -> Midi_Message n Source
Variant of parse_c that constructs a Midi_Message.
SC3
Map of allocated Node_Ids. For a single input controller, key
events always arrive in sequence (ie. on->off), ie. for any key on
message we can allocate an ID and associate it with the key, an off
message can retrieve the ID given the key.
IO (midi-osc)
type Midi_Init_f st = UDP -> IO st Source
type Midi_Recv_f st = UDP -> st -> Midi_Message Int -> IO st Source
Midi_Recv_f is passed the SC3 connection, the user state, a
Midi_Message and, for Note_On and Note_Off messages, a
Node_Id.
midi_act :: Midi_Recv_f st -> UDP -> st -> Message -> IO st Source
Parse incoming midi messages and run Midi_Receiver.
run_midi :: Midi_Init_f st -> Midi_Recv_f st -> IO () Source
Connect to midi-osc and sc3, run initialiser, and then
receiver for each incoming message.