module Vivid.SCServer (
cmdPeriod
, freeAll
, Timestamp(..)
, NodeId(..)
, Synth(..)
, Group(..)
, defaultGroup
, BufferId(..)
, makeBuffer
, makeBufferFromFile
, newBuffer
, newBufferFromFile
, saveBuffer
, writeBuffer
, writeBufferWith
, WriteBufArgs(..)
, defaultWBArgs
, closeBuf
, closeBuffer
, zeroBuf
, createSCServerConnection
, closeSCServerConnection
, SCConnectConfig(..)
, defaultConnectConfig
, module Vivid.SCServer.State
, shrinkSynthArgs
) where
import Vivid.OSC
import Vivid.OSC.Bundles (initTreeCommand)
import qualified Vivid.SC.Server.Commands as SCCmd
import Vivid.SC.Server.Types (Group(..))
import qualified Vivid.SC.Server.Commands as SCCmd
import Vivid.Actions.Class
import Vivid.SCServer.Connection
import Vivid.SCServer.State
import Vivid.SCServer.Types
import qualified Data.ByteString.UTF8 as UTF8 (fromString)
import Data.Int (Int32)
import Prelude
cmdPeriod :: (VividAction m) => m ()
cmdPeriod = do
callOSC $ SCCmd.g_freeAll [NodeId 1]
callOSC $ SCCmd.clearSched
initTree
freeAll :: VividAction m => m ()
freeAll = cmdPeriod
initTree :: (VividAction m) => m ()
initTree = callOSC initTreeCommand
newBuffer :: VividAction m => Int32 -> m BufferId
newBuffer bufferLength = do
bufId <- newBufferId
oscWSync $ \syncId ->
callOSC $
SCCmd.b_alloc bufId bufferLength 1 (Just $ SCCmd.sync syncId)
return bufId
newBufferFromFile :: (VividAction m) => FilePath -> m BufferId
newBufferFromFile fPath = do
bufId <- newBufferId
oscWSync $ \syncId -> callOSC $
SCCmd.b_allocRead bufId fPath 0 Nothing (Just $ SCCmd.sync syncId)
return bufId
makeBufferFromFile :: (VividAction m) => FilePath -> m BufferId
makeBufferFromFile = newBufferFromFile
makeBuffer :: (VividAction m) => Int32 -> m BufferId
makeBuffer = newBuffer
saveBuffer :: (VividAction m) => BufferId -> FilePath -> m ()
saveBuffer = writeBuffer
writeBuffer :: VividAction m => BufferId -> FilePath -> m ()
writeBuffer = writeBufferWith defaultWBArgs
writeBufferWith :: VividAction m => WriteBufArgs -> BufferId -> FilePath -> m ()
writeBufferWith args bufId fPath =
oscWSync $ \syncId -> callOSC $
SCCmd.b_write
bufId
fPath
"wav"
"float"
Nothing
0
(_wb_keepOpen args)
(Just $ SCCmd.sync syncId)
data WriteBufArgs
= WriteBufArgs {
_wb_keepOpen :: Bool
}
deriving (Show, Read, Eq, Ord)
defaultWBArgs :: WriteBufArgs
defaultWBArgs = WriteBufArgs {
_wb_keepOpen = False
}
closeBuffer :: VividAction m => BufferId -> m ()
closeBuffer bufId = oscWSync $ \syncId ->
callOSC $ SCCmd.b_close bufId (Just $ SCCmd.sync syncId)
closeBuf :: VividAction m => BufferId -> m ()
closeBuf = closeBuffer
zeroBuf :: VividAction m => BufferId -> m ()
zeroBuf bufId = oscWSync $ \syncId ->
callOSC $ SCCmd.b_zero bufId (Just $ SCCmd.sync syncId)
defaultGroup :: Group ; defaultGroup = Group (NodeId 1)