]> Git — Sourcephile - tmp/julm/arpeggigon.git/blob - Reactogon/Reactimation.hs
Reactogon acting as a simple “pass-through” MIDI device.
[tmp/julm/arpeggigon.git] / Reactogon / Reactimation.hs
1 {-# LANGUAGE Arrows #-}
2
3 module Reactimation where
4
5 import Data.Map (Map)
6 import qualified Data.Map as M
7 import FRP.Yampa
8 import Control.Concurrent.MVar
9
10 import MIDI
11 import Arpeggiated
12
13 mainReact :: IO ()
14 mainReact = reactimate (initialize inRef) (sensing synthRef) actuation mainSF
15
16 initialize :: MVar EventQueue -> IO EventQueue
17 initialize = readMVar
18
19 sensing :: MVar (SynthState)
20 -> MVar (Map Time a)
21 -> Bool
22 -> IO (DTime, Maybe (Map Time a))
23 sensing synthRef inRef _ = do
24 input <- readMVar inref
25 synth <- readMVar synthRef
26 let dt = (fromIntegral $ rate synth)/(fromIntegral $ outBuffSize synth)
27 return (dt, Just input)
28
29
30 actuation = undefined
31
32 mainSF :: (Message a) => SF (Map Time a) (Map Time a)
33 mainSF = identity