Object/Class

de.sciss.synth.ugen

Mix

Related Docs: class Mix | package ugen

Permalink

object Mix extends 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

BinaryOpUGen

Reduce

Linear Supertypes
Serializable, Serializable, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Mix
  2. Serializable
  3. Serializable
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. final case class Mono(elem: GE) extends GE.Lazy with Product with Serializable

    Permalink

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  8. def fill(n: Int)(thunk: ⇒ GE): GE

    Permalink

    A mixing idiom that corresponds to Seq.fill.

  9. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. def fold(elem: GE, n: Int)(fun: (GE) ⇒ GE): GE

    Permalink

    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

  11. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  12. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  13. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  14. def mono(elem: GE): GE

    Permalink

    A special mix that flattens all channels of the input element before summing them, guaranteeing that result is monophonic.

  15. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  16. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  17. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  18. def seq(elems: GE*): GE

    Permalink

    A shortcut for Mix(GESeq(elems: _*)).

  19. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  20. def tabulate(n: Int)(fun: (Int) ⇒ GE): GE

    Permalink

    A mixing idiom that corresponds to Seq.tabulate and to Array.fill in sclang.

  21. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  22. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  23. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  24. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Serializable

Inherited from Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped