foutje in een script *opgelost*

Voor vragen over Playlist Automation Language.
Plaats reactie
EricVdM

foutje in een script *opgelost*

Ongelezen bericht door EricVdM »

Beste vrienden,
ik heb een klein probleempje en hoop dat iemand de fout vindt in dit script.
Het is een script dat op een bepaald uur muziek moet halen uit een bepaalde map, dat is ok en doet hij perfect, ook start het op tijd maar het wil niet stoppen op de aangegeven tijd en blijft na het tijdsein verder muziek halen uit die map en zou eigenlijk terug moeten gaan naar de normale programmatie.
Dit is het script:

Code: Selecteer alles

PAL.Loop := True;
var mytime : DateTime = now;
var I : Integer;
var start_time, end_time : DateTime;
start_time := T['22:01:00'];
end_time := T['22:58:00'];

      if( mytime >= start_time) and (mytime <= end_time) and
         (DayOfWeek(Now) = Monday)
      or (DayOfWeek(Now) = Tuesday)
      or (DayOfWeek(Now) = Wednesday)
      or (DayOfWeek(Now) = Thursday)
      or (DayOfWeek(Now) = Friday)
      or (DayOfWeek(Now) = Saturday)
      or (DayOfWeek(Now) = Sunday) then
            begin
                WriteLn('Oldies Hour!');
SubDir['F:\!! Oudere muziek'].Rescan;
SubDir['F:\!! Oudere muziek'].QueueTop(smLemmingLogic, EnforceRules);
SubDir['F:\!! Oudere muziek'].Rescan;
SubDir['F:\!! Oudere muziek'].QueueTop(smLemmingLogic, EnforceRules);
SubDir['F:\Jingles\Nieuwe'].Rescan;
SubDir['F:\Jingles\Nieuwe'].QueueTop(smRandom, EnforceRules);
SubDir['F:\!! Oudere muziek'].Rescan;
SubDir['F:\!! Oudere muziek'].QueueTop(smLemmingLogic, EnforceRules);
       PAL.WaitForTime(T['+00:05:00']);
            end;
De bedoeling is dus dat het script start om 22u en stopt om iets voor 23u en in die tijd alleen muziek uit de map "!! Oudere muziek" en ook op regelmatige basis een jingle draaid uit de aangegeven map.

Alvast bedankt voor jullie hulp
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

is er nu echt niemand die de fout vindt?
Gebruikersavatar
Wout
Beheerder
Berichten: 3506
Lid geworden op: 03 dec 2007, 14:17
SAM-versie: 2019.3
Database: MariaDB
Windows: 11
Locatie: West-Brabant
Contacteer:

Re: foutje in een script

Ongelezen bericht door Wout »

Een fout in het script zie ik ook niet,
denk alleen dat er een miscommunicatie is tussen de gebruiker & PAL. :D

Ik vermoed dat jij wilt dat de PAL om 22:58:00 al geen !! Oudere muziek draait.
Maar hij zal zijn riedel herhalen tot 22:58:00 & wat dan nog over is/blijft zal ie inderdaad afspelen.

Dan is het beter dat je om 22:58:00 een Queue.Clear erin gooit, dan is alle !! Oudere muziek weg
en begint het weer met je normale programmering.
Afbeelding
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

Wout dank u voor uw reactie, maar op het uur volgd een nieuwe playlist en die start met een Queue.clear om alles van het vorige uur op te ruimen. Omdat ik playlisten per uur maak met een extern programma en die voorziet (om veiligheidsredenen) enkele nummers meer dan er voor een uur nodig is.
Mijn probleem is dat het script na 22:58:00 gewoon verder werkt en oude nummers blijft toevoegen aan de nieuwe playlist van het volgend uur, wat natuurlijk niet de bedoeling is.
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

weet er iemand misschien een ander script dat wel werkt?
Gebruikersavatar
Kees
Beheerder
Berichten: 3169
Lid geworden op: 28 nov 2005, 22:07
SAM-versie: 4.2.2.*
Database: MySQL
Windows: 11
Locatie: Bergen op Zoom
Contacteer:

Re: foutje in een script

Ongelezen bericht door Kees »

Code: Selecteer alles

PAL.Loop := True;
PAL.LockExecution;
var mytime : DateTime = now;
var I : Integer;
var start_time, end_time : DateTime;
start_time := T['22:01:00'];
end_time := T['22:58:00'];

     while( mytime >= start_time) and (mytime <= end_time) and
         (DayOfWeek(Now) = Monday)
      or (DayOfWeek(Now) = Tuesday)
      or (DayOfWeek(Now) = Wednesday)
      or (DayOfWeek(Now) = Thursday)
      or (DayOfWeek(Now) = Friday)
      or (DayOfWeek(Now) = Saturday)
      or (DayOfWeek(Now) = Sunday) do
            begin
PAL.UnLockExecution;
                WriteLn('Oldies Hour!');
SubDir['F:\!! Oudere muziek'].Rescan;
SubDir['F:\!! Oudere muziek'].QueueTop(smLemmingLogic, EnforceRules);
SubDir['F:\!! Oudere muziek'].Rescan;
SubDir['F:\!! Oudere muziek'].QueueTop(smLemmingLogic, EnforceRules);
SubDir['F:\Jingles\Nieuwe'].Rescan;
SubDir['F:\Jingles\Nieuwe'].QueueTop(smRandom, EnforceRules);
SubDir['F:\!! Oudere muziek'].Rescan;
SubDir['F:\!! Oudere muziek'].QueueTop(smLemmingLogic, EnforceRules);
       PAL.WaitForTime(T['+00:05:00']);
PAL.LockExecution;
            end;
PAL.UnLockExecution;
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

Dank U Kees ik zal het vandaag nog uit testen.
Gebruikersavatar
Kees
Beheerder
Berichten: 3169
Lid geworden op: 28 nov 2005, 22:07
SAM-versie: 4.2.2.*
Database: MySQL
Windows: 11
Locatie: Bergen op Zoom
Contacteer:

Re: foutje in een script

Ongelezen bericht door Kees »

EricVdM schreef:Dank U Kees ik zal het vandaag nog uit testen.
Zeg maar jij tegen u !! :lol:
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

Sorry Kees maar dit script blijft ook lopen na het uur.
Het gaat van de wacht stand
PAL.WaitForTim (T['+00:05:00']);
naar
PAL.UnlockExecution;
en begint verder de nummers in de playlist te plaatsen.
Gebruikersavatar
Wout
Beheerder
Berichten: 3506
Lid geworden op: 03 dec 2007, 14:17
SAM-versie: 2019.3
Database: MariaDB
Windows: 11
Locatie: West-Brabant
Contacteer:

Re: foutje in een script

Ongelezen bericht door Wout »

EricVdM schreef:weet er iemand misschien een ander script dat wel werkt?
Vind het maar erg verwarrend wat je schrijft.

Waarom wil je het script gebruiken als je al extern een playlist maakt met een extra buffer?
Wat is nu het doel van het script, als je dat eens goed verwoord, misschien dat ik het dan snap.
En ik je ermee kan helpen, maar op dit ogenblik snap ik niet je gedachte erachter.
Afbeelding
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

Het zit zo, ik maak een playlist met een extern programma voor 24/24 uur per uur gevarieerde country muziek programatie maar overwegend nieuwe nummers. 1 uurtje wil ik uitsluitend oudere muziek brengen die minstens 5 jaar oud zijn en die staan allemaal in de map oudere muziek. In het programma dat mijn playlisten maakt kan ik wel uur per uur veranderen maar ik kan dit niet zo instellen dat bijvoorbeeld 3 dagen in de week oudere muziek en de andere dagen andere muziek neemt.
Nu staat de script wel ingesteld dat het alle dagen per week om hetzelfde uur de oudere muziek draait maar het eindresultaat zou bijvoorbeeld moeten zijn dat ik op maandag, woensdag en vrijdag oudere muziek, zaterdag en zondag linedance muziek en dinsdag en donderdag bluegrass muziek speel en dat kan bij mijn weten alleen met een script.
Als je een andere oplossing zou weten wil ik dat gerust uitproberen, ik heb meer dan 20000 mp3-tjes in mijn systeem staan allemaal per album vanaf 2007 en voor dat jaar staan ze in een map oudere muziek, ook heb ik nog mappen met de nieuwe releases die ik aankrijg en die staan per jaar en sub mappen per maand.
Ik stuur nu het script aan met een "event scheduler" zodat ik de aanpassingen kan doen op welke dag het script start.
Het uur daarna word met een script de volgende playlist opgehaald dat door het extern programma werd gemaakt (zie onderaan voor dit script)

Ik hoop dat dit een beetje begrijpbaar is. [smilie=dash2.gif] [smilie=blush2.gif]

Code: Selecteer alles

{*******************************************************************************
PAL script for putting Music 1 SE hourly playlists into the queue at 3 minutes before the hour
based on the naming scheme of Music 1 for hourly playlists
yymmdd.hh.m3u
You will need to change the constants to meet your needs.
The load time can be changed as well as clearing que or waiting for 1 song play clear queue and add.

This is a basic script . A starting Place
******************************************************************}

PAL.Loop := True;

const PlaylistPath = 'F:\Playlisten\'; // location your Music 1 playlists are saved
const Fileextension = '.m3u'  ; // the playlist extension

var Present: DateTime;
var Year, Month, Day, Hour, Min, Sec, MSec,DayLength,MonthLength, HourLength : Integer;
var HoldYear,TheYear,TheMonth, TheDay, TheHour, Playlist :String;
var LessThan : Boolean;


//Present:= Now + 1;  // since we are loading a few minutes before the next day we want the next days list
Present:= Now;
DecodeTime(Present, Hour, Min, Sec, MSec);
writeln ( IntToStr(Hour));
Hour := Hour + 1;
If (Hour = 24) then
   Hour := 0; // set it to mid night
writeln ('Hour to get ' + IntToStr(Hour));
if (Hour = 0)   Then
    Present:= Now + 1;

DecodeDate(Present, Year, Month, Day);
HoldYear :=  IntToStr(Year);
TheYear := Copy(HoldYear,3,2); // copy the last 2 digits of the year 2007 would copy the 07
TheMonth :=  IntToStr(Month);
TheDay := IntToStr(Day);
TheHour := IntToStr(Hour);
MonthLength := length(TheMonth) ;
DayLength := length(TheDay);
HourLength := length(TheHour);

LessThan := MonthLength < 2;
If (LessThan)  Then
   TheMonth := '0'+ TheMonth; // if a single digit add 0 to front

LessThan := DayLength < 2;
If (LessThan)  Then
    TheDay := '0'+ TheDay; // if a single digit add 0 to front

	LessThan := HourLength < 2;
If (LessThan)  Then
    TheHour := '0'+ TheHour; // if a single digit add 0 to front
	
Playlist := PlayListPath + TheYear+TheMonth+TheDay+ '.' + TheHour + Fileextension;
writeln (TheYear);
writeln (TheMonth);
writeln (TheDay);
writeln (Playlist);


PAL.WaitforTime(T['xx:59:00']);  // wait for 1minute befor the hour

if(FileExists(Playlist))then
begin
   Queue.Clear;
   Queue.AddList(Playlist,ipTop); // add playlist to Top of the queue

   WriteLn('Loaded: '+Playlist);
end
else
begin
   WriteLn('PLAYLIST NOT VALID!');
   WriteLn(Playlist);

end;

PAL.WaitforTime(T['xx:59:20']);
Gebruikersavatar
Gerrit
Moderator
Berichten: 883
Lid geworden op: 16 nov 2008, 00:08
SAM-versie: 2018.7
Database: MySQL
Windows: 10
Locatie: Veenendaal
Contacteer:

Re: foutje in een script

Ongelezen bericht door Gerrit »

Ik zou zo met dit script van jouw geen oplossing weten maar ik heb wel een ander script voor je waarmee je een programma op verschillende dagen en tijden kunt starten en die wel stopt.

Suc6,
Gerrit.
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.
Vroeger was ik een twijfelaar, ik ben daar nu niet meer zo zeker van.
en
Ik houd van kritiek, maar ik moet het er wel mee eens zijn.
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

Werkt perfect bedankt.
Nog een klein vraagje, bestaat er ook een code om dit script volledig te stoppen want nu blijft dit script op de achtergrond lopen wachtend op 22u de volgende dag. Ik hoef dit niet echt te stoppen op dit moment maar ik heb maar schrik als ik na een tijd meer scripts heb lopen dat dit veel van mijn (mijn PC hé :D )geheugen gaat vragen.
Ik heb nu een server met 12GB geheugen en een Quad Core processor, maar SAM gebruikt maar 1 core en op sommige momenten gebruikt hij nu al 100% van die core en laat de andere 3 ongemoeid.
Ik weet het ik vraag veel maar dit zijn vragen waar ik op het Amerikaanse forum geen antwoord op krijg, toch wat het core gebruik betreft ik heb de technische dienst van SAM al eens gevraagd of daar geen oplossing voor is maar na 12 maanden heb ik nog steeds geen antwoord gekregen van hen. [smilie=negative.gif]
Gebruikersavatar
Gerrit
Moderator
Berichten: 883
Lid geworden op: 16 nov 2008, 00:08
SAM-versie: 2018.7
Database: MySQL
Windows: 10
Locatie: Veenendaal
Contacteer:

Re: foutje in een script

Ongelezen bericht door Gerrit »

Laat dat script maar rustig in "rust" meedraaien, dat "vreet" heel weinig geheugen. :)~

Gerrit.
Vroeger was ik een twijfelaar, ik ben daar nu niet meer zo zeker van.
en
Ik houd van kritiek, maar ik moet het er wel mee eens zijn.
EricVdM

Re: foutje in een script

Ongelezen bericht door EricVdM »

ok bedankt Gerrit
Plaats reactie
  • Vergelijkbare Onderwerpen
    Reacties
    Weergaves
    Laatste bericht