Après tu peux peut-être également envisagé d'utiliser un lecteur de mp3, au moins la ça devient encore mieux que du tone() 
Il y'a quelques temps de ça j'avais fait des recherche pour avoir une meilleur qualité sonore avec un lecteur mp3 le contrôle des morceaux avec l'arduino risque de ne pas être évident même en se câblant sur les bouton, j'avais ensuite trouvé le "somo-14D" qui est un micro module de restitution de fichiers audio contrôlable par liaison série.
Mais dans les deux cas le budget y passer car je doit réaliser plusieurs appareil, et le buzzer était la solution la plus low cost.
j'ai essayé pour une application , bof

de toutes façons tu partait sur du buzz généré parb arduino , donc tu ne recherche pas de la restitution en qualité philharmonique

essaye de reduire ton probleme de son(s)
tu recherche dans l'ideal quels effets ?
conserver le buzzer lambda cheap et dedié çs gestion à un petit MCU genre attyni en clock interne est peut etre une solution (assez) simple et pas (tres) onereuse en utilisant une liaison serie de commande entre l'arduino et le module son.
La solution du buffer circulaire de skywodd est interessante, mais elle doit etre gérée "finement"
le soft n'est pas toujours un recours au hard, l'inverse existe aussi