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