Per intercettare i tasti premuti, potresti usare l'evento KeyPress o, meglio ancora, KeyDown direttamente sulla Form (del namespace System.Windows.Forms).
Per ottenere il suono delle note dallo speaker del PC, puoi adattare questo codice:
using System;
using System.Runtime.InteropServices;
class MainClass
{
[DllImport("kernel32.dll")]
public static extern bool Beep(int freq,int duration);
public static void Main(string[ args)
{
Console.WriteLine("un beep");
Beep(1000,1000);
Console.WriteLine("un beep più alto e più corto");
Beep(2000,500);
}
}
In sostanza, devi associare ad ogni nota una durata ed una frequenza. Oppure la cosa migliore potrebbe essere associare solo la frequenza della nota e definire la durata in proporzione alla pressione del tasto. Questo potrebbe essere il lavoro più difficile da mettere a punto.
Qui trovi i riferimenti MSDN al metodo Console.Beep.
Infine, ho trovato questa interessante discussione, in inglese:
Newbie C# User. Question about Console.Beep()
Buon lavoro!