送上我的 740 分,在“DELPHI”中,如何用“WindowsMediaPlayer”的控件“同步显示歌词”(260分)

  • 主题发起人 WataShiSuKi
  • 开始时间
W

WataShiSuKi

Unregistered / Unconfirmed
GUEST, unregistred user!
问题的原地址
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3501985
 
问题: 同步显示歌词:如何让MediaPlayer1.Position识别这样的时间格式:00:38.10 ( 积分: 47 )
分类: 多媒体

来自: okook2003, 时间: 2004-06-22 22:45:00, ID: 2677004
如何让MediaPlayer1.Position识别这样的时间格式:00:38.10
我用了这样的设置:MediaPlayer1.TimeFormat := tfHMS;


我的目的:
怎么能让MP3文件按指定的长度播放?这样可以同步显示歌词功能了!
  就象MP3的复读机一样.谢谢了!

来自: laj001, 时间: 2004-06-23 13:24:53, ID: 2677857
1.如果你用mediaplayer的话,需要先将时间转换成秒,如: 38*60+10 后将值如下设置:
mediaplayer1.Pause;

mediaplayer1.Position:=38*60+10;//注意是integer
mediaplayer1.Play;

2.如果用windowsmediaplayer的话,直接赋值就ok了:
windowsmediaplayer1.controls.pause;

windowsmediaplayer1.controls.currentPositionString:='00:38.10 ';//注意是widestring
windowsmediaplayer1.controls.play;


仅供参考,希望对你有帮助[:D]

来自: okook2003, 时间: 2004-06-24 11:27:19, ID: 2679276
mediaplayer1.Position:=38*60+10;//注意是integer ?能详细说一下吗。谢谢了!

请问如何进行时间和Position的时间相互转换啊,我想要的是小时,分,秒,就可以了。
比如时间转成Position整数,Position整数转换成时间格式,有参考的函数吗,谢谢了!

来自: laj001, 时间: 2004-06-24 14:11:04, ID: 2679622
将时间转换成“时:分:秒”,再转换成秒,你应该会的,对吗?
procedure tform1.shownowtimeorframe;

var
nowtime,alltime:LongInt;

minutes,seconds:integer;

begin

//if showformat=timeformat then

// begin

with mediaplayer1do

begin

timeformat:=tfmilliseconds;

nowtime:=position;

alltime:=length;

minutes:=nowtime div 60000;

seconds:=(nowtime-60000*minutes) div 1000;

label1.Caption:=inttostr(minutes)+'分'+inttostr(seconds)+'秒';

minutes:=alltime div 60000;

seconds:=(alltime-60000*minutes) div 1000;

label2.Caption:=inttostr(minutes)+'分'+inttostr(seconds)+'秒';

end;


end;




不过我建议你用windowsmediaplayer,这样很方便,windowsmediaplayer1.controls.currentPositionString:='00:38.10 ';//注意是widestring
不用在计算了!



来自: laj001, 时间: 2004-06-24 14:16:06, ID: 2679631
再贴个函数:
function SecondConversion(Second:integer):string;

var
s,v:integer;

begin

s:=Second div 3600;

v:=Second mod 3600;

if s>0 then

Result:=IntToStr(s)+':'
else

ReSult:='00:';

s:=v div 60;

v:=v mod 60;

if s>0 then

Result:=Result+IntToStr(s)+':'
else

Result:=Result+'00:';

if v>0 then

Result:=Result+IntToStr(v)
else

Result:=Result+'00';

end;



直接使用这个函数就行了。


来自: okook2003, 时间: 2004-06-26 9:28:31, ID: 2682138
谢谢:laj001,但是你的第二个函数的显示不太准确.不和上面的一样.

其实我不明白的是:mediaplayer1.position(是整数) 和时间的转换关系,比如时间格式:4:11:04“时:分:秒”还是“分,秒,毫秒”?他们格式如何相互转换。有公式可以看吗?



来自: laj001, 时间: 2004-06-29 10:10:11, ID: 2686261
type

HMSRec = record
Hours: byte;

Minutes: byte;

Seconds: byte;

NotUsed: byte;


end;



procedure TForm1.Button1Click(Sender: TObject);


var
TheLength: LongInt;

begin

{ Set time format - note that some devicesdo
n’t support tfHMS }
MediaPlayer1.TimeFormat := tfHMS;
//设定时间显示格式,“时:分:秒”,也可以是其他格式
{ Store length of currently loaded media }
TheLength := MediaPlayer1.Length;

with HMSRec(TheLength)do
{ Typecast TheLength as a HMSRec record }
begin

Label1.Caption := IntToStr(Hours);
{ Display Hours in Label1 }
Label2.Caption := IntToStr(Minutes);
{ Display Minutes in Label2 }
Label3.Caption := IntToStr(Seconds);
{ Display Seconds in Label3 }
end;


end;



4:11:04 当然是“时:分:秒”的格式了,建议你多看看delphi的帮助,以上就是帮助文件。mediaplayer1.position(是整数) 这个当然是计算后的秒数了,至于公式我想你应该会的。

来自: okook2003, 时间: 2004-07-15 10:10:57, ID: 2713075
接受答案了.

来自: okook2003, 时间: 2004-07-15 12:32:46, ID: 2713389
怎么用mediaplayer播放MP3文件就出错误呢?
mediaplayer1.Close;

mediaplayer1.timeformat:=tfHMS;

mediaplayer1.filename:=(ExtractFilePath(Application.ExeName))+'wsc/11.mp3';

// mediaplayer1.Pause ;

// mediaplayer1.Position:=6200;

mediaplayer1.open;

mediaplayer1.play;


弹出的错误说明也很奇怪:‘找不到指定的文件。请确认与文件名是否正确。’

我发现程序打开位速为:32kbps 的MP3文件能读,但是打开位速:16kbps的MP3文件就不能读了!

就是 能读MP3的情况下,到赋值语句mediaplayer1.Position:=6200;的时候,还是报错误!急啊,

哪位高手快出手帮忙啊!!!!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2712747

得分大富翁: laj001
 

Similar threads

D
回复
0
查看
792
DelphiTeacher的专栏
D
D
回复
0
查看
746
DelphiTeacher的专栏
D
D
回复
0
查看
732
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部