File: Dconst.schelp

package info (click to toggle)
supercollider 1%3A3.13.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 80,292 kB
  • sloc: cpp: 476,363; lisp: 84,680; ansic: 77,685; sh: 25,509; python: 7,909; makefile: 3,440; perl: 1,964; javascript: 974; xml: 826; java: 677; yacc: 314; lex: 175; objc: 152; ruby: 136
file content (45 lines) | stat: -rw-r--r-- 1,351 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
TITLE:: Dconst
summary:: Constrain a demand-rate stream to a given sum
categories:: UGens>Demand

DESCRIPTION::
A demand-rate analog to link::Classes/Pconst::. It outputs values from the child demand stream until the sum of those values reaches or exceeds a given total. The last value will be truncated so that the sum of Dconst's output values will match the total exactly.

CLASSMETHODS::

METHOD:: new

ARGUMENT:: sum
The sum to reach. This may be a number, demand UGen or any other UGen. When a Dconst instance resets, one value will be taken for the sum, and it can't be modulated until the next reset.

ARGUMENT:: in
A demand-rate stream, providing the output values.

ARGUMENT:: tolerance
Because of floating point rounding error, it isn't safe to stop only when the output's running sum is equal to the desired total. teletype::tolerance:: is how close the running sum can get to stop the output: code::abs(runningsum - sum) <= tolerance::.

returns:: A demand-rate stream.


EXAMPLES::

code::
// fast notes of random duration for 0.5 seconds
// then a single note for 0.5 seconds
(
a = {
	var freq = Duty.kr(
		Dseq([
			Dconst(0.5, Dwhite(0.05, 0.08, inf)),
			0.5
		], inf),
		0,
		// workaround for the lack of Dexprand
		Dwhite(0, 1, inf).linexp(0, 1, 200, 600)
	);
	VarSaw.ar(Lag.kr(freq, 0.02), 0, 0.3, 0.1).dup
}.play;
)

a.free;
::