Teaser-pal 2.0.

Voor vragen over Playlist Automation Language.
Plaats reactie
Gebruikersavatar
Wout
Moderator
Berichten: 3251
Lid geworden op: 03 dec 2007, 14:17
Answers: 1
SAM-versie: SAM 2019.3
Database: MySQL 8.0
Windows: Windows 10
Locatie: Bergen op Zoom
Contacteer:

Teaser-pal 2.0.

Ongelezen bericht door Wout » 25 dec 2019, 14:10

Sterk gebaseerd op pal/topic2509.html#p16061 maar dan anders ingeschoten. ;)

Wat is een teaser?
Een teaser is een stukje (sample) muziek wat komt op je radiostation.
Hierbij hoop je dat de luisteraar wordt geprikkeld om langer te blijven luisteren. 8-)

Wat is het verschil met de oude PAL en de nieuwe versie?
Voor de luisteraar is er nagenoeg geen verschil. Hij hoort nog steeds stuken van muziek wat er aan komt.
Voor de website is het wel een verbetering. Hij maakt van 3 stukken muziek één muziekblok.
Voorheen was het --jingle--muziekfragment1(6 sec)--jingle--muziekfragment2(6 sec)--jingle--muziekfragment3(6 sec)--jingle in je queuelist.
Nu is het één WAV-bestand met daarin bovenstaande.

#hoedan?
Om hiervan gebruik te maken dien je wel enkele dingen te doen.
  • Het werkt vanaf SAM Broadcaster versie 2017.8.
  • Je hebt kennis van PAL
  • Je dient een PAL te draaien
  • Je dient een map te maken (sox)
  • Je queue is gevuld met minimaal 6 nummers
Wat dien ik nog te veranderen?
In de PAL staat nog alles op de e:\ disk. Dit dien je nog te veranderen naar jouw geschikte disk.

Code: Selecteer alles

PAL.Loop := True ;

	// wacht steeds een kwartier
	PAL.WaitForTime(T['NEXT15']) ;

	PAL.LockExecution ;
	
		var CntsA : Integer = 0 ;
		var TR : Integer ;
		var songQA : array[0..4] of string ;
		// Zoek een sample in de muziek vanaf x seconden. 20 is 20 seconden vanaf het begin
		var RN : Array of String = ['20', '60', '80', '100', '120', '140'] ;
		var A : TDataSet ;
		var Now_minutes : String ;
		
		Now_minutes := FormatDateTime('n', Now) ;
		TR  := RN.length ;

	PAL.UnLockExecution ;

	if (Now_minutes = '0') then Pal.WaitForTime('+00:01:25') ;

	PAL.LockExecution ;
  
		A := Query('SELECT filename FROM songlist AS s '
		+'INNER JOIN (SELECT songID FROM queuelist ORDER BY sortID ASC LIMIT 8) AS q ON s.ID = q.songID '
		+'AND duration >= 160000 '
		+'ORDER BY RAND() LIMIT 3 ',[],True) ;

		A.First;
		while not A.EOF do
		begin
			songQA[CntsA] := A['filename'] ;
			WriteLn(songQA[CntsA]) ;
			CntsA := CntsA + 1 ;
			A.Next ;
		end;
		A.Free ;

	PAL.UnLockExecution ;
  				
	Repeat 
		// maak samples van 8 seconden ergens random (RN) in het nummer 
		ExecuteCmd('E:\sox\sox.exe', ['"'+songQA[CntsA]+'" e:\output'+IntToStr(CntsA)+'.wav trim '+RN[RandomInt(TR)]+' 8']);
		CntsA := CntsA - 1 ;
	Until CntsA < 0 ;

	// maak één bestand met daarin de jingles & de 8 seconden samples van de komende muzieknummers
	ExecuteCmd('E:\sox\sox.exe ', ['e:\begin.wav e:\output0.wav e:\tussen.wav e:\output1.wav e:\tussen.wav e:\output2.wav e:\eind.wav e:\teaser.wav']) ;
	// zet de teaser.wav bovenaan de queuelist
	Queue.Addfile('e:\teaser.wav', IpTop) ;
Muziek.rar
sox.rar
Veel plezier ermee!
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.
Afbeelding

Bugger
Beginnende SAM-gebruiker
Berichten: 1
Lid geworden op: 21 feb 2020, 08:28
SAM-versie: SAM 2020.2
Database: MySQL 5.7
Windows: 7 64-bits

Re: Teaser-pal 2.0.

Ongelezen bericht door Bugger » 21 feb 2020, 09:57

Mooi script waarvoor mijn dank, ik liep echter tegen een kleine syntax aan.

ExecuteCmd('E:\sox\sox.exe', zou ExecuteCmd('E:\sox\sox.exe ', moeten zijn (spatie achter exe zodat hij de muziek file er niet vast aan plakt.

Groet,
Bugger

Gebruikersavatar
skeleton
******
Berichten: 212
Lid geworden op: 15 aug 2008, 19:25
SAM-versie: SAM 2017.9
Database: MySQL 5.5
Windows: Windows 10
Locatie: Belgie
Contacteer:

Re: Teaser-pal 2.0.

Ongelezen bericht door skeleton » 07 apr 2020, 11:41

Hele leuke script. Ook vrij makkelijk te implementeren.
Kan ik dit ook eenmalig elk uur (vb na het nieuw ieder uur) laten spelen ipv elke kwartier ?

Hoe kan ik er dan 4, 5 of 6 teaser nummers van maken ipv 3 ?
Radio NOVA
Eigenzinnig, Anders!
Luister via deze pagina : Radio Nova Stream

Gebruikersavatar
Wout
Moderator
Berichten: 3251
Lid geworden op: 03 dec 2007, 14:17
Answers: 1
SAM-versie: SAM 2019.3
Database: MySQL 8.0
Windows: Windows 10
Locatie: Bergen op Zoom
Contacteer:

Re: Teaser-pal 2.0.

Ongelezen bericht door Wout » 08 apr 2020, 09:31

skeleton schreef:
07 apr 2020, 11:41
Kan ik dit ook eenmalig elk uur (vb na het nieuw ieder uur) laten spelen ipv elke kwartier ?
Jup, verander de volgende regel naar
  • PAL.WaitForTime(T['NEXT15']) ;
  • PAL.WaitForTime(T['XX:00:00']) ;
skeleton schreef:
07 apr 2020, 11:41
Hoe kan ik er dan 4, 5 of 6 teaser nummers van maken ipv 3 ?
  • Jup, verander de volgende regel
  • +'ORDER BY RAND() LIMIT 3 ',[],True) ;
    //Voor 4 nummers
  • +'ORDER BY RAND() LIMIT 4 ',[],True) ;
    //Voor 5 nummers
  • +'ORDER BY RAND() LIMIT 5 ',[],True) ;
    //Voor 6 nummers
  • +'ORDER BY RAND() LIMIT 6 ',[],True) ;
Afbeelding

Gebruikersavatar
skeleton
******
Berichten: 212
Lid geworden op: 15 aug 2008, 19:25
SAM-versie: SAM 2017.9
Database: MySQL 5.5
Windows: Windows 10
Locatie: Belgie
Contacteer:

Re: Teaser-pal 2.0.

Ongelezen bericht door skeleton » 08 apr 2020, 10:10

Hey wout ... bedankt, ik had het ondertussen gevonden :)
Let wel je moet ook onderaan het script de regels met "output" ook wijzigen dan indien je meerdere nummers wenst in de teaser.

Hieronder het script dat ik gebruik en aangepast heb en waarbij het start 1x per uur en 4 teasers gespeeld worden :

Code: Selecteer alles


PAL.Loop := True ;

	// wacht steeds een uur
	PAL.WaitForTime(T['NEXT60']) ;

	PAL.LockExecution ;
	
		var CntsA : Integer = 0 ;
		var TR : Integer ;
		var songQA : array[0..5] of string ;
		// Zoek een sample in de muziek vanaf x seconden. 20 is 20 seconden vanaf het begin
		var RN : Array of String = ['20', '60', '80', '100', '120', '140'] ;
		var A : TDataSet ;
		var Now_minutes : String ;
		
		Now_minutes := FormatDateTime('n', Now) ;
		TR  := RN.length ;

	PAL.UnLockExecution ;

	if (Now_minutes = '0') then Pal.WaitForTime('+00:01:00') ;

	PAL.LockExecution ;
  
		A := Query('SELECT filename FROM songlist AS s '
		+'INNER JOIN (SELECT songID FROM queuelist ORDER BY sortID ASC LIMIT 15) AS q ON s.ID = q.songID '
		+'AND duration >= 150000 '
		+'ORDER BY RAND() LIMIT 4 ',[],True) ;

		A.First;
		while not A.EOF do
		begin
			songQA[CntsA] := A['filename'] ;
			WriteLn(songQA[CntsA]) ;
			CntsA := CntsA + 1 ;
			A.Next ;
		end;
		A.Free ;

	PAL.UnLockExecution ;
  				
	Repeat 
		// maak samples van 8 seconden ergens random (RN) in het nummer 
		ExecuteCmd('c:\SOX\sox.exe ', ['"'+songQA[CntsA]+'" C:\SOX-INTRO\output'+IntToStr(CntsA)+'.wav trim '+RN[RandomInt(TR)]+' 8']);
		CntsA := CntsA - 1 ;
	Until CntsA < 0 ;

	// maak één bestand met daarin de jingles & de 8 seconden samples van de komende muzieknummers
	ExecuteCmd('c:\SOX\sox.exe ', ['C:\SOX-INTRO\begin.wav C:\SOX-INTRO\output0.wav C:\SOX-INTRO\tussen.wav C:\SOX-INTRO\output1.wav C:\SOX-INTRO\tussen.wav C:\SOX-INTRO\output2.wav C:\SOX-INTRO\tussen.wav C:\SOX-INTRO\output3.wav C:\SOX-INTRO\eind.wav C:\SOX-INTRO\teaser.wav']) ;
	// zet de teaser.wav bovenaan de queuelist
	Queue.Addfile('C:\SOX-INTRO\teaser.wav', IpTop) ;
  
Alles werkt perfect op deze manier, maar ik stoot op 1 probleem.
Het tijdsein en het nieuws start niet exact op het uur. Hierdoor kan het voorvallen dat het nieuws vroeger gedaan is, waardoor er reeds een plaat start vooraleer het script zijn werk kan doen.
Kan je in sam (via een pal script ofzo) niet zeggen dat dit script enkel mag starten als vb het nieuws speelt ? Dan is er net tijd genoeg om de teaser voor te bereiden ...
Radio NOVA
Eigenzinnig, Anders!
Luister via deze pagina : Radio Nova Stream

Plaats reactie
  • Vergelijkbare Onderwerpen
    Reacties
    Weergaves
    Laatste bericht