How to make your voice like this? (Presumably helmet-radio)

or put this code in Nyquist Prompt

(lowpass8 (lowpass8 
(sum (lowpass2 (highpass8 (highpass8 (comb *track* 0.03 333)300)300)2000)
 (highpass8 (highpass8 *track* 300)300))
4000)4000)

helmet-voice code.png
Then use Audacity’s (hard) limiter

Nice. That works pretty well :slight_smile:

You could also include clipping in the Nyquist code using the CLIP function (Nyquist Functions)

It’s also a good idea to add the Nyquist version number so as to avoid confusion over legacy code. When the version header is added, it overrides the “legacy syntax” checkbox.

;version 4

(defun helmet-echo (sig)
  (lowpass8 (lowpass8
    (sum (lowpass2 (highpass8 (highpass8 (comb sig 0.03 333)300)300)2000)
         (highpass8 (highpass8 sig 300)300))
    4000)4000))

(lowpass8
  (clip (mult 2 (helmet-echo *track*))
        0.5)
  4000)

New & improved helmet-radio effect plugin …
HelmetRadio.ny (1.15 KB)

Not just helmets: the plugin is also usable for simulating Lo-Fi loudspeakers: intercom, speaker-phone, cheapo-cassette.

There maybe an error in Helmet radio 1.1 plugin:

(sum (hissNcrackle *track*)(radio-crackle *track*)(lowpass8
(clip (sum (mult klip (helmet-echo *track*))) (/ klip)) 
 4000))

The function “SUM” in the above does nothing as you have provided only one parameter: (mult klip (helmet-echo track))
I’m not sure what you are wanting to do there.

Now I see the second “SUM” in that code is redundant, (a hangover from a previous version).

Here’s version 1.2, with sliders for high & low pass filters …
Helmet Radio-1-2.ny (1.27 KB)
The only problem remaining is hissNcrackle is only on the left channel, but that’s no big deal : the usage will typically be on mono. ( I did try the “multichan-expand #'” to create stereo hissNcrackle, but I couldn’t get it to work ).

I also notice that you have two controls; “constant hiss” and “constant crackle”, but they are not constant because you multiply them by track. So when track is silent, then the “constant” hiss and crackle will be silent.
Again I’m nut sure what you want, but if you want the hiss and crackle to vary with the voice, then these controls should perhaps be renamed as just “hiss” and “crackle”.
On the other hand, if you want them to be constant, then you need to remove the “(mult track” from those expressions.

This version should be functionally identical to “Helmet radio 1.1”, but I’ve reformatted the code so that I could debug it. I think it should also be easier to tweak this version as it separates out the various effects into separate functions.
HelmetRadio12.ny (1.84 KB)
Update: I see our posts have crossed. The plug-in here is based on “Helmet radio 1.1 plugin”.

I seem to have inadvertently fixed that in my reformatted version.

There were two different crackles: one only on voice, and another constant one which would add crackle to silence.
Similarly “constant hiss” adds hiss even when there is no voice …

Version 1.3 …
HelmetRadio1-3.NY (1.77 KB)
I had to revert to the old noise-generators. Your noise-code was more elegant but it wasn’t producing the same radio-like hiss & crackle sounds. “clip2”, (effectively normalizing to 0dB before clipping), also had to go : it was making the very clipped sounds deafeningly loud.

HelmetRadio 1.3 , like previous versions only produces (optional) constant hiss & crackle on the left channel, so OK for mono , not stereo . (Oddly the radio-crackle, which only occurs with speech, is on both channels).

Add enclosed telephone-booths to that list.

HelmetRadio1-3 does a pretty good analogue telephone …
'Analogue-Telephone' settings.png

Apologies for posting on such an old thread.
Wanted to simulate an old radio and came across this plugin, but I think there is an error with it (version 1.3)

Should this:

;control lopas "Low pass" float (Hz)"" 4000 1000 14000
;control hipas "High pass" float (Hz)"" 300 20 1000

Not be changed to this?

;control lopas "Low pass (Hz)" float "" 4000 1000 14000
;control hipas "High pass (Hz)" float "" 300 20 1000

Or the following if you want the “Hz” to be on the right of the sliders:

;control lopas "Low pass" float "(Hz)" 4000 1000 14000
;control hipas "High pass" float "(Hz)" 300 20 1000

Either that or:

;control lopas "Low pass" float "(Hz)" 4000 1000 14000
;control hipas "High pass" float "(Hz)" 300 20 1000

Feel free to post a “1.4” version to fix it.

Yep, sorry edited my post just before you posted yours.

OK, will upload a corrected version (1.4) with the “(Hz)” on the right hand side.

Below, the updated version (1.4) with the corrected syntax.
HelmetRadio1-4.ny (1.9 KB)

Looks good to me.

The practical, (rather than GUI), problem with helmet-radio plugin is that “constant hiss” & “constant crackle” only occur on the left channel on stereo tracks.

That’s because you are adding a mono sound (the hiss and crackle) to a stereo sound.

In the manual (SIM and SUM are equivalent):

If the number of channels does not match, the result has as many channels as the argument with the most channels. For example, if a two-channel sound [L, R] is added to a four-channel sound [C1, C2, C3, C4], the result is [L + C1, R + C2, C3, C4].

In this case: [M] + [L, R] = [M+L, R]

To get the hiss and crackle in both channels, you could make the hiss and crackle stereo (2 channels) before adding.
If you want true stereo hiss and crackle, then you need to generate the hiss and crackle twice:

(vector (hissNcrackle) (hissNcrackle))

or if you want the hiss and crackle to be 2-channel-mono

(let ((hnc (hissNcrackle)))
  (vetcor hnc hnc))

Maybe something like this:

;nyquist plug-in
;version 4
;type process
;name "Helmet Radio 1.4..."
;action "Processing ..."
;author "Steve Daulton and Trebor"
;copyright "Released under terms of the GNU General Public License version 2"

;; This version is identical to 1.3 but with a syntax correction to
;; the controls of 'lopas' and 'hipas'.
;; Paul2 (13 January 2022).

;control helmet-size "Helmet size" float "" 444 200 1000
;control reflect "Helmet refectivity" float "" 0.75 0 2
;control voice-crackle "Voice crackle" float "" 0.01 0 .2
;control hiss "Constant hiss" float "" 0.02 0 1
;control crackle "Constant crackle" float "" 0.02 0 .5
;control klip "Clipping" float "" 2 0 20
;control lopas "Low pass" float "(Hz)" 4000 1000 14000
;control hipas "High pass" float "(Hz)" 300 20 1000


;; Bigger helmet has lower comb frequency .
(setf helmet-size  (- 1200 helmet-size))

;; klip must be > 1
(setf  klip  (+ 1 klip))


(defun helmet-echo (sig)
  ;;; Simulate acoustics inside helmet.
  (lowpass16
    (sum (mult reflect (reflected sig))
         (highpass16 sig hipas))
    lopas))

(defun reflected (sig)
  ;;; Comb filter simulates acoustic reflections inside helmet.
  (let ((comb (comb sig 0.03 helmet-size)))
    (lowpass2 (highpass16 comb hipas)
              lopas)))

(defun clipping (sig)
  ;;; Low-passed clipping
  (let ((clipped (clip sig (/ klip))))
    (setf clipped (mult (+ 1 (/ klip 10)) clipped))
    (lowpass8 clipped lopas)))


;;; Helper functions:

(defun lowpass16 (sig hz)
  (lowpass8 (lowpass8 sig hz) hz))

(defun highpass16 (sig hz)
  (highpass8 (highpass8 sig hz) hz))


;;; Noise generators:

(defun crackle (n)
  (let ((noise 1))
    (dotimes (i n noise)
      (setf noise (mult noise (noise))))))

(defun radio-crackle (sig)
  (mult voice-crackle (crackle 3) *track*))

(defun hissNcrackle (sig)
  (let ((low (lowpass2 (mult hiss (crackle 6)) 2000))
        (high (mult crackle (crackle 10)))
        hnc)
    (setf hnc (sum low high))
    (if (arrayp sig)
        (vector hnc hnc)
        hnc)))


(sum (radio-crackle *track*)
     (clipping (mult klip (helmet-echo *track*)))
     (hissNcrackle *track*))

Yes, different hiss & crackle in each channel would be ideal:
then it could be used to emulate lo-fi stereo speakers, (e.g. boombox).

Helmet Radio 1-5.NY (2.15 KB)

Thank you Steve and Trebor.
The plugin is now even more versatile than before.
Finding quite a few uses for it.

The GUI problem restricted the freq range of the highpass and lowpass to the default
and the stereo crackle makes for more realistic effects.