Vader voice changer

Status
Not open for further replies.

noxvox

New member
Hello! Audio newb here. With Halloween around the corner I've been playing with recreating a Darth Vader voice effect. So far my result sounds less like the sith lord and more like a demon on nitrous oxide talking through a box fan. I'm wondering if you lovely people have ideas or have ever reproduced a similar effect.

I've tried various combinations of pitch shifting (using the granular effect), flange, reverb, chorus, etc, but I do not feel like I'm converging on a great result.

The guys on prop forums and costuming forums create the voice effect using products like the Zoom Multistomp guitar effects pedal (~$100) or specialty boxes like the Hyperdyne Vortex 3 voice changer ($400+). Interesting note about the Vortex 3.. it is built around the Teensy audio board.

Anyway if anybody has ideas then I'd love to hear them.
 
Frank_B I see this on the YouTube comment - links to the sketch:

Published on Feb 21, 2018

Subscribe 703
30 Hz ring modulation and diode clipping done by Paul Stoffregen's Teensy Audio Library. Based on the original concept by ex-wife Jenni. Don't know if she ever finished hers but the statue of limitations for stealing an idea and running with it us up.

Sketch here:
https://pastebin.com/dYf49wp5

<edit>: I don't find it on INTRUCTABLES ….INTRUCTABLES ….INTRUCTABLES ….INTRUCTABLES ….

INO >> View attachment DALEK_dYf49wp5.txt
 
Last edited:
Cool seeing it with the lights on the megaphone, nice touch.

When I did the dalek voice coder, I kinda liked the triangle waveform
Code:
  sine1.begin(WAVEFORM_TRIANGLE);
 
Thanks for the input. I played with the sine wave a bit by itself and in combination with other effects but still didn't feel like I was zeroing in on an acceptable Vader sound. That Dalek megaphone is pretty slick though.

I've spent some time trying to get an idea of which effects that the two aforementioned voice modulators use. The Vortex docs say it uses pitch shifting (2.25 semitones down by default), echo, and reverb but doesn't go into further detail. I had more luck with the Zoom Multistomp since some costumers have posted the settings they use. There are five effects and I've transcribed explanations from the product documentation for each effect's settings, as well as the range of values and the specific value suggested for the Vader effect. I'll just barf it all here:


1) Compressor:
This compressor in the style of the MXR Dyna Comp.
* Sense [0 - 10]: 4 Adjusts the compressor sensitivity.
* Tone [0 - 10]: 8 Adjusts the tone.
* Level [0 - 150]: 78 Adjusts the output level.
* Attack [slow|fast]: fast Sets compressor attack speed to Fast or Slow.

2) Flanger:
This is a jet sound like an ADA flanger
* Depth [ 0 - 100]: 5 Sets the depth of the modulation.
* Rate [ 0 - 50]: 7 Sets the speed of the modulation.
* Reso [-10 - 10]: 0 Adjusts the intensity of the modulation resonance.
* PreD [ 0 - 50]: 21 Sets pre-delay time of effect sound.
* Mix [ 0 - 100]: 21 Adjusts the amount of effected sound that is mixed with the original sound.
* Level [ 0 - 150]: 100 Adjusts the output level.

3) Graphic EQ:
This unit has a 6-band equalizer.
* 160 Hz [-12 - 12]: 0 Boosts or cuts the low (160 Hz) frequency band.
* 400 Hz [-12 - 12]: 0
* 800 Hz [-12 - 12]: 0
* 3.2 kHz [-12 - 12]: 0
* 6.4 kHz [-12 - 12]: 6
* 12 kHz [-12 - 12]: 9
* Level [ 0 - 150]: 100 Adjusts the output level.

4) Pitch Shift:
This effect shifts the pitch up or down.
* Shift [-12 - 12|24]: -3 Adjusts the pitch shift amount in semitones. Selecting “0” gives a detuning effect.
* Tone [ 0 - 10]: 10 Adjusts the tone.
* Bal [ 0 - 100]: 100 Adjusts the balance between original and effect sounds.
* Fine [-25 - 25]: -1 Allows fine adjustment of pitch shift amount in Cent (1/100 semitone) steps.
* Level [ 0 - 150]: 148 Adjusts the output level.

5) Hall:
This reverb effect simulates the acoustics of a concert hall.
* Decay [1 - 30]: 3 Sets the duration of the reverberations.
* Tone [0 - 10]: 10 Adjusts the tone.
* Mix [0 - 100]: 14 Adjusts the amount of effected sound that is mixed with the original sound.
* PreD [0 - 100]: 48 Adjusts the delay between input of the original sound and start of the reverb sound.
* Level [0 - 150]: 100 Adjusts the output level.
* Tail [off|on]: off When ON, effect sound continues even after effect is turned off. When OFF, effect sound stops right when effect is turned off.


My problem now is converting these effects and settings into calls to the audio library. There doesn't appear to be a straightforward way to map from one to the other.

I figure the basics are:
Compressor -> sgtl5000.autoVolumeControl()
Flanger -> use flanger effect plus a mixer
Graphic EQ -> sgtl5000.eqBands() ; would need to convert settings from 6 to 5 bands
Pitch Shift -> use granular effect (3 semitones down would be a ratio of 0.878 ?)
Hall -> use freeverb effect? plus another mixer

Does any of this make sense to anybody else?
 
Here's a simple proof of concept that I have so far using the new approach. EQ and compression is not in use yet but I've used pitch shifting, a delay (personal preference instead of flanger), and reverb. I played with the values a bit to get something that sounds passable, I guess? If anybody cares to mess with it and provide feedback then I'd love to hear it.


Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioInputI2S            i2s1;           //xy=118,258
AudioEffectGranular      granular1;      //xy=281,252
AudioEffectDelay         delay1;         //xy=422,182
AudioMixer4              mixer1;         //xy=562,259
AudioEffectFreeverb      freeverb1;      //xy=711,235
AudioMixer4              mixer2;         //xy=855,266
AudioOutputI2S           i2s_out;        //xy=999,266
AudioConnection          patchCord1(i2s1, 0, granular1, 0);
AudioConnection          patchCord2(granular1, 0, mixer1, 1);
AudioConnection          patchCord3(granular1, delay1);
AudioConnection          patchCord4(delay1, 0, mixer1, 0);
AudioConnection          patchCord5(mixer1, freeverb1);
AudioConnection          patchCord6(mixer1, 0, mixer2, 1);
AudioConnection          patchCord7(freeverb1, 0, mixer2, 0);
AudioConnection          patchCord8(mixer2, 0, i2s_out, 1);
AudioConnection          patchCord9(mixer2, 0, i2s_out, 0);
AudioControlSGTL5000     sgtl5000_1;     //xy=202,171
// GUItool: end automatically generated code

#define SDCARD_CS_PIN    10
#define SDCARD_MOSI_PIN  7
#define SDCARD_SCK_PIN   14

#define GRANULAR_MEMORY_SIZE 4410
int16_t granular_memory[GRANULAR_MEMORY_SIZE];

void setup() {
  Serial.begin(9600);
  AudioMemory(16);

  // Wait until SD card is readable.
  SPI.setMOSI(SDCARD_MOSI_PIN);
  SPI.setSCK(SDCARD_SCK_PIN);
  if(!(SD.begin(SDCARD_CS_PIN)))
  {
    while(1)
    {
      Serial.println("Unable to access the SD card");
      delay(500);
    }
  }

  sgtl5000_1.enable();
  sgtl5000_1.volume(0.6);
  sgtl5000_1.inputSelect(AUDIO_INPUT_MIC);
  sgtl5000_1.micGain(40);
  
  //sgtl5000_1.audioPostProcessorEnable();

  // Set graphic EQ.
  /*float bass = 0.0;
  float mid_bass = 0.0;
  float midrange = 0.0;
  float mid_treble = 0.0;
  float treble = 0.0;
  sgtl5000_1.eqBands(bass,mid_bass,midrange,mid_treble,treble);
*/

  // Set compressor.
  /*sgtl5000_1.autoVolumeEnable();
  uint8_t maxGain = 0;
  uint8_t response = 0;
  uint8_t hardLimit = 0;
  float threshold = 10.0;
  float attack = 10.0;
  float decay = 10.0;
  sgtl5000_1.autoVolumeControl(maxGain, response, hardLimit, threshold, attack, decay);
  */

  // Start the granular effect.
  float ratio = 0.878;
  float msec = 25.0;
  granular1.begin(granular_memory,GRANULAR_MEMORY_SIZE);
  granular1.setSpeed(ratio);
  granular1.beginPitchShift(msec);

  // Set up delay effect.
  delay1.delay(0,9);

  // Set up mixer for delay effect.
  float flange_percent = 0.35;
  mixer1.gain(0,flange_percent);
  mixer1.gain(1,1.0 - flange_percent);

  // Set up reverb effect.
  freeverb1.roomsize(0.1);
  freeverb1.damping(0.6);

  // Set up mixer for reverb effect.
  float echo_percent = 0.2;
  mixer2.gain(0,echo_percent);
  mixer2.gain(1,1.0 - echo_percent);

  AudioProcessorUsageMaxReset();
}

void loop()
{
  Serial.print("CPU: ");
  Serial.print(AudioProcessorUsage());
  Serial.print(" / ");
  Serial.println(AudioProcessorUsageMax());
}
 
Dalek setting for zoom ms 50G.Really struggling to get it right. I have the ringmod effect on ms 50G..any one managed to achieve a Dalek. I understand easy to achieve on moog Moogerfooger!! Anyone help.. Cheers Bud
 
Status
Not open for further replies.
Back
Top