![]() |
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:
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 :?
// Zum starten
MCISendString(PChar('play ' + FileName), nil, 0, 0); //zum stoppen MCISendString(PChar('stop ' + FileName), nil, 0, 0); //Filename = Name des Midi-Files. Habt ihr mir eine Lösung? |
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: ![]() Buy, fxbasic |
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: |
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:
das ganze kannst du dann folgendermaßen starten:
procedure TMusik.Execute;
begin // hier machst du einfach eine endlosschleife rein z.b. while true do MCISendString(PChar('play ' + FileName), nil, 0, 0); end;
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 |
Re: Im Hintergrund Musik endlos abspielen
Du kanst Dir von Windows eine Nachricht schicken lassen, wenn das Stück zu Ende ist:
Delphi-Quellcode:
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:
// 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);
Delphi-Quellcode:
Sollte noch das einfachste sein...
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; Gruß, teebee |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr. |
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-2025 by Thomas Breitkreuz