Skip to content

Commit

Permalink
etc
Browse files Browse the repository at this point in the history
  • Loading branch information
ejconlon committed Feb 6, 2024
1 parent b2847ee commit 6c6777d
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 51 deletions.
1 change: 1 addition & 0 deletions minipat-dirt/minipat-dirt.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ source-repository head

library
exposed-modules:
Minipat.Dirt.Attrs
Minipat.Dirt.Boot
Minipat.Dirt.Core
Minipat.Dirt.EStream
Expand Down
53 changes: 53 additions & 0 deletions minipat-dirt/src/Minipat/Dirt/Attrs.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
module Minipat.Dirt.Attrs
( DatumProxy (..)
, datumProxyType
, Attr (..)
, Attrs
, attrs
, IsAttrs (..)
)
where

import Dahdit.Midi.Osc (Datum, DatumType (..), IsDatum (..))
import Data.Int (Int32, Int64)
import Data.Map.Strict (Map)
import Data.Map.Strict qualified as Map
import Data.Text (Text)

data DatumProxy a where
DatumProxyInt32 :: DatumProxy Int32
DatumProxyInt64 :: DatumProxy Int64
DatumProxyFloat :: DatumProxy Float
DatumProxyDouble :: DatumProxy Double
DatumProxyString :: DatumProxy Text

datumProxyType :: DatumProxy a -> DatumType
datumProxyType = \case
DatumProxyInt32 -> DatumTypeInt32
DatumProxyInt64 -> DatumTypeInt64
DatumProxyFloat -> DatumTypeFloat
DatumProxyDouble -> DatumTypeDouble
DatumProxyString -> DatumTypeString

data Attr a = Attr
{ attrKey :: !Text
, attrVal :: !a
}
deriving stock (Eq, Ord, Show, Functor, Foldable, Traversable)

type Attrs = Map Text Datum

attrs :: [(Text, Datum)] -> Attrs
attrs = Map.fromList

class IsAttrs a where
toAttrs :: a -> Attrs

instance IsAttrs Attrs where
toAttrs = id

instance (IsDatum a) => IsAttrs (Attr a) where
toAttrs (Attr k v) = Map.singleton k (toDatum v)

-- instance IsAttrs Note where
-- toAttrs (Note n) = Map.singleton "note" (DatumInt32 (fromInteger n))
2 changes: 1 addition & 1 deletion minipat-dirt/src/Minipat/Dirt/Boot.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

module Minipat.Dirt.Boot where

import Minipat.Dirt.Attrs (Attrs)
import Minipat.Dirt.Core qualified as C
import Minipat.Dirt.Logger qualified as L
import Minipat.Dirt.Osc (Attrs)
import Minipat.Stream (Stream)
import Nanotime (TimeDelta)

Expand Down
3 changes: 2 additions & 1 deletion minipat-dirt/src/Minipat/Dirt/Core.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@ import Data.Map.Strict qualified as Map
import Data.Ratio ((%))
import Data.Sequence (Seq)
import Data.Text qualified as T
import Minipat.Dirt.Attrs (Attrs)
import Minipat.Dirt.Logger (LogAction, logError, logInfo, newLogger)
import Minipat.Dirt.Osc (Attrs, PlayEnv (..), PlayErr, Timed (..), convertTape, handshakePacket, playPacket)
import Minipat.Dirt.Osc (PlayEnv (..), PlayErr, Timed (..), convertTape, handshakePacket, playPacket)
import Minipat.Dirt.Resources (RelVar, acquireAsync, relVarAcquire, relVarDispose, relVarInit)
import Minipat.Print (prettyPrint)
import Minipat.Stream (Stream (..), streamRun)
Expand Down
50 changes: 4 additions & 46 deletions minipat-dirt/src/Minipat/Dirt/Osc.hs
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
{-# LANGUAGE OverloadedStrings #-}

module Minipat.Dirt.Osc
( DatumProxy (..)
, datumProxyType
, Timed (..)
, Attrs
, attrs
, IsAttrs (..)
, Attr (..)
( Timed (..)
, PlayErr (..)
, PlayEnv (..)
, convertEvent
Expand All @@ -20,60 +14,24 @@ where
import Control.Exception (Exception)
import Control.Monad (foldM)
import Control.Monad.Except (throwError)
import Dahdit.Midi.Osc (Datum (..), DatumType (..), IsDatum (..), Msg (..), Packet (..))
import Dahdit.Midi.Osc (Datum (..), Msg (..), Packet (..))
import Dahdit.Midi.OscAddr (RawAddrPat)
import Data.Foldable (foldl')
import Data.Int (Int32, Int64)
import Data.Map.Strict (Map)
import Data.Map.Strict qualified as Map
import Data.Sequence (Seq (..))
import Data.Sequence qualified as Seq
import Data.Text (Text)
import Minipat.Dirt.Attrs (Attrs, IsAttrs (..))
import Minipat.Stream (Ev (..), Tape, tapeToList)
import Minipat.Time (CycleDelta (..), CycleTime (..), Span, spanCycle, spanDelta)
import Nanotime (PosixTime, TimeDelta (..), addTime, timeDeltaFromFracSecs, timeDeltaToNanos)

data DatumProxy a where
DatumProxyInt32 :: DatumProxy Int32
DatumProxyInt64 :: DatumProxy Int64
DatumProxyFloat :: DatumProxy Float
DatumProxyDouble :: DatumProxy Double
DatumProxyString :: DatumProxy Text

datumProxyType :: DatumProxy a -> DatumType
datumProxyType = \case
DatumProxyInt32 -> DatumTypeInt32
DatumProxyInt64 -> DatumTypeInt64
DatumProxyFloat -> DatumTypeFloat
DatumProxyDouble -> DatumTypeDouble
DatumProxyString -> DatumTypeString

data Timed a = Timed
{ timedKey :: !PosixTime
, timedVal :: !a
}
deriving stock (Eq, Ord, Show, Functor, Foldable, Traversable)

type Attrs = Map Text Datum

attrs :: [(Text, Datum)] -> Attrs
attrs = Map.fromList

class IsAttrs a where
toAttrs :: a -> Attrs

instance IsAttrs Attrs where
toAttrs = id

data Attr a = Attr
{ attrKey :: !Text
, attrVal :: !a
}
deriving stock (Eq, Ord, Show, Functor, Foldable, Traversable)

instance (IsDatum a) => IsAttrs (Attr a) where
toAttrs (Attr k v) = Map.singleton k (toDatum v)

namedPayload :: Attrs -> Seq Datum
namedPayload = foldl' go Empty . Map.toList
where
Expand Down Expand Up @@ -119,7 +77,7 @@ playAliases =
, ("bpq", "bandq")
, ("res", "resonance")
, ("midi", "midinote")
, ("n", "midinote")
, ("n", "note")
, ("oct", "octave")
, ("accel", "accelerate")
, ("leg", "legato")
Expand Down
2 changes: 1 addition & 1 deletion minipat-dirt/src/Minipat/Dirt/Parser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import Data.Text (Text)
import Data.Text qualified as T
import Looksee qualified as L
import Minipat.Ast (Ident (..), Pattern (..), Select (..))
import Minipat.Dirt.Attrs (Attr (..), Attrs, DatumProxy (..), attrs)
import Minipat.Dirt.Notes
import Minipat.Dirt.Osc (Attr (..), Attrs, DatumProxy (..), attrs)
import Minipat.Eval (evalPat)
import Minipat.Parser (P, identP, selectP)

Expand Down
2 changes: 1 addition & 1 deletion minipat-dirt/src/Minipat/Dirt/Prelude.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module Minipat.Dirt.Prelude where

import Data.Int (Int32)
import Data.Text (Text)
import Minipat.Dirt.Osc (Attr (..), Attrs, DatumProxy, IsAttrs (..))
import Minipat.Dirt.Attrs (Attr (..), Attrs, DatumProxy, IsAttrs (..))
import Minipat.Dirt.Parser (datumPat, notePat, soundPat)
import Minipat.Stream (Stream (..), streamInnerBind)

Expand Down
3 changes: 2 additions & 1 deletion minipat-dirt/src/Minipat/Dirt/Test.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import Dahdit.Midi.Osc (Datum (..))
import Data.Foldable (for_)
import Data.Ratio ((%))
import Data.Sequence (Seq)
import Minipat.Dirt.Attrs (Attrs, attrs)
import Minipat.Dirt.Core
( OscConn
, Resources (..)
Expand All @@ -19,7 +20,7 @@ import Minipat.Dirt.Core
, setTempo
, withSt
)
import Minipat.Dirt.Osc (Attrs, PlayEnv (..), PlayErr, Timed (..), attrs, convertTape, handshakePacket, playPacket)
import Minipat.Dirt.Osc (PlayEnv (..), PlayErr, Timed (..), convertTape, handshakePacket, playPacket)
import Minipat.Stream (Ev (..), streamFastBy, tapeSingleton)
import Minipat.Time (Arc (..), Span (..))
import Nanotime (TimeLike (..), threadDelayDelta, timeDeltaFromFracSecs)
Expand Down

0 comments on commit 6c6777d

Please sign in to comment.