Entwickler-Ecke

Delphi Tutorials - TMediaPlayer for Dummies


retnyg - Mi 11.05.05 22:47
Titel: TMediaPlayer for Dummies
http://www.krazz.net/retnyg/tut/mptut1.htm

ein kleines tutorial für den TMediaplayer.

fragen dazu hier posten, bei bedarf/interesse werde ich auch demonstrieren wie man z.b. durch eine playlist iteriert.


pontoffeltier - So 05.06.05 01:49

mach das mal
wär nett wenn du mir den link dann per mail oda icq schiggn könntest
[edit: persönliche daten entfernt]
danke


xxx244 - Mo 06.06.05 18:53

HAllo!
Ich würde es gut finden, wenn du noch weiter schreibst.
Mich würd das mit der Playlist mal interressieren.
Adrian


retnyg - Di 07.06.05 15:29

Neue Version Online:
- Arbeiten mit einer Playlist
- Arbeiten mit dem OnNotify-Event zur Erkennung eines Liedendes.


xxx244 - Di 07.06.05 17:36

Also ich find da keine neue Version!
Vielleicht ein falscher Link!

//EDIT:Geht jetzt!Link wurd irgendwie bei erstemal nicht mitgeladen
Aber als ich den Frame neugeladen hab gings:


retnyg - Di 07.06.05 17:39

doch...du musst allerdings unten auf der seite den link...weiter zu kapitel 2 anklicken.
und falls das da unten nicht steht, musst du bei deinem browser entweder auf aktualisieren klicken, nen rechtsklick auf die seite machen und this frame->reload oder den cache bzw offlineinhalte leeren (unter einstellungen)


WeBsPaCe - Di 07.06.05 17:40

user profile iconxxx244 hat folgendes geschrieben:
Also ich find da keine neue Version!
Vielleicht ein falscher Link!

Ganz unten findest du immer einen Link zum neuen Kapitel... ;)

//EDIT: Mist... :motz: Zu spät... ;)


Fisheye - So 12.06.05 18:55

Ich habe ein problem mit dem Mp3 Player.

Ich hab das Tutorial durch die Kompillierung geht auch ohne Probleme. Nur wenn es in der Playlist zum nächsten weiterspringt stürzt der Mp3 Player beim 3 weiterspringen immer ab :cry:

//Edit : Ich habe meinen neuen Quellcode hier reinkpiert. Hab inzwischen einen Lautsärken regeler eingebaut, der tadellos funktioniert :wink: Die Fehler sind leider immer noch da


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:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
unit Unit3_form3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ShellApi, ComCtrls, mmsystem;

type
  TForm3 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    ListBox1: TListBox;
    TrackBar1: TTrackBar;
    procedure TrackBar1Change(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
    procedure MediaPlayer1Notify(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Procedure AddToPlaylist(s:String);
    Procedure PlayFile(SongNumber:Integer);
    Procedure WMDropFiles (Var aMsg: tMessage);  message WM_DROPFILES;
  end;

var
  Form3: TForm3;
  PlayList : TStringList;
  CurrentSong : Integer = -1;

implementation

function SetWaveVolume(const AVolume: DWord) : boolean;
var
  WaveOutCaps : TWAVEOUTCAPS;
begin
  Result := False;
  if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, sizeof(WaveOutCaps)) = MMSYSERR_NOERROR then
  if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
  Result := WaveOutSetVolume(-1, AVolume) = MMSYSERR_NOERROR;
end;

function GetWaveVolume(var LVol:DWord; var RVol:DWord) : Boolean;
var
  WaveOutCaps : TWAVEOUTCAPS;
  Volume : DWord;
begin
  Result := false;
  if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
  if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
  begin
    Result := WaveOutGetVolume(-1, @Volume) = MMSYSERR_NOERROR;
    LVol := LoWord(Volume);
    RVol := HiWord(Volume);
  end;
end;



Procedure TForm3.WMDropFiles (Var aMsg: tMessage);  // Drag & Drop Procedure
Var
  Idx, Size, FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFFnil255);
  For Idx := 0 To FileCount -1 Do Begin
    Size := DragQueryFile (aMsg.WParam, Idx, nil0) + 1;
    Filename := StrAlloc (Size);
    If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then  { nothing }
    else  AddToPlayList (pChar (Filename)); // hier wird das jeweilige file unserer Prozedur AddToPlaylist überwiesen.
    StrDispose (Filename);
  End;
  DragFinish (aMsg.WParam);
End;

Procedure Tform3.AddToPlaylist(s:string);
begin
  PlayList.Add(s);
  ListBox1.Items.Add(extractfilename(s));
end;




{$R *.dfm}


procedure TForm3.FormCreate(Sender: TObject);
begin
  DragAcceptFiles (Handle, True);  // Drag & Drop Akzeptieren
  PlayList := TStringList.Create;  // TStringList erstellen
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
  PlayList.Free;
end;


 Procedure Tform3.PlayFile(Songnumber:Integer);
begin
  If FiLeExists(PlayList.Strings[SongNumber])
  then
    begin CurrentSong := SongNumber;
  MediaPlayer1.Close;
  MediaPlayer1.FileName := PlayList.Strings[SongNumber];
  MediaPlayer1.Open;
  MediaPlayer1.Play;
  end;
end;



procedure TForm3.MediaPlayer1Notify(Sender: TObject);
begin
if mediaplayer1.Position = mediaplayer1.Length then begin
   // position = gesamtlänge, bedeutet dass das lied beendet wurde
     Listbox1.Selected[currentSong] := false; // das gerade gespielte lied de-selektieren
     inc(currentSong); // aktuellen song um eines erhöhen
     if currentSong < Playlist.Count then { alles passt, songindex im rahmen}
     else currentsong := 0{ende der liste erreicht, setze aktuelles lied auf anfang}
     PlayFile(CurrentSong);
     Listbox1.Selected[currentSong] := true; // das aktuelle lied selektieren
   end;
end;


procedure TForm3.ListBox1DblClick(Sender: TObject);
var
i : integer;
begin
for i := 0 to ListBox1.Count - 1 do
  if ListBox1.Selected[i]
    then Break;
  PlayFile(i);
end;

procedure TForm3.TrackBar1Change(Sender: TObject);
begin
  SetWaveVolume (MakeLong((65535 div 100) * Trackbar1.Position, (65535 div 100) * Trackbar1.Position)) ;
end;

end.


Ich hoffe ihr könnt mir helfen


retnyg - Mo 13.06.05 03:14

user profile iconFisheye hat folgendes geschrieben:

Nur wenn es in der Playlist zum nächsten weiterspringt stürzt der Mp3 Player beim 3 weiterspringen immer ab :cry:
Ich hoffe ihr könnt mir helfen


hmm ich hab das mal kompiliert (nur form3 in form1 geändert) - funktioniert tadellos bei mir
versuche mal einen breakpoint in das notify-event und dann mit einzelschritt ( F7 ) durchgehen und immer die variablen kontrollieren. welche delphi-version verwendest du ?


Fisheye - Mo 13.06.05 16:13

z.Z. Benutze Ích die Delphi 2005 Trial

Ich habe jetzt mal in allen Prozeduren breakpunkte gesetzt.

Dabei tratem folgende fehler auf


Quelltext
1:
2:
3:
4:
Source Breakpoint at $00457E60: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 146. Process Mp3player.exe (3012)
Source Breakpoint at $00457C6C: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 92. Process Mp3player.exe (3012)
Source Breakpoint at $00457C7E: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 94. Process Mp3player.exe (3012)
Source Breakpoint at $00457C8F: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 95. Process Mp3player.exe (3012)


Fisheye


retnyg - Mo 13.06.05 22:14

das sagt mir ziemlich wenig, bei dem code oben entsprechen die codezeilen dem Tform1.create, bzw dem end. ganz am schluss ^^
bei welcher code-zeile hängt er sich auf ?


Ironwulf - Mi 17.08.05 19:22

Ich hab das tutorial auch mal gemacht nur kommt dann bei mir der zeile

Delphi-Quelltext
1:
if currentSong < Playlist.Count then                    

der Fehler das das Maximum der Liste überschritten wird, kann mir bitte jemand sagen woran das liegt?
mmh ich verwend delphi3 Pro

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


WeBsPaCe - Mi 17.08.05 20:11

Ohne jetzt das Tutorial wirklich durchgemacht zu haben: Probier mal


Delphi-Quelltext
1:
if currentSong < Playlist.Count-1 then                    


F34r0fTh3D4rk - Mi 17.08.05 20:15

tutorial finde ich auch sehr schön, fehlte irgendwie noch ne lautstärke regelung, das versuch ich schon ewig hinzubekommen, aber irgendwie klappts nie :roll:


WeBsPaCe - Mi 17.08.05 20:17

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
tutorial finde ich auch sehr schön, fehlte irgendwie noch ne lautstärke regelung, das versuch ich schon ewig hinzubekommen, aber irgendwie klappts nie :roll:

Das solltest du über das MMSystem hinbekommen.

:arrow: http://www.delphi-forum.de/viewtopic.php?t=40421&highlight=lautst%E4rke


F34r0fTh3D4rk - Mi 17.08.05 20:23

so in etwa:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Procedure LowerVol(Percent: Integer);  
Var  
    i: Integer;  
Begin  
    If (Percent <= 100And (Percent >= 1Then  
        For i := 1 To (Percent Div 2) + 1 Do  
            SendMessage(Application.Handle, WM_Command, 400590);  
End;  
 
Procedure RaiseVol(Percent: Integer);  
Var  
    i: Integer;  
Begin  
    If (Percent <= 100And (Percent >= 1Then  
        For i := 1 To (Percent Div 2) + 1 Do  
            SendMessage(Application.Handle, WM_Command, 400580);  
End;

? werde ich mal testen ;)

edit: tut sich nischt :roll:


Ironwulf - Mi 17.08.05 20:24

argh, bin beim kopiern in der zeile verrutscht sry, dort komm der fehler

Delphi-Quelltext
1:
inc(currentSong);                    


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


F34r0fTh3D4rk - Mi 17.08.05 20:32

ich arbeite auch schon seit längerem an meinem mp3 player, vielleicht kannst du ja was mit meiner notify prozedur anfangen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TMainForm.MPlayerNotify(Sender: TObject);
var
  track: integer;
begin
  if mplayer.Position = mplayer.Length then
    begin
     (*Gekürzt ;) *)
     track := current;
     if not random_play then
       begin
         inc(track);
         if track > (high(MP3s) - 1then
           track := 0;
       end else
         track := random(high(MP3s) - 1);
     Play(track);
   end;  
end;


retnyg - Mi 17.08.05 20:43

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
so in etwa:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Procedure LowerVol(Percent: Integer);  
Var  
    i: Integer;  
Begin  
    If (Percent <= 100And (Percent >= 1Then  
        For i := 1 To (Percent Div 2) + 1 Do  
            SendMessage(Application.Handle, WM_Command, 400590);  
End;  
 
Procedure RaiseVol(Percent: Integer);  
Var  
    i: Integer;  
Begin  
    If (Percent <= 100And (Percent >= 1Then  
        For i := 1 To (Percent Div 2) + 1 Do  
            SendMessage(Application.Handle, WM_Command, 400580);  
End;

? werde ich mal testen ;)

edit: tut sich nischt :roll:

is klar, nö ? siehst du irgendwo einen code der die lautstärke beeinflussen soll ?
ich sehe code der eine windowmessage an ein programm abschickt.
das is der code um bei winamp die lautstärke zu verstellen :roll:
das das in deinem programm nix bewirkt, ist also logisch


F34r0fTh3D4rk - Mi 17.08.05 21:06


Delphi-Quelltext
1:
WM_Command, 40058                    

dachte dass des auch hier funzt, oder ist das winamp spezifisch ?

hast du was anderes auf lager ?


retnyg - Do 18.08.05 00:58

wie wärs hiermit Suche bei Google VOLUME DELPHI


F34r0fTh3D4rk - Do 18.08.05 15:33

dabei wird ja die systemlautstärke verändert, da kann man bissl was um schreiben, aber ist es das gleiche, wie zb bei winamp ?

angenommen, ich start meinen mp3 player und den windows media player, lasse beide abspielen und mache meinen leiser, dann sollte eigentlich der wmp immer noch so laut sein wie vorher, sonst ergibt das für mich keinen sinn :roll:


Ironwulf - Do 18.08.05 15:48

sry das ich euch grad unterbrech,
ich hab das tut mal mit delphi 3 probiert und mit delphi 6
in delphi 3 kommt ein fehler das die liste das maximum überschreitet, in der 6 nicht
worin liegt da der unterschied, denn das einzigste was sich im code ändert ist das delphi3 nicht mit der variants uses anfang kann und man listbox1.count in listbox1.items.count ändern müsste oder irr ich mich da ein wenig?


F34r0fTh3D4rk - Do 18.08.05 16:05

kannst du so lassen, aber es müsste count - 1 sein denke ich


retnyg - Do 18.08.05 16:17

nein, für delphi 5 und höher stimmt das schon mit count
die abrage ist ja if < count
möglicherweise fängt aber bei delphi 3 die indizierung bei der listbox mit 1 und nicht null an, oder count liefert ein anderes ergebnis als bei neueren delphis ?
(das solltest du überprüfen, ich habe kein delphi 3)
der fehler kann eigentlich nur hier auftreten:

Delphi-Quelltext
1:
     Listbox1.Selected[currentSong] := false; // das gerade gespielte lied de-selektieren                    

falls currentsong einen index hätte der grösser als die anzahl der einträge hätte.


X-0tic - Sa 17.09.05 13:34

Schade, mit *.pls-Dateien scheint das ja nicht so wirklich zu funzen oder doch? :x


retnyg - Sa 17.09.05 15:03

user profile iconX-0tic hat folgendes geschrieben:
Schade, mit *.pls-Dateien scheint das ja nicht so wirklich zu funzen oder doch? :x
meinst du damit dass man sich nicht zu einem shoutcast stream verbinden kann ?
oder hast du probleme bei der implementierung des pls-formats ? :gruebel:


X-0tic - Sa 17.09.05 20:07

Ja, ich meine, dass es damit wohl nicht möglich ist zu einem ShoutCastServer zu verbinden oder?


retnyg - Sa 17.09.05 23:03

user profile iconX-0tic hat folgendes geschrieben:
Ja, ich meine, dass es damit wohl nicht möglich ist zu einem ShoutCastServer zu verbinden oder?

nein, das ist mit dem TMediaPlayer leider nicht möglich. der TMediaPlayer kann auch keine dateien öffnen, die gerade von einem anderen Programm geschrieben werden (wie z.b. mein shoutcast-ripper Suche in: Delphi-Forum MP3PROXY).
es geht aber mit den windows acm subsystem, allerdings muss zuerst der acm mp3 codec von fraunhofer institut installiert sein (ist bei WMP 10 dabei).
eine unit dafür findest du auf http://www.thaddy.com


X-0tic - So 18.09.05 01:06

Irgendwie UfFfF.... Danke.


MKX - Do 29.09.05 20:53

Das Tutorial hat mir sehr geholfen!
Aber wenn der Mediaplayer den nächsten Eintrag der Playliste abspielen soll endet das mit der Exception: Der Index der Liste überschreitet das Maximum(0) :evil: Was kann ich machen, damit das Programm funktioniert?

[Edit]Der selbe fehler wie bei allen anderen. Was kann man trotz Delphi3 machen?


Krumnix - Do 13.10.05 16:30

So, hier mal was für die Lautstärke.

!!Ändert die Lautstärke über WAV, was WinAmp auch macht. Deswegen meint man, das der
Rest vom System weiterhin gleichlaut bleibt, weil man da ja ggf. keine Sounds über WAV abspielt. Der Player hier arbeitet aber über WAV.!!

Liefert die im System eingestellte Lautstärke von WAV zurück:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TForm1.GetWaveVolume(var GVolume: word): Boolean;
var WaveOutCaps: TWAVEOUTCAPS;
    Volume: DWORD; // max. is 65535
begin
 Result := False;
 if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
  if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
   begin
    Result := WaveOutGetVolume(WAVE_MAPPER, @Volume) = MMSYSERR_NOERROR;
    GVolume := LoWord(Volume);
   end;
end;


Setzt die Lautstärke von WAV (ACHTUNG: nur bis max. 65535!!)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function TForm1.SetWaveVolume(const AVolume: DWORD): Boolean;
var WaveOutCaps: TWAVEOUTCAPS; // max. is 65535
begin
 Result := False;
 if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
  if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
   Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR;
end;


Aufruf der Funktionen:

Delphi-Quelltext
1:
2:
3:
4:
ScrollBar1.Min := 0;
ScrollBar1.Max := 65535
if GetWaveVolume(Lautstaerke) then
  ScrollBar1.Position := Lautstaerke;



Delphi-Quelltext
1:
SetWaveVolume(ScrollBar1.Position);                    


retnyg - Do 13.10.05 16:41

uses mmsystem nicht vergessen.


Fisheye - So 08.01.06 05:52

Ich wolllte das Programm nochmal unter Delphi 2005 basteln.

// Edit : Hat sich erledigt :)

Ich habe ein Problem mit der Drag und Drop funkiton.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Procedure TForm1.WMDropFiles (Var aMsg: tMessage);
Var
  Idx, Size, FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFFnil255);
  For Idx := 0 To FileCount -1 Do Begin
    Size := DragQueryFile (aMsg.WParam, Idx, nil0) + 1;
    Filename := StrAlloc (Size);
    If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then  { nothing }
    else  AddToPlayList (pChar (Filename));
    StrDispose (Filename);
  End;
  DragFinish (aMsg.WParam);
End;


Die Procedure steht unter Public, Drag und Drop ist akzeptuert und die ShellApi klausel ist auch drin.

Ich bekommt folgende Fehler

[Fehler] Unit1.pas(42): E2410 Unsichere Zeigervariablen, Parameter oder Konstanten sind nur in unsicheren Prozeduren zulässig

[Fehler] Unit1.pas(48): E2003 Undefinierter Bezeichner: 'StrAlloc'

[Fehler] Unit1.pas(49): E2010 Inkompatible Typen: 'StringBuilder' und 'PWideChar'

[Fehler] Unit1.pas(50): E2010 Inkompatible Typen: 'string' und 'PWideChar'

Wodran könnt das liegen ?


death-adders - Sa 14.01.06 12:00

Hi @ all, ich habe das wie im tutorial beschrieben gemacht, is ja auch ganz simpel, so sieht mein quelltext aus:



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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer;

type
  TForm1 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  mediaplayer1.FileName := 'C:\mugge';
  mediaplayer1.Open;
end;

end.



Aber mein klick auf button 1 kommt folgende Fehlermeldung:

user defined image


papa_s - So 22.01.06 22:36
Titel: Den Titel Stoppen
Hallo !
Erstmal Danke für das Tutorial ! Bin Newbie im Programmieren, aber das war genau das was ich suchte.
Jetzt meine Frage : Wenn der Button CLick den Titel startet, wie kann ich den dann per weiterem Klick auf den Button Stoppen ? Also :
1. Klick Start *.mp3
2. Klick Stopp *.mp3

Wäre schön, wenn mir jemand einfach helfen könnte !

mfg

papa_s


retnyg - Mi 25.01.06 11:23
Titel: Re: Den Titel Stoppen
@death-adders: 'C:\mugge' ist ein ordner oder ? du musst einen gültigen DATEInamen übergeben, der mit .mp3 endet

user profile iconpapa_s hat folgendes geschrieben:
Hallo !
Erstmal Danke für das Tutorial ! Bin Newbie im Programmieren, aber das war genau das was ich suchte.
Jetzt meine Frage : Wenn der Button CLick den Titel startet, wie kann ich den dann per weiterem Klick auf den Button Stoppen ? Also :
1. Klick Start *.mp3
2. Klick Stopp *.mp3

Wäre schön, wenn mir jemand einfach helfen könnte !

mfg

papa_s

Mediaplayer1.stop;

übrigens: wenn du mediaplayer1. schreibst und kurz wartest, klappt eine liste der möglichen Befehle auf, die du mit den cursortasten durchschauen kannst.


death-adders - Fr 27.01.06 16:03
Titel: Re: Den Titel Stoppen
user profile iconretnyg hat folgendes geschrieben:
@death-adders: 'C:\mugge' ist ein ordner oder ? du musst einen gültigen DATEInamen übergeben, der mit .mp3 endet

user profile iconpapa_s hat folgendes geschrieben:
Hallo !
Erstmal Danke für das Tutorial ! Bin Newbie im Programmieren, aber das war genau das was ich suchte.
Jetzt meine Frage : Wenn der Button CLick den Titel startet, wie kann ich den dann per weiterem Klick auf den Button Stoppen ? Also :
1. Klick Start *.mp3
2. Klick Stopp *.mp3

Wäre schön, wenn mir jemand einfach helfen könnte !

mfg

papa_s

Mediaplayer1.stop;

übrigens: wenn du mediaplayer1. schreibst und kurz wartest, klappt eine liste der möglichen Befehle auf, die du mit den cursortasten durchschauen kannst.


OK, es hat gefuntzt, das mit dem pfad war schon richtig, es fehlte nur das ".mp3" Aber andere Formate unterstützt der mediaplayer nicht?


Silence - Mi 22.03.06 18:18

Hi, ich hab ein problem mit der playliste und zwar wenn ich auf eine datei die da drinnen ist klicke dann passiert rein garnichts. ich habs genau so gemacht wie es im tutorial stand

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:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ShellApi;

type
  TForm1 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure AddToPlayList(s:string);
    procedure PlayFile(s:string);
    Procedure WMDropFiles (Var aMsg: tMessage);  message WM_DROPFILES;
  end;

var
  Form1: TForm1;
  playList: TStringList;

implementation

{$R *.dfm}

Procedure TForm1.WMDropFiles (Var aMsg: tMessage);
Var
  Idx, Size, FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFFnil255);
  For Idx := 0 To FileCount -1 Do Begin
    Size := DragQueryFile (aMsg.WParam, Idx, nil0) + 1;
    Filename := StrAlloc (Size);
    If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then  { nothing }
    else  AddToPlayList (pChar (Filename));
    StrDispose (Filename);
  End;
  DragFinish (aMsg.WParam);
End;

Procedure TForm1.AddToPlayList(s:string);
begin
   playList.Add(s);
   ListBox1.Items.Add(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  mediaplayer1.FileName := 'F:\Musik\bloodhound gang\bloodhound gang - your pretty when im drunk.mp3';
  mediaplayer1.Open;
  mediaplayer1.play;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   DragAcceptFiles (Handle, True);   // drag und drop akzeptieren
   playList := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   playList.Free;
end;

procedure TForm1.PlayFile(s:string);
begin
   mediaplayer1.Close;
   mediaplayer1.FileName := s;
   mediaplayer1.Open;
   mediaplayer1.play;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Count - 1 do
    if listbox1.Selected[i] then break;
  if fileexists(Playlist.Strings[i]) then PlayFile(Playlist.Strings[i]);
end;

end.


wo liegt denn da der fehler?


Death666Metal - Fr 26.05.06 21:59
Titel: Automatisches Abspielen einer MP3 beim Öffnen von Programm?
Hi!
Ma ne Frage. Wie schreibt man das automatisch beim Öffnen der "programm.exe" eine MP3-Datein abgespielt wird?
Muss man da im Objekt-Inspektor bei der TForm1 irgendwo etwas eingeben oder also procedure oder???
Ich hoffe ihr versteht was ich meine....
Jetzt schon RIESEN THX!!!!!


Exodia-Rübe - Mi 18.10.06 10:08

also, zunächst möchte ich loswerden, dass mir dieses tutorial sehr geholfen hat.

Allerdings halt ich es für sehr nützlich, wenn man die zeit einstellen, also vor- oder zurückspulen
kann (etwa über einen schieberegler wie bei winamp oder so).

weiß jemand, wie man das macht? ich habe leider keine ahnung...

ich danke allen, die ideen habe und posten.


mfg Exodia-Rübe

(ein wenig quellcode wäre vielleicht auch nicht verkehrt^^)


Wegi - Di 20.03.07 17:25

Hallo,

erstmal entschuldigung das ich diesen alten Thread ausgrabe, aber ich habe eine problem mit dem im Tutorial beschriebenen MediaPlayer. (Es ist mein erstes projekt, deswegen möglich das sich fehler eingeschlichen haben).

Und zwar:

Wenn ich den Quellcode aus dem tutorial übernehme, springt das programm nach beendigung eines Liedes immer zuerst zu Lied Nr. 1 und geht dann erst der reihe nach nach unten. Wenn ich so umschreibe, dass er der Reihe nach nahc unten geht, springt er nach dem letzten Lied nicht mehr zum ersten. Wenn ich das wiederrum fixe, springt er nach dem letzten immer zum 2. Und dann nirgentwohin mehr.

Pls Help.


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:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ShellApi;

type
  TForm1 = class(TForm)
    Media: TMediaPlayer;
    ListBox1: TListBox;
    ButtonSave: TButton;
    ButtonLoad: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure MediaNotify(Sender: TObject);
    procedure ButtonSaveClick(Sender: TObject);
    procedure ButtonLoadClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure AddToPlayList(s:string);
    Procedure PlayFile(songNumber: integer);
    Procedure WMDropFiles (Var aMsg: tMessage);  message WM_DROPFILES;
  end;

var
  Form1: TForm1;
  playList: TStringList; (*Globale Variable die Für die Playlist benötgt wird*)
  CurrentSong: integer = -1; (*merkt sich aktuelles Lied*)
  Root : String = 'ExtractFilePath(ParamStr( 0 )';

implementation

{$R *.dfm}
//-----------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
  playList := TStringList.Create;
  DragAcceptFiles (Handle, True);
end;
//-----------------------------------------------------------------------------
procedure TForm1.FormDestroy(Sender: TObject);
begin
  playList.Free;
end;
//-----------------------------------------------------------------------------
Procedure TForm1.AddToPlayList(s:string);
begin
   playList.Add(s);
   ListBox1.Items.Add(extractfilename(s));
end;
//------------------------------------------------------------------------------
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Itemindex do
  PlayFile(i);
end;
//-----------------------------------------------------------------------------
procedure TForm1.PlayFile(songNumber: integer);
begin
  if fileexists(Playlist.Strings[songNumber]) then begin
    media.Close;
    media.FileName := Playlist.Strings[songNumber];
    media.Open;
    media.play;
  end;
end;
//-----------------------------------------------------------------------------
Procedure TForm1.WMDropFiles (Var aMsg: tMessage);
Var
  Idx, Size, FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFF, nil, 255);
  For Idx := 0 To FileCount -1 Do Begin
    Size := DragQueryFile (aMsg.WParam, Idx, nil, 0) + 1;
    Filename := StrAlloc (Size);
    If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then  { nothing }
    else  AddToPlayList (pChar (Filename)); // hier wird das jeweilige file unserer Prozedur AddToPlaylist überwiesen.
    StrDispose (Filename);
  End;
  DragFinish (aMsg.WParam);
End;
//-----------------------------------------------------------------------------
procedure TForm1.MediaNotify(Sender: TObject);
begin
   currentSong := ListBox1.ItemIndex;
   if media.Position = media.Length then
     begin
       if not currentSong < ListBox1.Count -1 then
       begin
         currentSong := 0;
         Playfile(CurrentSong);
         ListBox1.Selected[currentSong] := true;
       end
       else
         Listbox1.Selected[currentSong] := false;
         inc(currentSong);
         ListBox1.Selected[currentSong] := true;
         Playfile(Currentsong);
     end;
end;
//-----------------------------------------------------------------------------
procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
    TRY
      Playlist.SaveToFile(root + 'Playlist.lst');
      ListBox1.Items.SaveToFile(root + 'Playlist_show.lst');
      showmessage('Playlist erfolgreich gespeichert');
    EXCEPT
      TRY
        filecreate(root + 'Playlist.lst');
        filecreate(root + 'Playlist_show.lst');
        Playlist.SaveToFile(root + 'Playlist.lst');
        ListBox1.Items.SaveToFile(root + 'Playlist_show.lst');
      EXCEPT
        showmessage('ERROR: DATEI KONNTE NICHT GESPEICHERT WERDEN');
      end;
    end;
end;
//-----------------------------------------------------------------------------
procedure TForm1.ButtonLoadClick(Sender: TObject);
begin
  If fileexists(root + 'Playlist.lst') then
    begin
      TRY
        Playlist.LoadFromFile(root + 'Playlist.lst');
        ListBox1.Items.LoadFromFile(root + 'Playlist_show.lst');
        showmessage('Playlist erfolgreich geladen');
      EXCEPT
        showmessage('ERROR: LADEN NICHT MÖGLICH');
      end;
    end;
end;


end.


Es handelt sich um die onNotify-Prozedur. (Zeile 92, folgende)

//edit: Ich hab es mit Turbo Delphi 2006 geschrieben.

/edit: habs nach langem rumprobieren selbst gelöst :)