Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi mehrere Sounds hinteinander abspielen ohne Anwendung stoppen (https://www.delphipraxis.net/71274-mehrere-sounds-hinteinander-abspielen-ohne-anwendung-stoppen.html)

Mazel 12. Jun 2006 13:32


mehrere Sounds hinteinander abspielen ohne Anwendung stoppen
 
Hallo,

ich möchte in meinem Programm kleine Sounds abspielen und zwar hintereinander ohne das die Anwedung angehalten wird, wie es zum Beispiel bei SndPlaySound() der Fall ist, wenn ich als Flag SND_SYNC verwende.
Delphi-Quellcode:
SndPlaySound(PChar('Sounds\S1.wav'), SND_SYNC);
SndPlaySound(PChar('Sounds\S2.wav'), SND_SYNC);
Nehme ich aber als Flag SND_ASYNC, wird nur der letze Sound abespielt. Wenn ich also 5 Sounds abspsielen will, die unterschiedliche Länge haben (nicht länger als 3 Sekunden), dann wird immer nur der letzte abgespielt.

Gibt es da eine Lösung? Ich möchte keine Fremdkomponente verwenden, da ich denke dass es eine Lösung gibt, nur leider komm ich nicht drauf.

Gruß
Mazel

JackZero 12. Jun 2006 13:35

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
mmmhhh :gruebel: Denke mal du musst so ne art Loop reinmachen Loop (wiederholen) damit du Endloschleife bekommst musst mal abchecken muss gehen :stupid: :stupid:

DGL-luke 12. Jun 2006 13:38

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Hintereinander? Du solltest ja irgendwie mitkriegen können, wann der eine Sound zuende ist, dann schiebst du den nächsten nach....

@JackZero: Glaube nicht, dass er das machen will ;)

EDIT: Ne schnelle Lösung: In nem Thread synchron abspielen!

Mazel 12. Jun 2006 13:41

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Hi,

@JackZero: Ich weis nicht was du mit Loop meinste? Eine "For-Schleife" oder doch die Soundwiederholung? Wenn du das letztere meinst dann nein. :wink:

Wenn ich das in eine For-Schleife packe, geht das auch nicht, da die Schleife viel zu schnell ist.

@DGL-luke: Mit welcher Methode kann ich herausbekommen, wann der Sound zuende ist?

DGL-luke 12. Jun 2006 13:43

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Das weiß ich nicht... aber wie gesagt, in einem thread synchron müsste funktionieren.

Mazel 12. Jun 2006 13:44

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Also mit Threads hab ich nicht viel Erfahrung. Kannst du mir sagen wie ich das am besten machen kann?

DGL-luke 12. Jun 2006 13:49

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Du erstellst ein neues Thread-Objekt (Datei->Neu->Delphi-Projekte->Thread-Objekt oder so ähnlich), schreibst in die Execute-Methode deine Aufrufe.

Im Hauptprogramm erzeugst du den Thread dann und startest ihn, entweder indem du bei createsuspended false angibst oder indem du .Resume aufrufst.

EDIT: hab das mal schnell gemacht:
Delphi-Quellcode:
unit UPlaySoundThread;

interface

uses
  Classes,MMSystem;

type
  TPlaySoundThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
  end;

implementation

procedure TPlaySoundThread.Execute;
begin
  SndPlaySound(PChar('Sounds\S1.wav'), SND_SYNC);
  SndPlaySound(PChar('Sounds\S2.wav'), SND_SYNC);
end;
Aufruf:
Delphi-Quellcode:
var sndThread: TPlaySoundThread;
begin
sndthread := TPlaySoundThread.Execute(false);
end;

Mazel 12. Jun 2006 13:58

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Hi,

danke für den Code. Was heißt das jetzt was da steht? Läuft der Thread parallel ab? Wenn ja wird meine Anwendung nicht beeinflust?

Edit: Hab das eben ausprobiert, die Form hält trotzdem an.

Gruß
Mazel

DGL-luke 12. Jun 2006 14:16

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Die VCL startet damit für dich einen neuen Thread, ja, der im Prinzip vom Mainthread unabhängig läuft.

(Wenn du allerdings selbstständig Execute aufrufst, läuft es im Kontext des Mainthreads ;) )

Hmm... das kann eigentlich nicht sein. Allerdings habe ich gerade das selbe Phänomen in einer Anwendung von mir.

Ich werde das ganze mal auf Luckies NonVCL-Threading umstellen und dann sehen, ob sich was ändert.

ManuMF 12. Jun 2006 14:29

Re: mehrere Sounds hinteinander abspielen ohne Anwendung sto
 
Hallo,

Zuerst: Es ist besser, PlaySound anstatt von SndPlaySound zu verwenden. Wenn du die Länge des Sounds kennst, kannst du es mit
Delphi-Quellcode:
PlaySound('S1.wav', 0, SND_ASYNC or SND_FILENAME);
Delay(3000);
PlaySound('S2.wav', 0, SND_ASYNC or SND_FILENAME);
probieren, wobei Delay die Prozedur von negaH aus der CodeLib ist. So wird das Programm nicht angehalten.

[edit]Habe es nicht getestet, aber ich mache es meistens mit einem Timer (Interval = 100), den ich zum Abspielen aktiviere. Im onTimer deaktiviert er sich selbst und die Zeilen oben werden ausgeführt. Das sollte das Programm nicht aufhängen.[/edit]

Gruß,
ManuMF


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Seite 1 von 2  1 2      

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