AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi MP3 mit DX abspielen / Beenden macht Fehler ...
Thema durchsuchen
Ansicht
Themen-Optionen

MP3 mit DX abspielen / Beenden macht Fehler ...

Ein Thema von turboPASCAL · begonnen am 23. Sep 2009 · letzter Beitrag vom 24. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

MP3 mit DX abspielen / Beenden macht Fehler ...

  Alt 23. Sep 2009, 17:18
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.
Angehängte Dateien
Dateityp: zip dxmp3-test_-_binary_200.zip (351,5 KB, 29x aufgerufen)
Dateityp: zip dxmp3-test-source_212.zip (370,7 KB, 42x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

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

  Alt 23. Sep 2009, 17:34
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;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

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

  Alt 23. Sep 2009, 18:19
Äh.. ahah.

Danke.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#4

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

  Alt 24. Sep 2009, 18:11
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.
Angehängte Dateien
Dateityp: zip dxmp3-test-source_175.zip (17,3 KB, 16x aufgerufen)
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#5

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

  Alt 24. Sep 2009, 18:17
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...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

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

  Alt 24. Sep 2009, 18:21
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
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#7

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

  Alt 24. Sep 2009, 19:12
Zitat von lbccaleb:
Hab es mal so klein gemacht wie möglich!
Man gaaar nicht...

21 kb Exe, ohne UPX oder ähnliches..

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.
Angehängte Dateien
Dateityp: zip dgsmalltunes_160.zip (24,5 KB, 24x aufgerufen)
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

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

  Alt 24. Sep 2009, 19:29
Na, so mag ich es doch.

Das beste daran is, das andere meine Arbeit machen, dat spart Zeit!



PS.:
Zitat von Daniel G:
21 kb Exe, ohne UPX oder ähnliches..
18,0 KB (17.408 Bytes)
und mit so um die:
9,27 KB (9.496 Bytes)
aber wer will das schon.
Angehängte Dateien
Dateityp: exe dgsmalltunes_723.exe (8,4 KB, 16x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 24. Sep 2009, 19:49
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
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#10

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

  Alt 24. Sep 2009, 19:58
Naja, 30 Minuten war die Sache durch. 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....

[OT]Funktionieren die Deskbänder eigentlich noch in Win7?[/OT]
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz