Codebeispiele mAirListScript

Hallo.

Erst einmal Danke für die Unterstützung.
Leider verhält sich das Script noch nicht so wie ich mir das vorstelle.
Bitte beachten: Zur vollen Stunde wird eine neue Playliste geladen, die restlichen Titel werden verworfen.
Also, so müsste es aussehen:

Grenzwärtig wäre:


weil es sich da kaum noch lohnt den Song zu starten.

Das Script fügt hier ein:

Irgendwie muss noch zur Auswertung rein.
Also, Restzeit bis Stundenwechsel z.B. 60 sec., Brücke einfügen anstatt nächsten Titel spielen.
Restzeit bis Stundenwechsel > 60 sec., nichts unternehmen, nächsten Titel in der Liste laufen lassen.
Hoffe, Du konntest mir folgen.

jaja, das problem hab ich schon verstanden.

Das Problem ist (oder viel mehr war), dass mAirList das startdatum anscheinend immer statisch auf den 30.12.1899 setzt… ich hab aber das heutige datum als vergleichswert genommen.

wie auch immer, es sollte jetzt funktionieren… (habe es extra kurz getestet)

[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;
i: Integer;
begin
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
nextHour :=EncodeDate(1899, 12, 30);
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
if (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) > (nextHour-0.000694444)) and (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) < (nextHour)) then begin
Einfuegen(i);
end;
end;
end.[/code]

@ Torben:
stimmt das, dass das startdatum immer auf den 30.12.1899 gesetzt wird und ist das absicht? denn wenn nicht, müsste man das script nochmal etwas anpassen.

Seltsam.
Fehlermeldung:
[Error] (45:1): Unexpected end of file

upps… da fehlt noch ein “end.” ganz am schluss.

ich habs oben geändert…

Also einen Fehler gibt es jetzt nicht mehr, aber

ich möchte eigentlich, dass nur bei weniger als z.B. 60 sec. das Brückenelement eingefügt wird.
In diesem Fall wurde eingefügt, obwohl noch 3:28 Min. Zeit war.
Hätte dann nichts machen sollen und den regulären Song spielen sollen.

Das ist sehr sehr komisch, denn bei mir funktioniert es.

Nochmal in meinen Worten :wink: : Das Script “sucht” ein Element in der Playlist, bei dem die startzeit größer als “:59:00” und kleiner als “<jetzigestunde+1>:00:00” ist.

Obwohl ich nicht glaube, dass es was damit zu tun hat, aber schick mir mal den inhalt deines config-ordners (info@flashlighter.de).

michi

also:

Bei mir funktioniert es auch mit deiner Konfigruation.
einmal hab ichs getestet mit einem Element mit Starttime um 22:59:22 —> Brückenelement wird eingefügt.
und einmal mit 22:58:35 —> kein brückenelement wird eingefügt.

ich weiss jetzt nicht mehr sicher, ob ich in der eile das falsche script kopiert hab, deshalb hier nochmal:

[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
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;
i: Integer;
begin
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
nextHour :=EncodeDate(1899, 12, 30);
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
if (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) > (nextHour-0.000694444)) and (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) < (nextHour)) then begin
Einfuegen(i);
end;
end;
end.[/code]

Mit diesem Script funktioniert es.

Hat sich das Element bei Dir mit meiner Config gefärbt?
Also bei mir nicht.

Wie kann ich aber am besten das Ganze automatisieren?
Ausserdem ist es wohl nicht sinnvoll zu Beginn der Stunde das Script auszuführen.
Wird im Laufe der Stunde ein Song nicht gespielt (übersprungen, - fehlerhaft o.ä. …)
spielt das Brückenelement an einer ganz falschen Stelle.
(wird ja dann nicht automatisch an die richtige Stelle geschoben)

gut

[quote=“isanhagen, post:208, topic:2848”]Hat sich das Element bei Dir mit meiner Config gefärbt?
Also bei mir nicht.[/quote]
nö, das macht das Script auch nicht :wink:

Dieses hier macht es aber: (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
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;
i: Integer;
begin
jetzigeStunde := StrToInt(FormatDateTime(‘h’, now));
nextHour :=EncodeDate(1899, 12, 30);
nextHour := nextHour + EncodeTime(jetzigeStunde,0,0,0)+ + 0.0416666666;
for i:=0 to CurrentPlaylist.GetCount-1 do begin
if (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) > (nextHour-0.000694444)) and (CurrentPlaylist.GetItem(i).GetStartTime(sttEstimated) < (nextHour)) then begin
Einfuegen(i);
CurrentPlaylist.GetItem(i).SetColor(clYellow);
CurrentPlaylist.GetItem(i).SetColored(true);
end;
end;
end.[/code]

[quote=“isanhagen, post:208, topic:2848”]Wie kann ich aber am besten das Ganze automatisieren?
Ausserdem ist es wohl nicht sinnvoll zu Beginn der Stunde das Script auszuführen.
Wird im Laufe der Stunde ein Song nicht gespielt (übersprungen, - fehlerhaft o.ä. …)
spielt das Brückenelement an einer ganz falschen Stelle.
(wird ja dann nicht automatisch an die richtige Stelle geschoben)[/quote]

Per Event z.B um 5 Minuten vor der neuen Stunde.

michi

Ja, ist ne gute Idee.

hallo beisammen,

ich suche nach einer Möglichkeit um beim Schließen von mAirList noch schnell nen Eintrag in die Logging-Datenbank zu schreiben.
Bis jetzt schaut das so aus:

procedure OnShutdown;
var  connection: IZConnection;
begin
	connection := ZeosDriverManager.GetConnectionWithLogin('zdbc:mysql-3.23:192.168.1.1', 'mairlog', 'mairlog');
	connection.PrepareStatement('INSERT INTO mairlog (artist, title) VALUES ('fips-Team', 'fips-Mix')');
	connection := nil;

end;

Und mAirList erzählt mir was von nem Kommafehler kurz hinter VALUES.
Aber ich weiß eigentlichauch nicht so ganz, ob der Weg überhaupt in die Richtige Richtung führt.

Ihr seid doch da die Chefs. Wo ist der Fehler?

PrepareStatement bereitet den Befehl nur vor, du musst ihn noch ausführen (mit ExecuteUpdatePrepared). Guck mal ins eldoDB-Datenbank-Script, dann sollte das deutlich werden.

ah cool, danke.
So scheints zu funktionieren:

[code]procedure OnShutdown;
var
connection: IZConnection;
stmt: IZPreparedStatement;
begin
connection := ZeosDriverManager.GetConnectionWithLogin(‘zdbc:mysql-3.23://192.168.1.1/mairlog’, ‘mairlog’, ‘mairlog’);
stmt := connection.PrepareStatement(‘INSERT INTO mairlog (artist, title) VALUES (?, ?)’);
stmt.SetString(1, ‘fips-Team’);
stmt.SetString(2, ‘fips-Mix’);
stmt.ExecuteUpdatePrepared;
end;

begin;
OnShutdown;
end.
[/code]

Wird denn die Verbindung zur Datenbank danach gleich wieder getrennt, oder muss man das explizit sagen?

Wird automatisch getrennt in dem Moment, wo das durch “connection” referenzierte Objekt zerstört wird (was dank reference counting automatisch am Ende der Prozedur geschieht; ansonsten manuall durch connection := nil).

Hallo,

könnte mir jemand ein Script basteln:
Ich brauche ein Script, der die Playlist ständig auf dem neusten stand hält.

Danke!!

Gruß Simon

hi,

so wird dir wahrscheinlich keiner helfen können (ich versteh zumindest nicht, was du unter “neuester stand” verstehst).

grüße, michi

[quote=“flashlighter, post:216, topic:2848”]hi,

so wird dir wahrscheinlich keiner helfen können (ich versteh zumindest nicht, was du unter “neuester stand” verstehst).

grüße, michi[/quote]

Ich öffne eine Playlist (Hinzufügen => Playlist) mAirList öffnet die Playlist. die Playlist läuft immer eine Stunde (z.B. von 13:00 - 14:00). In der Redaktion (anderer Computer) wir die Playlist erstellt. Ist mit Netzwerk verbunden. Die Playlist heißt immer gleich (x), sobald er die nächste Playlist fertig hat speichert er sie unter x. Nur ich muss jetzt immer (wenn ich die neue Playlist hole) dann muss ich immer wieder von vorne anfangen (Hinzufügen => Playlist))

Hinzufügen => Playlist gibt es nicht.

Einfach nur eine stündliche Playlist laden, die nach einem bestimmten Schema benannt ist, geht auch per Event. Dazu braucht man kein Script.

HAllo zusammen,
ich habe jetzt endlich die “Grundfunktionen” von Mairlist durchblickt und die Software soweit, dass es zusammen mit meinem Mischpult und den anderen Geräten das tut, was ich gerne hätte. Nur möche ich mich ein wenig der SOftware selber widmen. Das Forum hier habe ich bereits durchsucht und auch schon diverse andere Quellen genutzt, aber für mein aktuelles “Vorhaben” nicht wirklich was gefunden:

Derzeit habe ich 16 Cartwalls, die auf einem zweiten Monitor liegen. Klappt alles wunderbar. Aber ich hätte in den Cartwalls die Nummerierung gerne weg gemacht und die Schriften ein wenig kleiner. Kann mir hier jemand weiterhelfen? Gibt es vielleicht eine Vorlage und wenn ja, wo genau muss diese abgespeichert werden?

Vielen Dank schon mal :smiley:

hi,

da bist du aber hier leider ins falsche forum gerutscht :wink: hier gehts nämlich nur um scripts und nicht um das “erscheinungsbild”, also skin und layout.

am besten du schaust dir mal die wiki-artikel an:

http://wiki.mairlist.com/index.php/Custom_Skins_and_Layouts
http://wiki.mairlist.de/index.php/Skin

grüße, michi