Yes that was a “generator” rather than an “effect”.
For generating a “string pad” type sound you need a lot of overtones/harmonics. You could start with one or more square waves or triangle waves, or saw waves, to produce a rich frequency spectrum (additive synthesis), or you could start with sound generated using “Pulse Width Modulation”. The code that I posted contains 3 PWM generators and a simple envelope shaper.
(sim
<sound 1>
<sound 2>
<sound 3>
)
The “sim” function (simultaneous) combines the three sounds (mixes them).
(osc-pulse 110 (sum 0.35 (mult 0.4 (hzosc 56.2))))
This is the first generator.
It is made from a pulse oscilator (osc-pulse).
The basic way that the pulse oscilator works is that you define the frequency, and the width of the pulse.
(osc-pulse )
So the frequency of this oscilator is 110 Hz.
The “width” parameter (more accurately called the “bias” parameter) is a value between +/- 1
If the bias parameter is zero it will create a square wave - try the following code in the Nyquist Prompt:
(osc-pulse 100 0)
This produces a full-scale square wave with a fundamental frequency of 100 Hz.
It’s easy to scale the amplitude of a sound, simply by multiplying the sound by a number less than 1. So if we want a half height square wave with a fundamental frequency of 440 Hz we could write:
(mult 0.5 (osc-pulse 440 0))
If the pulse width is less than zero, the pulse will be negative more than it is positive, for example:
(mult 0.5 (osc-pulse 440 -0.5))
Here’s some other oscillators:
(mult 0.8 (hzosc 440))
(mult 0.4 (osc-saw 220))
(mult 0.9 (osc-tri 88))
and a generator that is not an oscillator - any guesses what this does? 
(mult 0.5 (noise))
I’ll have to get back to you with the rest of the explanation later in the week as it’s now late and I have to be up early tomorrow.