Codebeispiele mAirListScript

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

du liest doch in deinem script die “duration” und die “starttime”. nimmst du jetzt noch die zeit des servers (die natürlich mit der des mairlistrechners übereinstimmt) und du hast alle angaben die du brauchst… musst dir halt noch nen netten algorithmus überlegen:)

grüße, michi

hm… naja… kann man die aktuelle zeit vom mairlistrechner auch übergeben?
dann brauch ich mich nicht darum kümmern, dass der webserver die selbe zeit wie der studiorechner hat…

lg

du kannst ja mal dieses hier probieren:

http://www.delphibasics.co.uk/RTL.asp?Name=Time

grüße, michi…

hm mal testen…

danke

Naja… bekomme [error] (29:28): Unknown identifier 'TimeToStr’OO

[size=9px][code]procedure OnPlayerStart(PlayerControl: IPlayerControl; item: IPlaylistItem);
var sl: TStringList;
idx, i: Integer;
pi: IPlaylistItem;
today : TDateTime;

begin
today := Time;
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(’$studiotime="’ + TimeToStr(today) + ‘";’);
sl.Add(’$studiodate="’ + DateToStr(today) + ‘";’);
sl.Add(’?>’);
sl.SaveToFile(‘k:\play.php’);
sl.Free;
end;

begin
end.[/code][/size]

begin SystemLog(FormatDateTime('hh:mm:ss', Time)); end.

das tut…

grüße, michi

nur hast du ein problem: die zeit wird nicht die ganze zeit upgedatet…

d.h das mairlist schickt nur 1mal etwas an einen server (eine datei).

d.H. die Time entspricht der StartTime

musst also doch die serveruhrzeit nehmen… bzw die zeit des usersystems, wenn dus mit javascript machst.

grüße, michi