real time Assist/Auto Differenzierung für EOF-Warning Ausgabe

Hallo Community,

ich habe vor kurzem eine Studioampel bekommen und habe vor, mairlist mit der Ampel bzgl. EOF abzustimmen. Hierbei nutze ich schon das von Torben mir mitgeteilte Skript, wo der EOF-Overlay nicht im Automationsmodus erscheint:

https://www.mairlist.com/forum/index.php/topic,7067.0.html

Die Ampel wird mittels I/O Warrior angesteuert. Nun hatte ich im Forum ein Skript zum EOF und Warrior gefunden. Allerdings möchte ich gerne gerne eine Differenzierung zwischen Assist- und Automationsmodus vornehmen. Im Klartext soll das heißen, dass im Assistmodus die EOF leuchten soll, bei der Automation jedoch nicht. Nun hatte ich mich schon ein wenig daran versucht, bin aber kläglich gescheitert das Original Skript abzuändern. Hier mein aktueller Stand, wobei mir nun die Augen zufallen und ich auf eure Hilfe hoffe.

[code]procedure OnPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem; Duration: int64);
begin
IOWarriorRemote(0).SetPort(0, false)
end;

procedure OnCartPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem; Duration: int64);
begin
IOWarriorRemote(0).SetPort(0, false)
end;

procedure OnPlayerEOFWarning(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
if (CurrentPlaybackControl.GetAutomation = true) then
IOWarriorRemote(0).SetPort(0, false);
if (CurrentPlaybackControl.GetAutomation = false) then
IOWarriorRemote(0).SetPort(0, true);
end;

procedure OnCartPlayerEOFWarning(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
IOWarriorRemote(0).SetPort(0, false);
end;

begin
end.[/code]

  • Wenn ich in der Automation bin und auch über mehrere Songs bleibe, dann leuchtet die Lampe nicht,
  • wenn ich während der EOF im Assist bin, dann leuchtet die Lampe und geht nach dem EOF aus,
  • wenn ich während des EOF im Assist bin und auf Automation stelle, dann bleibt die Lampe an. Sobald ein neues Lied erklingt, bleibt die Lampe noch immer an und geht erst wieder aus, wenn in diesem Song die EOF startet.
  • wenn ich während des EOF im Automodus bin und auf Assist stelle, bleibt die Lampe aus.

Ich würde mich über Lösungsansätze freuen.

Danke

Hey Leute,

ich habe nun noch etwas gestöbert und ein Script von Torben gefunden, der einer Prozedur einer neuen Abfrage unterzieht sobald sich der Automationsmodus ändert. Hier der Link:

https://www.mairlist.com/forum/index.php/topic,4823.0/nowap.html

Nun wollte ich das auf mein Script übertragen, doch spuckt mir mAirlist die Fehlermeldung aus: [Error] (21:3): Unknown identifier ‘PlayerEOFWarning’
Hier der Codeausschnitt nur für die EOF-Warnung. Der Rest funktioniert ja.

[code]procedure OnPlayerEOFWarning(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
if PlaybackControl(0).GetAutomation then
IOWarriorRemote(0).SetPort(0, false)
else
IOWarriorRemote(0).SetPort(0, true);
end;

procedure OnLoad;
begin
OnPlayerEOFWarning;
end;

procedure OnAutomationOn(PlaylistIndex: integer);
begin
OnPlayerEOFWarning;
end;

procedure OnAutomationOff(PlaylistIndex: integer);
begin
OnPlayerEOFWarning;
end;[/code]

Ich vermute mal stark, dass es an dem “On” liegt. Vielleicht habt ihr ein Lösungsvorschlag.

Danke im Voraus.

Ich entschuldige mich. Die Fehlermeldung lautet:

[Error] (21:21): Invalid number of parameters

Ich habe eine Ursache für eine der Probleme herleiten können:

- wenn ich während des EOF im Assist bin und auf Automation stelle, dann bleibt die Lampe an. Sobald ein neues Lied erklingt, bleibt die Lampe noch immer an und geht erst wieder aus, wenn in diesem Song die EOF startet.

Da ich in den Einstellungen angegeben habe, dass die Automation immer in einem Player ablaufen soll, wird natürlich nie die Prozedur OnPlayerStop ausgeführt, denn die Automation fadet direkt zum nächsten File und stoppt nie. Deswegen geht die Lampe auch nicht aus, wenn im EOF auf Automation geswitched wird. Gibt es die Prozedur:

OnPlayerFadeout

oder etwas vergleichbares?

Weiterhin habe ich immer noch das Problem, wenn ich während der EOFWarning auf Assist/Auto wechsel, dass die Lampe an bzw. aus bleibt. Hatte wegen der letzten Fehlermeldung das Script nochmal umgeschrieben. Hier der wichtige Part:

[code]procedure OnPlayerEOFWarning(PlayerControl: IPlayerControl; Duration: TTimeValue; Item: IPlaylistItem);
begin
if PlaybackControl(0).GetAutomation then
IOWarriorRemote(0).SetPort(0, false)
else
IOWarriorRemote(0).SetPort(0, true);
end;

procedure OnLoad;
begin
OnPlayerEOFWarning(PlayerControl: IPlayerControl; Duration: TTimeValue; Item: IPlaylistItem);
end;

procedure OnAutomationOn(PlaylistIndex: integer);
begin
OnPlayerEOFWarning(PlayerControl: IPlayerControl; Duration: TTimeValue; Item: IPlaylistItem);
end;

procedure OnAutomationOff(PlaylistIndex: integer);
begin
OnPlayerEOFWarning(PlayerControl: IPlayerControl; Duration: TTimeValue; Item: IPlaylistItem);
end;[/code]

Nun kommt die Fehlermeldung: [Error] (26:22): Unknown identifier ‘PlayerControl’

Ich bin so ein script-Trottel. Würde mich freuen, wenn wer eine zündende Idee hat.

Ich habe es fast geschafft. Das Script arbeitet soweit ganz gut:

[code]procedure OnLoad;
begin
IOWarriorRemote(0).SetPort(0, false)
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem; Duration: int64);
begin
IOWarriorRemote(0).SetPort(0, false);
end;

procedure OnCartPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem; Duration: int64);
begin
IOWarriorRemote(0).SetPort(0, false);
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
begin
if PlaybackControl(0).GetAutomation then
IOWarriorRemote(0).SetPort(0, false)
else
IOWarriorRemote(0).SetPort(0, true);
end;

procedure OnAutomationOn(PlaylistIndex: integer);
var
i: integer;
begin
OnPlayerEOFWarning(0, i);
end;

procedure OnAutomationOff(PlaylistIndex: integer);
var
i: integer;
begin
OnPlayerEOFWarning(0, i);
end;

procedure OnCartPlayerEOFWarning(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
IOWarriorRemote(0).SetPort(0, false);
end;

begin
end.[/code]

Es gibt nur noch ein Haken.
Wenn man während der EOFWarning im ASSIST-Modus (Lampe leuchtet) ist und in den AUTO-Modus (Lampe leuchtet nicht) wechselt und nun wartet, bis der alte Song ausfadet, der neue Song startet und DANN wieder von AUTO in den ASSIST wechselt, dann geht die Lampe wieder an, obwohl man nicht im EOFWarning Zeitraum ist (wir sprechen hier vom Anfang eines Liedes).
Ich nutze im Automationsmodus nur EINEN Player. Kann das der Grund dafür sein?
Gibt es eine Möglichkeit einen OnPlayerFadeout befehl zu nutzen ODER die OnPlayerEOFWarning zeitlich zu begrenzen. Könntet ihr mir freundlicherweise eine Idee liefern?

Kannst Du nicht einfach ein extra script aufrufen, welches beim Wechsel in den Auto Modus ausgeführt wird, und dort die Lampe grundsätzlich löschen?

Oder habe ich das falsch verstanden? Du möchtest im Auto Modus keine EOF Warnung, richtig?

Hallo Shorty,

lieb von dir, dass du dich erbarmst mir zu helfen und meinen ewigen Monolog beendest :wink:

Jain. Das Abschalten der EOFWarning an der Lampe im Automationsmodus funktioniert. Ich habe es nochmal angepasst als ich auf das Script gesehen habe und gesehen wie unlogisch das war. Dementsprechend steht für OnAutomationOn folgendes:

procedure OnAutomationOn(PlaylistIndex: integer); begin IOWarriorRemote(0).SetPort(0, false); end;

Somit ist beim Automationsmodus alles aus. Wunderbar. So soll es sein.

Das große Problem ist der Wechsel von Automation in den Assist. Hierbei geht immer die Lampe an. Auch außerhalb des EOF-Zeitraums (sogar, wenn kein Song läuft). Als würde die OnPlayerEOFWarning nicht abgefragt werden. Sie geht erst aus, wenn ein Song endet. Starte ich einen Song im Assistmodus, dann geht die Lampe erst im EOFWarning-Zeitraum an und zum EOF aus. So wie es sein soll. Lediglich der Wechsel von Auto zu Assist will nicht klappen und ich weiß nicht warum, vollkommen ratlos. Ich vermute mal, ich brauche eine AND-Abfrage, der dem Script sagt: “and (noch 20 Sekunden = true) then”
Btw. 20 Sek ist mein EOFWarning Zeitraum.

Wäre knorke, wenn du einen Ansatz hättest.

Ich bin nicht unbedingt der große Programmierer, aber timer sind da glaube ich keine gute Idee.
Torben war im Urlaub, daher hat er hier noch nocht geantwortet.

Kann es sein, dass der Status noch gespeichert war?
Du testest ja folgendes:

[ol][li]mairlist startet, Lampe=aus[/li]
[li]Abspielen von titelen im assist Modus, EOF wird ausgelöst, Lampe=an[/li]
[li]umschalten auf Automation, Lampe=aus[/li]
[li]diverse Titel laufen[/li]
[li]umschalten auf Assist, Lampe=an[/li][/ol]

Ich vermute der EOF Status wird irgendwo getrennt verwaltet für Assist und Automation.
Oder passiert das auch, wenn Du direkt nach dem Start auf Automation gehst alles stopst und dann wieder auf Assist gehst?

Du könntest natürlich genau so den EOF Status löschen, wenn Du wieder zurück schaltest auf Assist. Allerdings würde dann die Lampe auch aus gehen, wenn siche der Player tatsächlich gerade in der EOF Phase befindet. Das würde ich jeztzt nicht unbedingt wollen.

Dazu muss Toreben mal weiter helfen, glaube ich.

Greetz
Malte

Sorry for answering in English.
I use 2 procedures to stop the EOF (especially when items are linked)
Stop EOF OnPlayerStart and also OnPlayerStop.

Hope this will help.

Ferry

I don’t have any problems with english.

Switch off if player stops is a really good point, probably can help.

Hey shorty and Ferry,

thank you for your answers.

@shorty

Does it happen, if you switch from automation to assist directly after starting the programm?

Exactly. So, it doesn’t matter if i run a player already or not. The switch alone will “cause” the problem.

@Ferry & shorty

Stop EOF OnPlayerStart and also OnPlayerStop
Switch off if player stops is a really good point, probably can help.

I have already a OnPlayerStop procedure in the script as you can see some posts before. Or do mean an extra onplayerstop request in an existing procedures? In addition i tested a OnPlayerStart procedure but didn’t solve the problem.
Interestingly a possible answer of this question could be a command event before the track i want to switch. but i’m not really happy about this.

Anyway thanks for your help, guys.


Hallo shorty und Ferry,

vielen Dank für eure Beiträge.

@shorty

Oder passiert das auch, wenn Du direkt nach dem Start auf Automation gehst alles stopst und dann wieder auf Assist gehst?

Leider ja. Es spielt also keine Rolle, ob der Player spielt oder nicht. Auch bei Programmstart und dem Wechsel Assist->Auto->Assist “verursacht” das Problem.

@Ferry & Shorty

Stop EOF OnPlayerStart und auch OnPlayerStop
Ein Ausschalten wenn Player stopt ist ein guter Ansatz und könnte helfen.

Ich habe bereits eine OnPlayerStop Prozedur im Script. Direkt unter OnLoad; oder meint ihr eine onplayerstop-Abfrage in einer bereits bestehenden Prozedur? Außerdem hatte ich gestern die OnPlayerStart Prozedur getestet. Allerdings hat dies nichts gebracht.
Ein möglicher Ansatzpunkt könnte ein Command-Befehl vor dem Song, in dem ich den Wechsel Auto->Assist machen möchte, sein. Doch bin ich mit der Variante nicht wirklich zufrieden.

Dennoch vielen Dank für eure Hilfe.

Welche mAirList Version benutzt Du genau?
Das neueste Build?

Hat sich da vielleicht irgendwo ein Bug eingeschlichen, dass der EOF Status falsch gesetzt wird, oder beim umschalten die IO-Warrior nau/ falsch initialisiert wird?

Aktuell Version 4.3.11 Build 1902

oder neuer. Bin mir nicht sicher. Auf jeden Fall recht aktuell.

Hi nochmal,

ich hatte nochmal mit dem aktuellsten Build getestet. Dasselbe Problem, wobei ich glaube, dass die Prozedur OnPlayerEOFWarning nicht dafür “gemacht” ist während des Songs eine EOF Warnung abzufragen, sondern im Vorfeld, also beim Laden des Songs im Player der EOF Zustand abgefragt wird. Genaueres kann vielleicht Torben erläutern.
Ich habe es jetzt erstmal mit dem Befehl “gelöst”.

OnPlayerEOFWarning wird in dem Moment aufgerufen, wo der Player bei der Wiedergabe den EOF-Warnungs-“Punkt” überfährt, also in dem Moment, wo auch der Player beginnt zu blinken. 10 Sekunden vor Ende, oder was auch immer ihr eingestellt habt.