Entwickler-Ecke

Multimedia / Grafik - Musik automatisch abspielen


Mattes - Di 24.09.02 14:15
Titel: Musik automatisch abspielen
Bitte erschlagt mich nicht, das Thema gab´s bestimmt schon hundertmal und ich finde es nicht :D

Als relativer Delphi-Anfänger will ich in einer Anwendung Hintergrundmusik laufen lassen.

Wie kann ich z.B. 5 Lieder nacheinander laufen lassen (TMediaPlayer soll automatisch zum nächsten Lied springen und nach dem letzten wieder zum ersten)?

Verwende ich hier eine TListBox und wenn ja, wie sage ich dem MP, dass er die Einträge nacheinander abarbeitet?

Danke schön im voraus :D


SvenAbeln - Di 24.09.02 15:15

Hallo,

TMediaPlayer hat leider keine Playliste, aber er erzeugt ein Ereignis OnNotify wenn Play beendet ist und du kannst dann einfach das nächste Lied starten.


Mattes - Mi 25.09.02 07:36

Danke.
Mit zwei Liedern (eins bei OnCreate der Form, das nächste bei MPNotify) funktioniert das auch wunderbar. Doch wie "geb" ich ihm dann das 3., 4. usw...vor??? :?:


Sephiroth - Mi 25.09.02 08:18

Mach doch einfach ein Array in dem alle Fünf lieder drin stehen und mach einen Zähler der nach jedem fertigen Lied sich um eins erhöht und dadurch den nächsten Eintrag im Array abarbeitet (also nächstes Lied)


LCS - Mi 25.09.02 08:20

Hi
sollte so funktionieren (nicht getestet):

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm2.MediaPlayer1Notify(Sender: TObject);
begin
   if  Liste.ItemIndex < Liste.Items.Count - 1 then
       Liste.ItemIndex := Liste.ItemIndex + 1
   else
       Liste.ItemIndex := 0;
   MediaPlayer1.FileName := Liste.Items[Liste.ItemIndex];
   MediaPlayer1.Notify    := True;
   MediaPlayer1.Play;
end;

Liste ist deine Liste mit den abzuspielenden Dateinamen. Bei jedem NotifyEvent muss die Eigenschaft Notify erneut auf True gesetzt werden, damit der Event erneut aufgerufen wird.

Gruss Lothar


Mattes - Mi 25.09.02 21:35

Danke einstweilen, werde ich morgen gleich mal ausprobieren :)


Mattes - Fr 27.09.02 10:24

Hm, irgendwas mach ich wohl falsch.
Nach dem Ende der ersten MP3-Datei (die von MediaPLayer automatisch bei Programmstart ausgeführt wird) fängt der Markierungsbalken in der Liste an zu rennen, von oben nach unten und wieder von vorne.
Aber der MediaPlayer reagiert darauf nicht... Jemand ne Idee? :?:


Aya - Sa 28.09.02 19:55

Hi,


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm2.MediaPlayer1Notify(Sender: TObject); 
begin 
   if  Liste.ItemIndex < Liste.Items.Count - 1 then 
       Liste.ItemIndex := Liste.ItemIndex + 1 
   else 
       Liste.ItemIndex := 0; 
   MediaPlayer1.FileName := Liste.Items[Liste.ItemIndex]; 
   MediaPlayer1.Notify     := True; 
   MediaPlayer1.Play; 
end;

ist ja im grunde fast richtig... es fehlt nur eins, nämlich gibt der Player auch ein Notify wenn er anfängt abzuspielen = Auch dann wird das da oben ausgelöst...

du mußt einfach prüfen ob die NotifyMessage vom MediaPlayer =nmSuccesfull (oder soähnlich, guck mal in die Hilfe, da steht's genau) ist. dann gehts :)

Au'revoir,
Aya


Mattes - Mo 30.09.02 11:16

Der Tip war schon mal gut, Danke.
Aber der Anfänger Mattes muß nochmal auf das Thema zurückkommen :)

Nach Ende des ersten Titels, der im MP unter FileName ausgewählt wurde, beginnt die Auswahl in der Liste zu "laufen" (1.mp3, 2.mp3, 3.mp3 ...)
Doch es wird immer wieder der Titel abgespielt, der im Objektinspektor eingetragen ist (1.mp3).

Ohne eingegebenen FileName im MediaPlayer startet das Programm gar nicht, d.h.dort muß eine "Startdatei" angegeben sein.

D.h.die Dateiaufrufe aus der FileListBox werden nicht in FileName des MP übernommen!?

:?:


mimi - Mo 30.09.02 15:11
Titel: hier ist meine lösung

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
// oben
var
  index:Integer = 0;

procedure PLayListe;
var
  List:TStringList;
begin
  List:=TStringList.Create;
  list.add('FileName0');
  list.add('FileName1');
  list.add('FileName2');
  list.add('FileName3');
  if MediaPlayer1.Mode = MP_Stopped then begin
    if index = liste.Count -1 then
      index:=0 
    else
      inc(index);  
    MediaPlayer1.FileName:=Liste.Strings[i];
    MediaPlayer1.Open;
    MediaPlayer1.Play;
  end;
end

die funktion ruft du einfach in einem Timer auf denn Timer stellst du z.B auf 1 und dann sollte es gehen,ich habe es nicht getsetet. Wenn fragen sind dann Frage :)

MFG
mimi


LCS - Mo 30.09.02 15:27

Hi

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
   if  Liste.ItemIndex < Liste.Items.Count - 1 then
       Liste.ItemIndex := Liste.ItemIndex + 1
   else
       Liste.ItemIndex := 0;
   mp.FileName := Liste.Items[Liste.ItemIndex];
   mp.Open;
   mp.Notify     := True;
   mp.Play;

Voreingestellte Eigenschaften
AutoEnable := True;
AutoOpen := True;
AutoRewind := False;
DeviceType := dfWaveAudio

Und: Es funzt :!: :mrgreen:

Gruss Lothar