Go Down

Topic: Static burst sound effect (Read 2403 times) previous topic - next topic

onesky

in my project i need to have a short static burst follow my speech through a small amplified speaker

any idea how to accomplish this with arduino+mini amp+microphone+mp3 player?

tack

If you can connect an SD Card reader up then you could use the SimpleSDAudio library to play sounds straight from a PWM pin(s).

You can have 8 bit Mono (1 pin), 8 bit stero (2 Pins), 16 bit mono (2 pins and a resistor network) or 16 bit stereo (4 pins and 2 resistor networks).

I use the 8 bit mono for sound effects and that's plenty good enough for my requirements.

xl97

For like a Storm trooper type effect?


Im not sure this is really going to help..seems to be more 'pitch' related..  (and I think uses the Waveshiled as a base)

but I have got this working before:

http://learn.adafruit.com/wave-shield-voice-changer/overview



Grumpy_Mike

Just use the noise bit out of this program:-
Code: [Select]
volatile unsigned int sample = 0;
volatile unsigned int increment = 0x800;

void setup(){
    setSampleTimer();
}

ISR(TIMER2_COMPB_vect){  // Interrupt service routine to output next sample to PWM
      sample += increment;
     if((sample & 0x8000) != 0)  // implement a triangle wave
     OCR2B = 127 - (sample >> 8) & 0x7f;
     else
      OCR2B = (sample >> 8) & 0x7f;
}

void setSampleTimer(){  // sets timer 2 going at the output sample rate
  pinMode(3, OUTPUT);
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 129; // defines the frequency 120 = 16.13 KHz or 62uS, 124 = 15.63 KHz or 64uS, 248 = 8 KHz or 125uS
  OCR2B = 64;  // deines the duty cycle - Half the OCR2A value for 50%
  TCCR2B = TCCR2B & 0b00111000 | 0x2; // select a prescale value of 8:1 of the system clock
}

void loop(){
   wobble(10);
   delay(1000);
   sweepUp(200);
   sweepDown(200);
   noise(1000);
   delay(1000);
   notes(30);
   delay(1000);
}

void wobble(int wobbles){
   TIMSK2 = _BV(OCIE2B); // sound
    for(int j=0; j<wobbles; j++){
  for(int i = 0x500; i< 0x1300; i+=0x4){
    increment = i;
   delayMicroseconds(100);
  }
  }
  TIMSK2 = 0; // hush
}

void noise(int length){ // length about 1000
     TIMSK2 = _BV(OCIE2B); // sound
  for(int i=0; i<length; i++){ // noise
   increment = random(30, 0x1500);
   delayMicroseconds(100);
}
   TIMSK2 = 0; // hush
}

void sweepUp(int time){ // time controls how long it takes start with 200
  TIMSK2 = _BV(OCIE2B); // Output Compare Match B Interrupt Enable
  for(int i = 0x500; i< 0x1300; i+=0x1){
    increment = i;
   delayMicroseconds(time);
}
TIMSK2 = 0; // Output Compare Match B Interrupt Disabled
}

void sweepDown(int time){ // time controls how long it takes start with 200
  TIMSK2 = _BV(OCIE2B); // Output Compare Match B Interrupt Enable
  for(int i = 0x500; i< 0x1300; i+=0x1){
    increment = 0x1300 - i;
   delayMicroseconds(time);
}
TIMSK2 = 0; // Output Compare Match B Interrupt Disabled
}

void notes(int length){
  TIMSK2 = _BV(OCIE2B); // sound
  for(int i=0; i<length; i++){
    increment = random(300,0x1500);
    delay(100);
  }
  TIMSK2 = 0; // hush
}

tbird3

How would you include that? New to this, already got a working wave shield that distorts, but need a static burst at the end.

Grumpy_Mike

Quote
How would you include that?
With a wave shield you wouldn't. That was stand alone code, not designed to be used with a wave shield.


tbird3

Lost now- is there a sketch that distorts voice, and I can put a static burst in? I've searched to no avail...

Grumpy_Mike

The point about an Arduino is that you can create your own projects. If you can't find one to copy that is good. That means when you create it you have added something to the project not just been a parasite.

polymorph

I don't think a 16MHz Arduino is fast enough to capture audio, process it live, and output it again. Maybe a Teensy 3.1 or a Due.

Or use an analog method to accomplish this, but gated/controlled by the Arduino.

One of the types of distortion you nearly always hear is caused by compressing the audio to decrease the PEP to average power output. So... merely compressing the audio will accomplish that.

A bit of noise can be added, and gated louder for the post-transmission presquelch burst.

SSB frequency distortion is a bit more work. You need to shift the frequencies slightly up or down, preferably not staying the same. A couple of balanced oscillators and a tight bandpass filter could do this, but it is a bit more work.
Steve Greenfield AE7HD
Drawing Schematics: tinyurl.com/23mo9pf - tinyurl.com/o97ysyx - tinyurl.com/q7uqnvn
Multitasking: forum.arduino.cc/index.php?topic=223286.0
gammon.com.au/blink - gammon.com.au/serial - gammon.com.au/interrupts

Grumpy_Mike

Quote
I don't think a 16MHz Arduino is fast enough to capture audio, process it live, and output it again.
Yes it is.

I demonstrated at the Rome Maker fair last year a project that did exactly that. It had several modes, delay, echo, multiple echo, and frequency shift up and down without altering the speed, finally real time backwards output.

 

polymorph

Steve Greenfield AE7HD
Drawing Schematics: tinyurl.com/23mo9pf - tinyurl.com/o97ysyx - tinyurl.com/q7uqnvn
Multitasking: forum.arduino.cc/index.php?topic=223286.0
gammon.com.au/blink - gammon.com.au/serial - gammon.com.au/interrupts

Grumpy_Mike

Very cool. Link?
Not got one yet. It was going to be in a book, I got half way through writing it and the publisher pulled out. So I am looking for a new one.

They objected to some projects because they could not spend the money repeating them, like the Harp player that used 10 scrap CD drives.

I also showed it at the Newcastle Maker fair earlier in the same year.

tbird3

The point about an Arduino is that you can create your own projects. If you can't find one to copy that is good. That means when you create it you have added something to the project not just been a parasite.
I think someone thats new to the arduino family shouldn't be described as a "Parasite"- that smacks a bit of elitism. I just wanted to learn how to do it, and incorporate it into the other bit of the project I'm building for a stormtrooper helmet all-in-one. So far, fans switching on and off via a capacative switch, or temperature sensor. Shall I keep it quiet in future. oh lauded one? :)

Grumpy_Mike

You would get more sympathy if you had read the forum rules and had not hijacked an old thread.

tbird3

Sympathy? Didn't come here for that, I came for some tech advice.
Carry on.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy