PAL.Loop := True; PAL.WaitForQueue(0); var Q : TDataSet; var looper,NumSongs,Day,Month,Year,Modalita,ContatoreNatale : Integer; var Artist1,Artist2,Artist3,Artist4,Song1,Song2,Song3,Song4,JingleIntro,JingleOutro : String; var ListaIds : String ='0'; var Present : DateTime; // Modalita: // 0 = programmazione generica // 1 = Natale (8 dicembre - 6 gennaio) // 2 = Halloween (30 ottobre - 1 novembre) Present := Now; DecodeDate(Present,Year,Month,Day); // DATA DI TEST //Year := 2026; //Month := 10; //Day := 30; Modalita := 0; // Controllo periodo Natale if ((Month=12) and (Day>=8)) or ((Month=1) and (Day<=6)) then Modalita := 1 else // Controllo periodo Halloween if ((Month=10) and (Day>=30)) or ((Month=11) and (Day<=1)) then Modalita := 2; //tolto il 76 che era la musica classica tra il 31 e il 60 var OrdineCategorie : Array of Integer = [82,80,32,49,96,42,15,28,98,57,40,67,89,25,58,30,97,50,37,56,38,64,87,23,47,24,55,27,88,59,35,52,43,94,46,29,51,36,90,48,41,75,31,60,39,83,63,95,62,34,53,20,45,22,66,19,81,14,26,44,21,54,85,84,92,93]; //rock e pop var ListaCategorie1 : String = '61,65'; //50s,60s,70s,80s,90s,dance,darkgrunge,hardrock,italian,rnb,rockprogressive,synthpop,emo,tedesco,svedese,ucraino,persiano,filippino,coreano,dzongkha var ListaCategorie2 : String = '46,47,48,49,50,51,52,55,56,57,64,66,67,23,42,82,89,96,97,98'; // Contatore utilizzato solo a Natale. // Ogni 2 categorie normali viene inserita la categoria 17 (musica natalizia). ContatoreNatale := 0; //seleziono canzone pop Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID=61 order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; //seleziono canzone rock Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID=65 order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; //inizio categoria scelta for looper := 0 to OrdineCategorie.length-1 do begin // A Natale, dopo ogni 2 categorie normali inserisco la categoria 17 // Se il contatore arriva a 2, la categoria 17 viene inserita prima della categoria normale corrente if(Modalita=1) then begin if(ContatoreNatale=2) then begin NumSongs:=0;JingleOutro:='';JingleIntro:=''; Q := Query('SELECT * from category where ID=17',[],True); Q.First; while not Q.EOF do begin JingleIntro:=Q['introjingle']; JingleOutro:=Q['outrojingle']; NumSongs:=Q['numsongs']; WriteLn(Q['nomeitaliano']); Q.Next; end; Q.Free; Queue.AddFile(JingleIntro,ipBottom); Artist1:='';Artist2:='';Artist3:='';Artist4:=''; Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID=17 and songlist.id not in ('+ListaIds+') order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin Artist1:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; if(NumSongs>1) then begin Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID=17 and songlist.id not in ('+ListaIds+') and artist <>'+QuotedStr(Artist1)+' order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin Artist2:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID=17 and songlist.id not in ('+ListaIds+') and artist <>'+QuotedStr(Artist1)+' and artist <>'+QuotedStr(Artist2)+' order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; end; Queue.AddFile(JingleOutro,ipBottom); //seleziono 2 canzoni casuali cateogrie1 Song1:='';Song2:='';Song3:='';Song4:=''; Q := Query('SELECT songlist.id,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID in ('+ListaCategorie1+') and categoryID not in (17) and artist<>'+QuotedStr(Artist3)+' and songlist.id not in ('+ListaIds+') order by rand() limit 0,2',[],True); Q.First; while not Q.EOF do begin Song1:=Q['filename']; if (Song3='') then Song3:=Q['filename']; Artist3:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Q.Next; end; Q.Free; //seleziono 2 canzoni casuali cateogrie2 Q := Query('SELECT songlist.id,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID in ('+ListaCategorie2+') and categoryID not in (17) and artist<>'+QuotedStr(Artist4)+' and songlist.id not in ('+ListaIds+') order by rand() limit 0,2',[],True); Q.First; while not Q.EOF do begin Song2:=Q['filename']; if (Song4='') then Song4:=Q['filename']; Artist4:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Q.Next; end; Q.Free; //insiersco 4 canzoni causali e un jingle Queue.AddFile(Song1,ipBottom); Queue.AddFile(Song2,ipBottom); Queue.AddFile('C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\CONDIVISA\_jingle\auguri\Natale2001.mp3',ipBottom); Queue.AddFile(Song3,ipBottom); Queue.AddFile(Song4,ipBottom); ContatoreNatale:=0; end; end; // Categoria normale NumSongs:=0;JingleOutro:='';JingleIntro:=''; Q := Query('SELECT * from category where ID='+IntToStr(OrdineCategorie[looper]),[],True); Q.First; while not Q.EOF do begin JingleIntro:=Q['introjingle']; JingleOutro:=Q['outrojingle']; NumSongs:=Q['numsongs']; WriteLn(Q['nomeitaliano']); Q.Next; end; Q.Free; Queue.AddFile(JingleIntro,ipBottom); Artist1:='';Artist2:='';Artist3:='';Artist4:=''; Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID='+IntToStr(OrdineCategorie[looper])+' and songlist.id not in ('+ListaIds+') order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin Artist1:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; if(NumSongs>1) then begin Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID='+IntToStr(OrdineCategorie[looper])+' and songlist.id not in ('+ListaIds+') and artist <>'+QuotedStr(Artist1)+' order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin Artist2:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; Q := Query('SELECT songlist.id,artist,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID='+IntToStr(OrdineCategorie[looper])+' and songlist.id not in ('+ListaIds+') and artist <>'+QuotedStr(Artist1)+' and artist <>'+QuotedStr(Artist2)+' order by date_played limit 0,1',[],True); Q.First; while not Q.EOF do begin ListaIds:=ListaIds+','+IntToStr(Q['id']); Queue.AddFile(Q['filename'],ipBottom); Q.Next; end; Q.Free; end; Queue.AddFile(JingleOutro,ipBottom); //seleziono 2 canzoni casuali cateogrie1 Song1:='';Song2:='';Song3:='';Song4:=''; Q := Query('SELECT songlist.id,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID in ('+ListaCategorie1+') and categoryID not in ('+IntToStr(OrdineCategorie[looper])+') and artist<>'+QuotedStr(Artist3)+' and songlist.id not in ('+ListaIds+') order by rand() limit 0,2',[],True); Q.First; while not Q.EOF do begin Song1:=Q['filename']; if (Song3='') then Song3:=Q['filename']; Artist3:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Q.Next; end; Q.Free; //seleziono 2 canzoni casuali cateogrie2 Q := Query('SELECT songlist.id,filename FROM songlist left join categorylist on categorylist.songid=songlist.id where categoryID in ('+ListaCategorie2+') and categoryID not in ('+IntToStr(OrdineCategorie[looper])+') and artist<>'+QuotedStr(Artist4)+' and songlist.id not in ('+ListaIds+') order by rand() limit 0,2',[],True); Q.First; while not Q.EOF do begin Song2:=Q['filename']; if (Song4='') then Song4:=Q['filename']; Artist4:=Q['artist']; ListaIds:=ListaIds+','+IntToStr(Q['id']); Q.Next; end; Q.Free; //insiersco 4 canzoni causali e un jingle Queue.AddFile(Song1,ipBottom); Queue.AddFile(Song2,ipBottom); // Halloween: sostituisce il jingle generico casuale // Natale: sostituisce il jingle generico casuale // Periodo normale: usa il jingle generico casuale if(Modalita=2) then Queue.AddFile('C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\CONDIVISA\_jingle\auguri\halloween.mp3',ipBottom) else if(Modalita=1) then Queue.AddFile('C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\CONDIVISA\_jingle\auguri\Natale2001.mp3',ipBottom) else CAT['termoradio'].QueueBottom(smRandom, NoRules); Queue.AddFile(Song3,ipBottom); Queue.AddFile(Song4,ipBottom); // A Natale conto le categorie normali. // Dopo 2 categorie normali, al giro successivo viene inserita la categoria 17. if(Modalita=1) then ContatoreNatale:=ContatoreNatale+1; end;