I’ve been looking around for ways to make a voice like the voice in the old teaser trailer video for the game DARK.
The voice is compelling and cool with it’s effects, and I was wondering how to recreate a somewhat similar one in Audacity.
In more detail, it is to be involved with a sci-fi skit of a character speaking inside a concealed helmet to his radio, but the voice is heard from his perspective. https://www.youtube.com/watch?v=zcnwrlNpLeI
I was going to go to my “Communications Radio” crushed voice effect, but I think that one’s more like a dual-pitch effect (I’m not at home, so I can’t do a good job listening).
Duplicate the voice track (Control-D, Windows) and apply Effect > Change Pitch to only one track. Change the volume of the shifted track to fade the effect in and out. You can use the Envelope Tool to fade in and out manually. Audacity naturally tries to play all your tracks together unless you tell it not to.
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”.
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).
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:
;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.
(sum (mult reflect (reflected sig))
(highpass16 sig hipas))
(defun reflected (sig)
;;; Comb filter simulates acoustic reflections inside helmet.
(let ((comb (comb sig 0.03 helmet-size)))
(lowpass2 (highpass16 comb hipas)
(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)))
(setf hnc (sum low high))
(if (arrayp sig)
(vector hnc hnc)
(sum (radio-crackle *track*)
(clipping (mult klip (helmet-echo *track*)))