module Vivid.SCServer (
cmdPeriod
, freeAll
, Timestamp(..)
, NodeId(..)
, Node(..)
, BufferId(..)
, makeBuffer
, makeBufferFromFile
, newBuffer
, newBufferFromFile
, saveBuffer
, createSCServerConnection
, closeSCServerConnection
, SCConnectConfig(..)
, defaultConnectConfig
, module Vivid.SCServer.State
, shrinkNodeArgs
) where
import Vivid.Actions.Class
import Vivid.OSC
import Vivid.SCServer.Connection
import Vivid.SCServer.State
import Vivid.SCServer.Types
import qualified Data.ByteString.Char8 as BS8 (pack)
import Data.Int (Int32)
import Prelude
cmdPeriod :: (VividAction m) => m ()
cmdPeriod = do
callOSC $ OSC "/g_freeAll" [OSC_I 0]
callOSC $ OSC "/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@(BufferId bufIdInt) <- newBufferId
syncId@(SyncId syncIdInt) <- newSyncId
callOSC $ OSC "/b_alloc" [
OSC_I bufIdInt
,OSC_I bufferLength
,OSC_I 1
, OSC_B . encodeOSC $ OSC "/sync" [OSC_I syncIdInt]
]
waitForSync syncId
return bufId
newBufferFromFile :: (VividAction m) => FilePath -> m BufferId
newBufferFromFile fPath = do
bufId@(BufferId bufIdInt) <- newBufferId
syncId@(SyncId syncIdInt) <- newSyncId
callOSC $ OSC "/b_allocRead" [
OSC_I bufIdInt
, OSC_S (BS8.pack fPath)
, OSC_I 0
, OSC_I (1)
, OSC_B . encodeOSC $ OSC "/sync" [OSC_I syncIdInt]
]
waitForSync 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 (BufferId theBufId) fPath = do
_syncId@(SyncId syncIdInt) <- newSyncId
callOSC $ OSC "/b_write" [
OSC_I theBufId
,OSC_S (BS8.pack fPath)
,OSC_S "wav"
,OSC_S "float"
, OSC_I (1)
, OSC_I 0
, OSC_I 0
, OSC_B . encodeOSC $ OSC "/sync" [OSC_I syncIdInt]
]