Delphi / Pascal语法(SAM Broadcaster PAL脚本) - 如何创建具有毫秒对象的时间戳?

时间:2013-04-22 11:33:47

标签: delphi pascal

我是一个菜鸟,所以请不要假设我知道多少。如果我使用不正确的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

1 个答案:

答案 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;