70 lines
1.2 KiB
Racket
70 lines
1.2 KiB
Racket
#lang scribble/manual
|
|
@(require (for-label racket))
|
|
|
|
@title{ModDif}
|
|
Minimum difference of two values in modulo arithmetics@section{related}
|
|
Classes/Clip, Classes/Wrap
|
|
@section{categories}
|
|
UGens>Maths
|
|
|
|
|
|
@section{description}
|
|
|
|
Returns the minimum difference of two values in modulo arithmetics. On a circle, there are two distances between two points. This UGen returns the smaller value of the two.
|
|
|
|
|
|
@racketblock[
|
|
{ var a = Line.ar(0, 4, 0.01), d = ModDif.ar(a); [a, d] }.plot;
|
|
{ var a = Line.ar(0, 4, 0.01); ModDif.ar(a, 0, (1..4)) }.plot;
|
|
{ var a = Line.ar(0, 4, 0.01); ModDif.ar(a, (0, 0.25 .. 1), 1) }.plot;
|
|
|
|
::
|
|
|
|
|
|
]
|
|
@section{classmethods}
|
|
|
|
|
|
@section{method}
|
|
ar, kr, ir
|
|
|
|
@section{argument}
|
|
x
|
|
First input value
|
|
|
|
@section{argument}
|
|
y
|
|
Second input value
|
|
|
|
@section{argument}
|
|
mod
|
|
Modulo (maximum value, double of the maximal difference).
|
|
|
|
|
|
@racketblock[
|
|
|
|
// different moduli
|
|
(
|
|
{
|
|
var sig = LFSaw.ar(10);
|
|
var dist = ModDif.kr(sig, 0, (0..8) * MouseX.kr(0, 1/5));
|
|
Splay.ar(SinOsc.ar(dist * 4000 + 400)) * 0.1
|
|
}.play;
|
|
)
|
|
|
|
// wrapping amplitude crossfade
|
|
(
|
|
{
|
|
var numChan = 12;
|
|
var x = SinOsc.ar({ rrand(300.0, 800.0) } ! numChan);
|
|
var dist = ModDif.kr(MouseX.kr(0, numChan * 2), (0..numChan-1), numChan);
|
|
x = x * max(0, 1 - dist);
|
|
Splay.ar(x) * 0.1
|
|
}.play;
|
|
)
|
|
::
|
|
|
|
|
|
]
|
|
|
|
|