Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Im Hintergrund Musik endlos abspielen (https://www.delphipraxis.net/23011-im-hintergrund-musik-endlos-abspielen.html)

glowwurm 27. Mai 2004 14:28


Im Hintergrund Musik endlos abspielen
 
Hallo zusammen,

Ich hab ein Problem bzw. mehrere mit dem Abspielen von Midis. Ich hab auch schon in diesem Forum gesucht, aber nichts passendes gefunden... :oops:

Hier zuerst einmal der Quellcode:
Code:
// Zum starten
  MCISendString(PChar('play ' + FileName), nil, 0, 0);

//zum stoppen
  MCISendString(PChar('stop ' + FileName), nil, 0, 0);

//Filename = Name des Midi-Files.
Mein Problem ist nun, dass ich das Midi im HIntergund, während andere Teile des Programms noch weiter laufen in einer Endlosschleife abspielen will. Wenn ich dazu aber eine while-Schleife benutze, läuft der Rest des Progs nicht mehr ab...was es ja aber soll :?
Habt ihr mir eine Lösung?

fxbasic 27. Mai 2004 14:50

Re: Im Hintergrund Musik endlos abspielen
 
Hi, glowwurm

zuerst einmal herzlich willkommen in der Delphi-Praxis!

(Endlich durfte ich das auch mal sagen)

Vielleicht hilft dir das hier weiter:

http://www.delphi-source.de/tipps/multimedia/?id=204

Buy, fxbasic

glowwurm 28. Mai 2004 12:08

Re: Im Hintergrund Musik endlos abspielen
 
Hm, das kannte ich schon, aber man kann damit leider keine Midis abspiele nur .wav

Naja, macht nichts. Werden die Midis halt in Wave konvertiert, wenn es nich anders geht :wink:

Vielen Dank für die Anwort :dancer:

StefanDP 28. Mai 2004 12:24

Re: Im Hintergrund Musik endlos abspielen
 
Du könntest das auch in einem Thread laufen lassen!
Datei - Neu - Weitere - Thread Objekt
Klassenname z.b. TMusik

und dann
Delphi-Quellcode:
procedure TMusik.Execute;
begin
  // hier machst du einfach eine endlosschleife rein z.b.
  while true do
    MCISendString(PChar('play ' + FileName), nil, 0, 0);
end;
das ganze kannst du dann folgendermaßen starten:
Delphi-Quellcode:
implementation

uses Unit2; // oder wo halt dein Thread-Objekt ist

...

procedure TForm1.Button1Click(Sender: TObject);
var
  MeinThread: TMusik;
begin
  MeinThread := TMusik.Create(false); // durch false wird der Thread sofort gestartet
end;

so oder so ähnlich müssts funzen
stefan

teebee 28. Mai 2004 18:48

Re: Im Hintergrund Musik endlos abspielen
 
Du kanst Dir von Windows eine Nachricht schicken lassen, wenn das Stück zu Ende ist:
Delphi-Quellcode:
 // zuerst MidiFile öffnen (mit Alias)
mciSendString(PChar('open "'+MidiFile+'" alias mymidi'),nil,0,0);

// dann abspielen (mit Notify)
mciSendString('play mymidi from 0 notify',nil,0,Handle);
Durch das 'notify' wird immer dann, wenn das Stück zu Ende ist, eine MM_MCINOTIFY-Nachricht an das angegebene Fenster (Handle) gesendet. Die muss nur noch ausgewertet werden:
Delphi-Quellcode:
public
  ...
  procedure MidiLoop(Var Message: TMessage); message MM_MCINOTIFY;
  ...

Procedure TForm1.MidiLoop(Var Message: TMessage);
Begin
  mciSendString('play mymidi from 0 notify',nil,0,Handle); // und neu abspielen
End;
Sollte noch das einfachste sein...

Gruß, teebee


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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