Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi MP3 mit DX abspielen / Beenden macht Fehler ... (https://www.delphipraxis.net/140675-mp3-mit-dx-abspielen-beenden-macht-fehler.html)

turboPASCAL 23. Sep 2009 17:18


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.

igel457 23. Sep 2009 17:34

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;

turboPASCAL 23. Sep 2009 18:19

Re: MP3 mit DX abspielen / Beenden macht Fehler ...
 
Äh.. :gruebel: ahah.

Danke. :thumb:

lbccaleb 24. Sep 2009 18:11

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.

Mithrandir 24. Sep 2009 18:17

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...

lbccaleb 24. Sep 2009 18:21

Re: MP3 mit DX abspielen / Beenden macht Fehler ...
 
Zitat:

Zitat von Daniel G
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...

Joa, siehe meine Sig^^
Hab aber im mom leider nicht mehr die Zeit da noch weiter drann zu arbeiten, wenn welche da ist, gehts aber weiter ;)

Mithrandir 24. Sep 2009 19:12

Re: MP3 mit DX abspielen / Beenden macht Fehler ...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von lbccaleb
Hab es mal so klein gemacht wie möglich!

Man gaaar nicht... ;)

21 kb Exe, ohne UPX oder ähnliches.. :P

Zitat:

Du kannst jetzt nur noch die benötigten Interfaces aus der DirectShow9 "extrahieren". Aber ich glaube das würde den Aufwand nicht lohnen.
Man wohl. ;)

Klar, nur schnell zusammengeklatscht die Interfaces, aber.. naja, geht. ;)

turboPASCAL 24. Sep 2009 19:29

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:

Zitat von Daniel G
21 kb Exe, ohne UPX oder ähnliches.. :P

18,0 KB (17.408 Bytes)
und mit so um die:
9,27 KB (9.496 Bytes)
aber wer will das schon.

lbccaleb 24. Sep 2009 19:49

Re: MP3 mit DX abspielen / Beenden macht Fehler ...
 
Zitat:

Zitat von lbccaleb
Du kannst jetzt nur noch die benötigten Interfaces aus der DirectShow9 "extrahieren". Aber ich glaube das würde den Aufwand nicht lohnen.


Hat sich also doch Jemand die Mühe gemacht :)
Nicht schlecht :thumb:

Mithrandir 24. Sep 2009 19:58

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.
Seite 1 von 2  1 2      

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