New/improved plug-ins for potential inclusion in Audacity

What is the next approach to the -quality list for possible Audacity distribution?

Improved replacement plug-ins with more features:

  • Bass/Treble (ideally to replace Bass Boost)

  • We have a simple fade by dB plug-in listed in the New Plug-ins but we have more advanced ones elsewhere for consideration for inclusion in Audacity. I think we were choosing between two different cross-fades, a Fade Plus and a text envelope (not to mention a “target fade” which users were keener on than you). :slight_smile: Should these all be brought into New Plug-ins ?

  • I’m keen on Edgar-RFT’s more intuitive “Easy Vocoder”.

  • We aren’t ready yet with a more generally useful Binaural Surf but I think it is worth developing.

New Plug-ins:

  • I’m quite keen on Sample Printer

  • Any new ones you want to push for, Steve?

Finally, we should get 78rpm EQ Curve Generator on to the Wiki as soon as possible. I think it is near finished, isn’t it?




Gale

Yes, IIRC, what it needs is to remove the workarounds for the file separator issue and include an error message if it is used with a version earlier than 1.3.13. viewtopic.php?f=28&t=33824&start=100#p131531

I’ll try to get it straightened out in the next few days.

POL

If anybody wants to play with the “Easy Vocoder” effect:

The “Easy Vocoder” needs no special stereo audio tracks with “carrier” and “modulator” channels, it can be applied to an ordinary Audacity mono or stereo audio track like any other Audacity effect. The “Easy Vocoder” works best if applied to voice recordings, but also works with any other audio tracks.

Technical details: Instead of using “carrier” and “modulator” channels of an Audacity stereo audio track the “Easy Vocoder” uses built-in “sinewave” &optional “noise” and “pulse” carriers for each vocoder band and then adds the amplitude-modulated carriers together to produce the vocoder sound.

  • Advantage: No “split stereo track” / “make stereo track” fiddling any more like with the original Audacity “Vocoder” effect.


  • Disadvantage: The “Easy Vocoder” cannot modulate a “voice” onto a music track, it can only make a voice recording sound like an alienatic robot.

It would be theoretically possible to combine the original “Vocoder” and the “Easy Vocoder” into one big “Vocoder” effect but this then would probably complicate the user interface even worse. IMO there already are too many sliders in the original “Vocoder” effect. E.g. it makes not much sense to add more carriers as long as the user cannot adjust them in realtime during listening to the effect output. The audio perception in the human brain is not very good with handling “apply & undo” effects.

I like the fact that the “Easy Vocoder” is a one step “press the button” effect, but I don’t think it can replace the previous “Vocoder” effect because of the lack of alternative carriers. How about combining the effects but dropping some of the options from the original.

In particular, how about removing:
Output choice (use only the default “both”)
and removing both “radar needle” (and “pulse”) options (does anyone use these features?)

As this would then reduce the number of controls, there could perhaps be options to use the “easy mode” with alternative carriers:

Carrier choice: White noise (full spectrum), 1 octave noise, narrow band noise, Pink noise, Triangle, Square, Saw, Pulse, Left channel, Right channel
Frequency for generated waveform: 100 <--> 4000

I agree, the “Vocoder” is a fundamentally different effect than the “Easy Vocoder”, even if both names sound very similar.

The main internal difference and the main reason why combining both effects is not as easy as it sounds is that the “Vocoder” uses one single carrier for all vocoder bands, while the “Easy Vocoder” uses many different carriers with different frequencies, i.e. one carrier per vocoder band.

  • The “Vocoder” uses one single carrier for all vocoder bands. The carrier as well as the modulator are spitted into frequency-limited “bands”, then the “carrier” band is modulated by the respective “modulator” band, the resulting signals are bandpass-filtered again to remove the aliasing, and in the end all bands are summed together to produce the vocoder sound.


  • The “Easy Vocoder” doesn’t use a bandpass-filtered “carrier”, instead it uses one sinewave oscillator per vocoder band. The oscillators are modulated by bandpass-filtered “modulator” bands (produced from the Audacity audio track) with the same mid-frequency as the respective oscillator frequency. The modulated oscillator signals then are bandpass-filtered again to remove the aliasing, and finally summed together to produce the vocoder sound.

With the “Easy Vocoder” it doesn’t make sense to use any other waveforns than a sinewave, because the overtones of a triangle- or squarewave will not survive the anti-aliasing bandpass filter.

Also your proposal to add more waveforms will make the number of sliders explode by far, because it’s not the choice of different carrier waveforms, but it’s the mixing of different carrier waveforms that improves both vocoder effects. In other words, for every additional carrier waveform at least one volume slider needs to be added, otherwise the waveforms cannot be mixed.

For mixing multiple carrier waveforms Audacity badly lacks realtime effects.

Mixing a low-volume “pulse” to a narrow-band “carrier” works much better than adding “noise”. Therefore IMO the “pulse” is the most importand waveform of all, I myself nearly never use “noise”, mainly because it sounds boring. But removing “noise” completely from the effects is also not a really good idea.

The “output choice” is crucial if you use the “Vocoder” with a headphone. It saves you a lot of “split stereo track” / “make stereo track” fiddling, because many headphones have a built-in hardware channel switch, where you can switch the left or right channel to both headphone channels at will. This is much faster than switching channels in the plugin during lots of “apply & redo” effect fiddling.

I think you see that (fortunately or unfortunately) there are a good number of reasons for every gimmick in the “Vocoder” effect. It took nearly a year with lots of help from David Sky, Steven Jones, and Roger Dannenberg and many eternal email discussions until we had the first working vocoder version.

I remember very well that the intermediate “Vocoder” versions at some times had a size of several thousand line of Lisp code, until one day Steven Jones (if I remember right) came to the idea that a Nyquist sound object of the same length as the Audacity selection, initially filled with “silence” (zero-valued samples), can be used as an “accumulator” variable for sounds in a “dotimes” loop, what was the final breakthrough to reduce the code to a reasonable size again.

Unfortunately “eternal email discussions” means that chances are very low that anything can be thrown out from the plugin.

Thanks for the fascinating and detailed reply Edgar.
I guess that we could eventually end up lots of different vocoder effects.

I still would like to have a “unified” vocoder effect, but I’m afraid that this is again a lot of work.

There are still a lot of internal Nyquist details I still haven’t fully understood. If I use e.g. a single Nyquist “osc” as a carrier for both stereo bands I get memory problems (don’t ask me why), while if I use two phase-synchronized "osc"s as two carriers, one for each stereo band, I do not get memory problems.

I also do not think that it’s a really clever idea to overload the “Effect” menu with a myriad of only slightly different vocoder effects.

Somehow related (or not), a page with lots of funny speech machine samples is:

My favourite is number 29, the singing voice of the ‘Echo’ low-cost diphone concatenation system from 1982.

Thanks a lot to David Sky (R.I.P.).

Fantastic :smiley:

Thanks, Edgar for the explications.

The fundamental problem remains IMO that many can’t use the current vocoder without a lot of hand-holding, and even if they understand it, baulk at the steps to produce stereo output (even from a mono track, let alone a stereo track). So most will just go and download some VST equivalent of “Easy Vocoder” instead.

For now, I would suggest we ask if there is a consensus to replace “Vocoder” with “Easy Vocoder” in Audacity, then offer the current vocoder on Wiki “Download Nyquist Plug-ins” as an unfinished tool for those who want to vocode a voice onto a music track with their own choice of carrier wave. If there isn’t that consensus then we should I think list Easy Vocoder on Wiki and actually point to it in the Manual.

For future, is it out of court then to offer any choice of carriers in Easy Vocoder? Could it be done by offering some presets which then disable the sliders?



Gale

Even if I’m always cited as the “original” author of the “Vocoder” effect, it was never my idea to include the vocoder in the standard Audacity distribution, mainly because Audacity lacks nearly everything that’s needed to work with the “Vocoder” in an at least semi-reasonable way.

The main reason why I wrote the “Easy Vocoder” was because I was sick to explain over and over again the workarounds needed in Audacity to produce an at least semi-usable result with the “Vocoder” effect.

I agree that the “Easy Vocoder” cannot replace the “Vocoder”, mainly beacuse it has only a small fraction of the possibilities of the “Vocoder” effect, but the “Easy Vocoder” needs no extensive explanations how to use it and I assume that’s what most people want.

My original idea (as posted on the audacity-nyquist list some time ago) was to include the “Easy Vocoder” (instead of the “Vocoder”) in the official Audacity distribution and to offer the “Vocoder” on any of the Audacity plugin download pages.

To make the “Vocoder” work with Audacity, Audacity needs multitrack realtime effects with a realtime “Effect on/off” switch. Before this is not implemented it makes not much sense to think about a full “Vocoder” as an Audacity standard effect.

I do not see the “Vocoder” or the “Easy Vocoder” as “my property” or “my effects”, the Audacity community may decide what to do or not to do with the plugins. Everybody may feel free to fiddle around in the code and produce a (hopefully) better “Vocoder” effect.

  • edgar

What carriers come to mind? “noise” and “pulse” are the only physically existent synthetic broadband carriers. Narrow-band carriers like “triangle” and “squarewave” as single carriers (like in the “Vocoder”) make not much sense, that’s the reason why I used the “one sinewave per band” solution.

Example: With music (and the “Vocoder”), keyboard chords over several octaves work best, because they also have pretty broadband spectrum, while single notes do not work very well. Any other ideas or suggestions?

The choice of the carrier mainly depends on the spectrum of the speech signal, both spectra must fit as close as possible, otherwise you will not understand the speech in the modulated vocoder signal. As long as analyzing audio signals causes memory problems and crashes audacity I do not see any chance for an automatic solution.

It may not make much sense against the original purpose of a vocoder, but the “vocoder effect” was hijacked by music makers back in the late 60’s for producing new and weird sounds and has been used as such ever since. As a musical instrument effect the question of speech ineligibility is not relevant.

Low frequency square waves can produce some pretty cool effects:

Oh, understood: “pulse” must be changed to “sqarewave with variable puls-width”

New “Easy Vocoder” with additional “waveform” carrier at the expense of three additional interface widgets:

  • Bands per Octave - [old] - the number of vocoder bands per octave
  • Carrier Volume - [old] - the volume of the “sinewave per vocoder band” oscillators
  • Noise Volume - [old] - the volume of a “white noise” carrier oscillator
  • Pulse Volume - [old] - the volume of a “pulse train” carrier oscillator
  • Pulse Frequency - [old] - the “pulse train” oscillator frequency
  • Wave Volume - [new] - the volume of a “waveform” oscillator
  • Wave Frequency - [new] - the “waveform” oscillator frequency
  • Waveform - [new] - the waveform of the “waveform” oscillator, “Square” [default], “Sawtooth”, “Triangle”, or “Sine”

New: oscillators with the related “volume” slider set to 0.0 are not computed at all, so the new easy vocoder should run faster than the old version. Setting a high number of vocoder “bands per octave” improves the sound quality but slows down the processing time.
easy-vocoder.ny (4.69 KB)

It’s certainly a lot more versatile than the previous “Easy Vocoder”, but I’m seeing a lot of warnings about aliasing with the sine tone.
I think that Line 76 needs to be:

(3 (hzosc wave-freq))))

Yes, thanks, here the next attempt, this time with “hzosc:”
easy-vocoder.ny (4.69 KB)

OK, I’ll not ask why :wink:
but am I right in thinking that’s what this bit of the code is all about (lines 110 and 111):

  (do* ((channel 0 (1+ channel))
        (invert 1.0 (if (and (= alternate 1) (oddp channel)) -1.0 1.0))

Edgar: > … I get memory problems (don’t ask me why)
Steve: > OK, I’ll not ask why

That’s good because I still have no answer…

The separation of the "osc"s to prevent memory problems is done automatically by “multichan-expand” in the last line of the plugin code. The random “phase” value must be different for every vocoder band to prevent a nasty phase sweep effect in the first few seconds, but must be the same value for both stereo channels, otherwise the vocoder sounds sh*t with stereo tracks.

I first had tried to write a “vocoder-band” function that automatically handles stereo sounds, using one “osc” for both stereo channels, but was unable to get rid of memory problems. I still have no idea why this happens.

Steve: > am I right in thinking that’s what this bit of the code is all about…

There are two remainders from previous vocoder versions, the “distance” and the “alternate” variables (directly below the plugin header).

“distance” is a factor to compute the lowpass filter frequency from the mid-frequency of the vocoder band. This works similar like the Nyquist sound-srate and control-srate relationship, which in CMU_Nyquist (but not in Audacity) is defined as:

*control-srate* = *sound-srate* / 20

In the vocoder the lowpass frequency (producing the modulation envelope out of the “modulator” signal) is defined as:

lowpass-frequency = band-mid-frequency / distance

This way every vocoder band has a different lowpass frequency, what prevents the vocoder from sounding “static” (= boring).

In some previous vocoder versions there had been a “distance” slider in the plugin interface, but it has turned out that a value of 20 (like in CMU_Nyquist) seems to be the best possible compromise between “too much voice signal comes through” (distance too low) and “too much mumbling in the speech” (distance too high). Reasonable values for “distance” are from 2 (Nyquist frequency) to approx. 100 if you want to try it yourself.

“alternate” controls the transition between the vocoder bands. With alternate=0 all vocoder bands are added with the same phase, with alternate=1 every second vocoder band gets inverted before added.

With alternate=0 it’s like:

(sum (band-1)
     (band-2)
     (band-3)
     (band-4)
      ... )

With alternate=1 it’s like:

(sum (band-1)
     (scale -1 (band-2))
     (band-3)
     (scale -1 (band-4))
      ... )

Another idea: I think it could be possible to write a “unified” Vocoder if the computition of the “waveform” signal is controlled via Lisp macros.

As soon as I have time I will write a “Vocoder Internals” page with all the details explained with pictures. I think all this then will be easier to understand (most of all for me myself…)

  • edgar

With Edgar’s help we’re trying to document how to use the shipped Vocoder and again coming across the obvious problem that there are mind-boggling steps needed if you want to work with stereo modulators or stereo carriers.

I’m not happy if Edgar feels the incorrect effect of his is being shipped with Audacity.

If we want to make a case for the “Easy Vocoder” to replace Vocoder as the shipped vocoder, which version of Easy Vocoder do we propose? Is the second version New/improved plug-ins for potential inclusion in Audacity - #14 by edgar-rft that has choice of waveform “ready” and “stable”? Does the choice of waveform justify the extra controls if we want this to be “easy”? I don’t hear radical differences between the different waveforms at default settings.

Is this the ultimate solution - should we wait for this? I think perhaps we should replace the Vocoder before then.

Until we do replace the shipped vocoder with an “Easy Vocoder”, I propose we publish one of the two “Easy Vocoders” on Missing features - Audacity Support in time for 2.0.2, assuming we feel either publishable, and link to it in the Manual (and/or on Wiki if we publish how to use the shipped Vocoder on Wiki). This should publicise the discussion a little.

Thoughts?


Gale

Having now read Edgar’s tutorial on the draft Vocoder page in the manual and also having re-read this thread I now realize how very difficult it is to use the effect that we currently ship.

My vote would be to shipone of the two Easy Vocodesrs with Audacity replacing the cuurrent Vocoder effect - but to make the Vocoder effect availabla as an optional plugin - and with the documentation that Edgar has been writong available.

I can’t really help choose which of the two Easy Vocoders would be most useful (and most used) as I do not use such effects so have no hands-on experience - maybe it could be written in such a way that default usage was Easy-peasy-vocoder, simple with no options, but with an “Options” button with a pop-up dialog box for users who wanted to make tweaks.

Peter.