Skip to content

Noise Controller ('Band-Limited Impulse')

Description

Outputs a random series of band-limited impulses. The cutoff, random delay time range and output value range can all be dynamically controlled using other controllers.

(make-controller 'noise ... )

Lisp, and Lua Syntax

The dynamic controller can be created using the following Lisp or mlys.lua syntax:

(make-controller 'noise
                  dimension
                  period
                  (list cutoff delmin delmax outmin outmax)
                  taps)

The list of 5 controllers (cutoff, delmin, delmax, outmin and outmax) must be provided in list format.

modalys.create_controller{ kind="noise", name="MyNoise"
                           dimension=1,
                           period=0,
                           cutoff=8000,
                           delmin=0.3,
                           delmax=0.7,
                           outmin=0,
                           outmax=1,
                           taps=10 }

• The period parameter is optional and set to 0 (every sample) by default.
• The cutoff, delmin, delmax, outmin, outmax and phase parameters can be either controllers, or numerical values, in latter case some dynamic controllers are created automatically (controllable via MyNoise@cutoff {value} {time}, MyNoise@delmin {value} {time} etc. messsages.)

Parameters

The 'noise controller takes four arguments, the third of which is a list of 5 controllers:

  • dimension: number of dimensions of the output controller.
  • period: sampling period (seconds).
  • cutoff: a controller specifying the cutoff frequency (in Hz.).
  • delmin: controller specifying the minimum entry delay in seconds.
  • delmax: controller specifying the maximum entry delay in seconds.
  • outmin: controller specifying the minimum output value.
  • outmax: controller specifying the maximum output value.
  • taps: integer number of taps used in the smoothing filter (an even integer not less than 4).

The period is used to define the time between the updates of the controller. If zero is given then it updates every sample.

The cutoff frequency is a controller and therefore can be dynamically variable. For single-sample clicks you can give a cutoff euqal to the sampling rate.

The delmin and delmax parameters let you choose the timing between impulses. If these values are the same the impulses will be generated in a regular rhythm, otherwise the entries of each impulse will be randomly chosen within the range provided.

The outmin and outmax parameters let you similarly control the output range for the amplitude of the impulses.

The number of filter taps for the smoothing function can be chosen. This parameter has an effect on the quality of the smoothing (but remember that the computation time increases with the square of taps). A good "clean" value for taps is 30, but anyway this is noise, so taking it down to 10 probably would not affect the sound that much for most uses. The minimum value for this parameter is 4.

Note also that using a higher value for the filter taps parameter may sometimes result in controller values that slightly exceed the -1 to 1 range. The random values themselves are within range, but bandlimiting and smoothing process will cause them to exceed these limits slightly.

Discussion

The Modalys 'noise controller can output a wide variety of sounds, from metronomic bleeps to white noise. Here are some practical examples that should help you understand how it works. The graph shown in the image, above, outputs a series of impulses which get increasingly farther apart over 2 seconds:

(make-controller 'noise 1 0
         (list    (const 1000)
                   (make-controller 'envelope 1 '((0 0.001) (2 0.1)))
                   (make-controller 'envelope 1 '((0 0.01) (2 0.5)))
                   (const -1)
                   (const 1))
         10)
You could use the generator to create white noise like this (the impulses will be updated every sample since the min and max delay are zero):

(make-controller 'noise 1 0
         (list    (const 44100)
                  (const 0)
                  (const 0)
                  (const -1)
                  (const 1))
         10)
This will create a series of clicks with random amplitude values which are spaced evenly 100 milliseconds apart:

(make-controller 'noise 1 0
         (list    (const 44100)
                  (const 0.1)
                  (const 0.1)
                  (const -1)
                  (const 1))
         10)
This will create a series of slightly-pitched filtered impulses with uniform amplitude values at unit gain which are spaced irregularly approximately 20 milliseconds apart, resulting in a slightly vocal quality (notice we have increased the filter taps to 30 for a cleaner sound):

(make-controller 'noise 1 0
         (list    (const 1760)
                  (const 0.018)
                  (const 0.022)
                  (const 1)
                  (const 1))
         30)
Naturally, such impulses can be dynamically controlled and used to great effect as sources for excitation using a 'force connection.


★     ★