El sonido de de las notas suenan infinitas veces

Estoy haciendo un xilófono que funcione desde una app, mi problema es que las notas quedan sonando y no he logrado hacer que al presionar una nota suene solo una vez como en un piano, me seria de gran ayuda alguna opinión.

PD: Ya he usado la función noTone y aun así persiste mi inconveniente.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // pin 11 con RX de bt, pin10 con TX bt
char valor;

//Notas musicales
//const float c = 261.63; // Do (Octava 0)
// const float d = 293.66; // Re (Octava 0)
// const float e = 329.63; // Mi (Octava 0)
// const float f = 349.23; // Fa (Octava 0)
// const float g = 392.00; // Sol (Octava 0)

void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
mySerial.begin(9600);
pinMode(8, OUTPUT);
}

void loop() {
if (mySerial.available()) {
//Serial.write(mySerial.read());
valor=mySerial.read();
}

if (valor=='0'){
tone(8,261,500);
delay(1000);

}
if(valor=='1'){
tone(8,293,500);
delay(1000);

}
if (valor=='2'){
tone(8,311,500);
delay(1000);

}
if(valor=='3'){
tone(8,349,500);
delay(1000);

}
if (valor=='4'){
tone(8,392,500);
delay(1000);

}
if(valor=='5'){
tone(8,440,500);
delay(1000);

}
if (valor=='6'){
tone(8,493,500);
delay(1000);

}
if(valor=='7'){
tone(8,261,500);
delay(1000);
tone(8,293,500);
delay(1000);
tone(8,311,500);
delay(1000);

}

}//fin void

Hola @Jchivata, por favor lee las Normas del foro y edita tu post usando etiquetas de código.

También corrige el título porque el que has puesto no explica la consulta que haces. El título debe ser indicativo de tu consulta.

Respeto de tu código, cuando usas delay() el micro se detiene y no hace nada de modo que es imposible que toque un sonido y reaccione a la pulsación de una tecla usando delay().

Mira en la sección Documentación => Indice de temas tutoriales => millis() como se hace sin delay.

Mi problema no es que no suenen, es que al estar en un bucle suenan por siempre y necesito que solo suene al presionar y pare ahí

Y consulto, que pasó con lo que te solicité, por que te pedí que leyeras las normas y no has editado nada aún.

Si suenan por siempre solo pon la variable valor = 0 cuando termines el loop y listo.