Right then, let's stick with the old, and bulk up the capabilities.
-=-=-
Over the past few days I tried wrangling some Megadrive/Genesis sounds into the engine, but.. Nope..
No, no, no..
They sounded ok, occasionally, but with the music engine being mostly randomised, the results were far from ear pleasing.
Instead then, yesterday I went back to "Make it sound a bit more like an Amstrad CPC" methods.
No new instruments have been added yet, but I've played about with Amplify/Decay/Sustain settings have the results are much better than they were with the Megadrive sounds.
On top of that, I've added a little chirp functionality to some of the instruments, giving a vague ARP effect without needing to know what chords the song is in.
The result is quite pleasing, and with all that playing fairly well, I opted to spend a majority of the day doing musical things..
Here's the first edition of JMTrackr Jukebox.
// JMTrackr Jukebox
// by Jayenkai
// Created 2021/6/15
Dim Tune$(256)
Dim Name$(256)
Dim Tempo(256)
n=0
Name$(n)="JMing Something"; Tempo(n)=120
Tune$(n)="<C16>G16C8r8<C16>G16C8r16<C16r16>G16C8<C16>G16C8r8<C16>G16C8<C16r16>C8r8|E8G8G16F16E8F16G16F16D16E16r16C16D16E8G8G16F16E16C16E4r8C16D16|G8G8<C8C8>G8G8C8r8G8G8<C8C8>G8G8C8r8|G4G4C4C4G4G4<C4r4|r8G16r16E16G16r8G16r16E16G16r8A16G16r8G16r16E16G16E16D16E8r4r8|r1|[d]|C8C8C8C8C8C8C8C16C16C8C8C8C8C8C16C16C4|C16G+16C16G+16C16G+16D16G+16C16G+16C16G+16C16G+16D16G+32D32C16G+16C16G+16C16G+16D16G+16C16G+16C16G+16C16D16D16G+16|r1r1|"
n=n+1
Name$(n)="JMbo"; Tempo(n)=120
Tune$(n)="C16E16G16<C16r4>C16E16G16<C16r4>C16E16G16<C16r4C16>G16E16C16r4|r4C16E16G16<C16r2r4C16>G16E16C16r2|G8G8E8E8C8C8D8C16E16G8G8E8E8C4r4|>G8r32r32<G16r8G16r8r16>G8<G16r8r16>G8r32r32<G16r8G16r16>G16r16G8<G16r8r16|r4G16r16G16E16C16r1r4r8r16|r1r8C8C16C16C16<C8C16C8r4|r1r8G16r16G16G16G16<G16r16G16G16r4r16|r1|[d]|C4C4C4C8D8C4C4C8D8C4|C8G+8C8G+8C8G+8C8G+8C8G+8C8G+8C8G+16D8C16D16G+16|r1|"
n=n+1
Name$(n)="TrackrTacks"; Tempo(n)=120
Tune$(n)="C4r8C8E8G8A8G8C16r8C16r8C16C16E16C16G8A8r8|C8r16C16r4C8r16C16r4C8r16C16r4C8r16C16r4|C8r16C16r4r8C16r16C16r8r16C8r16C16r4C32r32C32r32C16r16C16r8r16|C16>G16<C16E16G16E16C16E16C16>G16<C16E16G16r8r16C16>G16<C16E16G16E16C16E16C16G16E16>G16<C16r8r16|r1|[d]|C8G+16C16D8C16G+8C16G+8D8C16G+16C8G+16C16D8C16G+8C16G+8D16G+16C16D16|r1|"
n=n+1
Name$(n)="Flappadiddle"; Tempo(n)=120
Tune$(n)="C32r16r32>G32<r32>A+32<r32C32r16r32>G32<r32>A+32<r32C32r16r32C32r32D+32r32D32r32C32r32>A+32<r16r32|C32r16r32C32r32D+32r32F32r16r32G32r16r32C32r16r32C32r32D+32r32F32r16r32G32r16r32|G8r8F8r8D+8r8C8r8|C8r16C16r8C16r16C8r16C16r8C16r16|<C8>C16<C16>r16G16<C8>A+16r8r16G16r16A+16r16|[d]|C8F+8D8F+16>B8<F+16C8D8F+8|C8F+16C8F+16C8r16F+16D8D8F+8"
n=n+1
Name$(n)="Busy Road"; Tempo(n)=120
Tune$(n)="F8F16F16A8<C8>B8A8B16A16G8|F8r8F8r8F8r8A8r8|A8r16F8r16A8r16F8r16A8F8|>F16r8r16F16r8r16F16r8r16F16r8r16|r4>A16r16A16r4r16A16r16A16r16|r8F16r8r16F16r8r16A16r8r16A16r16|r1|[d]|C4D4C4D4|C8F+8D8F+8C8F+8D8F+8|C8F+16C16D8F+8C8F+16C16D8D8|r1|"
n=n+1
Name$(n)="Jellyfish"; Tempo(n)=120
Tune$(n)="C16C16C16>G16r4r8<C16C16C16>G16r8|>G16r8r16G16r8r16G16r8r16G16r8r16|r4r8<C16C16C16>G16r4r8|r8C32r32C32r8r32C32r32C32r8r32C32r32C32r8r32C32r32C32r32|r1|[d]|C4C4C4C4|C4D4C4D4|C8G+8D8G+8C8G+8D8G+16D16|r1|"
n=n+1
Name$(n)="Not Pong"; Tempo(n)=120
Tune$(n)="<G32r4r8r16r32>G32r4r8r16r32|>G16r8r16<C16r8r16D+16r8r16C16r8r16|r8<C16r8r16C16r8r16C16r8r16C16r16|C16r16C16r16C16r16>G16r16G16r16G16r16G16r8r16|C16r8C16r8C16r8C16r8C16r16>G16r16|r8C32r32C32r32C16r4r16C32r32C32r32C16r8r16|r1|[d]|C8G+8C8G+8C8G+8C8G+16G+16|C16G+8C16D8G+8C8C16C16D16r16G+16r16|C8G+8D8G+8C8G+8D8G+16D16|r1|"
n=n+1
Name$(n)="Poll Drop"; Tempo(n)=120
Tune$(n)="C8G8>G8<G8C8G8>G8<G8|C8G8>G8<G8C8>G8A8B8|G16A16G16F16G16A16G16B16<C2|G16A16G16F16G16A16G16F16G16A16G16F16G16A16G16F16|<C16>B16A16G16F16E16D16C16>B16A16G16F16E16D16C8|C32r32D32r32E32r32F32r32G32r32A32r32B32r32<C32r32D32r32E32r32F32r32G32r32A32r32B32r8r32|r1|[d]|C8D8C8D8C8D8C8D8|C8D8C8D8C8D8C8D16D16|r1|"
n=n+1
Name$(n)="Floor Lamp"; Tempo(n)=120
Tune$(n)="C16r8C16r8E8G8r4r8|r2r8r16G16A16r16G16r16|>C16r16<C32r32C32r32>C16r16<C32r32C32r32>C16r16<C32r32C32r32>C16r16<C32r32C32r32|>G8r16G8r16G16r16r2|r2C8r16C8r16C16r16|r1|[d]|C16G+8G+16C8G+4G+4G+8|C16G+8G+16D16G+8G+16C8G+16G+16D8G+8|C8G+16C16D8G+16D16C16D16C16G+16D8G+8|r1|"
n=n+1
Name$(n)="Rumbled Ground"; Tempo(n)=100
Tune$(n)="C32r32C32r32C32r32C32r32C32r4r8r16r32C32r16r32C32r16r32|>G32r32G32r32G32r32G32r32<C32r4r8r16r32>G32r16r32<C32r16r32|E32r32C32r32E32r32C32r32>G32r4r8r16r32<C32r16r32E32r16r32|r8<C32r8r16r32C32r8r16r32C32r8r16r32C32r16r32|r8>G16r8r16G16r8r16G16r8r16G16r16|C16r8C16r8C16r8C16r8C16r16C16r16|G32r8r32E32r8r32C32r8r32>G32r8r32<C32r16r32E32r16r32|r1|[d]|C4C4C4C4|C8F+8C8F+8C8F+16F+16C8F+8|C8F+16C8r16C8r16C16F+8C8C16F+16|C8F+16C16D8F+16C8D16C16F+16D8F+8|r1|"
n=n+1
Name$(n)="Meatballs"; Tempo(n)=120
Tune$(n)=">C8C32r32C32r32C8C8C32r32C32r32C8C8C32r16r32|>G8G32r32G32r32G8G8G32r32G32r32G8G8G32r16r32|G16r8G16r8G16r16C16r8C16r8C16r16|C32r16r32C32r32E32r32G32r16r32G32r16r32G32r32E32r32C32r4r16r32|r2r4C32E32G32E32C32r16r32|G8r8C8r8>G8r8<C8r8|r8G16r32r32r32r16r32C16r32r8r32>G16r32r8r32<C16r32r32|C16E16G16r8C16E16G16r16C16r16C16G16r16C16r16|r1|[d]|C8F+8C8F+8C8F+8C8F+8|C8F+8D8F+16C8F+16C8D8F+8|C16F+16G+16F+16D16F+16G+16F+16C16F+16G+16F+16D16F+16G+16F+16|r1|"
n=n+1
Name$(n)="Original Goodness"; Tempo(n)=120
Tune$(n)="C8<C8>C8<C8>>G8<G8>G8<G8>A8<A8>A8<A8>A+8<A+8D8<D8|>G8<G8>G8<G8>D8<D8>D8<D8>F8<F8>F8<F8>G8<G8>G8<G8|<C8r4C8r2r4r8>G16r16<C16r16D16r16E16r16D16r16|C2r4D4E4D4C4D4|C8r8D8r8E16r16G16r16E4F16r16F16E16D8G8E16r16D16r16C8>G16r16|<C4r8>G4r8A+16r16G16r16<C4r8>G4r8A+16r16G16r16|r1|[d]|C4D8r16G+16C8G+8D8G+16D16C4D8r16G+16C8G+8D8D16G+16|r1|"
n=n+1
Name$(n)="Original Justification"; Tempo(n)=100
Tune$(n)="G16F16G16<C16>G16r16C16r2r16G16F16G16<C16E16C16>G16r16<C8r4r8|C32r32C32r32C16C32C32C32r32C16C32C32C32r32F32r32F32r32F16F32F32>G32r32G16G32A32B32r32<C32r32C32r32C16C32C32C32r32C16C32C32C32r32F32r32F32r32F16F32F32>G32r32G16G32A32B32r32|r2r16F32r32G32r32<C32r32>G16r16C32r2r8r32F32r32G32r32<C32r32>G8r8|G8r16C8r16G8A+4<C4>G8r16C8r16G8F4G4|C8r16>G8r16<C8F4G4C8r16>G8r16<C8C4C4|r1|[d]|C16D16G+16C8G+16C16G+16C16D16G+16C8C16D8C16D16G+16C8G+16C16G+16C16D16G+16C8C16D16D16|r1|"
n=n+1
Name$(n)="Original Lifeform"; Tempo(n)=120
Tune$(n)="<C4r8>A+16G4r16A+4<C4r8>A+16G2r16|C4r8D8D+4D4C4r8D8D+2|C8C8C8C8C8C8C8C8D+8D+8D+8D+8>A+8A+8A+8A+8|C8C8C8C4C8C8C8D+8D+8D+8D+4>A+8A+8A+8|C16r8C16r8C16r8C16r8C16r16C16r16D+16r8D+16r8D+16r8>A+16r8A+16r16A+16r16|C16D+16C16<C8C8C16>C16D+16C16<C8C8C16>C16D+16C16<C8C8C16>C16D+16C16<C8r16C16C16|r1|[d]|r8G+4G+4G+4G+4G+4G+4G+4G+16G+16|C8G+16C16D8G+8C8G+16C16D8G+8C8G+16C16D8G+8C8D8D8G+8|r1|"
n=n+1
Name$(n)="Original Naivety"; Tempo(n)=80
Tune$(n)="A+32<D32F32A+32>A+32<D32F32A+32>A+32<D32F32A+32>A+32<D32F32A+32>A32<C32F32A32>A32<C32F32A32>A32<C32F32A32>A32<C32F32A32>G32<C32D+32G32>G32<C32D+32G32>G32<C32D+32G32>G32<C32D+32G32>G32A+32<D32G32>G32A+32<D32G32>G32A+32<D32G32>G32A+32<D32G32|r8<F16F16D+16D16D+16r8F16F16F16G16r16F16r8r16F16F16D+16D16D+16r8F16F16F16G16F16>A+16r16|r16>A+32r16r32A+32r16r32A+32r16r32A+32r16r32<F32r16r32F32r16r32F32r16r32F32r16r32D+32r16r32D+32r16r32D+32r16r32D+32r16r32D32r16r32D32r16r32C32r16r32D32r32|>A+32A+32r16A+32A+32r16A+32A+32r16A+32A+32r16<F32F32r16F32F32r16F32F32r16F32F32r16D+32D+32r16D+32D+32r16D+32D+32r16D+32D+32r16D32D32r16D32D32r16C32C32r16D32D32r16|A+16<C16D16F8r16D+16D16D+16F16F8r4>A+16<C16D16F8r16G16F2r16|r1|[d]|C16G+16D16G+32D16r32C16D16G+16C16G+16D16G+32D16r32C16D16G+16C16G+16D16G+32D16r32C16D16G+16C16G+16D16G+32D16r32C16D16G+16|r1|"
n=n+1
Name$(n)="Original Quail"; Tempo(n)=120
Tune$(n)="G8G8G8G8A+8A+8A+8<C16D16C8C8C8>G8A+8A+8A8F8|>G16<G16>G16<G16>G16<G16>G16<G16>A+16<A+16>A+16<A+16>A+16<A+16>A+16<A+16C16<C16>C16<C16>C16<C16>C16<C16>>A+16<A+16>A+16<A+16>A16<A16>F16<F16|G8r16>G8G16A+16<D16C8r16>A+8r16A8<G8r16>G8G16A+16<D16C8r16>A+8r16A8|G8G8G16>G16A+16<D16G8G8G16>G16A+16<D16G8G8G16>G16A+16<D16G8G8G16>G16A+16<D16|r8G16G16G8A+8A+8r16F4r8r16G16G16G4r16G8A16A+8F8|G16D16G16A+16<D16>A+16G16A+16A+16F16A+16<D16F16D16>A+16<D16C16>G16<C16D16C16D16C16>G16A+16G16A+16G16F16D16F16A+16|<G8F8D8>A+4<D8F4G8F8D8>A+4<D8F4|r1r1|[d]|C8G+8D8r16G+16C8G+8D8r16G+16C8G+8D8r16G+16C8G+8D8r16G+16|r1|"
n=n+1
Name$(n)="Original Slant"; Tempo(n)=120
Tune$(n)="A16r8A16r8F16r16A16r8A16r8A+16r16A16r8A16r8F16r16A16F32r32A32r32A+32r32A8F16r16|>F32r32A32r32A32r32A32r32<A16>A32r32A32r32A+32r32<C32r32C32r32C32r32C32r32A+16>A+32r32A32r32A+32r32F32r32A32r32A32r32A32r32<A16>A32r32A32r32A+32r32<C32r32C32r32C32r32C32r32A+16>A+32r32A32r32A+32r32|A8r16r8r16F8r16r8r16A8r16r16<C8r16r8r16>A+8r16r8r16G8r16r16|A16r8A16<C16>A+16A16r16A+8r8G8r8A16r8A16<C16>A+16A16r16A+8r4r8|r1r8A16r16A8A+8<C16r16>A+16r16A8A+16r16|A8r16A16r8A8r4r16F16A32r32A+32r32<C8r16C16r8>A8r2|r8A32r32A+32r32<C16>A+32r32A16r8r16A32r32<C32r16r32>A+32r32A16r8r16A32r32A+32r32<C16>A+32r32A16r8r16A32r32F32r32A32r32<C32r32>A16r16|r1|[d]|C4r8C8C4r8C8C4r8C8C4C4|C8G+16D8r16D8G+8C8D8G+8C8G+16D8r16D8G+8C8D16C16G+16A16|r1|"
n=n+1
Name$(n)="Original Treatment"; Tempo(n)=120
Tune$(n)="C4C4C4C8G4G4G8G4E4|C8<C8>C8<C8>C8<C8>C8<C8>G8<G8>G8<G8>G8<G8>E8<E8|E2r8F4r8G2F2|E16C16E16F16G16r16E16C16E16F16G16r16F16E16G16r16E16C16E16F16G16r16E16C16E16F16G16r16F16E16G16r16|r8E16r16E16r16F16r16G16r8r16E8r4E16r16E16r16D16E16r2|E16r16E16r16E16r16F16r16G16r4r8r16E16r16E16r16E16r16D16E16r2|r1|[d]|C8G+8D8G+16F+16C8G+8D8G+8C8G+8D8G+16F+16C8G+8D8G+8|r1|"
n=n+1
Name$(n)="Original Wound"; Tempo(n)=120
Tune$(n)=">C8r8<<C8r16C16r8C16r16>C8r8>C8r8<<C8r16C16r2|r8C32r32C32r2r4r8r32C32r32C32r2r4r32|r2r8<C16r8r16C16r2r8r16C16r8r16C16r16|r4C8r32r32C16r2r4C8r32r32C16r2|<C16r16>C16r16G16r16<C16r16>A+16r16G16r16F16r16G16r16<C16r16>C16r16G16r16<C16r16>A+16r4r8r16|<C1>C2<D+2|r1|[d]|C8G+8D8C16G+8r16G+8D8G+8C8G+8D8C16G+8r16G+8D8G+8|r1|"
n=n+1
Name$(n)="Original Xodus"; Tempo(n)=120
Tune$(n)="C16G16<C16>C16G16<C16>C16G16<C16>C16G16<C16>C16G16<C16r16>C16G16<C16>C16G16<C16>C16G16<C16>C16G16<C16>C16G16<C16r16|C4r8r4F4r8G2F2|<C16r16C16r16C16r16C16r16C16r16>G8r8A+16r16<C16r16C16r16C16r16C16r16C16r16>G8r8G16r16|C16r16C16C16C16r16C16C16C16r16C16C16>G16r16A+16r16<C16r16C16C16C16r16C16C16C16r16C16C16>G16r16A+16r16|G2E2A+2G2|C2E2F2C2|r4G4F4E4E8F8G8C4r4r8|r1|[d]|r8G+4G+4G+4G+4G+4G+4G+4G+8|C8C16C16G+8C16C16C8C16C16G+8C8C8C16C16G+8C16C16C8C16C16G+8C8|C8G+16C16D8G+8r16C16G+8D8G+8C8G+16C16D8G+8r16C16G+8D8G+16D16|r1|"
n=n+1
Name$(n)="Original Yurt"; Tempo(n)=80
Tune$(n)="E16r32E32C16r32C32G16r32G32E16C16D16D32E32F16E16C8>G8<E16r32E32C16r32C32G16r32G32E16C16D16D32E32F16E16C8r8|>G16<G16C16G16>G16<G16C16G16>F16<F16D16F16D16>F16<D16F16>G16<G16C16G16>G16<G16C16G16>F16<F16D16F16D16>F16<D16F16|C16r16D16r16E16D16C16D16C16r32r16r32G16r32r4r32F16F16G16A16G16F16G16F16r16C16r16D16r16E16r16|C2D2E2D2|r16C16C16>G16<C16G16C16r2r8C16C16>G16<C16G16C16r2r16|r2r16C16C16>G16<C16G16E16D16r2r16C16C16D16E16D16C16r16|r1|[d]|C16G+16C16G+16C16G+32D16r32D16C16G+16C16G+16C16G+32D16r32D16C16G+16C16G+16C16G+32D16r32D16C16G+16C16G+16C32D32C32G+32D16D16|C8C8C8C8C8C8C8C16C16C8C8C8C8C8C8C4|r1|"
n=n+1
count=n-1
Playing=0
mdis=0
Graphics 1280,720,1
Repeat
CLS 30,30,80
SetFontSize 12
if MouseDown()<1 then mdis=0
sx=1
w=ScreenWidth*0.23
x=((ScreenWidth*0.25)*(sx-0.5))
y=50
for n=0 to count
x=((ScreenWidth*0.25)*(sx-0.5))
SetCol 50,50,100
if MouseIn(x,y,w,20,1)>0
SetCol 80,80,140
if MouseDown() and mdis==0 then
Playing=n
spd=Rand(0,2)*20+Tempo(n)
mdis=1:JMTrackr(spd,Tune$(n));
endif
endif
Rect x,y,w,20,1
SetCol 255,255,255
Text x,y,Name$(n),1
sx=sx+1
if sx>4 then sx=1:y=y+28
next
if spd>0 then Text ScreenWidth/2,20,"Playing "+Name$(Playing)+" at "+spd,1
Flip
Forever
I'll continue to fill this up with little melodies, and hopefully it'll be of use to anyone who needs to grab a bit of music.