hsc3-0.7: Sound/SC3/Server/NRT.hs
-- | Non-realtime score generation.
module Sound.SC3.Server.NRT ( encodeNRT
, writeNRT
, putNRT ) where
import qualified Data.ByteString.Lazy as B
import Sound.OpenSoundControl
import System.IO
-- | Encode and prefix with encoded length.
oscWithSize :: OSC -> B.ByteString
oscWithSize o = B.append l b
where b = encodeOSC o
l = encode_i32 (fromIntegral (B.length b))
-- | Encode a list of OSC bundles as an NRT score.
encodeNRT :: [OSC] -> B.ByteString
encodeNRT = B.concat . map oscWithSize
-- | Write a list of OSC bundles as an NRT score.
writeNRT :: FilePath -> [OSC] -> IO ()
writeNRT fn = B.writeFile fn . encodeNRT
-- | Write a list of OSC bundles as an NRT score to a file handle.
putNRT :: Handle -> [OSC] -> IO ()
putNRT h = B.hPut h . encodeNRT