我是一个菜鸟,所以请不要假设我知道多少。如果我使用不正确的termanology,请随时告诉我。
我在SAM广播公司的无线电自动化软件中有PAL脚本(基于Pascal / Delphi)的功能。
该函数返回与音乐文件相关的数据库记录中提示点1的时间(以毫秒为单位)。
我希望在我的脚本体中调用此函数的输出,因为您可能是变量。但它需要表示为hh:mm:ss时间戳。
这是函数,可能有20000的输出,持续20秒。
var CP : Integer = 0;
function ExtractCP(Song : TSongInfo):Integer;
var
P : Integer;
XFade : String;
begin
Result := -1;
XFade := Trim(Song['xfade']);
WriteLn('Decoding XFade string');
WriteLn('XFade: '+XFade);
if XFade = '' then
Result := -1
else
begin
P := Pos('ct0=',XFade); {Where 0 is the Custom Cue Point Number}
if (P > 0) then
begin
Delete(XFade,1,P+2);
P := Pos('&',XFade);
if (P>0) then
Delete(XFade,P,Length(XFade));
Result := StrToIntDef(XFade,-1);
WriteLn('CP time detected: '+XFade);
end;
end;
end;
这是实现组件。
while (Song['songtype']='S') and (not Skip) do
begin
VAR DT : DateTime;
VAR frac : Float;
VAR hours, minutes, seconds, milliseconds : Integer;
hours := 24;
minutes := 60;
seconds := 60;
milliseconds := 1000;
// 1 millisecond as fractional part of a day
frac := 1.0 / hours / minutes / seconds / milliseconds;
frac := frac * cp;
dt := Now + DateTime (frac); {Wait for Cue Point 0}
WriteLn(DateTimeToStr(dt));
PAL.WaitForTime(DT);
Skip := True;
end;
我想我的问题很简单。
计算变量' cp'没有导入,如何正确调用行中函数的结果...
frac := frac * cp;
我在这里得到了帮助(完整的背景,包括时间戳计算方法和整个脚本)......
http://support.spacialaudio.com/forums/viewtopic.php?f=23&t=40795&start=15
答案 0 :(得分:4)
假设XFade包含类似'ABC ct0 = 1234&'的字符串
Delete(XFade,1,P+2);
将发送'= 1234&'
P := Pos('&',XFade);
if (P>0) then
Delete(XFade,P,Length(XFade));
将传递'= 1234',它不能转换成整数
因此,至少您必须将Delete(XFade,1,P+2);
更改为Delete(XFade,1,P+3);
dt的生成可以缩短为
{ if not defined
Const
MSecsPerDay= 24*60*60*1000;
}
cp := ExtractCP(Song);
if cp>-1 then
begin
dt := Now + CP / MSecsPerDay;
.....
end;