Code:
PAL.Loop := True;
VAR Wait : Boolean = False;
IF ActivePlayer <> NIL THEN
IF ActivePlayer.Duration > 270 THEN
Wait := True;
WHILE Wait DO
BEGIN
PAL.WaitForTime(270-ActivePlayer.CurTime);
ActivePlayer.Next;
Wait := False;
END;
No guarantee this is either syntactically or semantically correct, but take it as an inspiration:
This script checks the ActivePlayer and then the Duration of the currently playing track. If it's > 270 seconds (4:30) it will set a flag.
If the flag is set, the while loop will wait once for 270-CurTime and should then skip to the next track at the 4:30 mark.
The whole thing repeats infinitely.
I'm not 100% sure about the waiting. I can't remember if SAM calculates in milliseconds or seconds and whether or not you need the + to wait for time from now instead of for a certain point in time (here: 00:04:30 on the first january 1970)
Check the PAL reference and the PAL QuickStart Guide to learn more about that stuff and figure out how to fix potential problems with my idea.
Or pay for a consulting session/getting this script made for you. (Send a PM if you're interested in hiring me)