My memory is very hazy, it was well over 40 years ago, but I think keeping the timing under control was was one a big hurdle. Because it was single threaded and there was effectively only one interrupt, screen refresh/flyback, so you had to intersperse the music code into the main code and juggle it to even out the note timing.
I remember one game I wrote for the 16K Spectrum, and thanks to an incredibly clever & musical friend we got something like 30 seconds of a tune that had a passable resemblance to Bach's Toccata in about 20 -30 bytes of code.[1]. Every last byte mattered on that machine.
[1] Not 100% on the details but it was about that. We used a combination of base notes and mathematical progression rather than just playing a score as we could get that smaller. I think I've a dot-matrix printout of the games source code somewhere, assuming the ink hasn't faded.
You think two channels is the limit? Have you heard title music from Chronos? Full multi-channel polyphony, without relying on sound co-processor. I'm not sure where to find the game itself these days, but I found the music itself here [0] on position 31.
Here you go:
https://spectrumgamesuk.com/index.php?game=Meteor-Storm
"...possibly the first game with speech synthesis, albeit sounding like an unintelligble gargle."
Quicksilva later improved their speech engine. QS Chess, for example, clearly said "This is the Chess Player".
And when I'm mentioning cassette recorder - I had a neighbour in my building who also had a Spectrum and whose window was some 12 meters away from my window and once we connected our computer with audio cables (MIC to EAR and vice versa) so one types some short program (or just REM message) and enters SAVE while the other one enters LOAD and gets the message. Our networking adventure started bad as it turned out that cable had large signal loss so it seemed that this brilliant idea failed but then we connected cassette recorders between computers that hugely amplified signal and thing actually worked.
Experiment ended when a party-line neighbor started complaining that his phone line was unusable for hours - we used phones as yelling through the window while trying to synchronize wasn't producing satisfactory results.
Fun times.
https://gkanold.wixsite.com/homeputerium/rules-2026
Some seriously great stuff in there - take the time to go through the archives, set up emulators for the winning systems, and study the results. Its one great resource for the budding 8-bit coder ..
And if you're looking for modern hardware that will get you into the scene, the ZX Spectrum Next is pretty badass - has many cores for other systems available as well, so you're not just limited to Spectrum things ..
I've personally had a lot of fun repairing one I bought on catawiki.
Bought one at a garage sale for 5 EUR. I'm pretty sure it does not work. Haven't tried it: I still have a good old CRT TV so I could.
But when people talk about coding for these 8-bit machines, they usually mean they'll target an emulator.
If you do get one, investigate that before attempting to power it up.