Applies a variable vibrato to the selected audio.

Maximum length is 99,999 samples (per audio channel).
This limitation is hard coded into Audacity as the maximum size for table is 100000 samples.

Thanks to Edgar-rtf for the suggestion of using (fmosc), which in spite of the length limitation provides an elegant solution.
To overcome the length limitation, the function (snd-compose) could be used - this function uses a sound as a look-up table rather than using table.

Old version: vibrato.ny
Latest version: vibrato.ny
Note that the latest version removes the 99,999 sample limit.
See this post for details about the latest version:

The latest version of this Nyquist plug-in is available on the Audacity wiki:

Interesting effect, Steve.

I just took a quick look at it, and tried to get a slow vibrato (approx 1 to 2 Hz), but entering 1.0 for Initial and Final speeds gave a result that sounded like about 10Hz, and entering anything less than 1.0 didn’t seem to make any difference. :confused:

Sorry I can’t be more constructive, but I haven’t yet got my head around pwlv and fmosc. Maybe later …


Thanks for checking it out, and you’re correct, the vibrato speed is too fast.
This update should fix it.
vibrato.ny (1.7 KB)
Re. (pwlv), have a play with this code in the Nyquist Prompt:

(setq L1 0.5)
(setq L2 1.0)
(setq L3 0.0)
(setq L4  0.5)

(setq T2 0.33)
(setq T3 0.67)
(setq T4 1.0)

(control-srate-abs *sound-srate*
   (pwlv L1 T2 L2 T3 L3 T4 L4)

The function (control-srate-abs) srate beh) forces beh to be calculated at a sample rate of srate.
In this case, the sample rate is set to sound-srate, which is the sample rate of the selected audio.
The reason for having that function here is that envelopes are normally calculated at the control rate, which is normally much lower than the sample rate of the track and so the output of pwlv would be shrunk down to a tiny length when it is returned to the audio track. By forcing pwlv to be calculated at the sound sample rate, the output from pwlv will be such that a time value of 1.0 is equal to the length of the selection. (the time values are relative time values).

New version. Requires Audacity 2.1 (soon to be released) or later.

The interface is a little different from the previous version.

The default has one numeric value set for “Vibrato speed” and one for “Vibrato depth”. This will give a constant vibrato at the specified depth and speed.
The text boxes will also accept multiple numeric values separated by spaces. In this case, the supplied values will be evenly distributed between the start and end of the selection, providing a smooth transition from one value to the next.

Example: Setting the “Vibrato speed” to:

0 30 0

This will cause the vibrato speed to gradually increase from zero to 30 Hz and back down to zero.


  1. This version overcomes the 999,999 sample limit and may now be used on longer audio without error. However, when processing long selections there will be a gradual deterioration in sound quality due to cumulative rounding errors (not that a vibrato effect is often used on sounds much more than a few seconds duration).

  2. In common with most other time stretching effects, the length of the selected audio may change slightly as a result of processing (though usually only by a very small amount).
    vibrato.ny (2.68 KB)

10 years later…
As indicated here:
There’s an incompatibility with the original version of the effect and current versions of Audacity.

This version fixes the compatibility problem:
vibrato.ny (1.74 KB)
Note: This does NOT fix the limited length issue.
Ideally the changes in the previous post should be incorporated to fix the length limitation.

Updated version:
vibrato.ny (1.66 KB)
This version eliminates the 100,000 sample limit, but it should still be used on short selections only.

This plug-in is intended for use on short selections.
Due to cumulative rounding errors, the sound quality will gradually deteriorate on long selections, so it is recommended to apply the effect to selections that are less than 1 minute.

This effect applies vibrato (a regular pulsating change of pitch) to the selected audio. The speed at which the sound pulsates can be varied over time by selecting an initial speed and a final speed. The vibrato speed will smoothly transition from the initial speed to the final speed. For a constant speed vibrato, set the Initial and Final speed settings to the same value.

The depth of the vibrato (amount of pitch variance) can varied over time by setting initial, mid point and final depth values. The vibrato depth begins at the initial value and smoothly transitions to the mid-point value, then to the final value. The time at which the mid-point depth is achieved can be adjusted. When “Mid point position” is set to 50%, the mid-point depth is reached half way through the selection. Smaller “Mid point position” values shift the mid-point earlier, so that the transition in depth from “Initial” to “Mid point” occurs more quickly, and the transition from “Mid point” to “Final” occurs more slowly. Similarly, larger values shift the mid-point later.

The maximum vibrato depth (100%) is equivalent to a pitch deviation of +/- 1 whole tone. At 50%, the deviation is +/- 1 semitone.


  • Initial speed: [0 to 10, default 1] The initial vibrato speed (wobbles per second).
  • Final speed: [0 to 10, default 5] The vibrato speed at the end of the selection.
  • Initial depth: [0 to 100%, default 10%] The amount of pitch variance at the start of the selection.
  • Mid point depth: [0 to 100%, default 100%] The amount of pitch variance at the mid-point.
  • Final depth: [0 to 100%, default 0%] The amount of pitch variance at the end of the selection.
  • Mid point position: [0 to 100%, default 30%] How far through the selection that the mid-point depth is reached.

This isn’t working for me at all. Every time I try, it gives me this message: %.2f

Whoever is in charge of approving posts. Nevermind. I downloaded the latest plugin, and it’s works fine. Just gotta fine tune the settings for my needs.

Super. Thanks for the update.