1

(8 replies, posted in Sinclair)

utz wrote:
Zilog wrote:

Do you know LPC fundamentals and this marvelous document? https://cnx.org/contents/swFM2W46@5.12: … troduction

Fantastic, just what I need! I briefly looked at LPC before, but was like "meh, too much maths". But in recent months I've been working on my math skills so I might be able to tackle this now.

Actually, the math behind is a bit misleading. In reality, it's dead-simple. Just few-item array (either round buffer, because there's no need to copy or shift anything, or array with fixed indexes that can be better hardcoded into the loop) and you compute weighted sums of previous items, and this sum is the new item.

Normally, such array would never leave the initial all-zeroes state, so it's also fed with excitation frequency (spikes, because they pre-contain upper harmonics, which are typically suppressed in the predicted output, because it's sum-averaged). That's all.

Have a look also here: https://cnx.org/contents/wh_aQ2UJ@20/Sp … -Synthesis

2

(8 replies, posted in Sinclair)

Shiru wrote:

Just a few days ago I released SquatE, which is very close to your Squeeker (thanks a ton for this thing!), plus it features a sample channel that plays along without interrupting the tone channels. This was done exactly with vocal and pitched instrumental samples in mind.

My pleasure. Btw. is there some demo song, showing the SquatE abilities with all bells and whistles? Especially, that non-interupting samples must be great.

Shiru wrote:

and 1-bit samples seem to be compressible with basic RLE well enough, so the next step would be an engine with on-fly RLE sample decoder

Definitely. For background chords in the Amiga minor/major style. But still, I think that vocals are even cheaper to play. When 32 samples are enough on GB, are 16 probably as well... and this way, the looping and separation could be trivialised, probably. It's also of little importance, whether the voice sounds harsh, distorted by quantisation - one could take it rather as a feature... we all love robotic voices, especially when they are in-tune smile.

AtariTufty wrote:

Here's a couple of my tunes

Great list. Everything there was new for me, nice to see such huge advances in this techinque.

utz wrote:

Zilogat0r
What I'd really want to do though is formant synthesis

Do you know LPC fundamentals and this marvelous document? https://cnx.org/contents/swFM2W46@5.12: … troduction
It describes details of development of famous 80s SpeakNSpell toy - first LPC voice synthesizer chip. I think while LPC is fully computable on ZX (you can nicely interleave each LPC value processing with pulse width value decrement etc.), microsamples are better suited for this. We really need just few of them, they are ultrashort, might be 1-bit, and there's no computational overhead at all...

3

(8 replies, posted in Sinclair)

Hello,
maybe you are aware of this, but to sum it up - it should be extremely straightforward to add vocal abilities to any 1-bit engine, as it seems, by the means of either microsamples (probably even 16-bit "bitmask" quantity in a register, and doing ADD HL, HL, is enough to express basic in-tune harmonics between distinct vowels) or to use, otherwise unused AY channels to sum it up additively.

Viznut's engine
https://www.youtube.com/watch?v=BFo7IEy92No

Agemixer's Freestyler od SID MOS6581
https://www.youtube.com/watch?v=R5bzqhp1Jqk

Famous speech in U96 songs was actually STSPEECH.TOS utility on Atari ST, utilising AY-3-891x
https://www.youtube.com/watch?v=_dG2zekU2ak
https://www.youtube.com/watch?v=k7FMfy3YgN0
https://www.atari-forum.com/viewtopic.php?t=2254

Kecal, the routine from unknown author (it's NOT Oldsoft - Zdeněk Starý), was pioneering microsamples
https://worldofspectrum.org/archive/sof … -2-oldsoft

And recetly, I have found this, looks like it uses sequence of 32 Gameboy's 4-bit samples:
https://www.youtube.com/watch?v=8g9AN5PPYQE
https://gbdev.gg8.se/wiki/articles/Game … d_hardware
http://www.devrs.com/gb/files/hosted/GBSOUND.txt

Are You aware of any other routine of this kind? I think this is very unexplored area...

Zilogat0r

P.S.: UTZ, great posts about engine techniques and computer music history! I'm a biiig fan of what you are doing.

4

(135 replies, posted in Sinclair)

Very impressive research, nice sound! I think the 1bit sound is more advanced than AY today (no surprise). And because there's no reliable ratio between CPU and AY clock, and AY register access is clumsy, there's no need to bother with this PSG... or is?

Has somebody  experimented with volume registers on AY and some kind of advanced 1-bit mixing? The logarithmic nature of volume curve might help solve some membrane-pressure sideeffects...

Z.

Wow. Impressive archaelogy!

utz wrote:

Contacted Lyndon Sharp about this, and he's confirmed that he wrote that engine (and he most likely did the music conversion as well), based on WHAM. According to him, Codemasters wanted to avoid using WHAM because of license issues, so he sent them this one. It was only used once, as Codemasters still thought it too similar. So eventually Lyndon transformed it into what we now know as the LSengine'89.

6

(3 replies, posted in Sinclair)

finally!

this concept is actually pretty cheap (you can "emulate" low pass over the buffer just with shifting the window over longer sample content or by switching more buffers in a banked manner).

sounds fucking great, congratulations, utz! 1 bit is enough!

Z.

7

(3 replies, posted in Sinclair)

Also, very interesting are, from that 1987-1989 era roughly:

- Galactic Gunners (actually, it was an AY-to-speaker replayer, playing probably Fuxoft's Amadeus AY routine against this loop, allegedly, as Cybexlab, Miroslav Fidler, recently revealed):
   Youtube: https://www.youtube.com/watch?v=cWGHRoqFM6w
   WOS: http://www.worldofspectrum.org/infoseek … id=0001928

- Star Fly (T.R.C.'s first attempt, with similar mistage as Matthew Smith did in JSW - XORed mixing? :-D)
   Youtube: https://www.youtube.com/watch?v=MqDW08K49bg
   WOS: http://www.worldofspectrum.org/infoseek … id=0004823

- Star Swallow (Tomas Rylek aka T. R. C. with better sounding loop):
   Youtube: https://www.youtube.com/watch?v=lbpCYUu5P54
   WOS: http://www.worldofspectrum.org/infoseek … id=0004832

- Star Fox (Fuxoft's crappy routine? :-D Except that phasing sound between final patterns)
   Youtube: https://www.youtube.com/watch?v=xnAhSKArtrA
   WOS: http://www.worldofspectrum.org/infoseek … id=0004860

- Aknadach (MS-CID as author, but the routine is probably ripped from elsewhere):
   Youtube: https://www.youtube.com/watch?v=ii1wVlLN1hY&t=3s
   WOS: http://www.worldofspectrum.org/infoseek … id=0000133

Regards,
Zilogat0r

8

(3 replies, posted in Sinclair)

Hello 1-bit freax,
i nearly forgot this routine! Pin-based, but with some operators like portamentos and arp-like chords. Probably it's made by Tomas Partl - VooDoo (friend of Frantisek FUka - Fuxoft).

Youtube: https://www.youtube.com/watch?v=oYJSwQjRctw
WOS: http://www.worldofspectrum.org/infoseek … id=0001454

Zilogat0r

9

(21 replies, posted in Sinclair)

Yes! Great sound.

10

(22 replies, posted in Sinclair)

utz wrote:
Zilog wrote:

Is it really more efficient than mine?

Not at all, yours is certainly more efficient! The idea was more to smoothen row transitions by speeding up the data loading. I think that worked out reasonably well, though as you can probably tell from the code it's not optimized at all yet.

8bit mixing with postscaling? Sounds intriguing, but to be honest I don't quite understand how that would work. Could you explain a bit more about this idea? In any case, I'd love to see a new engine from you, given the unique approach you took in Squeeker smile

Well, the key idea is, why do all the people use 8bit counters (DEC counter8; JR NZ 10T_padding; LD counter,divider; LD channel,spike) - this means the higher tone, the less accurate its frequency (divider has just few valid bits). this takes 26T/channel AFAIK.

But, there's different approach - phase accumulator instead of divider, there's no need for conditional jumps, you just add to 8bit "accumulator", ala
LD A,frequency; ADD A,L; LD L,A (no need to reload counters, carry is immediately available, you even can use ADD HL,DE to accomplish this, when the frequency of two channels is very different - bass carry-contributions from L to H could be neglected then etc.).

Carry then feeds (SBC A,A; AND scaling_val; ADD A,scaler8) another register, "scaler", where's accumulated scaling value, typically some power-of-two, repeatedly added and we can control octave this wat, ensuring that the frequency would be in perfect align with other octaves, because we add 128, 64, 32 or similar "nice" numbers. And, when the numbers are even a little bit biased, let's say by 7, 5 or so, then, PWM control degrades for very low widhts to "intermittent" pins, giving nice fades. You could even produce harmonics with "masking" of that scaler, in one channel.

You can think of it like a <#80-#FF>-range phase accumulator as "top-octave" generator, with secondary 8bit scaler fed by its pins, doing the "downscaling" stuff - volumes, timbre, intermittent PWM stuff.

I have this idea for more than 10 years, but still no time to implement it properly (some proof-of-concept has been made on PIC12F628 :-), where it takes 7 mcycles (7us for 4MHz xtal) per channel...

regards,
Zilogat0r

11

(22 replies, posted in Sinclair)

utz wrote:

Got a first beta of the XM converter ready. It's functional but highly unoptimized, so I'll probably make more changes to it later. Anyway, it's using the original core of the 2012 version of Squeeker. Per-row speed control has been added. Data format and loader have been changed completely.
The converter is standalone, no Perl required.

download (win/*nix binaries and source included)


Btw. interesting row-oriented partial-change format. Is it really more efficient than mine? (channel-oriented, pattern is always made up of four particular channels)? mine was designed for LZ-based compression (pattern definitions were similar enough, and some tracks, such as bass or accompanion were quite reusable)... nice anyway. looking forward to hearing something new with my engine inside.

Btw., nowadays I wouldn't use 16bit phase-accumulator technique. Instead, I'll use 8bit mixing with postscaling , congruential "lower bits" of the scale-divider, and pwm-threshold for pwm-based volumes. The same 8bit "top-octave" frequency source would ensure proper tuning with sufdficiently enough values (128..255), and the postscaler allows to "modulate" the sound in different ways, producing one carry in the end as well...

Z.

12

(22 replies, posted in Sinclair)

Interesting reading, guys! And a great reverse-engineering attempt. But, just few notes to it:

- why is the loop djnzed, not unrolled, etc? it's because there's no need for extra speed, slow iteration means longer spike (more audible pin-based channels), and it was originally written with code-size in my mind, for Hellboj^HPRG (who loved Hubbard's JSW so much that i decided he deserves this gift:). summer 2000...

- channel counter preset - it helps to fight stuck-one in the bass channel (resting pin channel would never produce this), but more importantnly, it helps fight the aliasing - imagine playing two tones simultaneously, just one octave apart. pre-setting channels with different starting values (0,1,2 or maybe 0, 2, 4?) will produce desired harmonics, otherwise spikes of the higher tone would cover up the spikes of the lower tone completely. it's audible in the JSW song in one pattern - data are correctly there, but the original routine (without preset AFAIK) plays like there's no progression in one of the channels - all the spikes for that particular tone were just aliased out.

Now, i'll play with your converter, Utz!

Z.

13

(2 replies, posted in Sinclair)

Hallo!

I haven't been here for some time, and it seems the whole forum was a bit moved/restarted now, so I registered again. :-)

Do you guys know this tape? This was the second program, preloaded on the introductory cassette tape (included in the box) for Didaktik M, at least the model 1991 I had.
It contains 2 nice beeper tunes, one is Fuxoft's cover of Jean Michael Jarre's Magnetic Fields, part IV, using elaborate WHAM! techniques,  and the second one is Jan Deak's (R.I.P., master) own ZX-10 4ch routine, remix of Slovak pop-music (Vidiek - Vidiecan, Elan - Tulaci v podchodoch, Marika Gombitova - Koloseum, Richard Muller - Po schodoch etc.).

For many of us this was the very first tune we heard form our own computer - memories that can be never erased :-D. I think it just deserves to be added to the collection here:

http://z80.i-demo.pl/music.html

Z.

P.S.: btw. what happened to the previous forum? where is Mr. Beep?