heinz2511
Goto Top

C Sharp: Sound per Thread abspielen

Hallo

ich schreibe in C# / Visual Studio 2010 ein kleines Spiel (WinForms) wofür ich auch Sounds benötige.
Genauer gesagt muss ich 2 Sounds (.wav) abspielen:

Ich möchte eine (ständige) Hintergrundmusik abspielen und einen zweiten (vorübergehenden) Sound wenn z.B ein "Schuss" ertönen soll.

Ich kann die Hintergrundmusik recht einfach so abspielen:

SoundPlayer oSound = new SoundPlayer(global::MeinSpiel.Properties.Resources.Hintergrundmusik) ;
oSound.PlayLooping();

Wenn ich aber nun einen "Schuss"-Sound abspiele
SoundPlayer oSoundSchuss = new SoundPlayer(global::MeinSpiel.Properties.Resources.Schuss) ;
oSoundSchuss.Play();

dann wird die Hintergrundmusik beendet.

Ich möchte, dass nach dem "Schuss"-Sound die Hintergrundmusik wieder weiterspielt.

Eine Möglichkeit wäre vielleicht zusätzlich zu dem Soundplayer, der ständig die Hintergrundmusik spielt, noch einen Mediaplayer zu nutzen,
der dann nur den Schuss-Sound abspielt? (SoundSchuss = new WMPLib.WindowsMediaPlayer() );
Aber selbst wenn das geht würde ich es vorziehen nur den Soundplayer zu benutzen...und zwar vielleicht wie folgt:

Es spielt die Hintergrundmusik.
Wenn ein Schuss-Sound abgespielt werden soll dann passiert dies in einem Thread.
Warum ? Weil ich durch den Thread den Sound asynchon abspielen kann, das Spiel also flüssig weiterläuft....?
Und da ich (hoffentlich) mitbekomme wenn der Thread fertig ist weiss ich auch, wann der Schuss-Sound fertig abgespielt wurde.
Und dann würde ich wieder anfangen die Hintergrundmusik abzuspielen.

Also langer Rede kurzer Sinn:
Wie kann ich einen Sound per Thread abspielen und wenn der Thread zu Ende ist die Hintergrundmusik wieder starten?

Hier scheint so etwas beschrieben zu sein, aber leider verstehe ich das Englisch nicht so gut...
http://bytes.com/topic/c-sharp/answers/709555-when-does-sound-file-fini ...


Danke

Content-Key: 257611

Url: https://administrator.de/contentid/257611

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 114757
Lösung 114757 13.12.2014, aktualisiert am 14.12.2014 um 10:42:25 Uhr
Goto Top
Moin Heinz,
die Soundplayer-Klasse ist in dieser Hinsicht zu beschränkt. Der Soundplayer hat nur einen Ausgabepuffer, egal ob du einen neuen in einem anderen Thread erstellst, wiedergeben kannst du nur ein einziges File zur selben Zeit, also für Games absolut ungeeignet, auch weil das Teil nur WAV-Files wiedergeben kann.

Hier steht dazu auch nochmal alles zusammengefasst drin:
http://www.math.ucla.edu/~wittman/10c.1.11s/Lectures/Lec16.pdf

Machs entweder über zwei MediaPlayer Instanzen, eine für die Hintergrundmusik (kannst du auch auf Loop schalten)
wmpObject.settings.setMode("loop",true);
und eine für Effekte.

Performancetechnisch wäre bei Spielen eher die Verwendung des DirectX SDK zu empfehlen. Hinweise und Beispiele dazu, findest du ebenfalls im oben verlinkten PDF.

Zum Multithreading gibt es ja bereits unmengen Tutorials.

Gruß jodel32
Mitglied: Heinz2511
Heinz2511 14.12.2014 um 10:42:13 Uhr
Goto Top
Danke für die Antwork und den Link

Also ich versuche es dann mal mit 2 Mediaplayer Instanzen.