Seltsames Skript-Verhalten: Hilfe benötigt!!

Liebe Programmierspezialisten,

ich hätte da gerne mal ein Problem: In Fortführung des Projekts Auto-Backtiming arbeite ich zur Zeit an einem Skript, welches das ganze auch im Automatikbetrieb wuppt, bzw. beim Downmix in eine Datei. Insbesondere im letzten Falle kann ich mich wohl nicht auf die aktuelle mAirList-Zeit FakeNow beziehen, ich muß also die laufende Zeit woanders hernehmen. Kein Problem, wir haben ja einen eingebauten Timer, also:

var
  ElapsedTime, StartTime, EndTime: TDateTime;
  EndTitleDuration: TTimeValue;

procedure OnPlayerStart(...);
begin
  if Item = CurrentPlaylist.GetItem(0) then begin    // Beim Start des ersten Elements geht's los
    ElapsedTime := StartTime;                        // Startwert für laufende Zeit
    EnableTimerEx('Time', 1000);                     // Timer loslaufen lassen
    // usw...
  end;
end

procedure OnTimerEx(...);
begin
  if ID = Timer then begin
    ElasedTime := (ElapsedTime * 86400 + 1) / 86400  // Laufende Zeit inkrementell erhöhen
  end;
end;

Soweit alles gut, funktioniert. Jetzt muß ich das CueIn des letzten Titel entsprechend anpassen. Dazu muß ich mich auf die Spieldauer des letzten Titels beziehen:

procedure OnExecuteCommand(...);
begin
  if Command = 'SollBacktimen' then begin
    EndTitleDuration := CurrentPlaylist.GetItem(CurrentPlaylist.GetCount - 1).GetAudibleDuration;
                                                     // Dauer des letzten Titels der Playlist
  // ...
  end;
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
  //...
  EnableTimerEx('Cue', 1000);                        // Timer starten
end;

procedure OnTimerEx(...);
begin
  // ...
  if ID := 'Cue' then begin
    <Letzter Titel>.SetCuePosition(ptCueIn, (ElapsedTime - ((EndTime * 86400 - EndTitleDuration)) / 86400) * 86400);
                                                     // CuePosition nachführen
  end;
end;


Und jetzt kommt das Problem: Dadurch, daß ich die CueIn-Position ändere, ändert sich auch ständig die Dauer des Titels, das CueIn springt also ständig zwischen zwei Werten hin und her.

Das darf sie aber gar nicht!

Denn, nach meinem Verständnis, die Dauer des Titels wird nur ein einziges mal festgestellt, nämlich in OnExecuteCommand. Alles andere was danach kommt, der Timer z. B., darf diese Variable doch nicht mehr verändern?! Tut es aber. Auch, wenn ich die Erzeugung der Dauer davon abhängig mache, daß die Player nicht laufen. Beweise: Anzeige von EndTitleDuration in einem Feld, es springt hin und her. Und: Lege ich zum Beispiel fest (Titeldauer 2’21"):

EndTitleDuration := 141;

Dann funktioniert alles wunderbar und wie es sein soll! Ich kapier’s nicht, denn das andere Skript tut’s ja auch, lediglich beziehe ich mich da halt auf die mAirList-interne Zeit.

(Bis auf dieses Malheur läuft das Programm auch wunderbar, es sind keine Fehler in der Berechnung der einzelnen Start- und Endezeiten vorhanden. Und wenn, wär’s auch egal, denn das änderte ja nichts am Prinzip.)

Ratlose Grüße

TSD

Halt!! Sollte jemand schon begonnen haben zu hirnen, bitte selbiges zunächst einstellen. Ich verfolge jetzt einen anderen Ansatz.
 

Alternative Grüße

TSD

… und der funktioniert!  

Erfolgreiche Grüße

TSD