Codebeispiele mAirListScript

hab ich mir auch grad dacht…

danke

muss mal drüber schlafen…

n8

Torben du hast mal was geschrieben, dass mein script nicht mehr in der aktuellen version gehen würde…

wie müsste es nun aussehen, damit ich interpret, titel, starttime & duration aus dem aktuell spielendem song und der folgenden 4 songs raus bekomme?

lg manu

ps. das obrige problem habe ich per php gelöst… einfach nur geil

http://www.sunrisefm.at/balken.php

Hallo,

ich suche nach einer Möglichkeit in einem Notification Script den “Absender” einer Notification herauszufinden.

In diesem Beispiel möchte ich die Nummer des Players der gerade gestoppt wurde (und wenn möglich auch seine Playlistnummer) per serieller Schnittstelle versenden:

...
 if (n.GetNotificationType = ntPlayerStop) then
    begin 
     ComPort(1).SetParameters(19200, 8, 'N', 1);
     ComPort(1).Open;
     ComPort(1).SendStr('PLAYER' + IntToStr(NUMMER DER PLAYLIST) + '-' + IntToStr(NUMMER DES PLAYERS)  + 'STOPPED');
   end
...

ich bräuchte diesen Code um meine Hardware zu steuern:
http://forum.mairlist.de/viewtopic.php?t=1471

Außerdem müsste ich noch wissen, wie das Handle-Objekt heißt, in dem eine geöffnete serielle Schnittstelle steckt.
Bei SAS ist das ja “SASComPort”.

Hi,

vielleicht hilft dir das ja weiter:

das script kann player[size=18px]NAMEN[/size] auslesen und malt diese ins systemlog. (ist schon länger her, dass ich an diesem problem gehockt bin, habe es aber nicht hinbekommen, die nummer des players auszulesen)
das script funktioniert bis mairlist version2.0.X:

[code]var n: INotification;
pl: IPlayer;
playername: String;
begin
// fetch notification data
n := GetNotification;

if (n.GetNotificationType = ntMask) then
// we want to be notified when players start or stop
SetNotificationTypes([ntPlayerStop])
else
if (n.GetNotificationType = ntPlayerStop) then begin
pl := IPlayer(n.GetInterface(0));
playername := pl.GetCaption;
SystemLog(playername);
end;
end.[/code]

bei dem anderen kann ich dir leider nicht weiterhelfen

grüße, michi

für alle die sowas auch haben möchten :wink:
bin zwar eher noch ein anfänger in php aber immerhin :wink:

[code]<?php
include “back.php”;
include “./play.php”;

$song = $playc0;
$start = $playd0;

$stu = date(“H”);
$min = date(“i”);
$sec = date(“s”);
$jetzt = $stu * 1200 + $min * 60 + $sec;
#echo “$stu:$min:$sec”;

$teile = explode(":", $song);
$h = $teile[0];
$m = $teile[1];
$s = $teile[2];
$song = $h * 1200 + $m * 60 + $s;

$teile = explode(":", $start);
$h1 = $teile[0];
$m1 = $teile[1];
$s1 = $teile[2];
$start = $h1 * 1200 + $m1 * 60 + $s1;

$pro = (($jetzt-$start)/$song*100);

$fresh=$start+$song-$jetzt+10;

$pro= (int) $pro;
echo "

";

echo "


"; ?>[/code]

jetzt die Play.php

[code]procedure OnPlayerStart(PlayerControl: IPlayerControl; item: IPlaylistItem);
var sl: TStringList;
idx, i: Integer;
pi: IPlaylistItem;
begin
idx := CurrentPlaylist.IndexOf(item);
if idx = -1 then begin
SystemLog(‘Das war kein Element aus unserer Playlist …’);
exit;
end;

sl := TStringList.Create;
sl.Add(’<?php’);
i := 0;
while (idx < CurrentPlaylist.GetCount) and (i < 5) do begin
pi := CurrentPlaylist.GetItem(idx);
if not pi.GetHistoryFlag then begin
sl.Add(’$playa’ +(IntToStr(i)) + ‘="’ + pi.GetArtist + ‘";’);
sl.Add(’$playb’ +(IntToStr(i)) + ‘="’ + pi.GetTitle + ‘";’);
sl.Add(’$playc’ +(IntToStr(i)) + ‘="’ + FormatDateTime(‘hh:mm:ss’, (pi.GetDuration/10000000)/(246060)) + ‘";’);
sl.Add(’$playd’ +(IntToStr(i)) + ‘="’ + FormatDateTime(‘hh:mm:ss’, pi.GetStartTime)+ ‘";’);
i := i + 1;
end;
idx := idx + 1;
end;
sl.Add(’?>’);
sl.SaveToFile(‘k:\play.php’);
sl.Free;
end;

begin
end.[/code]

ps. kann mir jemand dieses script so umschreiben, dass es in der aktuellen version auch geht? bin deswegen an die 2.1.19 gebunden

LG Manu

ps. kann mir jemand dieses script so umschreiben, dass es in der aktuellen version auch geht? bin deswegen an die 2.1.19 gebunden

LG Manu

Geht das torben?
Kannst du ein paar secunden deiner kostbaren zeit für mich opfern?

Ich hab den Beitrag schon entdeckt, hatte aber noch keine Zeit, mir das genau anzusehen.

Ersetze mal bitte das “GetStartTime” durch “GetStartTime(sttEstimated)” und schau, ob dann was Vernünftiges rauskommt. mAirList pflegt ja neuerdings pro Item verschiedene Zeiten (echte Startzeit; Fix-Zeit; geschätzte Startzeit; usw.), deswegen muss man nun auswählen, welche man gerne hätte.

Torben

Hallo!

Wie löse ich es, dass aus einem Ordner
a) eine zufällige Datei eingefügt wird (man wählt z.B. einen Ordner mit 6 Dateien - dann wird immer nur eine von diesem 6 Titeln eingeblendet)
b) die im Alphabet letzte Datei einfüge (aus einem bestimmten Ordner, d.h. man gibt diesen ein und mAirList wählt automatisch die solche Datei, die alphabetisch als letztes kommt).

Danke!

Gruß,
David

hi,

ich glaube die geschichte mit ordner funktioniert nicht… oder, torben?

du kannst höchstens beliebig viele pfade in ein array schreiben, und dann mit der random-funktion einen zufälligen nehmen…

falls du das script brauchst, meld dich;)

grüße, michi

Wenn das der einzig mögliche Weg ist, dann her damit :wink:

hi,

sorry für die verspätung… habe seit gestern kein dsl mehr und erst morgen kommt ein schlumpf und checkt den dslam :wink:

wieauchimmer, hier ist das script, das für 2.1.X funktioniert…

[code]{um mehr tracks hinzuzufügen einfach
#1. array erweitern
#2. pfad[id] := ‘pfad’ hinzufügen
#3. bei Random den ändern
#5. fertig
}

var i : Integer;
ts: TStringList;
pfad: Array[0…3] of string;
begin
pfad[0] := ‘C:\blabla.mp3’;
pfad[1] := ‘C:\aaa.mp3’;
pfad[2] := 'C:\bbb.mp3;
pfad[3] := ‘C:\ccc.mp3’;
i := Random(4);
CurrentPlaylist.InsertFile(0, pfad[i], eaNone);
end.[/code]

falls du es für 2.0 brauchst, sagst bescheid, dann kram ichs dir noch raus :wink:

grüße, michi (der am montag hoffentlich wieder von zuhause online ist)

Ne, ich nutze eh 2.1.x
Danke für das Script!

Hallo,

mal eine ganz andere frage:

Wie kann ich das hinbekommen, dass ich ein “notification-script” schreib, das darauf wartet, dass ein Player gestoppt wird.

Ich möchte damit einen befehl an eine io karte geben, um die beleuchtung der start stop taster ein/bzw. auszuschalten
(sprich von grün auf rot bei stop).

Den lichtwechsel beim drücken von tasten ist kein problem, ich würde aber gerne wieder umschalten, wenn ein titel von selber aus geht.

Danke!!!

grüße

markus

hi markus,

bei version 2.1.X so:

[code]procedure OnPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem; Duration: int64);
begin
dein script
end;

begin
end.
[/code]

grüße, michi

also ich mache das in der Version 2.1 so:

[code]function FindPlayer(iPlayer: IPlayerControl; var playlist, player: integer): boolean;
begin
for playlist := 0 to PlaylistCount - 1 do
for player := 0 to PlaybackControl(playlist).GetPlayerCount - 1 do
if PlaybackControl(playlist).GetPlayer(player).GetCaption = iPlayer.GetCaption then begin
Result := true;
exit;
end;
Result := false;
end;

procedure OnPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem; Duration: int64);
var player, playlist: integer;
pl: IPlayerControl;
begin
ComPort(4).SendStr(’!EOF aus*’);
if FindPlayer(PlayerControl, playlist, player) then
ComPort(4).SendStr(’!PLAYER ’ + IntToStr(playlist+1) + ‘-’ + IntToStr(player+1) + ’ STOPPED*’)
else
SystemLog(‘unknown player’);
end;[/code]

Ist nicht die eleganteste Lösung den Player über seine Beschriftung zu identifizieren, aber Torben hat bereits eine saubere Lösung versprochen.

Allerdings habe ich im Moment noch das Problem, dass das Ganze nur funktioniert, wenn ich den Player “per Hand” stoppe. Geht der Track zu Ende, wird komischerweise (auch wenn in der .ini Datei “Auto stop on EOF in assist mode” gesetzt ist) kein Stop-Event ausgelöst. Torben wollte sich auch hierum noch kümmern.

hallo!

danke mal für beide scripts!!!
@fashlighter:
diese Funktion hatte ich schon gefunden, da war leider das problem, dass sie nicht playerabhängig ist - ist das richtig?

Bei mir ists so: Ich hab das “autoload” ausgeschalten und verwende ein script mit dem ich ganz simpel dann den titel starte. Ich “entscheide” dadurch sozusagen in welchem player welcher titel gespielt wird (ist ein player bereits aktiv, dann ist das ja klar, dann kann ich den nicht nutzen)

leider funktionieren nur beide scripts bei mir nicht. egal ob ich den player selbst stoppe, oder auslaufen lasse, das script meldet sich nicht (obwohl es als notification" angelegt und in der config im notification ordner hinterlegt ist.
Ich hab testweise mal das erste genommen und einfach einen schel befehl in dien “body” hinein gesetzt, nur passiert auch da leider nichts…

grüße

markus

p.s. gibt es einen einfacheren weg auszulesen, um welchen player es sich handelt, der das ereignis auslöst?

hi markus,

benutztst du vielleicht mairlist 2.0.X ? denn dann müssen die notificationscripts anders aufgebaut sein…

grüße, michi

nein, ich hab die 2.1.25

(bin ja immer neugierig was es alles neues gibt :slight_smile:

ABER:
ich habs jetzt zum laufen gebracht, NUR:
das Script funktioniert leider nur, wenn ich selbst den titel beende, wenn er sozusagen von selbst ausläuft und der player dann wieder im leerlauf ist (unload etc.) dann geht das script nicht - komisch, weil gerade das ist ja die Funktion die eigentlich damit erfüllt werden soll (den Stop Button kann ich ja sowieso programmieren)…

hmmm vielleicht fällt euch dazu ja was ein bzw. auf.

Danke!

grüße

markus

@ torben:

kann es sein, dass es einfach am “listener” liegt.
es gibt ja einen eofwarning. mit dem gehts, da springt das script zu dem zeitpunkt an, zu dem die eof warning beginnt.

ich habe aber keinen listener “eof” gefunden.

Könntest Du sowas eventuell bitte machen?

Danke!

markus

p.s. egen midi. die platine wird nächste woche geäzt, dann werde ich so in ca 2-3 wochen bereit sein. kann dir dann mehr sagen. nur eine frage zum thema: die cart playerlautstärke kann man ja noch nicht per midi steuern oder?

hey leute!

eine frage: ist es möglich ein script zu programmiere, dass das zuletzt gestartete Element in der Playlist ganz oben steht? wenn ja, kann mir wer dabei helfen? DANKE !!!