Autor Beitrag
BlackWolf
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 30.12.04 01:59 
hoi,
bin gerade dabei nen kleinen mp3-player zu bauen. alles funzt soweit einwandfrei, ich hab ne TShellTreeView komponente auf der man eine mp3-datei auswählen kann, sobald man dies tut werden automatisch alle mp3-dateien desselben verzeichnisses in die playlist (TCheckListBox) geladen und nacheinander abgespielt, auserdem werden die ID3-tags ausgelesen. passt also alles. nun wollte ich einbauen das, wenn man auf eine datei in der playlist (also nicht dem TShellTreeView sondern der selbst erzeugten dateiliste aus mp3s) doppelklickt, das entsprechende file auch abgespielt wird. allerdings bekomme ich dort einen error. kurz der code:

ausblenden volle Höhe 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:
procedure TForm1.PlaylistBox2DblClick(Sender: TObject);
var laufwerk: char;
verzeichnisse, datei: string;
Playlist: TStringList;
pos: Integer;
begin
  try
    //Anhalten der bisher abgespielten Datei
    MediaPlayer.Stop;
    MediaPlayer.Close;
    //Auslesen des Verzeichnisses des aktuell abgespielten files - da nur dateien desselben verzeichnisses in der playlist sind muss das neue file zwangsweise aus dem selben verzeichnis sein
    ProcessPath(MediaPlayer.FileName,laufwerk,verzeichnisse,datei);
    //Jetzt alle mp3-dateien aus dem verzeichnis in eine StringList holen (damit man den gesamten Pfad zur Datei hat)
    Playlist := TStringList.Create;
    GetFiles(verzeichnisse,Playlist, '*.mp3');
    //jetzt den neuen filename dem mediaplayer zuweisen
    MediaPlayer.FileName := Playlist[PlaylistBox2.ItemIndex];
    //die ID3 tags schreiben
    ProcessPath(MediaPlayer.FileName,laufwerk,verzeichnisse,datei);
    LabelDatei.Caption := datei;
    ID3Tags.FileName := MediaPlayer.FileName;
    ID3Tags.active := TRUE;
    LabelInterpret.Caption := ID3Tags.Artist;
    LabelAlbum.Caption := ID3Tags.Year+' - '+ID3Tags.Album;
    LabelTitel.Caption := ID3Tags.Title;
    LabelGenre.Caption := ID3Tags.Genre;
    //die aktuell abgespielte datei wird in der playlist gechecked. dazu erst alles unchecken und anschließen das neue file checken
    PlaylistPos := Playlist.IndexOf(MediaPlayer.FileName);
    pos := 0;
    while (pos < PlaylistBox2.Count)
    do begin
      PlaylistBox2.Checked[pos] := FALSE;
      pos := pos+1;
    end;
    PlaylistBox2.Checked[PlaylistPos] := TRUE;
    Playlist.Free;
    MediaPlayer.Open;
    MediaPlayer.Play;
  except
  end;
end;


so ... nun bekomme ich aber in der zeile "MediaPlayer.Play;" den fehler: 'Fehler beim Starten von MCI'
ich habe ansonsten nie probleme mit dem MediaPlayer gehabt und er wurde auch vorher gestoppt. das file wird auch gefunden ... woran kann das nun liegen?

thx mfg bw
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 30.12.04 03:17 
vielleicht wird deinem mediaplayer ein ungültiger filename übergeben, ohne pfadname oder so ^^

kannst du mal deine id3-auslese funktion posten ?
BlackWolf Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 30.12.04 03:41 
ne kann eigentlich nicht sein das problem hatte ich davor da bekam ich die exception 'datei nicht gefunden' auserdem stimmt der pfad (hab ihn mir anzeigen lassen).
die tags werden mit einer extra komponente gelesen

mfg bw
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 30.12.04 04:12 
überprüf das mal lieber mit dem debugger direkt vor dem auruf von .play

wo kriegt man die id3 unit ? wäre dran intressiert
BlackWolf Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 30.12.04 04:30 
hm werd ich morgn machen heute zu müde
wegen der komponente: www.delphi-forum.de/...omponente_34211.html
;-)
is genial einfach installieren, fileName zuweisen und man kann id3v2 tags lesen und schreiben.

mfg

edit: ah du hast ja schon in das andere topic geschrieben ... falls du die komponente net gefunden hast: www.torry.net/vcl/mmedia/audio/id3v4.zip
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 30.12.04 04:51 
ouch... die unit is ja ganz schön fett, 65 KB. ich hatte eigentlich vor das nach KOL zu portieren... die arbeit werde ich mir aber ersparen. rein theoretisch sollte es auch mit ein paar Zeilen Code möglich sein diese Infos aus den Mp3s zu extrahieren. werd mir woll mal die spezifikation reinziehen müssen ^^
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 30.12.04 05:03 
hmm mir fällt da grade auf dass du zwar die position deines Klicks ausfindig machst, dann aber nicht den dazugehörigen string ausliest und dem dem mediaplayer übergibst

von der ShellTreeView hab ich noch nie was gehört, was ist an der anders als an der standard treeview ?
BlackWolf Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 30.12.04 15:30 
in der ShellTreeView kompo wird die aktuelle dateistruktur deines pcs angezeigt, in der normalen TreeView kompo kann man selbst wählen was angezeigt wird.
doch der dazugehörige string wird mit der zeile
ausblenden Delphi-Quelltext
1:
MediaPlayer.FileName := Playlist[PlaylistBox2.ItemIndex];					

zugewiesen. da in der Playlist-Stringliste zwangsweise das gleiche steht wie in der PlaylistBox2-komponente (da genau diese Stringliste in die komponente geladen wurde) ist es völlig gleich, ob ich Playlist oder PlaylistBox2 nehme ...

mfg bw

EDIT: lol es geht. nachdem ich meinen pc hochgefahren habe gab es keien probs mehr ... scheint an irgendnem anderne programm gelegen zu haben obwohls komisch is ... :D

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 30.12.04 19:12 
tjo liegt sicher daran dass die TMediaPlayer Kompo im Prinzip nix andres tut als den MediaPlayer von Windows per DLL einzubinden.
Hat ein andres Programm auch ne Instanz von dem am laufen kanns Trouble geben.
Es gibt aber auf SourceForge.net einen komplett freien MP3-Codec für Delphi, der ziemlich klein sein soll. -> siehe www.thaddy.com