Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Audio aus einem AVI abspielen (https://www.delphipraxis.net/68452-audio-aus-einem-avi-abspielen.html)

Aya 29. Apr 2006 20:25


Audio aus einem AVI abspielen
 
Hi,

weiß jemand wie ich es hinbekomme den AudioStream aus einem AVI-Video abzuspielen?? (und wenn das dann klappt, wie ich das synchron zum bild bekomme)

Ich benutze VideoForWindows (vfw.pas) um das AVI zu öffnen und die Video/Audio streams zu extrahieren.. mit dem Video klappt auch alles wunderbar, aber Audio... ichhab da jetzt einen ca. 10kb großen MP3 schnipsl im Buffer, welcher wenn ich ihn als Datei speicher auch der anfang vom AVI-Sound ist.

Jetzt hab ich versucht das via FMod abzuspielen, klappt aber nicht so ganz.. bzw hab ich ka wie ich FMod sage das das da ein AVI-AudioStream ist. (Problem ist das der Stream Wave, MP3, PCM, Mono Stereo etc sein kann)

Von daher, weiß jemand wie ich den Sound abgespielt bekomme?? (Muß nicht mit FMod sein, OpenAL, DirectSound etc sind mir auch recht)

Au'revoir,
Aya~

Ydobon 29. Apr 2006 22:40

Re: Audio aus einem AVI abspielen
 
Schau dir einmal diese Quelltexte an, da dürftest du fündig werden.
Muss es unbedingt VfW sein? DirectShow finde ich um einiges einfacher. Hatte ich zwar mal für ein anderes Forum geschrieben, aber wenn es hier auch passen würde?

Delphi-Quellcode:
uses ..., DirectShow9;

procedure TForm1.Button1Click(Sender: TObject);
var pGraph: IGraphBuilder;
    pMediaControl: IMediaControl;
    pEvent: IMediaEvent;
    pSeek: IMediaSeeking;
    pVidWin: IVideoWindow;
    evCode, x, y, lpParam1, lpParam2: Integer;
    tim, dim: Int64;
begin
  if Not OpenDialog1.Execute then exit;
  CoCreateInstance(CLSID_FilterGraph, Nil, CLSCTX_INPROC_SERVER,
                    IID_IGraphBuilder, pGraph);
  pGraph.QueryInterface(IID_IMediaControl, pMediaControl);
  pGraph.QueryInterface(IID_IMediaEventEx, pEvent);
  pGraph.RenderFile(PWideChar(WideString(OpenDialog1.FileName)), Nil);
  pGraph.QueryInterface(IID_IMediaSeeking, pSeek);
  pSeek.GetDuration(tim);
  Label1.Caption:=IntToStr(tim div 10000000);
  pGraph.QueryInterface(IID_IVideoWindow, pVidWin);
  pVidWin.put_Owner(Handle);
  pVidWin.put_WindowStyle(WS_CHILD);
  pVidWin.get_Width(x);
  pVidWin.get_Height(y);
  pVidWin.SetWindowPosition(2, Panel1.Height+2, x, y);
  weiter:=true;
  pMediaControl.Run;
  while weiter do
  begin
    if pEvent.GetEvent(evCode, lpParam1, lpParam2, 0)<>E_ABORT then
    begin
      if evCode=EC_COMPLETE then weiter:=false;
      pEvent.FreeEventParams(evCode, lpParam1, lpParam2);
    end;
    pSeek.GetPositions(tim, dim);
    Label2.Caption:=IntToStr(tim div 10000000);
    Application.ProcessMessages;
  end;
  pVidWin.put_Visible(FALSE);
  pVidWin.put_Owner(0);
end;
Gibt das Video direkt auf dem Formular aus, lässt sich mit aber mit pVidWin.put_Owner beliebig ändern. Ein zweiter Button setzt weiter auf false, sonst läuft es bis zum bitteren Ende durch.

Aya 29. Apr 2006 23:21

Re: Audio aus einem AVI abspielen
 
Hi,

hab es hinbekommen, danke :)
DirectShow deswegen nicht, da ich zum einen keinerlei erfahrungen mit DX habe und vorallem aber das video via OpenGL darstellen möchte.. und da bietet sich VFW durchaus gut an für :)

Aya~


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 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