Safe Haskell | Safe-Inferred |
---|
Channel messages
- data T = Cons {}
- data Body
- get :: C parser => Int -> Channel -> Int -> Fragile parser T
- getWithStatus :: C parser => Int -> Fragile (T parser) T
- put :: C writer => T -> writer
- putWithStatus :: C writer => T -> T writer
- data Channel
- fromChannel :: Channel -> Int
- toChannel :: Int -> Channel
- data Pitch
- fromPitch :: Pitch -> Int
- toPitch :: Int -> Pitch
- data Velocity
- fromVelocity :: Velocity -> Int
- toVelocity :: Int -> Velocity
- data Program
- fromProgram :: Program -> Int
- toProgram :: Int -> Program
- data Controller
- fromController :: Controller -> Int
- toController :: Int -> Controller
- decodeStatus :: Int -> (Int, Channel)
Documentation
Cons | |
|
get :: C parser => Int -> Channel -> Int -> Fragile parser TSource
Parse a MIDI Channel message. Note that since getting the first byte is a little complex (there are issues with running status), the code, channel and first data byte must be determined by the caller.
getWithStatus :: C parser => Int -> Fragile (T parser) TSource
Parse an event.
Note that in the case of a regular MIDI Event, the tag is the status,
and we read the first byte of data before we call get
.
In the case of a MIDIEvent with running status,
we find out the status from the parser
(it's been nice enough to keep track of it for us),
and the tag that we've already gotten is the first byte of data.
putWithStatus :: C writer => T -> T writerSource
This definition should be in Message.Channel, but this results in a cyclic import.
fromChannel :: Channel -> IntSource
fromVelocity :: Velocity -> IntSource
toVelocity :: Int -> VelocitySource
fromProgram :: Program -> IntSource
data Controller Source
We do not define Controller
as enumeration with many constructors,
because some controllers have multiple names and some are undefined.
It is also more efficient this way.
Thus you cannot use case
for processing controller types,
but you can use lookup
instead.
maybe (putStrLn "unsupported controller") putStrLn $ lookup ctrl $ (portamento, "portamento") : (modulation, "modulation") : []
toController :: Int -> ControllerSource
decodeStatus :: Int -> (Int, Channel)Source
for internal use