-1

私は初心者なので、あまり知っているとは思わないでください。間違った用語を使用している場合は、遠慮なくお知らせください。

SAM ブロードキャスター、ラジオ自動化ソフトウェアの PAL スクリプト (Pascal/Delphi に基づく) に機能があります。

この関数は、音楽ファイルに関連するデータベース レコードのキュー ポイント 1 の時間をミリ秒単位で返します。

変数のように、スクリプトの本文でこの関数の出力を呼び出したいと思います。ただし、hh:mm:ss タイムスタンプとして表現する必要があります。

これは、20 秒間、20000 の出力を持つ関数です。

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

4

1 に答える 1

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;
于 2013-04-22T13:15:39.627 に答える