2017-06-09 4 views
-1

Ich möchte mein eigenes Piano in C (1999) bauen, aber es gibt einige Probleme mit der (Ton-) Ausgabe.
Das Programm erkennt preseed Schlüssel, und wie lange sie gedrückt werden ... Wenn eine Taste gedrückt wird, beginnt er ein neues thread(phthread) wich eine bestimmte wav Datei spielen, und wenn der Schlüssel nicht mehr gedrückt wird der Faden getötet werden.
SDL ist in main() geladen und das Audiogerät wird in Main (als global) geöffnet.
Aber das Problem ist, dass SDL spielt weiter, auch wenn der Sound-Thread beendet ist.PIANO IN C, Ausgabe mit SDL-Sound

Also, was ich will:
Eine Sound-Funktion, die auf einmal zu 8 Sounds spielen könnte „live zu spielen“ (nicht geladen die komplette Datei in thr Puffer und spielen), initialisiert werden kann globaly

Sorry für meine Sprache :(

Programm ist für ein Arch Linux-System, aber alle Plattformen (Unix, OS X, MS Windows) wäre besser.

Antwort

3

Auch wenn Sie, dass Ihre Thread vielleicht denken spielt einen Sound, du solltest nicht so darüber nachdenken. Dein Thread hat SDL dazu gebracht, diesen Sound zu spielen. Wenn du also deinen Thread tötest, gibt es nichts mehr, was aufhören könnte, diesen Sound zu spielen.

Sie brauchen eigentlich keine Threads für diese überhaupt:

  • , wenn eine Taste gedrückt wird, einen Ton auf den nächsten freien Kanal starten.
  • verfolgen dieses Paar (Schlüssel, Kanal)
  • Wenn der Schlüssel freigegeben ist, suchen Sie das (Schlüssel, Kanal) -Paar und rufen Sie Mix_HaltChannel mit diesem bestimmten Kanal als Argument.
0

Edit:

Schon fand es: Mix_Volume (Kanal, Lautstärke)