mirror of
https://gitlab.dit.htwk-leipzig.de/computermusik-ws23/data-composition.git
synced 2025-05-18 23:31:47 +02:00
127 lines
4.6 KiB
Haskell
127 lines
4.6 KiB
Haskell
:set -XOverloadedStrings
|
|
:set -XExtendedDefaultRules
|
|
:set prompt ""
|
|
|
|
import Sound.Tidal.Context
|
|
|
|
import System.IO (hSetEncoding, stdout, utf8)
|
|
hSetEncoding stdout utf8
|
|
|
|
-- Expose otherwise hidden modules
|
|
:set -package vector
|
|
:set -package bytestring
|
|
:set -package random
|
|
|
|
-- Load all the Modules i need for data transformation, plotting and other stuff.
|
|
import Text.Read
|
|
import Data.Maybe
|
|
import Graphics.Gnuplot.Simple
|
|
import qualified Graphics.Gnuplot.Terminal.QT as QT
|
|
import System.Random
|
|
|
|
|
|
-- Have Chords available all the time
|
|
import Sound.Tidal.Chords
|
|
|
|
|
|
-- Load Data
|
|
:cd /home/phillip/Projekte/HTWK/Computermusik/data-composition/datamodules
|
|
:l TemperatureData HumidityData BatteryData
|
|
|
|
-- Load Data. This currently is pinned to my setup.
|
|
import TemperatureData
|
|
import HumidityData
|
|
import BatteryData
|
|
|
|
|
|
-- Normal Tidal Startup from here on
|
|
tidal <- startTidal (superdirtTarget {oLatency = 0.05, oAddress = "127.0.0.1", oPort = 57120}) (defaultConfig {cVerbose = True, cFrameTimespan = 1/20})
|
|
|
|
:{
|
|
let only = (hush >>)
|
|
p = streamReplace tidal
|
|
hush = streamHush tidal
|
|
panic = do hush
|
|
once $ sound "superpanic"
|
|
list = streamList tidal
|
|
mute = streamMute tidal
|
|
unmute = streamUnmute tidal
|
|
unmuteAll = streamUnmuteAll tidal
|
|
unsoloAll = streamUnsoloAll tidal
|
|
solo = streamSolo tidal
|
|
unsolo = streamUnsolo tidal
|
|
once = streamOnce tidal
|
|
first = streamFirst tidal
|
|
asap = once
|
|
nudgeAll = streamNudgeAll tidal
|
|
all = streamAll tidal
|
|
resetCycles = streamResetCycles tidal
|
|
setCycle = streamSetCycle tidal
|
|
setcps = asap . cps
|
|
getcps = streamGetcps tidal
|
|
getnow = streamGetnow tidal
|
|
xfade i = transition tidal True (Sound.Tidal.Transition.xfadeIn 4) i
|
|
xfadeIn i t = transition tidal True (Sound.Tidal.Transition.xfadeIn t) i
|
|
histpan i t = transition tidal True (Sound.Tidal.Transition.histpan t) i
|
|
wait i t = transition tidal True (Sound.Tidal.Transition.wait t) i
|
|
waitT i f t = transition tidal True (Sound.Tidal.Transition.waitT f t) i
|
|
jump i = transition tidal True (Sound.Tidal.Transition.jump) i
|
|
jumpIn i t = transition tidal True (Sound.Tidal.Transition.jumpIn t) i
|
|
jumpIn' i t = transition tidal True (Sound.Tidal.Transition.jumpIn' t) i
|
|
jumpMod i t = transition tidal True (Sound.Tidal.Transition.jumpMod t) i
|
|
jumpMod' i t p = transition tidal True (Sound.Tidal.Transition.jumpMod' t p) i
|
|
mortal i lifespan release = transition tidal True (Sound.Tidal.Transition.mortal lifespan release) i
|
|
interpolate i = transition tidal True (Sound.Tidal.Transition.interpolate) i
|
|
interpolateIn i t = transition tidal True (Sound.Tidal.Transition.interpolateIn t) i
|
|
clutch i = transition tidal True (Sound.Tidal.Transition.clutch) i
|
|
clutchIn i t = transition tidal True (Sound.Tidal.Transition.clutchIn t) i
|
|
anticipate i = transition tidal True (Sound.Tidal.Transition.anticipate) i
|
|
anticipateIn i t = transition tidal True (Sound.Tidal.Transition.anticipateIn t) i
|
|
forId i t = transition tidal False (Sound.Tidal.Transition.mortalOverlay t) i
|
|
d1 = p 1 . (|< orbit 0)
|
|
d2 = p 2 . (|< orbit 1)
|
|
d3 = p 3 . (|< orbit 2)
|
|
d4 = p 4 . (|< orbit 3)
|
|
d5 = p 5 . (|< orbit 4)
|
|
d6 = p 6 . (|< orbit 5)
|
|
d7 = p 7 . (|< orbit 6)
|
|
d8 = p 8 . (|< orbit 7)
|
|
d9 = p 9 . (|< orbit 8)
|
|
d10 = p 10 . (|< orbit 9)
|
|
d11 = p 11 . (|< orbit 10)
|
|
d12 = p 12 . (|< orbit 11)
|
|
d13 = p 13
|
|
d14 = p 14
|
|
d15 = p 15
|
|
d16 = p 16
|
|
:}
|
|
|
|
:{
|
|
let getState = streamGet tidal
|
|
setI = streamSetI tidal
|
|
setF = streamSetF tidal
|
|
setS = streamSetS tidal
|
|
setR = streamSetR tidal
|
|
setB = streamSetB tidal
|
|
:}
|
|
|
|
|
|
-- Custom Functions
|
|
:{
|
|
let getRawValueList tableData = map (\x -> snd x) tableData
|
|
getRawLabelList tableData = map (\x -> fst x) tableData
|
|
makePlottableList list = zip [0..] list
|
|
plotPlainList list = plotListStyle [] (defaultStyle {plotType = LinesPoints, lineSpec = CustomStyle [LineTitle "Numerical Value", LineWidth 3, PointType 7, PointSize 3]}) $ makePlottableList list
|
|
getNum value scalar = fromInteger $ round $ (maybe 0.0 id (readMaybe value :: Maybe Float)) * scalar
|
|
listToNum list = map (\x -> getNum x 1) list
|
|
sliceAt start length list = take length (drop start list)
|
|
normalize max list = map (\x -> fromIntegral ( round ( max * ( x / (maximum list))))) list
|
|
normalizeAt zero max list = map (\x -> fromIntegral ( round ( max * ((x - zero)/ (maximum (map (\y -> y - zero) list)))))) list
|
|
scaleBetween low high max list = map (\x -> fromIntegral ( round (max * ((x - low)/ (high - low))))) list
|
|
:}
|
|
|
|
:set prompt "tidal> "
|
|
:set prompt-cont ""
|
|
|
|
default (Pattern String, Integer, Double)
|