PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mehrere Sounds gleichzeitig


Fraggermaster
04.07.2005, 20:25
Hallo, könnt ihr mir sagen wie ich zwei Sounds gleichzeitig abspielen kann?
Bei PlaySound(...) wird immer der erste Sound beendet wenn der 2. kommt.


Jan Krüger
04.07.2005, 20:39
Du kannst zum Beispiel die DirectSound-API benutzen. DirectSound hat Software-Mixer.
(Ich gehe davon aus, dass du das PlaySound aus dem Win32-Multimedia-SDK meintest...)

Fraggermaster
04.07.2005, 21:26
Da ich eine Funktion in C++ haben wollte, finde ich es naheliegend meine Frage in ein C++ Forum zu stellen.

Mfg Fraggermaster

Blue Cobold
04.07.2005, 21:26
Praktisch wäre da unter Umständen auch eine eigene Mixer-Routine. Kommt halt drauf an, wofür genau du das eigentlich benötigst.
Zusätzlich ist deine Frage leider nicht Sprach-Abhängig. Die gleiche Frage gilt exakt so auch für Delphi z.B.. Es ist eine Api-Spezifische Frage, die zudem deutlich besser im spezialisierten MultiMedia-Forum aufgehoben ist, da es sich eben explizit um Sound handelt und nicht um ein Problem bei C++ an sich.

Fraggermaster
04.07.2005, 21:31
Fürn 2d-Spiel. (Waffen- und Treffergeräusch und evtl. Musik gleichzeitig).
Wie geht das mit C++?

Blue Cobold
04.07.2005, 21:34
C++ ist nicht die Frage, die es zu stellen gilt, sondern du brauchst DX-API-Funktionen, die dir erlauben mehrere Buffer zu mixen.
Ich würde es ganz ehrlich gesagt so machen, dass ich eigene Buffer verwende, die ich zusammenmixen (sprich addieren und clippen) würde, um ihn dann abzuspielen.

Fraggermaster
04.07.2005, 21:37
Sorry, kapier ich nich. Ich dachte da eher an etwas einfaches und möglichst etwas Quellcode da ich keine Ahnung hab wie ich Mixer buffer u. ä. schreibe.

Blue Cobold
04.07.2005, 21:45
Also die Routine, die du da nutzt, ist das diese:
BOOL PlaySound( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound );
?
Ich schätze mal, dass es die Funktion aus dem MultiMedia-SDK, sprich aus mmsystem ist. Damit hast du überhaupt keine Chance, mehrere Sounds gleichzeitig abzuspielen.
Edit: Probier mal, ob's geht, wenn du mehrere Threads laufen lässt, einen pro Sound. Damit könnte es dann eventuell doch klappen, kann ich aber nicht versprechen.

Ich könnte dir jetzt natürlich 'n riesen Code posten, der alles aus einem Buffer abspielt, aber das wäre sicher nicht ganz, was du haben willst. Aber wenn du magst, schick mir 'ne PM und ich schick dir 'nen C++ Quellcode, der mit DirectX ein Sound-Programm öffnet und selber Sound in einen Buffer berechnet und ausgibt.

Fraggermaster
04.07.2005, 21:52
Ja, das benutze ich.

Wie gesagt, ich bin Anfänger also wäre etwas Quellcode sehr nett.
Meinst du mit DX Direct X?
Ist das nicht ein Riesenaufriss?

Blue Cobold
04.07.2005, 21:56
Ja doch, ist ganz schöner Aufriss. Also vielleicht solltest du einfach versuchen einen neuen thread zu öffnen, wenn du einen neuen Sound abspielen willst. Ich weiß nicht genau, ob das funktioniert, aber klingt sehr logisch, da PlaySound ja bestimmt nicht im gesamten Windows-System nur einen Sound gleichzeitig abspielen kann. Dann wird das an Threads gebunden sein. Und so viele Sounds wirst du ja sicherlich auch nicht gleichzeitig abspielen, als dass die Anzahl threads zu hoch wäre. Also wie gesagt, probier's mal mit 'nem neuen Thread pro neuen Sound.

TGGC
04.07.2005, 22:52
Nimm fmod. Aufwand <30 min.


Bye, TGGC

Blue Cobold
05.07.2005, 10:27
Ist allerdings nur kostenlos für kostenlose Software. Könntest das Game oder Programm dann nur verkaufen, wenn du eine Lizenz für fmod erwirbst!

Blue Cobold
07.07.2005, 06:48
Problem erledigt auch mit dem Flag SND_ASYNC und SND_NOSTOP.

Fraggermaster
09.07.2005, 20:50
SND_ASYNC benutze ich schon und NOSTOP geht auch nicht

Blue Cobold
10.07.2005, 08:09
Zusammen sollte es laut MSDN aber gehen. Nicht nur eins von beidem, sondern beide zusammen.

TGGC
10.07.2005, 09:32
Hier will übrigens wer 'nen Mixer schreiben: http://www.c-plusplus.de/forum/viewtopic-var-t-is-114755.html

So gehts natürlich auch.


Bye, TGGC

Fadan
13.07.2005, 15:46
ich leg dir noch OpenAL ans Herz, wenig Aufwand (um einiges weniger als mit DX, mehr als mit fmod) aber umsonst umsonst

http://www.openal.org/