Geração de acorde

Por enquanto o mais próximo que cheguei:

#define C 1897
#define Ds 1607
#define E 1517
#define G 1276

void toca(int f1, int f2, int f3, int duracao){
duracao=duracao/10;
int i=0;
while (i<duracao){
digitalWrite(3,HIGH);
delayMicroseconds(f1/2);
digitalWrite(3,LOW);
delayMicroseconds(f1/2);
digitalWrite(3,HIGH);
delayMicroseconds(((f2+f1)/2)^2);
digitalWrite(3,LOW);
delayMicroseconds(((f2+f1)/2)^2);
digitalWrite(3,HIGH);
delayMicroseconds(((f3+f2)/2)^3);
digitalWrite(3,LOW);
delayMicroseconds(((f3+f2)/2)^3);
i++;
}
}

void setup(){
pinMode(3,OUTPUT);
Serial.begin(9600);
}

void loop(){
toca(C,E,G,1000);
toca(C,Ds,G,1000);
}

resultados:

Dó maior - http://flxsys.com.br/do_maior_arduino.mp3
Dó maior e dó menor - http://flxsys.com.br/arduino_teste.mp3
440Hz -referência - http://flxsys.com.br/la_arduino.mp3

esperado:
http://flxsys.com.br/do_maior_gerador.mp3