線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1598
推到 Plurk!
推到 Facebook!

關於 DSPack 如何才能重複撥放?

尚未結案
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-01 00:21:55 IP:61.62.xxx.xxx 未訂閱
DSPack 真的很好用,功能也強,大部份的範例也都不錯. 不過範例中找不到重重複撥放的功能. Help 也沒看到. 請教要如何才能重複撥放呢? 謝謝!!
scm001
一般會員


發表:0
回覆:12
積分:17
註冊:2002-06-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-02 14:38:21 IP:211.23.xxx.xxx 未訂閱
在FilterGraph 的 OnGraphComplete 中寫你的程式碼: Ex:pause 回到要重覆的起點, 然後再 play
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-02 17:09:28 IP:218.166.xxx.xxx 未訂閱
你好: 能不能請說清楚一點呢? Pause 應只是暫停而已, 怎麼會是回到起點呢? 在 OnGraphComplete 事件中,執行 Play 我知道, 如何判斷撥放結束我也知道, 當撥放結束時, 執行 Play 因 Position 尚未回到起點, 所以不會撥放. 當然我也知道透過 TDSTrackBar 改變 Position 就可回到起點. 但我不想額外再加 TDSTrackBar 元件. 所以才想此請教諸位前輩. 唯一不知道的且想要請教的是,如何快速回到起點, 如 MideaPlayer 的 Rewind 功能. DSPack 有此功能嗎? 謝謝!!
scm001
一般會員


發表:0
回覆:12
積分:17
註冊:2002-06-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-05 01:12:02 IP:61.217.xxx.xxx 未訂閱
請查MSDN 上的 IMediaSeeking interface
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-05 21:30:12 IP:61.62.xxx.xxx 未訂閱
先前有想過應該是用 IMediaSeeking, 但網路上大都為 C , 且也找不到看得懂的範例. 可否請 scm001 , 用 Delphi 舉個範例呢? 主要的 4 個參數, 不是很清楚它的意義及用法. 謝謝!!
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-12 14:52:30 IP:211.96.xxx.xxx 未訂閱
先弄个procedure 
function TWMPFORM.playtarget(targetname: string):boolean ;
begin
   result := false;
   if not FilterGraph1.Active then FilterGraph1.Active:=true;
   FilterGraph1.ClearGraph;
   filtergraph1.RenderFile(targetname);
   FilterGraph1.Play;
end;
在filtergraph元件里面找到一个OnGraphComplete的事件, 那个就是在播放完毕后发生的事件, 在里面我的习惯是做个Timer去延迟两秒后播放下一个档案...
procedure TWMPFORM.FilterGraph1GraphComplete(sender: TObject;
  Result: HRESULT; Renderer: IBaseFilter);
begin
   timer1.Enabled:=true;
end;
Timer就负责延迟三秒后播放下一首,平常就enabled:=false; timer的interval我设3000
procedure TWMPFORM.Timer1Timer(Sender: TObject);
begin
   TIMER1.ENABLED := FALSE;  // 关掉~~~~
   IF CURRPLAY<(LISTVIEW1.Items.COUNT-1) THEN 
      INC(CURRPLAY)  
   ELSE
      CURRPLAY:=0;
   playtarget(ListView1.items[currplay].SubItems[0]);
end;
JasonSu
一般會員


發表:1
回覆:10
積分:7
註冊:2003-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-02 14:07:39 IP:211.22.xxx.xxx 未訂閱
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, DirectShow9, StdCtrls, ComCtrls, DSPack;

type
TForm1 = class(TForm)
FilterGraph1: TFilterGraph;
Button1: TButton;
procedure FilterGraph1Activate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FilterGraph1GraphComplete(sender: TObject; Result: HRESULT;
Renderer: IBaseFilter);
private
{ Private declarations }
MediaSeeking1: IMediaSeeking;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
FilterGraph1.Active := True;
FilterGraph1.RenderFile('C:\Test.Wav');
FilterGraph1.Play;
end;

procedure TForm1.FilterGraph1Activate(Sender: TObject);
begin
FilterGraph1.QueryInterface(IID_IMediaSeeking,MediaSeeking1);
end;

procedure TForm1.FilterGraph1GraphComplete(sender: TObject;
Result: HRESULT; Renderer: IBaseFilter);
var
StopPosition, CurrentPosition: int64;
begin
FilterGraph1.Stop;
If AsSigned(MediaSeeking1) Then Begin
MediaSeeking1.GetStopPosition(StopPosition);
CurrentPosition := 0;
MediaSeeking1.SetPositions(CurrentPosition, AM_SEEKING_AbsolutePositioning, StopPosition , AM_SEEKING_NoPositioning);
End;
FilterGraph1.Play;
end;

end.
發表人 - JasonSu 於 2004/04/02 14:17:09
系統時間:2024-07-01 2:42:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!