Skript für Next-Modus

Sorry, hat etwas gedauert, ich musste mich etwas in die Thematik reindenken.

Folgendes Script habe ich mir gerade ausgedacht:

[code]var i, player: integer;
pi: IPlaylistItem;

begin
player := -1;
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if CurrentPlaybackControl.GetPlayer(i).GetState = PS_EMPTY then begin
player := i;
break;
end;

if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
CurrentPlaybackControl.PlayerAutoLoad(player);
CurrentPlaybackControl.PlayerStart(player);
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if i <> player then CurrentPlaybackControl.PlayerFadeOut(i);
end;
end.[/code]

Es sucht zunächst einen freien Player. Falls einer gefunden wurde, wird er mit dem nächsten freien Element geladen und dann gestartet. Sodann werden alle anderen gerade laufenden Player ausgefadet.

Ist das nun in etwa das, was du brauchst?

Torben

Hmm, das wäre eventuell auch was für uns.

Wir arbeiten ja wie beschrieben mit http://forum.mairlist.de/viewtopic.php?t=877&start=15. Geniale Sache. Dieses Script könnte von einem zusätzlichen Bedienelement (Taster) gestartet werden, und könnte den Moderator beim starten vieler Elemente unterstützen.

Michel

Habe das Script von Torben noch etwas ergänzt. So kann diese Next Taste auch im Automodus genutzt werden.

[code]

var i, player: integer;
pi: IPlaylistItem;

begin
if not CurrentPlaybackControl.GetAutomation then
begin
player := -1;
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if CurrentPlaybackControl.GetPlayer(i).GetState = PS_EMPTY then begin
player := i;
break;
end;

if (player = -1) then
  SystemLog('Keinen freien Player gefunden.')
else begin
  CurrentPlaybackControl.PlayerAutoLoad(player);
  CurrentPlaybackControl.PlayerStart(player);
  for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
    if i <> player then CurrentPlaybackControl.PlayerFadeOut(i);
end;

end
else
CurrentPlaybackControl.AutomationNext;
end.[/code]

Hi Torben,

erst mal vielen Dank, dass du dir die Zeit genommen hast. Leider hilft mir dein Skript noch nicht so ganz. Es ist nämlich so, dass von meinen Playern A, B und C die ersten beiden automatisch beladen werden. Player C belade ich von Hand. Dein Skript beläd mir dann immer nur den dritten Player (weil der frei ist).
Ich hab hier noch mal meine Konfiguration zusammengefasst:

Ich habe eine Playlist mit 3 Playern:

  • Player A und B werden automatisch geladen, Player C von Hand
  • läuft Player A, so wird durch Drücken der Next-Taste Player A ausgeblendet und Player B startet
  • läuft nun Player B, so wird durch Drücken der Next-Taste Player B ausgeblendet und Player A startet
  • gleichzeitig muss das Skript die Reihenfolge berücksichtigen: angenommen, es läuft gerade kein Titel. Das nächste Element in der Playlist ist in Player B geladen. Dann darf über die Next-Taste nicht Player A gestartet werden, weil’s der erste ist, sondern Player B, weil dort das nächste Element in der Playlist geladen ist

Jetzt kommt Player C ins Spiel:

  • angenommen in Player A läuft ein Titel und Player B und C sind beide ebenfalls geladen. Jetzt prüft das Skript, welches Element das nächste in der Playlist ist und startet danach entweder Player B oder C (A wird ausgeblendet).
  • gleiches gilt, wenn in Player B ein Titel läuft und Player A und C beide geladen sind. Das Skript prüft, welcher Player das in der Playlist nächste Element enthält und startet dann entweder Player A oder C (B wird ausgeblendet).
  • läuft in Player C ein Titel, prüft das Skript, ob der nächste Titel in der Playlist in A oder B geladen ist und startet den entsprechenden Player (C fadet aus).
  • läuft gerade kein Titel und ist das nächste Element der Playlist in Player C geladen, so wird auch Player C durch Drücken der Next-Taste gestartet.

Ich gebe zu, dass diese Konfiguration relativ komplex ist und wahrscheinlich ein gutes Stück Denkarbeit dazu gehört, das in ein Skript zu fassen (falls es überhaupt möglich ist). :slight_smile: Wäre trotzdem toll, wenn du da eine Lösung finden würdest!

Ziemlich komplex. Frage verwendest Du ein Mischpult mit Faderstart?

Im Prinzip ja, aber die Next-Funktion soll die Faderstarter ja gerade überflüssig machen, damit während den Nachrichten nicht ständig die verschiedenen Fader betätigt werden müssen.
(DABiS arbeitet übrigens auch so ähnlich wie von mir oben beschrieben.)

Welche Funktion würde der Player C bei den Nachrichten übernehmen?

Für die Nachrichten ist er eher unerheblich. Er wird während der Sendung je nach Bedarf mit Unterlegern, Station IDs und Jingles beladen.

Jetzt kommt Player C ins Spiel: - angenommen in Player A läuft ein Titel und Player B und C sind beide ebenfalls geladen. Jetzt prüft das Skript, welches Element das nächste in der Playlist ist und startet danach entweder Player B oder C (A wird ausgeblendet). - gleiches gilt, wenn in Player B ein Titel läuft und Player A und C beide geladen sind. Das Skript prüft, welcher Player das in der Playlist nächste Element enthält und startet dann entweder Player A oder C (B wird ausgeblendet). - läuft in Player C ein Titel, prüft das Skript, ob der nächste Titel in der Playlist in A oder B geladen ist und startet den entsprechenden Player (C fadet aus). - läuft gerade kein Titel und ist das nächste Element der Playlist in Player C geladen, so wird auch Player C durch Drücken der Next-Taste gestartet.

Sehe ich das richtig, dass sich diese Beschreibung folgendermaßen zusammenfassen lässt?

Es soll derjenige Player gestartet werden, dessen Element am weitesten oben in der Liste steht. Alle gerade laufenden Player werden ausgefadet.

Dann ist es ja recht einfach …

Torben

Richtig, und je nachdem, ob Player C beladen ist, wird er miteinbezogen oder nicht.

Jo. Aber dem Script ist es egal, ob er nun wegen Auto Load geladen ist, oder weil du von Hand was reingezogen hast.

Gib mir mal fünf Minuten.

Torben

Super, danke! :slight_smile:

Kleine Zwischenfrage: Wenn Du die Reihenfolge in der Playlist definieren würdest, könntest Du mit dem Script arbeiten. Der Player C wird dann zwar auch für andere Elemente verwendet, aber mit dem kann man leben. Du müsstest nur bei allen Playern die Option “Player automatisch laden” deaktivieren. Probier dies doch mal aus.

[code]var i, player, item: integer;

begin
player := -1;
item := -1;
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if (CurrentPlaybackControl.GetPlayer(i).GetState in [PS_LOADED, PS_PAUSED]) and
((item = -1) or (CurrentPlaylist.IndexOf(CurrentPlaybackControl.GetPlayer(i).GetItem) < item)) then begin
player := i;
item := CurrentPlaylist.IndexOf(CurrentPlaybackControl.GetPlayer(i).GetItem);
end;

if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
CurrentPlaybackControl.PlayerStart(player);
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if i <> player then CurrentPlaybackControl.PlayerFadeOut(i);
end;
end.[/code]

Hmm, unknown identifier “PS_PAUSE”?? 7:69

Mist, muss PS_PAUSED heißen.

Hmm, “type mismatch” 7:79?? :slight_smile:

Grmpf. Das mit der Pause hatte ich im letzten Moment noch hinzugefügt, ohne es noch zu testen … Moment bitte.

Jetzt aber:

[code]var i, player, item: integer;

begin
player := -1;
item := -1;
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if ((CurrentPlaybackControl.GetPlayer(i).GetState = PS_LOADED) or
(CurrentPlaybackControl.GetPlayer(i).GetState = PS_PAUSED))
and
((item = -1) or
(CurrentPlaylist.IndexOf(CurrentPlaybackControl.GetPlayer(i).GetItem) < item)) then begin
player := i;
item := CurrentPlaylist.IndexOf(CurrentPlaybackControl.GetPlayer(i).GetItem);
end;

if (player = -1) then
SystemLog(‘Keinen freien Player gefunden.’)
else begin
CurrentPlaybackControl.PlayerStart(player);
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if i <> player then CurrentPlaybackControl.PlayerFadeOut(i);
end;
end.[/code]

Genial, GENAU DAS ist es! Vielen Dank! :o))
Das Thema Next-Taste ist damit vom Tisch! :wink:
@lifechannel: Dir auch Danke für deine Bemühungen!