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, 1250 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
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Administrator.de Feedback
gelöst Anordnung von Antworten im Thread seit kurzer Zeit sonderbar (6)

Frage von DerWoWusste zum Thema Administrator.de Feedback ...

Visual Studio
C-Sharp WPF Binding TextBox.Text und Property MVVM (die 2.) (4)

Frage von mayho33 zum Thema Visual Studio ...

Windows Server
C sharp oder Powershell oder VB? (3)

Frage von 1410640014 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (12)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...