Entwickler-Ecke

Multimedia / Grafik - TMediaplayer Wiederholungen


Horst - Do 13.06.02 20:13
Titel: TMediaplayer Wiederholungen
Wie kann ich dem TMediaplayer beibringen das er einen
sound mehrmals (Anzahl angeben) abspielt (play).
Danke für einen hilfreichen tipp.


Arakis - Do 13.06.02 20:47

Den offiziellen Weg kenn ich nicht. Ich mach das so, in dem ich permanent abfrage, ob das Liedende erreicht worden ist. Dazu muss man aber Autoopen glaub ich auf false setzten, was wiederrum bedeutet, dass man selbst für das starten, stoppen verantwortlich ist. Es gibt garantiert bessere Lösungen :wink:
Schau dir einfach mal mein DockPlayer(MP3-Player) an:
http://www.entwickler-ecke.de/viewtopic.php?t=66 (Sparte "Eure Delphi Projekte")
Da habe ich einen TMediaPlayer im Hintergrund laufen, steuere diesen aber durch meine eigenen Buttons.

Bis dann
user defined image


Thunderman - Do 13.06.02 21:32

Wenn ich mich jetzt richtig erinner, geht das mit einem OnNotifyEvent und Wait auf True gestellt (oder war es False?). Weiß aber nicht mehr genau wie. Dieses Event wird meine ich ausgelöst, wenn der MediaPlayer was ändert, also anfängt, aufhört, etc.


DieHardMan - Do 13.06.02 23:21

nur zur errinerung

Zitat:
OnNotify tritt ein, sobald die Ausführung einer Methode zur Steuerung des Media-Players (Back, Close, Eject, Next, Open, Pause, PauseOnly, Play, Previous, Resume, Rewind, StartRecording, Step oder Stop) beendet ist. Voraussetzung dafür ist allerdings, daß die Eigenschaft vor dem Aufruf der Methode auf True gesetzt wurde. Nach einem OnNotify-Ereignis muß die Eigenschaft Notify erneut auf True gesetzt werden, damit das nächste OnNotify-Ereignis eintreten kann.


webmaker - Di 18.06.02 20:52

stand da nicht auch was in der FAQ vom alten DF drin??


Horst - Mi 19.06.02 21:56

Thunderman hat folgendes geschrieben:
Wenn ich mich jetzt richtig erinner, geht das mit einem OnNotifyEvent und Wait auf True gestellt (oder war es False?). Weiß aber nicht mehr genau wie. Dieses Event wird meine ich ausgelöst, wenn der MediaPlayer was ändert, also anfängt, aufhört, etc.


das onNotify-Event ist genau richtig: :idea:
Einfach rewind u. play reinschreiben und man hat eine Endlosschleife,
d.h. der Sound wird endlos wiederholt. Man braucht also nur einen
Zähler einzubinden und abzufragen und schon kann man die Wiederholungen begrenzen. Danke für den Tip.
:D


gangstaberber - Mi 17.03.04 04:26

hey
könnt ihr mal bite ein beispiel für die endlossschleife reinschreiben
denn bei mir leuft das irgendwie nicht
Mfg Berber


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.FormCreate(Sender: TObject);
begin

Mediaplayer1.visible:=false;
MediaPlayer1.FileName := 'song.mp3';
MediaPlayer1.Open;
Mediaplayer1.play;
MediaPlayer1.Notify   := True;
  MediaPlayer1.OnNotify := NotifyProc;

procedure TForm1.NotifyProc(Sender: TObject);
begin
  with Sender as TMediaPlayer do
  begin
    case Mode of
      mpStopped:Label1.caption:='stop' // hier soll der song eigetlich neu gestartet werden;
    end;

    Notify := True;
  end;
end;


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


Horst - Do 18.03.04 20:27

Upps, eine neue Anfrage,
ist schon ein Weilchen her, dass ich mich damit beschäftig habe :lol:
Habe mal folgenden Source rausgesucht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
with MediaPlayer1 do
begin
  FileName := cSoundDatei;
  Open;
  Wait := True;
  For i:=1 to 3 do
    begin
    Play;
    if not AutoRewind then Previous;
    end;
 end;


Damit sollte es eigentlich funktionieren...

Gruß

Horst
:wave:

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


raven_22 - Sa 20.03.04 02:40

Um die Datei automatisch zu wiederholen, braucht man einen Timer.
In diesen Timer wir geprüft, ob die Datei noch läuft oder schon am Ende angekommen ist.
Wenn sie am Ende ist, wird sie zurückgesetzt und neu gestartet.
Nach jedem Durchgang, wird eine Variable um 1 erhöht.
Wenn die Datei dem Wert in Loops entsprechen wiederholt wurde, wird sie gestoppt und alles auf Null zurückgesetzt wird.
Ist eigentlich ganz einfach, wenn man mal nachdenkt.

Gruß raven 8)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
unit Unit1;

interface

uses
      ...

type
  TForm1 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    Timer1: TTimer;
    Play: TButton;
    Stop: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure PlayClick(Sender: TObject);
    procedure StopClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Loop, Loops: Integer;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  MediaPlayer1.Visible:=false;
  MediaPlayer1.FileName:='F:\mp3\Kylie_bei_TvTotal_only_001.mp3';
  MediaPlayer1.Open;
  Loop:= 0;   // Wiederholungszähler auf Null setzen
  Loops:= 2;  // Anzahl der Wiederholungen
end;

procedure TForm1.PlayClick(Sender: TObject);
begin
  MediaPlayer1.Play;      // Song abspielen
  Timer1.Enabled:=true;   // Timer starten
  form1.Caption:='Play !'
end;

procedure TForm1.StopClick(Sender: TObject);
begin
  Loop:=0;                   // Wiederholungszähler auf Null setzen
  MediaPlayer1.Stop;         // Song stopen
  MediaPlayer1.Rewind;       // Mp3 auf Anfang zurücksetzen
  Timer1.Enabled:=false;     // Timer stopen
  form1.Caption:='gestopt !'
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if MediaPlayer1.Position = MediaPlayer1.Length then
  // ^^ Prüft ob Song schon zu Ende ^^
  // Wenn Song zu Ende, neu starten

Begin
  MediaPlayer1.Play;   // Song abspielen
  Loop:=Loop+1         // Wiederholungszähler um 1 erhöhen
end;

  if Loop = Loops+1 then
  // Prüfen ob die maximale Anzahl der Wiederholung
  // schon erreicht ist

  begin
  MediaPlayer1.Stop;      // Song stopen
  Timer1.Enabled:=False;  // Timer stopen
  Loop := 0;              // Wiederholungszähler auf Null setzen
  end;
  form1.Caption:=inttostr(loop)+ '. Wiederholung von '+inttostr(loops)+' Wiederholungen !';
end;

end.


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


Christian S. - Sa 20.03.04 12:35

Ich bin tief getroffen und schockiert! ;-)

Keiner von Euch benutzt Delphi-Tags! Wenn ich Euch noch einmal dabei erwische, bekommt ihr Hausarrest (was einschließt, dass Ihr dann die ganze Zeit im DF rumhängt). :D


raven_22 - Sa 20.03.04 13:32

Um in Delphi zu Programmieren, reicht meine Intelligenz noch aus.
Aber was zum Teufel sind Delphi-Tags ? :shock:
Kann man das essen oder ist das eine Komponente ?
Wenn mir eine mal erklären könnte was das ist, würde ich es wohl auch benutzen.
Bitte lasst mich nicht dumm sterben ! :roll:

Gruß raven 8)