卡拉OK的效果(100分)

  • 主题发起人 ilovedelphi4
  • 开始时间
I

ilovedelphi4

Unregistered / Unconfirmed
GUEST, unregistred user!
请问大家如何在一个FORM上做出卡拉OK般字幕的效果?
(要随着MUSIC的节奏)
 
呵呵!
我也曾想试过
不过看来没什么好办法,只能自己根据时间一点点算着填色了。
其实OK也一样呀!
 
利用textrect函数
textrect(rect:trect;x,y:integer;const text:string)
文本字符串超出矩形区域,将超出的部分截去。
通过不断改变输出矩形框的大小,使输出字符串一段一段显示出来

type
tform1=class(Tform)
backimage:timage;
timer1:ttimer;

private
maindir:string;
nowstep:integer;

procedure tform1.formcreate(sender:Tobject);
begin

maindir :=ExtractFilePath(ParamStr(0));
backimage.picture.loadfromfile(maindir+'......');
backimage.canvas.font.name:='楷体_GB2312';
backimage.canvas.font.size:=36;
backimage.canvas.font..stule:=[fsbold];
nowstep:=0;
end;


const maxstep=40;
procedure tform1.timer1timer(sender:Tobject);
var
x0,y0:integer;
outputstring:string
w:integer;
begin

x0:=10;
y0:=10;
outputstring:='卡拉OK字幕效果示例‘;
if nowstep=0 then

begin

backimage.canvas.brush.style:=bsclear;
backimage.canvas.font.color:=clblack;
//原色
backimage.canvas.textout(x0,y0,outputstring);
end
else

begin

backimage.canvas.brush.style:=bsclear;
backimage.canvas.font.color:=clred;
//效果色
w:=backimage.canvas.textwidth(outputstring);
backimage.canvas.textrect(rect(x0,y0,x0+w*nowstep div maxstep,y0+backimage.canvas..textheight(outputstring)),x0,y0,outputstring);
end;

inc(nowstep);
if nowstep>maxstep then
nowstep:=0;
end;





 
海宁朋友的程序是好的,不过我这个效果我有本书上也谈到过,我想要
的效果是能随着MUSIC的旋律进行字体染色,有点难度啊!
 
这要由具体曲子来定?
 
这个好象在程序中很难实现吧.实际上我觉得OK里面的歌词是一首一首根据
旋律来搞的吧,而且应该是人工的.不知道是不是这样.
 
这个问题严重了。
就算你千方百计截取到了输出的频率,你又怎么知道歌词应该是在什么地方起伏的
呢?
要是能做到,计算机就懂艺术了。
 
hehe, 用手工记录就可以了,编个程序记录TIMER,一边听歌,一边记录,每
听到一句按一下确认键,记录下来和歌词合并成如下:
4.5:在那遥远的地方
3.5:有位好姑娘
5.3:xxxxxxxxxx.....
然后显示时根据下一句歌词前面的秒数更改timer的频率,显示后面的歌词。
 
接受答案了.
 
顶部