aboutsummaryrefslogtreecommitdiffstats
path: root/alv-lib
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-05-09 14:49:08 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:23:21 +0000
commit61eb86951287667ca0ee305baa5c3cd6ad29ba36 (patch)
tree7551d6b9c8af01c049adab0ee027dbad68f28808 /alv-lib
parentmore internal doc fixes (diff)
downloadalive-61eb86951287667ca0ee305baa5c3cd6ad29ba36.tar.gz
alive-61eb86951287667ca0ee305baa5c3cd6ad29ba36.zip
add types.T, fix spec + docs
Diffstat (limited to 'alv-lib')
-rw-r--r--alv-lib/logic.moon24
-rw-r--r--alv-lib/math.moon53
-rw-r--r--alv-lib/midi.moon22
-rw-r--r--alv-lib/midi/core.moon14
-rw-r--r--alv-lib/midi/launchctl.moon22
-rw-r--r--alv-lib/osc.moon10
-rw-r--r--alv-lib/pilot.moon8
-rw-r--r--alv-lib/random.moon23
-rw-r--r--alv-lib/sc.moon6
-rw-r--r--alv-lib/string.moon6
-rw-r--r--alv-lib/time.moon42
-rw-r--r--alv-lib/util.moon22
12 files changed, 129 insertions, 123 deletions
diff --git a/alv-lib/logic.moon b/alv-lib/logic.moon
index 3c893df..c3cc66f 100644
--- a/alv-lib/logic.moon
+++ b/alv-lib/logic.moon
@@ -1,4 +1,4 @@
-import Op, ValueStream, Input, Error, val from require 'alv.base'
+import Op, SigStream, Constant, Input, Error, T, val from require 'alv.base'
all_same = (first, list) ->
for v in *list
@@ -17,7 +17,7 @@ tobool = (val) ->
class ReduceOp extends Op
pattern = val! + val! * 0
setup: (inputs) =>
- @out or= ValueStream 'bool'
+ @out or= SigStream T.bool
{ first, rest } = pattern\match inputs
super
first: Input.hot first
@@ -31,7 +31,7 @@ class ReduceOp extends Op
@out\set accum
-eq = ValueStream.meta
+eq = Constant.meta
meta:
name: 'eq'
summary: "Check for equality."
@@ -41,7 +41,7 @@ eq = ValueStream.meta
value: class extends Op
pattern = val! + val! * 0
setup: (inputs) =>
- @out or= ValueStream 'bool', false
+ @out or= SigStream T.bool, false
{ first, rest } = pattern\match inputs
same = all_same first\type!, [i\type! for i in *rest]
@@ -68,7 +68,7 @@ eq = ValueStream.meta
@out\set equal
-not_eq = ValueStream.meta
+not_eq = Constant.meta
meta:
name: 'not-eq'
summary: "Check for inequality."
@@ -77,7 +77,7 @@ not_eq = ValueStream.meta
value: class extends Op
setup: (inputs) =>
- @out or= ValueStream 'bool', false
+ @out or= SigStream T.bool, false
assert #inputs > 1, Error 'argument', "need at least two values"
super [Input.hot v for v in *inputs]
@@ -97,7 +97,7 @@ not_eq = ValueStream.meta
@out\set diff
-and_ = ValueStream.meta
+and_ = Constant.meta
meta:
name: 'and'
summary: "Logical AND."
@@ -105,7 +105,7 @@ and_ = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a and b
-or_ = ValueStream.meta
+or_ = Constant.meta
meta:
name: 'or'
summary: "Logical OR."
@@ -113,7 +113,7 @@ or_ = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a or b
-not_ = ValueStream.meta
+not_ = Constant.meta
meta:
name: 'not'
summary: "Logical NOT."
@@ -121,14 +121,14 @@ not_ = ValueStream.meta
value: class extends Op
setup: (inputs) =>
- @out or= ValueStream 'bool', false
+ @out or= SigStream T.bool, false
value = val!\match inputs
super value: Input.hot value
tick: =>
@out\set not tobool @inputs.value!
-bool = ValueStream.meta
+bool = Constant.meta
meta:
name: 'bool'
summary: "Cast value to bool."
@@ -137,7 +137,7 @@ bool = ValueStream.meta
value: class extends Op
setup: (inputs) =>
- @out or= ValueStream 'bool'
+ @out or= SigStream T.bool
value = val!\match inputs
super value: Input.hot value
diff --git a/alv-lib/math.moon b/alv-lib/math.moon
index 2cf8e5d..8037e8a 100644
--- a/alv-lib/math.moon
+++ b/alv-lib/math.moon
@@ -1,10 +1,10 @@
-import Op, ValueStream, Error, Input, val from require 'alv.base'
+import Op, Constant, SigStream, Error, Input, T, val from require 'alv.base'
unpack or= table.unpack
class ReduceOp extends Op
pattern = val.num + val.num*0
setup: (inputs) =>
- @out or= ValueStream 'num'
+ @out or= SigStream T.num
{ first, rest } = pattern\match inputs
super
first: Input.hot first
@@ -21,14 +21,16 @@ func_op = (func, pattern) ->
class extends Op
setup: (inputs) =>
- @out or= ValueStream 'num'
+ @out or= SigStream T.num
+
params = pattern\match inputs
super [Input.hot p for p in *params]
+
tick: => @out\set func unpack @unwrap_all!
func_def = (name, args, func, summary, pattern) ->
- ValueStream.meta
+ Constant.meta
meta:
:name
:summary
@@ -39,17 +41,17 @@ evenodd_op = (remainder) ->
class extends Op
pattern = val.num + -val.num
setup: (inputs) =>
- @out or= ValueStream 'bool'
+ @out or= SigStream T.bool
{ val, div } = pattern\match inputs
super
val: Input.hot val
- div: Input.hot div or ValueStream.num 2
+ div: Input.hot div or SigStream.num 2
tick: =>
{ :val, :div } = @unwrap_all!
@out\set (val % div) == remainder
-add = ValueStream.meta
+add = Constant.meta
meta:
name: 'add'
summary: "Add values."
@@ -58,7 +60,7 @@ add = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a + b
-sub = ValueStream.meta
+sub = Constant.meta
meta:
name: 'sub'
summary: "Subtract values."
@@ -67,7 +69,7 @@ sub = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a - b
-mul = ValueStream.meta
+mul = Constant.meta
meta:
name: 'mul'
summary: "Multiply values."
@@ -75,7 +77,7 @@ mul = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a * b
-div = ValueStream.meta
+div = Constant.meta
meta:
name: 'div'
summary: "Divide values."
@@ -84,7 +86,7 @@ div = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a / b
-pow = ValueStream.meta
+pow = Constant.meta
meta:
name: 'pow'
summary: "Raise to a power."
@@ -93,7 +95,7 @@ pow = ValueStream.meta
value: class extends ReduceOp
fn: (a, b) -> a ^ b
-mod = ValueStream.meta
+mod = Constant.meta
meta:
name: 'mod'
summary: 'Modulo operator.'
@@ -101,7 +103,7 @@ mod = ValueStream.meta
description: "Calculate remainder of division by `div`."
value: func_op ((a, b) -> a % b), val.num + val.num
-even = ValueStream.meta
+even = Constant.meta
meta:
name: 'even'
summary: 'Check whether val is even.'
@@ -110,7 +112,7 @@ even = ValueStream.meta
`div` defaults to 2."
value: evenodd_op 0
-odd = ValueStream.meta
+odd = Constant.meta
meta:
name: 'odd'
summary: 'Check whether val is odd.'
@@ -119,7 +121,7 @@ odd = ValueStream.meta
`div` defaults to 2."
value: evenodd_op 1
-mix = ValueStream.meta
+mix = Constant.meta
meta:
name: 'mix'
summary: 'Linearly interpolate.'
@@ -127,7 +129,7 @@ mix = ValueStream.meta
description: "Interpolate between `a` and `b` using `i` in range 0-1."
value: func_op ((a, b, i) -> i*b + (1-i)*a), val.num + val.num + val.num
-min = ValueStream.meta
+min = Constant.meta
meta:
name: 'min'
summary: "Find the minimum."
@@ -135,7 +137,7 @@ min = ValueStream.meta
description: "Return the lowest of arguments."
value: func_op math.min, val.num*0
-max = ValueStream.meta
+max = Constant.meta
meta:
name: 'max'
summary: "Find the maximum."
@@ -176,12 +178,17 @@ sqrt = func_def 'sqrt', 'val', math.sqrt, "Square root function."
:mix
:min, :max
- pi: with ValueStream.wrap math.pi
- .meta = summary: 'The pi constant.'
- tau: with ValueStream.wrap math.pi*2
- .meta = summary: 'The tau constant.'
- huge: with ValueStream.wrap math.huge
- .meta = summary: 'Positive infinity constant.'
+ pi: Constant.meta
+ value: math.pi
+ meta: summary: 'The pi constant.'
+
+ tau: Constant.meta
+ value: math.pi*2
+ meta: summary: 'The tau constant.'
+
+ huge: Constant.meta
+ value: math.huge
+ meta: summary: 'Positive infinity constant.'
:sin, :cos, :tan
:asin, :acos, :atan, :atan2
diff --git a/alv-lib/midi.moon b/alv-lib/midi.moon
index 88d9547..e3bbe01 100644
--- a/alv-lib/midi.moon
+++ b/alv-lib/midi.moon
@@ -1,7 +1,7 @@
-import ValueStream, EventStream, Op, Input, val, evt from require 'alv.base'
+import Constant, Op, Input, T, val, evt from require 'alv.base'
import input, output, inout, apply_range from require 'alv-lib.midi.core'
-gate = ValueStream.meta
+gate = Constant.meta
meta:
name: 'gate'
summary: "gate from note-on and note-off messages."
@@ -10,12 +10,12 @@ gate = ValueStream.meta
value: class extends Op
pattern = -evt['midi/port'] + val.num -val.num
setup: (inputs, scope) =>
- @out or= ValueStream 'bool'
+ @out or= T.bool\mk_sig!
{ port, note, chan } = pattern\match inputs
super
port: Input.hot port or scope\get '*midi*'
note: Input.hot note
- chan: Input.hot chan or ValueStream.num -1
+ chan: Input.hot chan or Constant.num -1
tick: =>
{ :port, :note, :chan } = @inputs
@@ -31,7 +31,7 @@ gate = ValueStream.meta
elseif msg.status == 'note-off'
@out\set false
-trig = ValueStream.meta
+trig = Constant.meta
meta:
name: 'trig'
summary: "`bang`s from note-on messages."
@@ -40,12 +40,12 @@ trig = ValueStream.meta
value: class extends Op
pattern = -evt['midi/port'] + val.num -val.num
setup: (inputs, scope) =>
- @out or= EventStream 'bang'
+ @out or= T.bang\mk_evt!
{ port, note, chan } = pattern\match inputs
super
port: Input.hot port or scope\get '*midi*'
note: Input.cold note
- chan: Input.cold chan or ValueStream.num -1
+ chan: Input.cold chan or Constant.num -1
tick: =>
{ :port, :note, :chan } = @inputs
@@ -55,7 +55,7 @@ trig = ValueStream.meta
if msg.status == 'note-on'
@out\add true
-cc = ValueStream.meta
+cc = Constant.meta
meta:
name: 'cc'
summary: "`num` from cc-change messages."
@@ -76,10 +76,10 @@ cc = ValueStream.meta
super
port: Input.hot port or scope\get '*midi*'
cc: Input.cold cc
- chan: Input.cold chan or ValueStream.num -1
- range: Input.cold range or ValueStream.str 'uni'
+ chan: Input.cold chan or Constant.num -1
+ range: Input.cold range or Constant.str 'uni'
- @out or= ValueStream 'num', apply_range @inputs.range, 0
+ @out or= T.num\mk_sig apply_range @inputs.range, 0
tick: =>
{ :port, :cc, :chan, :range } = @inputs
diff --git a/alv-lib/midi/core.moon b/alv-lib/midi/core.moon
index 3adc401..71d1e9f 100644
--- a/alv-lib/midi/core.moon
+++ b/alv-lib/midi/core.moon
@@ -1,4 +1,4 @@
-import ValueStream, IOStream, Op, Input, Error, val from require 'alv.base'
+import Constant, IOStream, Op, Input, T, Error, val from require 'alv.base'
import RtMidiIn, RtMidiOut, RtMidi from require 'luartmidi'
bit = do
@@ -31,7 +31,7 @@ find_port = (Klass, name) ->
\openport id
class MidiPort extends IOStream
- new: => super 'midi/port'
+ new: => super T['midi/port']
setup: (inp, out) =>
@inp = inp and find_port RtMidiIn, inp
@@ -63,7 +63,7 @@ class PortOp extends Op
{ :inp, :out } = @unwrap_all!
@out\setup inp, out
-input = ValueStream.meta
+input = Constant.meta
meta:
name: 'input'
summary: "Create a MIDI input port."
@@ -74,7 +74,7 @@ input = ValueStream.meta
name = val.str\match inputs
super inp: Input.hot name
-output = ValueStream.meta
+output = Constant.meta
meta:
name: 'output'
summary: "Create a MIDI output port."
@@ -85,7 +85,7 @@ output = ValueStream.meta
name = val.str\match inputs
super out: Input.hot name
-inout = ValueStream.meta
+inout = Constant.meta
meta:
name: 'inout'
summary: "Create a bidirectional MIDI port."
@@ -99,7 +99,7 @@ inout = ValueStream.meta
out: Input.hot out
apply_range = (range, val) ->
- if range\type! == 'str'
+ if range\type! == T.str
switch range!
when 'raw' then val
when 'uni' then val / 128
@@ -108,7 +108,7 @@ apply_range = (range, val) ->
when 'deg' then val / 128 * 360
else
error Error 'argument', "unknown range '#{range!}'"
- elseif range.type == 'num'
+ elseif range.type == T.num
val / 128 * range!
else
error Error 'argument', "range has to be a string or number"
diff --git a/alv-lib/midi/launchctl.moon b/alv-lib/midi/launchctl.moon
index 90e8956..3f47a5d 100644
--- a/alv-lib/midi/launchctl.moon
+++ b/alv-lib/midi/launchctl.moon
@@ -1,10 +1,10 @@
-import ValueStream, EventStream, Op, Input, val, evt from require 'alv.base'
+import Constant, Op, Input, T, val, evt from require 'alv.base'
import apply_range, bit from require 'alv-lib.midi.core'
import bor, lshift from bit
color = (r, g) -> bit.bor 12, r, (bit.lshift g, 4)
-cc_seq = ValueStream.meta
+cc_seq = Constant.meta
meta:
name: 'cc-seq'
summary: "MIDI CC-Sequencer."
@@ -32,11 +32,11 @@ range can be one of:
i: Input.hot i
start: Input.hot start
chan: Input.hot chan
- steps: Input.hot steps or ValueStream.num 8
- range: Input.hot range or ValueStream.str 'uni'
+ steps: Input.hot steps or Constant.num 8
+ range: Input.hot range or Constant.str 'uni'
@state or= {}
- @out or= ValueStream 'num', apply_range @inputs.range, 0
+ @out or= T.num\mk_sig apply_range @inputs.range, 0
tick: =>
{ :port, :i, :start, :chan, :steps, :range } = @inputs
@@ -60,7 +60,7 @@ range can be one of:
else
@out\set apply_range range, @state[curr_i+1]
-gate_seq = ValueStream.meta
+gate_seq = Constant.meta
meta:
name: 'gate-seq'
summary: "MIDI Gate-Sequencer."
@@ -72,7 +72,7 @@ Send `true` or `false` for the `i`-th note-button (MIDI-notes starting from
value: class extends Op
pattern = -evt['midi/port'] + val.num + val.num + val.num + -val.num
setup: (inputs, scope) =>
- @out or= ValueStream 'bool'
+ @out or= T.bool\mk_sig!
@state or= {}
{ port, i, start, chan, steps } = pattern\match inputs
@@ -81,7 +81,7 @@ Send `true` or `false` for the `i`-th note-button (MIDI-notes starting from
i: Input.hot i
start: Input.hot start
chan: Input.hot chan
- steps: Input.hot steps or ValueStream.num 8
+ steps: Input.hot steps or Constant.num 8
light = (set, active) ->
set = if set then 'S' else ' '
@@ -123,7 +123,7 @@ Send `true` or `false` for the `i`-th note-button (MIDI-notes starting from
@out\set @state[curr_i+1]
-trig_seq = ValueStream.meta
+trig_seq = Constant.meta
meta:
name: 'trig-seq'
summary: "MIDI Trigger-Sequencer."
@@ -135,7 +135,7 @@ Send bangs for the `i`-th note-button (MIDI-notes starting from `start`).
value: class extends Op
pattern = -evt['midi/port'] + val.num + val.num + val.num + -val.num
setup: (inputs, scope) =>
- @out or= EventStream 'bang'
+ @out or= T.bang\mk_evt!
@state or= {}
{ port, i, start, chan, steps } = pattern\match inputs
@@ -144,7 +144,7 @@ Send bangs for the `i`-th note-button (MIDI-notes starting from `start`).
i: Input.hot i
start: Input.hot start
chan: Input.hot chan
- steps: Input.hot steps or ValueStream.num 8
+ steps: Input.hot steps or Constant.num 8
light = (set, active) ->
set = if set then 'S' else ' '
diff --git a/alv-lib/osc.moon b/alv-lib/osc.moon
index b7e25e7..bbf07a1 100644
--- a/alv-lib/osc.moon
+++ b/alv-lib/osc.moon
@@ -1,10 +1,10 @@
-import Op, ValueStream, Input, val, evt from require 'alv.base'
+import Op, Constant, SigStream, Input, T, val, evt from require 'alv.base'
import pack from require 'osc'
import dns, udp from require 'socket'
unpack or= table.unpack
-connect = ValueStream.meta
+connect = Constant.meta
meta:
name: 'connect'
summary: "Create a UDP remote."
@@ -13,7 +13,7 @@ connect = ValueStream.meta
value: class extends Op
pattern = val.str + val.num
setup: (inputs) =>
- @out or= ValueStream 'udp/socket'
+ @out or= SigStream T['udp/socket']
{ host, port } = pattern\match inputs
super
host: Input.hot host
@@ -26,7 +26,7 @@ connect = ValueStream.meta
@out\set with sock = udp!
\setpeername ip, port
-send = ValueStream.meta
+send = Constant.meta
meta:
name: 'send'
summary: "Send events via OSC."
@@ -52,7 +52,7 @@ send = ValueStream.meta
msg = pack path, if 'table' == type val then unpack val else val
socket\send msg
-sync = ValueStream.meta
+sync = Constant.meta
meta:
name: 'sync'
summary: "Synchronize a value via OSC."
diff --git a/alv-lib/pilot.moon b/alv-lib/pilot.moon
index 0d6eefb..e2103c6 100644
--- a/alv-lib/pilot.moon
+++ b/alv-lib/pilot.moon
@@ -1,4 +1,4 @@
-import Op, ValueStream, Input, val, evt from require 'alv.base'
+import Op, Constant, Input, val, evt from require 'alv.base'
import udp from require 'socket'
local conn
@@ -22,7 +22,7 @@ send = (...) ->
arg = val.num / val.str
-play = ValueStream.meta
+play = Constant.meta
meta:
name: 'play'
summary: "Play a note when a bang arrives."
@@ -41,7 +41,7 @@ play = ValueStream.meta
for _ in *trig!
send [a! for a in *@inputs.args]
-play_ = ValueStream.meta
+play_ = Constant.meta
meta:
name: 'play!'
summary: "Play a note when a note arrives."
@@ -63,7 +63,7 @@ play_ = ValueStream.meta
for note in *note!
send { chan!, octv!, note }, args
-effect = ValueStream.meta
+effect = Constant.meta
meta:
name: 'effect'
summary: "Set effect parameters."
diff --git a/alv-lib/random.moon b/alv-lib/random.moon
index 8c4d096..a2e4c60 100644
--- a/alv-lib/random.moon
+++ b/alv-lib/random.moon
@@ -1,7 +1,7 @@
-import ValueStream, Error, Op, Input, val, evt from require 'alv.base'
+import Constant, Error, Op, Input, T, Array, val, evt from require 'alv.base'
apply_range = (range, val) ->
- if range\type! == 'str'
+ if range\type! == T.str
switch range!
when 'uni' then val
when 'bip' then val*2 - 1
@@ -9,7 +9,7 @@ apply_range = (range, val) ->
when 'deg' then val * 360
else
error Error 'argument', "unknown range '#{range!}'"
- elseif range\type! == 'num'
+ elseif range\type! == T.num
val * range!
else
error Error 'argument', "range has to be a string or number"
@@ -24,7 +24,7 @@ range can be one of:
pattern = -evt.bang + -(val.num / val.str)
-num = ValueStream.meta
+num = Constant.meta
meta:
name: 'num'
summary: 'Generate a random number.'
@@ -35,7 +35,7 @@ num = ValueStream.meta
value: class extends Op
new: (...) =>
super ...
- @out or= ValueStream 'num'
+ @out or= T.num\mk_sig!
@state or @gen!
gen: => @state = math.random!
@@ -44,25 +44,26 @@ num = ValueStream.meta
{ trig, range } = pattern\match inputs
super
trig: trig and Input.hot trig
- range: Input.hot range or ValueStream.str 'uni'
+ range: Input.hot range or Constant.str 'uni'
tick: =>
@gen! if @inputs.trig and @inputs.trig\dirty!
@out\set apply_range @inputs.range, @state
vec = (n) ->
- ValueStream.meta
+ typ = Array n, T.num
+ Constant.meta
meta:
name: "vec#{n}"
summary: 'Generate a random vector.'
examples: { '(random/vec#{n} [trigger] [range]))' }
- description: "Generate a random vec#{n} in `range` when created and on `trig`.
+ description: "Generate a random #{typ} in `range` when created and on `trig`.
#{range_doc}"
value: class extends Op
new: (...) =>
super ...
- @out or= ValueStream "vec#{n}"
+ @out or= typ\mk_sig!
@state or @gen!
gen: => @state = for i=1,n do math.random!
@@ -71,9 +72,9 @@ vec = (n) ->
{ trig, range } = pattern\match inputs
super
trig: trig and Input.hot trig
- range: Input.hot range or ValueStream.str 'uni'
+ range: Input.hot range or Constant.str 'uni'
- tick: =>
+ tick: (setup) =>
@gen! if @inputs.trig and @inputs.trig\dirty!
@out\set [apply_range @inputs.range, v for v in *@state]
diff --git a/alv-lib/sc.moon b/alv-lib/sc.moon
index 2857392..7e4c711 100644
--- a/alv-lib/sc.moon
+++ b/alv-lib/sc.moon
@@ -1,10 +1,10 @@
-import Op, ValueStream, Input, val, evt from require 'alv.base'
+import Op, Constant, Input, val, evt from require 'alv.base'
import pack from require 'osc'
import dns, udp from require 'socket'
unpack or= table.unpack
-play = ValueStream.meta
+play = Constant.meta
meta:
name: 'play'
summary: 'Play a SuperCollider SynthDef on bangs.'
@@ -39,7 +39,7 @@ Plays the synth `synth` on the `udp/socket` `socket` whenever `trig` is live.
msg = pack '/s_new', synth, -1, 0, 1, unpack ctrls
socket\send msg
-play_ = ValueStream.meta
+play_ = Constant.meta
meta:
name: 'play!'
summary: 'Play a SuperCollider SynthDef on events.'
diff --git a/alv-lib/string.moon b/alv-lib/string.moon
index 5f54b07..9f09f10 100644
--- a/alv-lib/string.moon
+++ b/alv-lib/string.moon
@@ -1,13 +1,13 @@
-import Op, ValueStream, Input from require 'alv.base'
+import Op, Constant, SigStream, Input, T from require 'alv.base'
-str = ValueStream.meta
+str = Constant.meta
meta:
name: 'str'
summary: "Concatenate/stringify values."
examples: { '(.. v1 [v2…])', '(str v1 [v2…])' }
value: class extends Op
setup: (inputs) =>
- @out or= ValueStream 'str'
+ @out or= SigStream T.str
super [Input.hot v for v in *inputs]
tick: =>
diff --git a/alv-lib/time.moon b/alv-lib/time.moon
index ba7aa4a..86d7e4c 100644
--- a/alv-lib/time.moon
+++ b/alv-lib/time.moon
@@ -1,12 +1,10 @@
-import
- ValueStream, EventStream, IOStream,
- Error, Op, Input, val, evt
-from require 'alv.base'
+import Constant, EvtStream, IOStream, Error, Op, Input, T, val, evt
+ from require 'alv.base'
import monotime from require 'system'
class Clock extends IOStream
new: (@frametime) =>
- super 'clock'
+ super T.clock
return unless monotime
@last = monotime!
@@ -19,11 +17,11 @@ class Clock extends IOStream
@add { dt: @dt, :time }
@last = time
-class ScaledClock extends EventStream
+class ScaledClock extends EvtStream
set: (val) => @value
unwrap: => @value
-clock = ValueStream.meta
+clock = Constant.meta
meta:
name: 'clock'
summary: "Create a clock source."
@@ -41,13 +39,13 @@ frame rate.
setup: (inputs) =>
fps = (-val.num)\match inputs
- super fps: Input.hot fps or ValueStream.num 60
+ super fps: Input.hot fps or Constant.num 60
@out.frametime = 1 / @inputs.fps!
tick: =>
@out.frametime = 1 / @inputs.fps!
-scale_time = ValueStream.meta
+scale_time = Constant.meta
meta:
name: 'scale-time'
summary: "Scale clock time."
@@ -60,7 +58,7 @@ scale_time = ValueStream.meta
value: class extends Op
new: (...) =>
super ...
- @out or= EventStream 'clock'
+ @out or= EvtStream T.clock
pattern = -evt.clock + val.num + -val.str
setup: (inputs, scope) =>
@@ -74,7 +72,7 @@ scale_time = ValueStream.meta
for evt in *@inputs.clock!
@out\add {k, v*scale for k,v in pairs evt}
-lfo = ValueStream.meta
+lfo = Constant.meta
meta:
name: 'lfo'
summary: "Low-frequency oscillator."
@@ -92,9 +90,9 @@ lfo = ValueStream.meta
new: (...) =>
super ...
@state or= 0
- @out or= ValueStream 'num'
+ @out or= T.num\mk_sig!
- default_wave = ValueStream.str 'sin'
+ default_wave = Constant.str 'sin'
pattern = -evt.clock + val.num + -val.str
setup: (inputs, scope) =>
{ clock, freq, wave } = pattern\match inputs
@@ -114,7 +112,7 @@ lfo = ValueStream.meta
when 'tri' then math.abs (2*@state % 2) - 1
else error Error 'argument', "unknown wave type '#{wave}'"
-ramp = ValueStream.meta
+ramp = Constant.meta
meta:
name: 'ramp'
summary: "Sawtooth LFO."
@@ -129,7 +127,7 @@ ramp = ValueStream.meta
new: (...) =>
super ...
@state or= 0
- @out or= ValueStream 'num'
+ @out or= T.num\mk_sig!
pattern = -evt.clock + val.num + -val.num
setup: (inputs, scope) =>
@@ -150,7 +148,7 @@ ramp = ValueStream.meta
@out\set @phase * max
-tick = ValueStream.meta
+tick = Constant.meta
meta:
name: 'tick'
summary: "Count ticks."
@@ -165,7 +163,7 @@ tick = ValueStream.meta
new: (...) =>
super ...
@state or= { phase: 0, count: 0 }
- @out or= ValueStream 'num', @state.count
+ @out or= T.num\mk_sig! @state.count
pattern = -evt.clock + val.num
setup: (inputs, scope) =>
@@ -183,7 +181,7 @@ tick = ValueStream.meta
@state.count += 1
@out\set @state.count
-every = ValueStream.meta
+every = Constant.meta
meta:
name: 'every'
summary: "Emit events regularly."
@@ -206,8 +204,8 @@ every = ValueStream.meta
super
clock: Input.hot clock or scope\get '*clock*'
period: Input.cold period
- evt: Input.cold evt or ValueStream 'bang', true
- @out = EventStream @inputs.evt\type!
+ evt: Input.cold evt or Constant.bang, true
+ @out = @inputs.evt\type!\mk_evt!
tick: =>
for tick in *@inputs.clock!
@@ -217,7 +215,7 @@ every = ValueStream.meta
@state -= 1
@out\add @inputs.evt!
-sequence = ValueStream.meta
+sequence = Constant.meta
meta:
name: 'sequence'
summary: "Emit a sequence of values as events over time."
@@ -246,7 +244,7 @@ Emits `evt1`, `evt2`, … as events with delays `delay0`, `delay1`, … in betwe
setup: (inputs, scope) =>
{ clock, first, steps } = pattern\match inputs
- @out = EventStream steps[1].value\type!
+ @out = EvtStream steps[1].value\type!
table.insert steps, 1, { delay: first }
super
clock: Input.hot clock or scope\get '*clock*'
diff --git a/alv-lib/util.moon b/alv-lib/util.moon
index abb49c0..512d74d 100644
--- a/alv-lib/util.moon
+++ b/alv-lib/util.moon
@@ -1,4 +1,4 @@
-import Op, ValueStream, EventStream, Input, val, evt from require 'alv.base'
+import Constant, Op, Input, T, val, evt from require 'alv.base'
all_same = (list) ->
for v in *list[2,]
@@ -7,7 +7,7 @@ all_same = (list) ->
list[1]
-switch_ = ValueStream.meta
+switch_ = Constant.meta
meta:
name: 'switch'
summary: "Switch between multiple inputs."
@@ -24,12 +24,12 @@ switch_ = ValueStream.meta
setup: (inputs) =>
{ i, values } = pattern\match inputs
- @state = values[1].value.__class == ValueStream
+ @state = values[1].value.metatype == '~'
@out = if @state
- ValueStream values[1]\type!
+ values[1]\type!\mk_sig!
else
- EventStream values[1]\type!
+ values[1]\type!\mk_evt!
super
i: Input.hot i
@@ -52,7 +52,7 @@ switch_ = ValueStream.meta
for event in *active!
@out\add event
-edge = ValueStream.meta
+edge = Constant.meta
meta:
name: 'edge'
summary: "Convert rising edges to bangs."
@@ -60,7 +60,7 @@ edge = ValueStream.meta
value: class extends Op
setup: (inputs) =>
- @out or= EventStream 'bang'
+ @out or= T.bang\mk_evt!
value = val.bool\match inputs
super value: Input.hot value
@@ -70,7 +70,7 @@ edge = ValueStream.meta
@out\add true
@state = now
-change = ValueStream.meta
+change = Constant.meta
meta:
name: 'change'
summary: "Convert value changes to events."
@@ -79,7 +79,7 @@ change = ValueStream.meta
value: class extends Op
setup: (inputs) =>
value = val!\match inputs
- @out or= EventStream value\type!
+ @out or= value\type!\mk_evt!
super value: Input.hot value
tick: =>
@@ -88,7 +88,7 @@ change = ValueStream.meta
@out\add @inputs.value!
@state = now
-hold = ValueStream.meta
+hold = Constant.meta
meta:
name: 'hold'
summary: "Convert events to value changes."
@@ -97,7 +97,7 @@ hold = ValueStream.meta
value: class extends Op
setup: (inputs) =>
event = evt!\match inputs
- @out or= ValueStream event\type!
+ @out or= event\type!\mk_sig!
super event: Input.hot event
tick: =>