Ok, here we go… it took me some time, but as so often when i’m about to solve a problem that caught my attention, i got lost in details and blingbling.

So… finally i got something which not only is an eye candy but also works the way it’s expected (at least i hope it).
This is the wiring view:
And this is the panel:
I used eight separate players (technical reasons), where on each player only the first track must be loaded with a file, and the first player must not be empty! (I also added a status box which will give you a hint what’s going on). But empty tracks in between are no problem - they will be automatically skipped!
- Clicking on the grey boxes in the middle of a track will open the corresponding player to load a file.
(You will have to change to another rackspace and back after you have loaded or emptied a player to make the changes take place - there seem to be some issues with status-updating between the audio player and connected widgets).
- In the middle boxes you will see the filename of the sound which is loaded.
Click them to open the players.
- A colored field “READY #X” will inform you which track is played next.
- While a track is playing, the respecting PLAY button will go green as well as the file-name box.
- A green knob will show you the playing progress of each track.
- Each track has a separate red knob to adjust its volume in the 16CH mixer.
- The big green pad will step through the tracks that are loaded with a sound.
- The big red pad will reset the playing sequence to start at #1 again.
- There is a fader and a pair of VU meters for the overall volume.
The two big pads would ideally be MIDI learned to a controller of your choice
Here is the gigfile:
Step through 8.gig (895.4 KB)
I hope you enjoy it - have fun! 
Cheers
Erik
And for anyone interested, here is the contained script:
Var
lblStatus, btnStepOn, btnResetToOne : Widget
btnPlayingAP1, btnPlayingAP2, btnPlayingAP3, btnPlayingAP4, btnPlayingAP5, btnPlayingAP6, btnPlayingAP7, btnPlayingAP8 : widget
lblReady1, lblReady2, lblReady3, lblReady4, lblReady5, lblReady6, lblReady7, lblReady8 : widget
lblFile1, lblFile2, lblFile3, lblFile4, lblFile5, lblFile6, lblFile7, lblFile8 : widget
ledLoaded1, ledLoaded2, ledLoaded3, ledLoaded4, ledLoaded5, ledLoaded6, ledLoaded7, ledLoaded8 : widget
ButtonsPlayingArray : widget array = [btnPlayingAP1, btnPlayingAP2, btnPlayingAP3, btnPlayingAP4, btnPlayingAP5, btnPlayingAP6, btnPlayingAP7, btnPlayingAP8]
LabelsReadyArray : widget array = [lblReady1, lblReady2, lblReady3, lblReady4, lblReady5, lblReady6, lblReady7, lblReady8]
filesArray : widget array = [lblFile1, lblFile2, lblFile3, lblFile4, lblFile5, lblFile6, lblFile7, lblFile8]
LoadMarkersArray : widget Array = [ledLoaded1, ledLoaded2, ledLoaded3, ledLoaded4, ledLoaded5, ledLoaded6, ledLoaded7, ledLoaded8]
activetrack : integer = 0 //counting starts at 0
colRed, colYellow, colGreen, colGrey : integer
//user function to set & color the active lane/track
function SetActiveLane (lane :integer)
var index : integer
for index = 0; index < Size(LabelsReadyArray); index = index +1 Do
if lane <> index then
SetWidgetFillColor(LabelsReadyArray [index], colGrey)
else
SetWidgetFillColor(LabelsReadyArray [index], colYellow)
end
end
SetWidgetLabel (lblStatus, "Ready to play Track#" + (lane+1))
End
Initialization
colRed = RGBToColor(0.8, 0.0, 0.0, 1.0)
colYellow = RGBToColor(0.8, 0.8, 0.0, 1.0)
colGreen = RGBToColor(0.0, 0.8, 0.0, 1.0)
colGrey = -12829636 //default "grey" value, read from a label widget with "GetWidgetFillColor(lblFile1)"
SetActiveLane (0) //counting starts at 0
SetWidgetLabel (lblStatus, "Click the large boxes in the middle to open the player and load a file!")
End
// Called when rackspace is activated
On Activate
if GetWidgetLabel(LoadMarkersArray[0]) == "0.00" then
SetActiveLane(0)
SetWidgetLabel (lblStatus, "Track #1 must not be empty! Click the empty boxes to open the player and load a file! Then change the rackspace and come back.")
else
activetrack = 0
SetActiveLane(activetrack)
end
End
On WidgetValueChanged (bval : double) from btnStepOn
var actualtrack : integer =0
if bval > 0.6 Then
if GetWidgetLabel(LoadMarkersArray[0]) == "0.00" then
SetActiveLane(0)
SetWidgetLabel (lblStatus, "Track #1 must not be empty! Please load a file in Player1 / Lane 1!Then change the rackspace and come back.")
else
//Set the regarding play-button to ON
SetWidgetValue(ButtonsPlayingArray[activetrack],1.0)
actualtrack = activetrack // store actual track# for status message
//check if we reached the end of the available track numbers
//if not switch one further
if activetrack == Size (LoadMarkersArray)-1 then
activetrack = 0
else
activetrack = activetrack +1
end
//check if actual lane is loaded with a file, if not find the next loaded lane
if GetWidgetLabel(LoadMarkersArray[activetrack]) == "0.00" then
While activetrack < Size (LoadMarkersArray)-1 and GetWidgetLabel(LoadMarkersArray[activetrack]) == "0.00" Do
activetrack = activetrack +1
end
end
if activetrack == 7 then activetrack =0 end
SetActiveLane(activetrack)
SetWidgetLabel (lblStatus, "Playing Track #" + (actualtrack+1) + " / Ready to play Track#" + (activetrack+1))
end
end
End
//pressing the Reset To One button
On WidgetValueChanged (bval : double) from btnResetToOne
if bval >0.6 Then
activetrack = 0
SetActiveLane (0)
end
End
//set label colors according to a track's play button's state
On WidgetValueChanged(w : Widget, index: integer, bval : double) from btnPlayingAP1, btnPlayingAP2, btnPlayingAP3, btnPlayingAP4, btnPlayingAP5, btnPlayingAP6, btnPlayingAP7, btnPlayingAP8
if bval > 0.6 Then
SetWidgetFillColor(LabelsReadyArray [index], colGreen)
SetWidgetFillColor(filesArray [index], colGreen)
else
SetWidgetFillColor(LabelsReadyArray [index], colGrey)
SetWidgetFillColor(filesArray [index], colGrey)
if activetrack == 0 Then
SetWidgetFillColor(LabelsReadyArray [0], colYellow)
end
SetWidgetLabel (lblStatus, "Ready to play Track#" + (activetrack+1))
end
End