Codebeispiele mAirListScript

bei benachrichtigungsscripts…

Danke für die Hilfe!

bitte;)

hier das elegante;) script mit schleife:

procedure OnPlayerStart(PlayerControl: IPlayerControl; item: IPlaylistItem);

var sl: TStringList;
    i: Integer;
    pi: Array[1..5] of IPlaylistItem;
begin
  pi[1] := item;
  pi[2] := CurrentPlaylist.GetItem(2);
  pi[3] := CurrentPlaylist.GetItem(3);
  pi[4] := CurrentPlaylist.GetItem(4);
  pi[5] := CurrentPlaylist.GetItem(5);

  sl := TStringList.Create;
  sl.Add('<?php');
  For i := 1 to 5 do begin
    if (CurrentPlaylist.GetCount>i-1) then begin
      sl.Add('$playa' +(IntToStr(i)) + '="' + pi[i].GetArtist + '";');
      sl.Add('$playb' +(IntToStr(i)) + '="' + pi[i].GetTitle + '";');
      sl.Add('$playc' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', (pi[i].GetDuration/10000000)/(24*60*60)) + '";');
      sl.Add('$playd' +(IntToStr(i)) + '="' +FormatDateTime('hh:mm:ss', pi[i].GetStartTime)+ '";');
    end;
  end;
  sl.Add('?>');
  sl.SaveToFile('c:\play.txt');
  sl.Free;
end;

begin
end.

Hallo Torben,
schön wäre es (hätte es auch unter Featuren Request schreiben können, aber weil es eigentlich zu diesem NowPlaying gehört. Es wäre schön wenn man auf dauer im FileTagger dem Item ein Tym zuordnen kann z.B Lied, Jingle, Beitreg und das Script so umprogrammiern kann das nur Lieder angezeigt werden. Wäre gut!
Vielen Dank!
RadioModerator

was will man mehr
mega THX flashlighter!!!

lg manu

Und weil ich immer das letzte Wort haben muss ;), hier noch ne Runde eleganter:

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);
    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)/(24*60*60)) + '";');
    sl.Add('$playd' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";');
    i := i + 1;
    idx := idx + 1;
  end;
  sl.Add('?>');
  sl.SaveToFile('c:\play.txt');
  sl.Free;
end;

begin
end.

Nebenbei noch eine Verbesserung: Das Script sucht erstmal die Position des gerade gestarteten Titels raus. Wenn also davor noch einer in einem noch auf EOF o.ä. stehenden Player ist, wird der ignoriert.

Das ist ganz wichtig, weil ab v2.1.18 die Playlist-History teilweise wieder gehen wird. Die History-Elemente stehen dann weiterhin in der Haupt-Playliste, sind aber als gespielt markiert (abfragbar über IPlaylistItem.GetHistoryFlag). Das kann man dann auch bei der while-Schleife noch berücksichtigen, indem man die Elemente mit GetHistoryFlag=true einfach ignoriert. Dadurch werden dann solche Elemente, die unter dem gerade gestarteten stehen, aber bereits gespielt wurden, bei der Ausgabe rausgefiltert.

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)/(24*60*60)) + '";'); sl.Add('$playd' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";'); i := i + 1; end; idx := idx + 1; end;

Torben

sprachlos…

Tja, mAirListScript ist schon toll :wink:

besonders der support

Hi Torben

…ich schon wieder;)

(Wie) kann ich Dateien per Script in die Playlist einfügen (so dass sie als nächstes gespielt werden)? also per Script das machen, was beim Eventsheduler “Datei einfügen” heisst?

habs mit InsertFiles versucht, bekam aber bei sämtlichen Kombinationen, die ich versucht habe Invalid Parameters;)

danke schonmal…

michi

Bei mAirList 2.1 gibt’s dafür die InsertFile-Methode von IPlaylist.

function InsertFile(iIndex: integer; iFilename: string; iExpandAction: TExpandAction): integer;

Die “iExpandAction” gibt an, was mAirList machen soll, falls die Datei eine Playlist (.m3u oder .mlp) ist. Du hast die Wahl zwischen “eaNone” (sie wird als Playlist-Element eingefügt), “eaContainer” (sie wird als Container eingefügt, also wie bei Playlist-Elementen, wobei mAirList sich nicht den Dateinamen sondern den Inhalt der Playlist merkt) oder “eaFlat” (die in der Playlistdatei enthaltenen Elemente werden einzeln in die Playlist eingefügt). Wenn es sich bei der Datei um eine “normale” Audiodatei handelt, ist der Parameter ohne Bedeutung.

Bei mAirList 2.0 ist es etwas komplizierter, da gibt es nämlich nur

procedure InsertFiles(iIndex: integer; iFiles: TStrings);

das heißt, es wird gleich eine Liste von Files erwartet (die aber durchaus die Länge 1 haben kann). Anstelle von TStrings kannst du eine TStringList benutzen, etwa so:

[code]var ts: TStringList;

begin
ts := TStringList.Create;
ts.Add(‘c:\blabla.mp3’);
try
CurrentPlaylist.InsertFiles(0, ts);
except
SystemLog(‘Fehler beim Einfügen.’);
end;
ts.Free;
end.[/code]

(ungetestet)

Das try…except ist wichtig, damit das Script noch bis zum Ende durchläuft und die Stringlist wieder freigibt, auch wenn InsertFiles eine Exception erzeugt hat.

Torben

PS: Sorry, ich glaube, die Script-Doku ist nicht auf dem neuesten Stand, ich werde bei der nächsten 2.1er-Version mal ein aktuelles chm-File mitliefern.

wie kann man streams einfügen?
per command…

oder per script und per command das script ausführen…

ziel ist… (habs endlich mit nem trick gschafft, dass ich auf der studiomaschine das command.exe ausführen kann)… dass ich in ner disco mit internet steh und mit winamp ins studio auf nen eigenen server streame… wenn alle in der disco bereit sind dann log ihc mich auf die homepage und sag “stream einfügen” (per command) und sag dann “Automation 1 NEXT”…

das Automation 1 next funkt ja schon brav…
hab auch die cartwall so konfiguriert, dass ich sie per command.exe steuern kann…

verstehst?

hi,

greif doch per vnc auf die studiomaschine zu…

grüße, michi

@ torben: danke, werd ich gleich nacher ausprobieren…

Streams direkt einfügen geht zur Zeit nicht, man muss rumtricksen: Stream in eine leere Playlist packen, die als .mlp speichern und dann mit InsertFile und eaFlat laden.

nein… vnc wollt ich eben nicht!
das soll der user in der disco auch selber machen können…
und damit kein blödsinn rauskommt mach ich ein loginscript usw. damit die zeit begrenzt wird in der man den stream aktivieren kann…

@torben danke…

aso, aus deinem vorigen thread hatte ich rausgelesen, dass nur du das nutzen willst.

in deinem fall ist vnc natürlich dann tödlich;)

grüße, michi

[code]var ts: TStringList;

begin
ts := TStringList.Create;
ts.Add(‘c:\blabla.mp3’);
try
CurrentPlaylist.InsertFiles(0, ts);
except
SystemLog(‘Fehler beim Einfügen.’);
end;
ts.Free;
end.[/code]

(ungetestet)

Hi Torben,

bei diesem Script bekomme ich folgende Fehlermeldung: (7:39): Invalid number of parameters

an was könnte das liegen?

grüße, michi

Welche mAirList-Version?

klar… wenn ich ein script für 2.0 baue, sollte ich es auch mit derselben testen;)

sorry… problem gelöst

grüße, michi

hy…

kann ich mit nem script auslesen auf welcher position der spielende player gerade ist?

will für die homepage einen fortschrittbalken basteln…
möchte dazu das notification script benutzen, dass mir die play.php erstellt… wie schon öfters geposted…

ich brauche eigentlich nur die remain time…

lg manu