Two audio Outputs?

So I was playing around with the tone example from the arduino site and I basically got mine to play "Here comes the sun".
It sounds great but there's still something missing.... The Bass.

How would I connect two speakers (one for lead and one for bass) into the arduino so they can each play their own parts of the song?

Here's my code so far. What would I change in the code to incorporate the second speaker? :

/*
  Melody
 
 Plays a melody
 
 circuit:
 * 8-ohm speaker on digital pin 8
 
 created 21 Jan 2010
 modified 14 Oct 2010
 by Tom Igoe

This example code is in the public domain.
 
 http://arduino.cc/en/Tutorial/Tone
 
 */
 #include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_CS5, NOTE_A4, NOTE_B4, NOTE_CS5,0, NOTE_A4 ,0, NOTE_CS5, NOTE_B4, NOTE_A4,NOTE_FS4, NOTE_A4, NOTE_B4,NOTE_A4, NOTE_FS4,NOTE_GS4,NOTE_FS4,NOTE_GS4,NOTE_A4,NOTE_B4,0,
  NOTE_CS5, NOTE_A4, NOTE_B4, NOTE_CS5,0, NOTE_A4 ,0, NOTE_CS5, NOTE_B4, NOTE_A4,NOTE_FS4,0,NOTE_CS5,NOTE_B4,NOTE_A4,NOTE_GS4,};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4,4,4,4,4,2,4,4,2,2,2,2,2,2,4,4,4,4,2,2,2,4,4,4,4,4,2,4,4,2,2,2,4,4,2,2,1, };

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 37; thisNote++) {

    // to calculate the note duration, take one second
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(8);
  }
}

void loop() {
  // no need to repeat the melody.
}

No, I think the problem is just the poor frequency response of wiring a speaker directly to a arduino output pin through a resistor. What really would wake up both the volumn and proper frequency response would be to wire series .5ufd caps between the output pin and the line in on a real audio amplifier designed to drive the speaker. Also wire arduino ground to audio amp ground.

Lefty

retrolefty:
No, I think the problem is just the poor frequency response of wiring a speaker directly to a arduino output pin through a resistor. What really would wake up both the volumn and proper frequency response would be to wire series .5ufd caps between the output pin and the line in on a real audio amplifier designed to drive the speaker. Also wire arduino ground to audio amp ground.

Lefty

Um your answer looks like it was for another post cause this didnt even sound like a response for my question. This didnt even help..

KE7GKP:
Arduino is capable of only one tone() per customer. It cannot do two (or more) concurrent tone() outputs.

Remember that the tune is still protected by copyright and the rights are owned by Sony/Michael Jackson (estate).

Ok then how can I make a tone lay in the background while the main tone plays in foreground all on one speaker?

Or maybe its time to check my 6 voice solution using a single regular Arduino. :wink: Darn, I need to improve that lib to allow people to compose 6 voice tune songs... (check my other post here at this same forum location - AUDIO)

Wk

WilliamK:
Or maybe its time to check my 6 voice solution using a single regular Arduino. :wink: Darn, I need to improve that lib to allow people to compose 6 voice tune songs... (check my other post here at this same forum location - AUDIO)

Wk

K thanks!

Hi,

To get 2-note polyphony, use timer 1 and timer 2 on (for example) pin 10 and pin 11.
Connect your (single!) speaker accross the 2 pins (in this case, pin 10 and 11)
via a resistor/capacitor.
This code snippet generates notes C and G together:

// generate test signals on pin 10 and 11
pinMode(10, OUTPUT);
Timer1.initialize(1000000/NOTE_C4);
Timer1.pwm(10, 512);

pinMode(11, OUTPUT);
tone(11, NOTE_G4); // via Timer2 !

Success!

Yves

Or you could check out a more complicated method (using assembler) to get up to 16-note polyphony, from a single Arduino pin on a normal Duemilanove/Uno:

My project: Arduino Forum
(I arbitrarily chose 8 voice polyphony; it could do more)

Another guy's project, which mine is partially based on: Joe Marshall - Human Computer Interaction Research
(he mentioned in the forums that 16 voices worked perfectly fine on his synth)