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:
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.
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 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:
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.
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 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?
lieb von dir, dass du dich erbarmst mir zu helfen und meinen ewigen Monolog beendest
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.
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.
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.
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.
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.
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?
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.