As others suggested, check python. It's not to difficult and most of it is cross platform.
There are several ways to get chars, both blocking and non-blocking.
I was thinking about curses, but there are other ways.
While curses is most widely used in the Unix environment, versions are available for DOS, OS/2, and possibly other systems as well. This extension module is designed to match the API of ncurses, an open-source curses library hosted on Linux and the BSD variants of
Unix.
The first thing that comes to my mind is doing something based on threads, assuming that beeping is a blocking function (doesn't return until the beep ends).
start a thread that accepts beep requests (and performs the beeping)
last_beep_end_time = now()
while akey is pressed:
speaker_is_idle = now() > last_beep_end_time
if akey is quit_key:
quit
if akey is key1 and the speaker is idle:
ask the thread to beep
compute last_beep_end_time (at which the beep ends, eg now + 100ms)
...
silently ignore keypresses while the speaker is already beeping.
Cheers,
Joseph