![]() |
MP3 mit DX abspielen / Beenden macht Fehler ...
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich habe ein kleines Demo gebastelt. Das funktioniert soweit gut. Nur beim beenden gibts Probleme. (Man muss es ohne Delphi IDE im Taskmanager "killen") Leider hilft mir der Laufzeitfehler nicht wirklich weiter. Oder gibt es noch eine andere Möglichkeit eine mp3 über DirectX abzuspielen ?
Delphi-Quellcode:
program Project1;
uses Windows, ...; type TMP3 = class private pBaseFilter: IBaseFilter; pGraphBuilder:IGraphBuilder ; pMediaCtrl: IMediaControl; pMediaEvent: IMediaEventEx; ready: bool; public constructor Create; destructor Destroy; override; function Load(filename: string): BOOL; procedure Cleanup(); procedure Play(); procedure Pause(); procedure Stop(); end; var MP3: TMP3; hWindow: HWND = 0; constructor TMP3.Create; begin pBaseFilter := nil; pGraphBuilder := nil; pMediaCtrl := nil; pMediaEvent := nil; ready := false; CoInitialize(nil); end; destructor TMP3.Destroy; begin Cleanup; end; function TMP3.Load(filename: string): BOOL; begin // ... end; procedure TMP3.Cleanup(); begin if pMediaCtrl <> nil then begin pMediaCtrl.Stop(); pMediaCtrl._Release(); pMediaCtrl := nil; end; if pBaseFilter <> nil then begin pBaseFilter._Release; pBaseFilter := nil; end; if pMediaEvent <> nil then begin pMediaEvent._Release(); pMediaEvent := nil; // <--<< Boing #1 end; if pGraphBuilder <> nil then begin pGraphBuilder._Release(); // <--<< Boing #2 pGraphBuilder := nil; end; CoUninitialize(); end; procedure TMP3.Play(); ... procedure TMP3.Stop(); begin if ready then pMediaCtrl.Stop(); end; // --- Main ------------------------------------------------------------------ begin MP3:= TMP3.Create; try if MP3.Load('Nuppsy-SoulEye 128kbps.mp3') then begin MP3.Play; // MB_USERICON for a non BeepBox ;-) MessageBox(hWindow, 'Playing...', '!', MB_OK or MB_USERICON); // MP3.Stop; // "Autostop" im Destructor end; finally MP3.Free; end; end. |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Eigentlich solltest du dir das "._Release" sparen können, da Interfaces eine interne Referenzzählung besitzen und sich automatisch freigeben - so stürzt es auf jeden fall mal nicht ab und Memory Leaks werden auch keine gemeldet:
Delphi-Quellcode:
procedure TMP3.Cleanup();
begin if pMediaCtrl <> nil then begin pMediaCtrl.Stop(); // pMediaCtrl._Release(); pMediaCtrl := nil; end; if pBaseFilter <> nil then begin // pBaseFilter._Release; pBaseFilter := nil; end; if pMediaEvent <> nil then begin // pMediaEvent._Release(); pMediaEvent := nil; // <--<< Boing #1 end; if pGraphBuilder <> nil then begin // pGraphBuilder._Release(); // <--<< Boing #2 pGraphBuilder := nil; end; CoUninitialize(); end; |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Äh.. :gruebel: ahah.
Danke. :thumb: |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Liste der Anhänge anzeigen (Anzahl: 1)
Hab es mal so klein gemacht wie möglich!
Kleiner geht es eigentlich nicht mehr. Du kannst jetzt nur noch die benötigten Interfaces aus der DirectShow9 "extrahieren". Aber ich glaube das würde den Aufwand nicht lohnen. |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Hmm... Da könnte man doch n richtig kleinen, gemütlichen resourcensparenden Mediaplayer draus machen, oder? *Hände reib*
//Edit: Wobei.. Naja, wahrscheinlich würde der Aufwand den Nutzen übersteigen... |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Zitat:
Hab aber im mom leider nicht mehr die Zeit da noch weiter drann zu arbeiten, wenn welche da ist, gehts aber weiter ;) |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
21 kb Exe, ohne UPX oder ähnliches.. :P Zitat:
Klar, nur schnell zusammengeklatscht die Interfaces, aber.. naja, geht. ;) |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Liste der Anhänge anzeigen (Anzahl: 1)
Na, so mag ich es doch. :thumb:
Das beste daran is, das andere meine Arbeit machen, dat spart Zeit! :mrgreen: ;) :thumb: PS.: Zitat:
und mit so um die: 9,27 KB (9.496 Bytes) aber wer will das schon. |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Zitat:
Hat sich also doch Jemand die Mühe gemacht :) Nicht schlecht :thumb: |
Re: MP3 mit DX abspielen / Beenden macht Fehler ...
Naja, 30 Minuten war die Sache durch. :stupid: Und so'n ganz kleiner, resourcensparender MP3-Player, der sich als Deskband integriert oder in die TNA... Der hätte schon was. ;) Vielleicht.. oder... sollte ich... aber... hmm.... :stupid:
[OT]Funktionieren die Deskbänder eigentlich noch in Win7?[/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz