Codebeispiele mAirListScript

[quote=“isanhagen, post:180, topic:2848”]Ergänzung zum Script http://forum.mairlist.com/index.php/topic,2316.msg14986.html#msg14986:
Leider färbt sich da nichts gelb.
Scheint wohl mit meinem Layout nicht zu gehen.
Keine Fehlermeldung.
Kompatibel zur 2.1.44?[/quote]

also bei mir funktionierts auch nicht
Version 2.1.44

var nextHour: TDateTime; jetzigeStunde: Integer; jetzt: TDateTime; sekBisNextHour: Integer; i: Integer; summe: Integer; farbig: boolean; // begin farbig:=false; jetzigeStunde := StrToInt(FormatDateTime('h', now)); jetzt:=now; nextHour :=Date; nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0) + 0.03819444444; sekBisNextHour := Round((nextHour-jetzt)*86400); summe:=0; for i:=0 to CurrentPlaylist.GetCount-1 do begin summe:=summe+CurrentPlaylist.GetItem(i).GetEffectiveDuration/10000000; if (summe > (sekBisNextHour)) and (farbig = false) then begin CurrentPlaylist.GetItem(i).SetColor(clYellow); CurrentPlaylist.GetItem(i).SetColored(true); farbig:=true; end; end; end.

Gruß Simon

[quote=“isanhagen, post:172, topic:2848”]Nun möchte ich, dass bei einer Laufzeit kleiner z.B. 1 Min. nicht der nächste Titel
gespielt wird, sondern ein Brückenelement. Also beispielsweise ein Instrumentalstück
o.ä., aus der Datenbank oder einem Verzeichnisordner.[/quote]

Hi!

Ein kleiner Tip, der aber nur funktioniert wenn Du jede Stunde mit einer extra Playlist fährst.
Buche das Brückenelement mit softer Fixzeit auf XX:59 als letztes Element in der Playlist.
Dann geht´s auch ohne Script.

Schöne Grüße!

MB-100

Problem, unsere Playlisten werden mit der RadioDB generiert.
Da kann ich kein FixZeit Element in den Stundenuhren unterbringen.

Also bei mir funktionierts. Es gibt in mAirListConfig unter Playlist ->GUI-optionen einen haken “Elementspezifische Farben haben Vorrang vor Skin”. Der sollte gesetzt sein.

so, hier ein script, das schaut, welches element als erstes nicht mehr in die laufende stunde passt, und dann an diese stelle ein zufälliges “brückenelement” aus den angegebenen pfaden einfügt an.

für mehr hab ich keine zeit gerade.

[code]{um mehr brückenelemente hinzuzufügen einfach
#1. array erweitern
#2. pfad[id] := ‘pfad’ hinzufügen
#3. bei url den ‘max-wert’ ändern
#4. ggf die if bedingung ändern, rauslöschen, je nach anwendung
#5. fertig
#—Stand: 13.04.2008— michi
}

procedure Einfuegen(index: Integer);
var i : Integer;
pfad: Array[0…3] of string; //
begin
pfad[0] := ‘C:\test.mp3’;
pfad[1] := ‘C:\test.mp3’;
pfad[2] := ‘C:\test.mp3’;
pfad[3] := ‘C:\test.mp3’;
i := Random(3);
try
SYstemLog(IntToStr(index));
CurrentPlaylist.InsertFile(index, pfad[i], eaNone);
except
SystemLog(‘Fehler beim Einfügen.’);
end;

end;

var //variabeln fuer die suche nach dem letzten element der laufenden Stunde
nextHour: TDateTime;
jetzigeStunde: Integer;
jetzt: TDateTime;
sekBisNextHour: Integer;
i: Integer;
summe: Integer;
farbig: boolean; //
begin
farbig:=false;
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
jetzt:=now;
nextHour :=Date;
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
sekBisNextHour := Round((nextHour-jetzt)*86400);
summe:=0;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
summe:=summe+CurrentPlaylist.GetItem(i).GetEffectiveDuration/10000000;
if (summe > (sekBisNextHour)) and (farbig = false) then begin
Einfuegen(i);
farbig:=true;
end;
end;
end.

[/code]

grüße, michi

Na wenn das klappt, suuuuper!
Vielen Dank.
Werde es nachher gleich probieren :smiley:

Habe schon einmal Zuhause probiert, leider wird das Element an die falsche Stelle gesetzt.
es wird micht als letztes Element vorm Stundenwechsel eingefügt, sondern
als vorletztes. Somit wird doch der letzte nur angespielt. Noch ne Frage:
Wo kann ich die Sekunden einstellen, ab denen dann ein Brückenelement einstellen kann?
Ist das hier " summe:=0; " ?

[quote=“isanhagen, post:187, topic:2848”]Habe schon einmal Zuhause probiert, leider wird das Element an die falsche Stelle gesetzt.
es wird micht als letztes Element vorm Stundenwechsel eingefügt, sondern
als vorletztes. Somit wird doch der letzte nur angespielt.[/quote]
Also bei mir wurde es an die richtige stelle gesetzt. Es dürfte ja klar sein, dass das brückenelement so lang sein muss, dass es über den stundenwechsel hinausgeht… also als Faustregel: das Brückenelement muss mindestens so lang sein, wie der längste track, den es in der playlist gibt.

[quote=“isanhagen, post:187, topic:2848”]Noch ne Frage:
Wo kann ich die Sekunden einstellen, ab denen dann ein Brückenelement einstellen kann?
Ist das hier " summe:=0; " ?[/quote]

Diesen Satz verstehe ich nicht.

grüße, michi

Anscheinend reden wir leider aneinander vorbei :frowning:
Wir laden zu jeder vollen Stunde eine Datenbank Playlist.
Diese Playlist ist natürlich länger als 60 Min (Sicherheitshalber ca. 65-70 Min.)
Angenommen es ist nun 18.59 Uhr und 10s.
Nun würde der nächste Song 50 s gespielt werden.
Zur vollen Stunde (19 Uhr) zieht mAirList die nächste Playlist (Zeitansage usw.)
Ich möchte nun erreichen, dass bei einer Restzeit kleiner z.B. 1 Min.
bis zur nächsten vollen Stunde, nicht der Titel gespielt wird der an der Reihe wäre
sondern ein Brückenelement.
Besser die letzten Sekunden bis zum Stundenwechel ein solches Element spielen,
als einen regulären Song anspielen und ausblenden.
War das verständlicher?

ja das war schon klar, nur das mit eine minute vorher hast du gerade zum ersten mal erwähnt.

probier das mal (ungetestet):

[code]{um mehr brückenelemente hinzuzufügen einfach
#1. array erweitern
#2. pfad[id] := ‘pfad’ hinzufügen
#3. bei url den ‘max-wert’ ändern
#4. ggf die if bedingung ändern, rauslöschen, je nach anwendung
#5. fertig
#—Stand: 13.04.2008— michi
}

procedure Einfuegen(index: Integer);
var i : Integer;
pfad: Array[0…3] of string; //
begin
pfad[0] := ‘C:\test.mp3’;
pfad[1] := ‘C:\test.mp3’;
pfad[2] := ‘C:\test.mp3’;
pfad[3] := ‘C:\test.mp3’;
i := Random(3);
try
SYstemLog(IntToStr(index));
CurrentPlaylist.InsertFile(index, pfad[i], eaNone);
except
SystemLog(‘Fehler beim Einfügen.’);
end;

end;

var //variabeln fuer die suche nach dem letzten element der laufenden Stunde
nextHour: TDateTime;
jetzigeStunde: Integer;
jetzt: TDateTime;
sekBisNextHour: Integer;
i: Integer;
summe: Integer;
farbig: boolean; //
begin
farbig:=false;
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
jetzt:=now;
nextHour :=Date;
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
sekBisNextHour := Round((nextHour-jetzt)*86400);
summe:=0;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
summe:=summe+CurrentPlaylist.GetItem(i).GetEffectiveDuration/10000000;
if (summe > (sekBisNextHour)) and (farbig = false) and (CurrentPlaylist.GetItem(i).GetStartTime < (nextHour-0.000694444)) then begin
Einfuegen(i);
farbig:=true;
end;
end;
end.
[/code]

edit: warte mal ;)… GetStartTime benötigt einen parameter. (function GetStartTime ( iType : TStartTimeType ) : TDateTime )

Torben, kannst du mir sagen, was das bedeutet?

Hattest Du wohl leider übersehen

[quote=“isanhagen, post:172, topic:2848”]…D.h.: Es ist z.B. 03.58h und 50s. Einen Titel zu starten wäre Quatsch-
Gesang setzt ein , Stunde ist voll, Uhrzeitansage, und und und.
So läuft es aber z.Z.
Nun möchte ich, dass bei einer Laufzeit kleiner z.B. 1 Min. nicht der nächste Titel
gespielt wird, sondern ein Brückenelement …[/quote]

Fehlermeldung: Invalid number of parameters

jo, das kommt daher, da GetStartTime einen parameter benötigt. ich weiss aber nicht welcher :wink: mal abwarten was Torben dazu sagt

Unsere Beiträge hatten sich überschnitten ::slight_smile:

@ Torben:

Kannst Du bitte weiterhelfen? :’(

[quote=“flashlighter, post:191, topic:2848”]probier das mal (ungetestet):

[code]{um mehr brückenelemente hinzuzufügen einfach
#1. array erweitern
#2. pfad[id] := ‘pfad’ hinzufügen
#3. bei url den ‘max-wert’ ändern
#4. ggf die if bedingung ändern, rauslöschen, je nach anwendung
#5. fertig
#—Stand: 13.04.2008— michi
}

procedure Einfuegen(index: Integer);
var i : Integer;
pfad: Array[0…3] of string; //
begin
pfad[0] := ‘C:\test.mp3’;
pfad[1] := ‘C:\test.mp3’;
pfad[2] := ‘C:\test.mp3’;
pfad[3] := ‘C:\test.mp3’;
i := Random(3);
try
SYstemLog(IntToStr(index));
CurrentPlaylist.InsertFile(index, pfad[i], eaNone);
except
SystemLog(‘Fehler beim Einfügen.’);
end;

end;

var //variabeln fuer die suche nach dem letzten element der laufenden Stunde
nextHour: TDateTime;
jetzigeStunde: Integer;
jetzt: TDateTime;
sekBisNextHour: Integer;
i: Integer;
summe: Integer;
farbig: boolean; //
begin
farbig:=false;
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
jetzt:=now;
nextHour :=Date;
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
sekBisNextHour := Round((nextHour-jetzt)*86400);
summe:=0;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
summe:=summe+CurrentPlaylist.GetItem(i).GetEffectiveDuration/10000000;
if (summe > (sekBisNextHour)) and (farbig = false) and (CurrentPlaylist.GetItem(i).GetStartTime < (nextHour-0.000694444)) then begin
Einfuegen(i);
farbig:=true;
end;
end;
end.
[/code]

edit: warte mal ;)… GetStartTime benötigt einen parameter. (function GetStartTime ( iType : TStartTimeType ) : TDateTime )

Torben, kannst du mir sagen, was das bedeutet?[/quote]

Danke im Voraus

Hat sonst jemand eine Idee?

[quote=“flashlighter, post:191, topic:2848”]edit: warte mal ;)… GetStartTime benötigt einen parameter. (function GetStartTime ( iType : TStartTimeType ) : TDateTime )

Torben, kannst du mir sagen, was das bedeutet?[/quote]

Guck mal in die Hilfe-Datei, da ist TStartTimeType dokumentiert. Du willst vermutlich sttEstimated verwenden.

Hallo Flashlighter.

Hilft Dir die Antwort weiter?

(ungetestet)

[code]{um mehr brückenelemente hinzuzufügen einfach
#1. array erweitern
#2. pfad[id] := ‘pfad’ hinzufügen
#3. bei url den ‘max-wert’ ändern
#4. ggf die if bedingung ändern, rauslöschen, je nach anwendung
#5. fertig
#—Stand: 13.04.2008— michi
}

procedure Einfuegen(index: Integer);
var i : Integer;
pfad: Array[0…3] of string; //
begin
pfad[0] := ‘C:\test.mp3’;
pfad[1] := ‘C:\test.mp3’;
pfad[2] := ‘C:\test.mp3’;
pfad[3] := ‘C:\test.mp3’;
i := Random(3);
try
SYstemLog(IntToStr(index));
CurrentPlaylist.InsertFile(index, pfad[i], eaNone);
except
SystemLog(‘Fehler beim Einfügen.’);
end;

end;

var //variabeln fuer die suche nach dem letzten element der laufenden Stunde
nextHour: TDateTime;
jetzigeStunde: Integer;
jetzt: TDateTime;
sekBisNextHour: Integer;
i: Integer;
summe: Integer;
farbig: boolean; //
begin
farbig:=false;
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
jetzt:=now;
nextHour :=Date;
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
sekBisNextHour := Round((nextHour-jetzt)*86400);
summe:=0;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
summe:=summe+CurrentPlaylist.GetItem(i).GetEffectiveDuration/10000000;
if (summe > (sekBisNextHour)) and (farbig = false) and (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) < (nextHour-0.000694444)) then begin
Einfuegen(i);
farbig:=true;
end;
end;
end.[/code]