Yes the TOTH is a fixed time event and the scheduler runs it exactly at the TOTH.
A TOTH can either be defined as a FTE or as part of a script, eg. the first line of a script. Regardless, the script is executed as a program scheduler entry.
How you define things depends on your requirements.
Let us start as simple as possible. Ie. we don’t use any FTE or Overlay, but let us try to do everything just as a simple script.
A script starts with the start of a program scheduler entry and runs as long as the next program is started. Each program is started as a new playlist and is executed it (note, that this is effectively the same). Once it is started, the previous playlist/program is closed.
Ie. the next program interrupts/stops the current program/playlist.
And while a program/playlist runs, it executes the assigned script and this script is responsible to deliver new tracks (playlist entries) as needed.
If a script comes to its end of script-lines, but more tracks/entries are needed, it simply starts all over again from the beginning. Actually not at the beginning, but at the script-line which is defined as the ‚Loop-Line‘.
And this Loop-Line is exactly important here! As you can define some lines at the beginning, which are only executed once, for the very first time when the script starts (eg. when the program starts), but in case the script needs to loop, it will not be executed again.
And this is exactly what we will now use with the TOTH!
Define a script, use the first script-line as your TOTH entry and set the Loop-Line parameter of the script to 2. Add more script-line as needed.
Now define a program scheduler entry. Use that script and define the length of the script resp. define the recurrence of the script to repeat every 1 hour.
In the program scheduler (remove any old entries and also do not use any Overlay scheduler entries and also do not use any FTEs in your script!) you should now see each hour the same entry in the program scheduler. Ie. the script is started each hour and each hour a new playlist is started which starts with the TOTH entry.
What you experience, that a track of a previous entry just plays 15sec. and then stops and the new program/playlist starts can also happen here. Eg. if you define the program scheduler entry as Fixed, it will start exactly at that time. And this might cut a track early, even way too early, as previous tracks are typically picked randomly, you don’t know, when a track starts or do finishes.
However, there are a few ways tingandlw this.
a) you can set the ‚TryEnsureExactLength‘ program option. This is pick good fitting tracks at the end (if available).
b) you might start a program Soft (note the various parameters how soft and even consider the Allow Statt early option)
This should give you a good start configuration. If you need more complex stuff, start from here as well and keep it as simple as possible.