Mit jedem Abspielen eines Tracks ein Script ausführen

Das Script an sich funktioniert auch. Wenn ich die Logging-Variablen mit einem anderen Wert (hier PAUL und PETER) simuliere stehen diese auch im Logfile.

Ich muss jetzt NUR NOCH wissen, wie die Variable %U und die Variable %1 aus dem Logging-Bereich von mAirList im Script heissen, damit ich nicht immer NIX übergebe, da %1 und %U eben im Script leer sind

const
VAR1 = 'PAUL';
VAR2 = 'PETER';
COMMAND = 'C:\rolandradio\scripts\test.bat';

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; 
  Item: IPlaylistItem);
begin
ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + VAR1 + Chr(32) + VAR2);
end;

begin
end.

vielleicht kann @Torben ja sagen, welche Variablen es in MLS gibt? Oder jemand mir einen Link oder einen Tipp geben, wie ich an die Variablen ran komme?

Liest Du eigentlich was ich schreibe? Bei mir ist soweit alles fertig. Du schreibst, daß als Parameter ein Zielpfad anzugeben ist.

Ich möchte wissen, ob das eine Konstante ist, oder der sich jeweils ändert. Sonst nix. Ist das so schwer zu beantworten?

Aber bitte: Wende Dich an Torben. Der hilft Dir sicher gerne weiter.

 
Schönen restlichen Karfreitag.

Ich hab doch geschrieben dass ich den Pfad selbst in meiner Batch-Datei definiere. Das hat mit dem Mairlist-Script doch nix mehr zu tun. Warum sollte sich ein Zielpfad auch ändern? Ich brauche doch nur diese zwei verfluchten Variablen als Überhabe-Parameter. Das funktioniert ja auch mit Konstanten werten, aber ich kenne den Bezeichner nicht wie ich in MairlistScript eine Variable die Mairlist sicherlich haben wird übergebe. Noch weiss ich welche Variablen es überhaupt gibt, oder wie ich eine Variable aus einem Player-Item erzeugen würde.

Ich brauche nur diese zwei Parameter. Dass die sich ändern ist ja klar, da ja der Inhalt jedesmal ein anderer ist, nämlich die aktuelle MairlistID des Items im Player und dessen File-Pfad zur Audio-Datei für die Mairlistwiedergabe.

Das hab ich aber doch jetzt schon drei Mal beantwortet.

Ich sitze an dem Ding seit heute vormittag dran und komme nicht weiter, weil es keine Beschreibung eines so - für mich von der Logik her - einfachen Problem gibt.
Auch alle Scripte und Beispiele die ich gegoogelt und im Forum gelesen habe bringen mich kein Stück weiter.
Also hilf wenn du kannst. IRGENDJEMAND! BITTE!

Das war ja gerade die Frage. Aber statt eines einfachen „nein“ haust Du mir sieben pampige Postings um die Ohren.

Genau hierfür

habe ich eine funktionierende Lösung. Aber inzwischen keinen Bock mehr, hier weiterzumachen.

Ach ja: Die eingängliche Aufgabe, nämlich

halte ich mit der Antwort 4 für hinlänglich gelöst.

Ach ja:

Nö. So nicht.

const
  A = 1;

var
  Message: string;

begin  
  ReceiveCall('Wald') := A * SendCall('Wald', Message);
end.

Und obwohl ich dein Verhalten nicht verstehe und dies auch durch nichts zu rechtfertigen ist in einem Support-Forum, gebe ich dir in der Hinsicht Recht, dass das ursprüngliche Topic geklärt wurde. Weswegen ich für die Frage nach “Wie übergebe ich zwei spezielle Variablen an ein Programm und welche Variablen gibt es” in einem separaten Thema stellen werde. von Dir kommt ja nur Kindergarten-Verhalten zurück im Sinne von “Ich weiss was, sags dir aber nicht” - und darauf habe ich nun wirklich keine Lust und auch keine Zeit. Ich werde schauen, ob es nicht einen professional Support für mAirList vom Hersteller gibt, den man kostenpflichtig für solche Basics in Anspruch nehmen kann. Du hast mir mit deinem Verhalten die Teilnahme am “Support”-Forum kräftig vermiest. Behalte dein Wissen für dich, wenn dich das glücklicher macht als es zu teilen.

Eben. Das meine ich: Du lebst in deinem Kindergarten.

Das mit der VAR ist mir klar. Nur KENNE ich die benötigte Variable nicht. Du laut deiner Aussage schon. Aber du bist halt jemand, der gerne Spielchen spielt und die Stimmung bei den Fragenden durch toxisches Verhalten drücken will.
Ich bin raus.

Die Lösung für das Ursprüngliche Problem zusammengefasst für alle, die nach mir kommen und das gleiche Problem als Anfänger mit mAirList haben:

Hintergrund-Scripte laufen wohl im Hintergrund von mAirList ab und werden vermutlich permanent abgefragt oder durch Aktionen getriggert, wie Neuer Titel in Player. Diese Scripte sind normale Text-Dateien mit mairlist-code die von .txt in .mls umbenannt werden müssen.

Eingebunden werden diese dann über das Menü “mAirlist -> Systemsteuerung ->Hintergund-Scripts->Hinzufügen” . Dort wählt man die erzeugte .mls-Datei. im Feld “Dateiname” aus. und setzt bei “Optionen” am besten auch gleich den Haken “Automatisch neu laden wenn die Datei sich geändert hat”.

Der Inhalt der Textdatei (MLS-Datei) zum Aufruf eines externen Programms wie eine Batch-Datei oder eine EXE kann dann mit Konstanten werten wie folgt aufgerufen werden:

const
COMMAND = 'C:\rolandradio\scripts\test.bat';
CON1= 'PAUL';
CON2 = 'RAINER';

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; 
  Item: IPlaylistItem);
begin
ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + CON1 + Chr(32) + CON2);
end;

begin
end.

Um sein Script zu testen kann man dies auch von Hand tausführen über den Menüpunkt “mAirList -> Script ausführen…” Beachte aber dabei, dass natürlich die Procedure nur auf “OnPlayerStart” getriggert wird und beim manuellen Start deshalb nicht angezogen wird. Passe entsprechend dein Script an wenn du nur die Funktionalität testen möchtest.

Wie bei DOS-Batch-Dateien üblich werden Parameter einfach durch Leerzeichen getrennt an das Kommando angehängt. Der Chr(32) ist ein Leerzeichen-Zeichen/Charakter.

Der Aufruf einer externen Datei ist kurz zuammengefasst

ShellExecute('BEFEHL.EXE', 'LISTE DER PARAMETER');

Die procedure OnPlayerStart wird ausgeführt, sobald ein Player in mAirList gestartet wird. Dies bedeutet, sobald ein Player ein neues Lied spielt wird dieses Script bzw. die Prozedur getriggert und ausgeführt. Somit ist man in der Lage ein externes Script oder Programm zu starten, welches dann Dinge tut.

Wie man hier jedoch mAirList-relevante Daten übermittelt (wie Künstlername, ID des Titels oder Dateipfad des Titels) konnte noch nicht festgestellt werden.

Alles Liebe

Roland

Sofern du ein Privatanwender bist, der die äußerst günstige Lizenz von mAirList hat, gelten auch für dich die auf unserer Website nachlesbaren Spielregeln (Auszug):

Support nur über das Forum

Bei Fragen zur Einrichtung und Konfiguration steht dir ausschließlich unser Support-Forum zur Verfügung. Unterstützung über E-Mail, Telefon oder Fernwartung bieten wir für Privatanwender nicht an.

Quelle: mAirList für Privatanwender | mAirList Radio Automation, abgerufen am 11.04.2020 um 11:42 Uhr.

Zusätzliche Leistungen im Rahmen des sogenannten Premium-Supports stellen wir für Privatanwender nicht zur Verfügung. In - seltenen! - Ausnahmefällen findet eine Fernwartung zum üblichen Stundensatz statt (der außerhalb unserer üblichen Ansprechzeiten, z.B. an Wochenenden und Feiertagen sowie nachts, frühmorgens* etc. mindestens doppelt so hoch angesetzt wird). Hierzu ist eine gesonderte Vereinbarung nötig.

Selbst professionelle Kunden - also die, die eine oder mehrere Lizenz(en) zum vollen Preis bezahlt haben - mögen das Forum als erste Anlaufstelle aufsuchen. Einen Support per Mail oder Telefon stellen wir nur über einen - kostenpflichtigen - Zusatzvertrag zur Verfügung.

Dies nur mal als Grundsatz, der für alle gilt.

Jetzt zu euch beiden: Ihr habt euch miteinander verhakt, und scheinbar haben wir es hier mit zwei starken Persönlichkeiten mit jeweils profundem Wissen und einem ausgeprägten Willen zu tun. Auch das Fehlen weiterer Mit-Diskutanten in diesem Thread hat die Angelegenheit eskalieren lassen.

Eine kurzzeitige (24 Stunden?), freiwillige Quarantäne hinsichtlich dieses Threads hätte der Sache vielleicht gut getan; ich wollte zunächst nicht zum Mittel der temporären Schließung greifen. Das sollte auch ohne Eingriff möglich sein - ihr seid doch beide erwachsen.
Mit persönlichen Angriffen und eher kindlichem Verhalten kommt keiner von euch weiter und die Community erst recht nicht. Lediglich der Absatz und Verzehr von Popcorn :popcorn: hat in der letzten Zeit zugenommen. :upside_down_face:

Jetzt nutzt bitte die Frühlingssonne, geht mal eine Runde um den Block oder ähnliches und lasst den mAirList-Rechner einfach mal in Ruhe, sofern ihr nicht sendet.
Die Büros der mairlist GmbH sind offiziell erst wieder am Dienstag, dem 14. April 2020 besetzt. Genießt die freie Zeit!


*) Stichwort “frühmorgens”: Tatsächlich hat uns mal ein Kunde um 05:30 Uhr aus dem Bett geklingelt, weil der Früh-Moderator einen vermeintlichen Fehler festgestellt hat und nicht mehr weiter wusste. Eine Rufbereitschaft um diese Uhrzeit ist mit (fast) keinem Geld der Welt zu bezahlen. Seither haben wir unseren dienstlichen Telefonen striktes Stillschweigen außerhalb der Ansprechzeit verordnet.

1 Like

Hallo Uli,

Ich kann doch nicht der Einzige sein, der mal eine Variable wissen möchte? Das sind doch eigentlich Grundsätzliche Dinge die man wissen möchte. Ich suche wirklich schon seit Stunden und seit gestern das Internet ab und auch das Wiki von mAirList sowie das Forum um irgendetwas zu finden, was mit weiter hilft.

Wie du vermutlich über meinen Kundendatensatz sehen kannst habe ich zwei Pro-Lizenzen von mAirList für mein nicht-kommerzielles privates Projekt im Bestand. Und ich bin auch durchaus bereit ein paar Euro in die Hand zu nehmen um diese zwei Variablen - die im Logging ja zur Verfügung stehen - auch in der Prozedur an meinen Shellaufruf zu übermitteln.

Ich habe nicht den Eindruck, dass ich mich falsch verhalten hätte. Es ärgert mich einfach nur maßlos, wenn man nach einer Lösung für “2x2” fragt und als Antwort “wozu brauchst du das” bekommt. und ein “Ich weiß es, sag es dir aber nicht” ist halt wirklich unter aller Kanone für ein Support-Forum.

Ach ja: wir senden 24/7 und ich brauche einfach eine Lösung um an meinem Projekt weiter zu kommen. habe dazu aber einen separaten Thread aufgemacht, weil das ursprüngliche Topic ja beantwortet wurde.

Gruß
Roland

Ich bin mir relativ sicher, dass auch Torben sich diesen Thread (vielleicht auch nur auszugsweise) anschauen wird; in jedem Fall werde ich ihn darauf aufmerksam machen.
Nur eben nicht heute, sondern erst, wenn wir beide wieder arbeiten.

Eine Erwartungshaltung oder gar einen Anspruch, dass er seine Freizeit ebenfalls hier verbringt, ist meiner persönlichen Meinung nach nicht angemessen. Es ist seine freie Entscheidung.
Ich bitte aber zu bedenken, dass er eine Familie hat und die - insbesondere in der Ferienzeit und zu besonderen Anlässen (für manche Menschen haben religöse Feste ja eine größere Bedeutung) - an dieser Stelle absoluten Vorrang hat.

Nun, das kommt auf den Kontext an.
Soweit ich das verstanden habe, geht es dir um die Einbindung einer Variable in einem doch recht spezifischen, nicht alltäglichen Skript. Deine Anforderung scheint eher unüblich zu sein, soweit ich das beurteilen kann.
Bitte korrigiere mich, wenn ich falsch liegen sollte.

Offenbar scheinen die von uns dokumentierten Logging-Variablen in deinem Fall nicht zu greifen, sonst wäre das Problem wohl schon gelöst. Also suchst du eine Alternative, die - vermutlich - bislang noch nicht so häufig gesucht bzw. nachgefragt wurde.
Das kann dazu führen, dass Spezialwissen (von Torben) nötig ist, weil es hier möglicherweise tiefer in den Code geht.

Ob das - sofern meine These zutrifft - zwingend dokumentiert sein muss, lasse ich mal dahingestellt.
Um ehrlich zu sein, wir haben da noch ganz andere Dokumentationslücken, die ich in der Prioritätenliste höher ansiedele.

Ob ich damit dein Verständnis und deine Einsicht erreiche?
Das wäre schön.

P.S. Was ich im Kundendatensatz sehe oder sehen könnte, ist irrelevant. Im Forum schreibe ich so, dass auch Dritte zu jeder Zeit den Kontext für sich erschließen können, ohne die Zusatzinformationen abrufen zu können. Und selbst ich schreibe manchmal Antworten ohne zu wissen, mit wem ich es zu tun habe.
Erinnerst du dich, wie ich erst nach längerer Recherche darauf kam, wer du bist und warum CCL-Musik bei dir eine größere Rolle spielt als bei anderen Radiobetreibern und -moderatoren? Wir sollten uns im Forum nach Möglichkeit auf einer für alle nachvollziehbaren Informationsebene bewegen - und dazu gehört manchmal auch, dass wir bestimmte Dinge von dir und anderen öffentlich erfragen (müssen), damit alle über das gleiche know-how für eine Problemlösung verfügen können.

Soweit ich es sehe, müsste doch das übergeben Objekt “Item” eine entsprechende Methode bieten, die gewünschten Daten zu liefern.

Also sowas wie Item.artist() oder ähnliches.

Habe jetzt die Doku für ein IPlaylistItem gerade nicht zur Hand, aber das als Hinweis auf die Schnelle

Gruß,

Christoph

Genau das ist der Ansatz. Item.GetArtist, Item.GetTitle usw.

1 Like

Ok. Aber woher weiss man das denn?
Gibt es irgendwo eine Dokumentation dazu?

mAirListScript.chm

1 Like

Wo finde ich denn die Datei im System an sich? Ist das nicht im Auslieferzustand der Software irgendwo schon mit dabei?

Nein, die wird alle paar Monate mal kompiliert und händisch hochgeladen.

Falls noch nicht Geschehen, wäre es echt super hilfreich im Wiki einen Link zu der Datei zu finden. Das hätte mir (und anderen hier) wohl enormen Stress erspart :slight_smile:

Da ich mich mit der programmiersprache und den Variable nicht auskenne. Vielleicht könnte mir ein versierter User da kurz helfen?

Ich möchte das das Script nur ausgeführt wird, wenn bei dem Titel auch ein Typus gesetzt ist also “Music, Jingle” etc. Ist kein Typ gesetzt soll das übersprungen werden.

ich würde jetzt ein if ($typvariable != '') { mach das was du willst } andenken, aber komme mit der Mairlistscript-Sprache und den Variablen nicht klar. Ich finde auch nichts passendes im Forum.
Danke für eure Hilfe.