利用MCI中进行变速播放的问题(50分)

  • 主题发起人 主题发起人 lxmzm
  • 开始时间 开始时间
L

lxmzm

Unregistered / Unconfirmed
GUEST, unregistred user!
在MCI中,MCI_DGV_SET_PARMS中有dwSpeed,好象是可以改变播放速度,但是我利用
以下代码时,提示设备无此功能。

var Sp:MCI_SET_PARMS
Err:integer;
ErrMsg: array[0..4095] of Char;
begin

Err:=mciSendCommand(MediaPlayer1.DeviceID,MCI_SET, MCI_DGV_SET_SPEED ,integer(@sp));
if(Err<>0)then

begin

mciGetErrorString(err,ErrMsg,sizeof(ErrMsg) );
ShowMessage(ErrMsg);
end;

不知道是设备不支持,还是程序设置的错误!
 
首先,你要先声明一个 tagTMCI_DGV_SET_PARMS=record
dwCallback:DWORD;
dwTimeFormat:DWORD;
dwAudio:DWORD;
dwFileFormat:DWORD;
dwSpeed:DWORD;
end;

TMCI_DGV_SET_PARMS=tagTMCI_DGV_SET_PARMS;
......
procedure Form1.SetSpeed(Value:LongInt);
var
ASetParm:TMCI_DGV_SET_PARMS;
Err:integer;
ErrMsg: array[0..4095] of Char;
begin

ASetParm.dwCallBack:=...;
ASetParm.dwCallBack:=Value;

Err:=mciSendCommand(FDeviceID,MCI_SET, MCI_DGV_SET_SPEED ,LongInt(@Asetparm));
if(Err<>0)then

begin

mciGetErrorString(err,ErrMsg,sizeof(ErrMsg) );
ShowMessage(ErrMsg);
end;

end;

基本上是这样用,我做过相似的一个东东
 
上面说错了一个东西:mciSendCommand的第三个参数是:MCI_WAIT or MCI_Notify
也就是说Err:=mciSendCommand(FDeviceID,Mci_set,Mci_DGV_SET_SPeed,LongInt(@ASetParm))改为
Flags:=MCI_Wait or MCI_Notify
Err:=mciSendCommand(FDeviceID,MCI_SET,Flags,LongInt(@Asetparm));这样子就正确了。
 
运行后,出现设备不支持的错误!
 
这个是测试通过了的,你试一试,win98/delphi5
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, MPlayer,mmsystem;

type
TMCI_DGV_SET_PARMS=record
dwCallBack:DWORD;
dwTimeFormat:DWORD;
dwAudio:DWORD;
dwFileFormat:DWORD;
dwSpeed:DWORD;
end;

TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation
uses Consts;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
aSetParm:TMCI_DGV_SET_PARMS;
Err:LongInt;
Flags:LongInt;
ErrMsg: array[0..4095] of Char;
Res:string;
begin

aSetparm.dwCallBack:=Mediaplayer1.Handle;
aSetParm.dwSpeed:=4000;
Flags:=MCI_WAIT or MCI_NOTIFY or MCI_VD_PLAY_FAST;
Err:=mciSendCommand(MediaPlayer1.DeviceID,MCI_SET,Flags,LongInt(@ASetParm));
if not mciGetErrorString(Err, ErrMsg, SizeOf(ErrMsg)) then

Res := SMCIUnknownError
else
SetString(Res, ErrMsg, StrLen(ErrMsg));
end;


end.
 
我使用后,发现只能瞬间快速度播放,不能持续!
 
瞬间快速播放?不会吧,你播放的是一个文件吗?
我自己试过,如果你点击了Button1后,会一直播放完该文件,如果你不是
在程序中用Medaiplayer1.Close关毕设备的话,下一次重新播放的时候也是
以4000为单位进行播放的。
 
能够慢速播放吗?
 
当然可以,你只要设置aSetParm.dwSpeed:=一个0~999的值。
to 版主:这个问题该结束了吧?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
740
import
I
I
回复
0
查看
1K
import
I
后退
顶部