object Mix extends ProductReader[Mix] with Serializable
A graph element that mixes the channels of a signal together. It works like the sclang counterpart.
The Mix
companion object contains various useful mixing idioms:
- Mix.tabulate(n: Int)(fun: Int => GE)
: corresponds to Seq.tabulate
and to Array.fill
in sclang.
- Mix.fill(n: Int)(thunk: => GE)
: corresponds to Seq.fill
.
- Mix.seq(elems: GE*)
: A shortcut for Mix(GESeq(elems: _*))
.
A separate graph element is Mix.mono
.
Mix.mono(elem: GE)
flattens all channels of
the input element before summing them, guaranteeing that the result is monophonic.
Finally, Mix.fold
is an idiom that not actually adds elements,
but recursively folds them. Thus,
Mix.fold(elem: GE, n: Int)(fun: GE => GE)
is equivalent to
(1 to n).foldLeft(elem) { (res, _) => fun(res) }
Mix.fold
is often used in the SuperCollider examples to apply a filtering
process such as reverberation several times. For cases where the iteration
index is needed, the full form as shown above can be used instead.
Examples
// non-nested multi-channel signal reduced to mono (1) play { Mix(SinOsc.ar(440 :: 660 :: Nil)) * 0.2 // --> SinOsc.ar(440) + SinOsc.ar(660) }
// non-nested multi-channel signal reduced to mono (2) play { Mix(Pan2.ar(SinOsc.ar)) * 0.2 // --> left + right }
// mix inner channels play { // --> [left(440) + left(660), right(440) + right(660)] Mix(Pan2.ar(SinOsc.ar(440 :: 660 :: Nil))) * 0.2 }
// enforce monophonic mix play { // --> left(440) + left(660) + right(440) + right(660) Mix.mono(Pan2.ar(SinOsc.ar(440 :: 660 :: Nil))) * 0.2 }
// combine Mix(), Mix.fill(), Mix.fold() // from original SC examples: reverberated sine percussion play { val d = 6 // number of percolators val c = 5 // number of comb delays val a = 4 // number of allpass delays // sine percolation sound : val s = Mix.fill(d) { Resonz.ar(Dust.ar(2.0 / d) * 50, Rand(200, 3200), 0.003) } // reverb pre-delay time : val z = DelayN.ar(s, 0.048) // 'c' length modulated comb delays in parallel : val y = Mix(CombL.ar(z, 0.1, LFNoise1.kr(Seq.fill(c)(Rand(0, 0.1))).madd(0.04, 0.05), 15)) // chain of 'a' allpass delays on each of two channels (2 times 'a' total) : val x = Mix.fold(y, a) { in => AllpassN.ar(in, 0.050, Seq(Rand(0, 0.050), Rand(0, 0.050)), 1) } // add original sound to reverb and play it : s + 0.2 * x }
// Mix.tabulate usage // from original SC examples: harmonic swimming play { val f = 50 // fundamental frequency val p = 20 // number of partials per channel val offset = Line.kr(0, -0.02, 60, doneAction = freeSelf) // causes sound to separate and fade Mix.tabulate(p) { i => FSinOsc.ar(f * (i+1)) * // freq of partial LFNoise1.kr(Seq(Rand(2, 10), Rand(2, 10))) // amplitude rate .madd( 0.02, // amplitude scale offset // amplitude offset ).max(0) // clip negative amplitudes to zero } }
- See also
- Alphabetic
- By Inheritance
- Mix
- Serializable
- ProductReader
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- final case class Mono(elem: GE) extends GE.Lazy with Product with Serializable
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def fill(n: Int)(thunk: => GE): GE
A mixing idiom that corresponds to
Seq.fill
. - def fold(elem: GE, n: Int)(fun: (GE) => GE): GE
A mixing idiom that is not actually adding elements, but recursively folding them.
A mixing idiom that is not actually adding elements, but recursively folding them.
Calling this method is equivalent to
(1 to n).foldLeft(elem) { (res, _) => fun(res) }
It is often used in the SuperCollider examples to apply a filtering process such as reverberation several times. For cases where the iteration index is needed, the full form as shown above can be used instead.
- elem
the input element
- n
the number of iterations
- fun
a function that is recursively applied to produce the output
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def mono(elem: GE): GE
A special mix that flattens all channels of the input element before summing them, guaranteeing that result is monophonic.
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def read(in: RefMapIn, key: String, arity: Int): Mix
- Definition Classes
- Mix → ProductReader
- def seq(elems: GE*): GE
A shortcut for
Mix(GESeq(elems: _*))
. - final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def tabulate(n: Int)(fun: (Int) => GE): GE
A mixing idiom that corresponds to
Seq.tabulate
and toArray.fill
in sclang. - def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- object Mono extends ProductReader[Mono] with Serializable
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated