Metronom für Linux. Problem: exakte Pausen
-
Hallo
Ich bin vor kurzem komplett auf Linux umgestiegen und hab da nun natürlich ein wenig Problemchen bekommen, was das Programmieren angeht.
Weil ich n Instrument spiele und unter Windows n schönes Software-Metronom hatte möcht ich mir für Linux jetzt auch eins programmieren.
Mein Problem besteht jetzt darin, exakte Pausen zwischen den einzelnen Taktschlägen zu erzwingen. Ich habe es bisher schon wie folgt probiert:#include <iostream> #include <unistd.h> using namespace std; int main() { while(true) { cout<<"\a"; sleep(1); } return 0; }
Das ist zwar jetzt erstmal nur die absolute Roh-Version, aber ich habe festgestellt, dass es leider nicht so funktioniert, wie ich mit das vorgestellt habe. sleep() hält das Programm leider nicht so an, wie es unter Windows war bzw. beim ersten Schleifendurchlauf kommt kein Ton, sondern das Programm bleibt einfach stehen. Zum Anderen ist eine Sekunde natürlich viel zu viel, wenn ich mit bis zu 200bpm Spielen muss. Mal ganz davon abgesehen, dass das System-Signal nicht gerade ein schöner Ton ist um damit ein Metronom zu gestalten.
Ich bräucht also ne Möglichkeit, das Programm im Millisekundenbereich anzuhalten und dass dann auch relativ exakt bei jedem Durchlauf/Ticken.
Hat vielleicht jemand ne Idee, wie ich nen regelmäßigen Ton unter Linux hinbekomme?
Vielen Dank im Voraus
Mfg
Martin
-
Also statt sleep kann ich nur noch usleep und nanosleep vorschalgen.
Außermdem würde ich noch 'cout << "\a" << flush;' schreiben.
-
schau dir mal setitimer an.
-
ok, das hat jetzt geklappt......
kennt ihr vielleicht noch ne möglichkeit nen einfaches "knacken" auszugeben.....bzw. einen tiefen ton? der Ton von \a ist nicht sehr gut geeignet.....