Newbee: Alleinunterhalter-Software (Zeitsteuerung und gleichzeitig Eingaben verarbeiten)



  • Hallo,

    ich bin jetzt ganz frisch in c++. Ich habe das Buch "C++ von a bis Z" gelesen und meine kleinen Programme geschrieben. Auch mit dem devcpp komme ich gut klar.
    Damit jetzt die Zeit der Spielerei vorbei ist und ich langsam in die Praxis komme möchte ich nun ein Programm schreiben, das man (also ich) auch brauchen kann. Also habe ich mir ein Thema gesucht: Ich möchte ein Alleinunterhalter-Programm schreiben. Das hat den Grund, weil ich dort durch testen alle wichtigen Funktionen für zukünftige Programme drinnen habe.
    Soviel zur Vorgeschichte.

    Jetzt habe ich mich mal eingelesen (auch dank Hilfe euerer Suche) zum Thema Midi, etc. Die Dokumentationen sind super und ich hab auch schon alle nötigen Downloads heruntergeladen. Allerdings ist mit jetzt gerade ein Problem aufgefallen, auf das ich noch keine Richtige antwort gefunden habe.

    Zum Thema: Ein Alleinunterhalterprogramm soll mit mehrere Spuren Midi gleichzeitig abspielen. (Schlagzeug, Baß, Klavier, Streicher, etc). Wenn ich auf der Tastatur auf ein "c" drücke, dann in C-Dur, wenn ich ein "a" eingebe, dann ein A-Dur.

    Und da liegt mein Problem. Solange ich MIDI abspiele, lasse ich die Töne mit sleep() liegen. Während Sleep kann ich eine Tastatureingaben entgegen nehmen.

    Wie kann ich das jetzt lösen? Ich muß auf der einen Seite auf eingaben reagieren (um die neuen Noten zu berechnen) und auf der anderen Seite muss ich abspielen.

    Ich habe was gelesen von Threads. Allerdings blicke ich da nicht ganz durch und auch mein schlaues c++-Buch gibt mir da keine Hilfe.

    Als Plattform würde ich mir Windows wünschen. Ich experimentiere immer noch mit xwWidgets. Wäre also toll, wenn in dieser Hinsicht mir jemand helfen könnte.

    Ich brauche kein fertiges Programm, ich will ja lernen (und verstehen) was in dem Programm vor sich geht. Aber eine kleine Aufklärung zum Thema währe super.

    PS: Ich weiß, Newbee-Fragen können nerven. Wenn jemand von meiner (Anfänger)-Frage genervt ist, bitte einfach zum nächsten Eintrag gehen und kein rtfm-Eintrag schreiben. Das ich was zu lesen habe weiß ich selbst, nur leider noch nicht was.

    Danke schon mal,
    Stefan



  • Erstens: Threads sind systemspezifisch - deshalb wirst du jetzt auch zu deinem Wunsch-System verschoben.

    Zweitens: Ich würde das Problem vermutlich mit zwei Threads lösen:

    1. Einlesen von Tastatureingaben - und Benachrichtigung von Thread 2 über neue Daten (evt auch Berechnungen)
    2. Ausgabe der MIDI-Daten (basierend auf den Daten von Thread 1)

    Drittens: Wir haben normalerweise keine Probleme mit Anfängerfragen - höchstens mit Fragen, die auf mangelnde Vorbereitung hindeuten 😉 (und dazu gehört deine vermutlich nicht)



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Würde auch das so sehen wie CStoll.

    2 Threads (wxThread), wobei du nur einen Thread zu abspielen brauchst, da die GUI ja schon ein eigener Thread ist.
    Dann kannst du in der GUI die Eingaben handhaben, und damit dann den 2 Thread updaten.



  • Hallo,

    danke schon mal für die Hilfe. Das Thema exThread habe ich jetzt mal begonnen und schau mal wie das da klappt. Die Grundlogik von Thread ist mir noch nicht ganz klar, aber ich hab ein Tutorial gefunden das das ganz gut erklärt (leider auf Papier, daher kein Link und mit ca. 28 Seiten, daher kein Abtippen).

    Es wird bei meinem Programm dann bei 2 Thread bleiben:

    Das Grundprogramm wird die Eingaben entgegen nehmen und an Thread 1 weiterleiten. Dieser spielt die Noten in der richtigen Tonhöhe ab. Die passenden Texte sollen ja auch noch am Bildschirm stehen; das wird der 2. Thread (sprich, die Bildschirmausgabe).

    Dann versuch ich mal mein Glück (und hoffe das es "können" wird!). Habe mir jetzt mal mein dev-c++ deinstalliert (weil irgendwie immer die Dateien aus den Projekten verliert) und teste jetzt mal Visual c++ von Microsoft.

    Grüße,
    Stefan



  • stefanjann schrieb:

    danke schon mal für die Hilfe. Das Thema exThread habe ich jetzt mal begonnen und schau mal wie das da klappt. Die Grundlogik von Thread ist mir noch nicht ganz klar, aber ich hab ein Tutorial gefunden das das ganz gut erklärt (leider auf Papier, daher kein Link und mit ca. 28 Seiten, daher kein Abtippen).

    Es wird bei meinem Programm dann bei 2 Thread bleiben:

    Das Grundprogramm wird die Eingaben entgegen nehmen und an Thread 1 weiterleiten. Dieser spielt die Noten in der richtigen Tonhöhe ab. Die passenden Texte sollen ja auch noch am Bildschirm stehen; das wird der 2. Thread (sprich, die Bildschirmausgabe).

    Wie phlox schon sagte - das "Grundprogramm" ist auch bereits ein Thread (sozusagen Thread 0) - und im Prinzip könnte es sich auch um die Bildschirm-Ausgaben kümmern.


Anmelden zum Antworten