Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Und nochmal 2 Sounds Gleichzeitig abspielen... (https://www.delphipraxis.net/12351-und-nochmal-2-sounds-gleichzeitig-abspielen.html)

Lefko 25. Nov 2003 20:28


Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Hallo Freunde :hi: ,

ich weiss, das gabs schon öfter, aber ich fand nix geeignetes.. bass.dll is mir zu schwierig und DelphiX gib s wohl für Delphi 6 nicht so richtig (?!)

Also:

Ich hab in meinem Snake-spiel ein problem mit den sounds, zu dessen Beseitigung ich den Code eigentlich extra in den Thread verfrachtet hab... das bringt aber nix denn das problem ist nicht weggegangen:

Ich will mit dem Thread eine Hintergrundmusik abspielen, und dann soll, wenn die Schlange einen Apfel frisst, auch ein Sound abgespielt werden. Wenn dieser "Fress-Sound" abgespielt wird, wird der Hintergrundsound abgebrochen! (mit snd_PlaySound rufe ich beide waves auf)

Eigentlich will ich zwei Musikdateien also gleichzeitig abspielen! (Hatte das auch mit einer 2. exe, die nur zum soundabspielen gestartet wurde, das war aber unpraktisch und sehr unelegant...)

Was könnte ich noch machen, damit es funktioniert?!?

MfG Lefko.

C64-Flo 25. Nov 2003 20:36

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
nur mal so´ne frage:

WARUM PROGRAMMIERT IHR ALLE SO EIN SNAKE-SPIEL? :shock:

ist das irgendwie die standard-Hausaufgabe für informatik-studenten?

naja egal....

was dein problem betrifft....

Bei delphi7 könntest ja einfach 2 mediaplayer einbauen, und jeden mit seinem eigenen sound behaften, dann wäre das kein problem..

nur kenn ich delphi6 nicht...daher KA :zwinker:

SirThornberry 25. Nov 2003 20:40

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
unter delphi6 gehts nicht, da kommt das, das gerät bereits verwendet wird - wird wahrscheinlich versucht über die gleiche geräteid was abzuspielen ohne mixer.

Lefko 25. Nov 2003 20:44

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Zitat:

Zitat von C64-Flo
nur mal so´ne frage:

WARUM PROGRAMMIERT IHR ALLE SO EIN SNAKE-SPIEL? :shock:

ist das irgendwie die standard-Hausaufgabe für informatik-studenten?

Hihi, scheint so!

Hab zwar Informatik nur in der Schule und mache das als selbstgewähltes Projekt, aber ist halt ein gut umzusetzendes Spiel....

Kann ich das wohl so machen, dass ich den Hintergrund mit nem Mediaplayer abspiele und den Fresssound mit snd_Playsound? oder wird dann auch eins von beiden abgebrochen?


MfG Lefko.

SirThornberry 25. Nov 2003 20:48

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
von Swissdelphicenter.com:
Delphi-Quellcode:
uses
  MMSystem;

procedure SendMCICommand(Cmd: string);
var
  RetVal: Integer;
  ErrMsg: array[0..254] of char;
begin
  RetVal := mciSendString(PChar(Cmd), nil, 0, 0);
  if RetVal <> 0 then
  begin
    {get message for returned value} 
    mciGetErrorString(RetVal, ErrMsg, 255);
    MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMCICommand('open waveaudio shareable');
  SendMCICommand('play "C:\xyz\BackgroundMusic.wav"');
  SendMCICommand('play "C:\xyz\AnotherMusic.wav"');
  SendMCICommand('close waveaudio');
end;
Edit:
Die Variante hat leider den nachteil das man damit keine mp3s abspielen kann

SirThornberry 25. Nov 2003 20:52

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Wenn Geld keine Rolle spielt guck mal bei www.swiftsoft.de die Multimediatools sind echt supi. Keine ahnung wie teuer die genau sind, verwenden die aber im Betrieb und sind total simple. Einfach nen Mixer aufs Formular ziehen dann nen wave out und mehrere MMAudiofiles. und dann einfach waveout.start und alle spielen los (propertys natürlich vorher setzen (per drag & drop möglich))

Luckie 25. Nov 2003 22:51

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
PlaySound verwenden mit dem Flag ASYNCHRON.

Lefko 26. Nov 2003 13:20

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Zitat:

Zitat von Luckie
PlaySound verwenden mit dem Flag ASYNCHRON.

Aber da wird doch auch eins abgebrochen, weil die mit dem gleichen befehl gestartet werden?
wenn eins aktiv ist, kann das doch nicht nocheins abspielen?

@SirTornberry:
hey, das sieht gut aus! ich werd s ausprobieren...
(das sendMCIcommand('close waveaudio') ist nur zum schließen ne?)

MfG Lefko.

Lefko 26. Nov 2003 14:13

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
@SirTornberry:

Mist, diese Variante klappt auch nicht, es kommt jedes mal der Error: "MMSYSTEM263 Dies ist kein registriertes MCI-Gerät"

was mach ich nur....

MfG Lefko

PS: Das einzige, was wirklich gut klappt ist, dass ich ne extra-Sound-exe mache, die per shellexecute aufgerufen wird.... soll ich das wieder machen?

Lefko 26. Nov 2003 20:01

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Huhu! s.o. :D

Niko 26. Nov 2003 20:33

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Also, dass man über das normale Multimedia-API zwei Sounds auf einem Gerät (Ausgang) gleichzeitig abspielen kann, wäre mir neu (auch nicht aus zwei verschiedenen Anwndungen heraus). Während ein Stück wiedergegeben wird ist der Ausgang blockiert, bzw. dieses Stück wird abgebrochen, wenn ein anderes abgespielt werden soll.
Die einzigen Möglichkeit die ich kenne um das Problem zu lösen, sind:
DirectX verwenden (DirectX kann mehrere Stücke gleichzeitig wiedergeben) oder
aus beiden Stücken selbst die Mischung berechnen und diese dann wiedergeben (FMOD, SwiftSoft und wahrscheinlich auch Bass machen das so).
Grundsätzlich würde ich mich SirThornberrys Empfehlung für SwiftSoft anschließen, für deine Zwecke würde ich aber eher FMOD (kostenlos) empfehlen (Bass kenne ich nicht näher). Damit reichen drei, vier Zeilen Code, um zwei Stücke abzuspielen.

Lefko 26. Nov 2003 21:04

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
danke für die tipps!

also das mit den 2 verschiedenen exes klappt super... eine spielt nur den background-sound, die andere das spiel mit fresssounds. beide werden wunderbar abgespielt.
nur: es sind ZWEI exes! grmbl...

ich werd mir mal fmod anschauen, danke :)

MfG Lefko.

Gandalfus 26. Nov 2003 22:18

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Zitat:

Zitat von Lefko
danke für die tipps!

also das mit den 2 verschiedenen exes klappt super... eine spielt nur den background-sound, die andere das spiel mit fresssounds. beide werden wunderbar abgespielt.
nur: es sind ZWEI exes! grmbl...

Tut mir leid wenn ich das so sage aber das ist echt schrecklich!!!!!

beschäftige dich mal mit der bass.dll so schwer ist das nicht.
z.B.: meine unit:
http://www.delphipraxis.net/internal...light=bass+dll
könnte ein guter Einstieg sein.
(einfach 2 Objekte instanzieren und fertig)

Lefko 28. Nov 2003 12:59

Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Zitat:

Zitat von Gandalfus
Zitat:

Zitat von Lefko
danke für die tipps!

also das mit den 2 verschiedenen exes klappt super... eine spielt nur den background-sound, die andere das spiel mit fresssounds. beide werden wunderbar abgespielt.
nur: es sind ZWEI exes! grmbl...

Tut mir leid wenn ich das so sage aber das ist echt schrecklich!!!!!

beschäftige dich mal mit der bass.dll so schwer ist das nicht.
z.B.: meine unit:
http://www.delphipraxis.net/internal...light=bass+dll
könnte ein guter Einstieg sein.
(einfach 2 Objekte instanzieren und fertig)


Hey Gandalfus,
danke, is ja wunderbar übersichtlich erstellt von dir, damit werd ich mal werkeln :)

MfG Lefko.

rene50 2. Aug 2013 20:35

AW: Re: Und nochmal 2 Sounds Gleichzeitig abspielen...
 
Zitat:

Zitat von SirThornberry (Beitrag 90640)
von Swissdelphicenter.com:
Delphi-Quellcode:
uses
  MMSystem;

procedure SendMCICommand(Cmd: string);
var
  RetVal: Integer;
  ErrMsg: array[0..254] of char;
begin
  RetVal := mciSendString(PChar(Cmd), nil, 0, 0);
  if RetVal <> 0 then
  begin
    {get message for returned value} 
    mciGetErrorString(RetVal, ErrMsg, 255);
    MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMCICommand('open waveaudio shareable');
  SendMCICommand('play "C:\xyz\BackgroundMusic.wav"');
  SendMCICommand('play "C:\xyz\AnotherMusic.wav"');
  SendMCICommand('close waveaudio');
end;

Hi, danke für den Tipp, aber kann man einen Laufenden Ton denn auch wieder stoppen? :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz