Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

C Sharp: Sound per Thread abspielen

Frage Entwicklung C und C++

Mitglied: Heinz2511

Heinz2511 (Level 1) - Jetzt verbinden

13.12.2014, aktualisiert 14.12.2014, 1265 Aufrufe, 2 Kommentare

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
Mitglied: 114757
LÖSUNG 13.12.2014, aktualisiert 14.12.2014
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
Bitte warten ..
Mitglied: Heinz2511
14.12.2014 um 10:42 Uhr
Danke für die Antwork und den Link

Also ich versuche es dann mal mit 2 Mediaplayer Instanzen.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Heiß diskutierte Inhalte
DSL, VDSL
gelöst DSL 200m verlängern (15)

Frage von Angela44 zum Thema DSL, VDSL ...

Batch & Shell
gelöst Ordner und Datei Name gleich (BATCH) (12)

Frage von clragon zum Thema Batch & Shell ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...

LAN, WAN, Wireless
Per Script auf UniFi-controller zugreifen und WPA2-Key ändern (11)

Frage von Winfried-HH zum Thema LAN, WAN, Wireless ...