Aha już rozumiem ta funkcja przetrzymuje wszystkie klawisze jakie zostały po kolei wciśnięte tak ?
kbhit() sprawdza czy coś już wciśnięte a getch() pobiera znak.
Tylko może zastanów się nad zamianą:
_sleep(500) na
while(!kbhit()) _sleep(50);
wtedy nie będzie powtarzać dźwięku co pół sekundy oraz po naciśnięciu ESC zareaguję w krótszym czasie. Jeżeli zaś chcesz aby dźwięk się powtarzał ale czas reakcji chcesz skrócić to:
for(int i=0;i<10&&!kbhit();++i) _sleep(50); // 10 razy po 50ms = 500ms