alsa-midi-0.3: examples/PlayNote.hs
module Main where
import qualified Sound.ALSA.Sequencer as SndSeq
import qualified Sound.ALSA.SequencerFFI as SndSeqFFI
import Control.Exception (bracket)
main :: IO ()
main =
bracket
(SndSeq.createClient SndSeqFFI.openOutput "note player")
SndSeq.deleteClient $
\ client ->
do port <- SndSeq.createOutputPort client "play note"
let ev =
SndSeqFFI.Event {
SndSeqFFI.typ = SndSeqFFI.EventNoteOn,
SndSeqFFI.tag = 0,
SndSeqFFI.queue = SndSeqFFI.queueDirect,
SndSeqFFI.time = SndSeqFFI.TimeStampTick (SndSeqFFI.TickTime 0),
SndSeqFFI.timeMode = SndSeqFFI.TimeModeRelative,
SndSeqFFI.eventLength = SndSeqFFI.EventLengthFixed,
SndSeqFFI.priority = SndSeqFFI.PriorityNormal,
SndSeqFFI.source = SndSeq.portAddress client port,
SndSeqFFI.dest = SndSeq.numAddress 128 0,
SndSeqFFI.eventData = SndSeqFFI.Note {
SndSeqFFI.noteChannel = 0,
SndSeqFFI.notePitch = 49,
SndSeqFFI.noteVelocity = 64,
SndSeqFFI.noteOffVelocity = 64,
SndSeqFFI.noteDuration = 0}
}
SndSeq.sendPlainEvent client ev
SndSeq.drainOutput client