module Sound.OpenSoundControl.Type ( OSC(..)
, Datum(..)
, message
, bundle
, tag ) where
import qualified Data.ByteString.Lazy as B
import Data.Word
import Sound.OpenSoundControl.Time
data Datum = Int Int
| Float Double
| Double Double
| String String
| Blob B.ByteString
| TimeStamp Time
| Midi (Word8,Word8,Word8,Word8)
deriving (Eq, Read, Show)
data OSC = Message String [Datum]
| Bundle Time [OSC]
deriving (Eq, Read, Show)
instance Ord OSC where
compare (Bundle a _) (Bundle b _) = compare a b
compare _ _ = EQ
tag :: Datum -> Char
tag dt =
case dt of
Int _ -> 'i'
Float _ -> 'f'
Double _ -> 'd'
String _ -> 's'
Blob _ -> 'b'
TimeStamp _ -> 't'
Midi _ -> 'm'
bundle :: Time -> [OSC] -> OSC
bundle t xs =
case xs of
[] -> error "bundle: empty?"
_ -> Bundle t xs
message :: String -> [Datum] -> OSC
message a xs =
case a of
('/':_) -> Message a xs
_ -> error "message: ill-formed address"