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

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

WataShiSuKi

Unregistered / Unconfirmed
GUEST, unregistred user!
“WindowsMediaPlayer”本身可以“同步显示歌词”,但在DELPHI中的WindowsMediaPlayer控件,没有“同步显示歌词”的功能,如何实现在“DELPHI”中,用“WindowsMediaPlayer”的控件“同步显示歌词”

我自已用16进制的一些软件来打开有“同步显示歌词”的.WMA 文件,发现在 .WMA 的文件头下面不远的地址可以看到“同步显示歌词”的“歌词”和“歌词”的时间,

如果“WindowsMediaPlayer”提供的“WindowsMediaPlayer”控件没有“同步显示歌词”的功能,那么,如何在 DELPHI 中读出 .WMA 文件的二进制,并转成DELPHI的“String”格式(歌词部分)

我要源代码(DELPHI)
还有260分在这里
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3501986

180分在这里
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3461976
 
唉,我都不知道WMV有这个功能,
现在都使用千千静听活则WINNAP了。。
看歌词不错的。。。
 
要那么多分干嘛用的
 
delphi里的Tmediaplayer控件并不等同于真正的windows mediaplayer。只是名字相似。你进去看下源码,就发现Tmediaplayer封装的都是MCI函数。建议你找些MCI的资料来看看,如果它不提供你所需要的功能,自然都白扯,就想其他办法吧。
 
其实“WindowsMediaPlayer”提供的“WindowsMediaPlayer”控件也提供了“同步显示歌词”的功能,不过,还是和“WindowsMediaPlayer”一样,有一些问题!!!

所以,想自已读出来还好过用他的!!
 
DELPHI 本身的例子有读入的多种方法的,你先去看看!!
 
................
 
问题: 同步显示歌词:如何让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 mediaplayer1 do
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 devices don’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

回复
0
查看
825
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部