326

(164 replies, posted in Sinclair)

New year, new update, v0.29.

Added Squeeker, Squeeker Plus, Vibra, nanobeep, Lyndon Sharp's engine from Super Dragon (Wham with sampled drums), Music Studio, ZX-3.

327

(15 replies, posted in Sinclair)

Just a day left before the deadline. Three entries so far. You still have a chance!

Interestingly, Super Dragon Slayer has not one, but two songs on the title screen, alternating after each game over.

The most fun part, as far as I understand the code, is that drum track pretty much independent from the tone channels, it is much shorter than the tone track, looped, and there is row counter that delays when the drum track starts to play relatively to the tone channels.

329

(164 replies, posted in Sinclair)

Added xtone too. Because with beeper engines we always have just one less than enough.

330

(164 replies, posted in Sinclair)

Actually, just thought to promote 0.28 to release. With 28 engines!

It got Quiet mode (for slower engines, you can enter notes without making sounds and related slowdowns), minor fixes, and more engines. Besides wtbeep, there is AntEater, povver, and quattropic now.

If you downloaded WIP build, redownload it, there were changes, including fixes in wtbeep.

331

(164 replies, posted in Sinclair)

Added wtbeep engine, added loop support to Pytha. No real version update, just these two engines and 0.28 WIP build (don't remember if I changed anything important).

332

(21 replies, posted in Sinclair)

Added this engine to 1tracker.

Minor issues. It seems that you messed up exx' in the pattern reading a bit, so you can't just have an empty row, or skip first or first and second channels. Edited the code to make it work. Also, there is loud clicks in the third channel after notes, unlike the first two.

garvalf wrote:

I see there is this project: https://playground.arduino.cc/Code/ArduZ80
Don't know if it's possible to use the other beeper engines on it!

It's also possible to drive a real z80 from arduino: http://baltazarstudios.com/arduino-zilog-z80/

I looked into this before. Unfortunately, ArduZ80 is not usable at all. It is incomplete, misses hundreds of opcodes, even some widely used documented ones, does not have any time tracking (very important for beeper uses), and is written in C, so likely not fast enough even in such incomplete form.

Hooking up actual Z80 does not make much sense to the original purpose - a beeper sound card. Z80 emulation on Arduino was considered to make device more accessible, reduce number of components and eliminate need of having EPROM burner. Otherwise you can just design the device with actual Z80, it just adds a few more logic chips (~10 chips total), and you need to program the boot ROM.

Still hope we'll do a full blown Z80 emulation with AY format player on Arduino eventually.

335

(15 replies, posted in Sinclair)

A smaller event with ZX beeper compo - Di Halt 2018 Lite. That's the little brother of the summer DI Halt. Deadline is around January 4th.

A 32-bit platform with horsepower of few dozens of Spectrums isn't really that interesting - it is too powerful. You can just play PCM audio on it, or tracker modules, or emulate whatever soundchip, all through 1-bit DAC.

As I never ever heard of it before seeing this post, I can imagine it going to be difficult to obtain as well. In general, it could be interesting to someone, but it falls to the same category as the fakebit VSTs and Arduino developments, just much less accessible than that.

Pi-R Squared has interesting sound. It may be the Savage engine (not too sure), considering there is Jas C. Brooke in the credits, but the noise sounds unusual. There is a scroller running along the music, too.

338

(20 replies, posted in Sinclair)

Here is rough outline how the second approach could work. It needs to have IM2 interrupts and HALT before a new game frame. Does not matter if there is few TV frames per game frame, but more constant CPU load time is preferred, to avoid major variations of the sound bursts duration.

Once program needs to perform HALT, it rather calls HALT_SE.

HALT_SE:
restore all registers required for sound/music generation
LOOP:
generate sound, needs to be the usual short loop
scf
BREAK=$
ccf
jp nc,LOOP
restore ccf opcode at BREAK
store back all registers, the point is to be able to smoothly resume sound generation during next call
ret


IM2 interrupt should just replace ccf at BREAK with nop, thus breaking the sound generation loop (could be any other way).

339

(20 replies, posted in Sinclair)

We're explored a lot in the area of stand alone beeper music, one that takes nearly all CPU time, but only scratched the surface of the music that plays along some action on the screen. Could be interesting to try this out too. Here is my thoughts.

Early ZX games often were attempting to play some music alongside the gameplay - for example, Antics or Manic Miner.

There is three methods to play beeper music during gameplay.

First is to just put a very short duration beep after each frame. Causes major slowdown to the game and staccato sounding music, but with relatively clean sound.

Second, very often employed to play sound effects, is to play short duration beeps and noises during leftover time of a TV frame, instead of HALT, sound loop stopped with a new interrupt. It introduces major 50 Hz buzz, but no slowdown. Requires to have enough leftover time, though.

Third, I think is the most obscure one, is applicable to games where frame time is evenly distributed around some nearly constant-time process (rendering usually), so they can call sound routine a number of times per frame with mostly constant pace. That likely would suit well for multicolor engines such as Nirvana. They can have a short sample buffer, prepared outside the raster, then read and output value from the buffer to #FE each N scanlines (very low sample rate, but may work for some cases).


The result in existing old games, I think, almost unversally could be described as 'annoying'. But I don't think that's just because of some general issue with the idea itself, rather with poor execution. Most games with in-game music use monophonic single beeps, single simplest timbre (square), combined with poor music (mostly crude renditions of classics), mostly without any pauses (constant beeps/buzz), no dynamics at all. If either or both of the issues (tech and composition) will be improved, the result should become much more pleasant.

i don't think polyphony is a must, as my practice (yet to be released) with PC Speaker shown that it is very well possible to pull quite impressive illusion of multiple voices with proper authoring tools (easy multiple-to-single channel voice management) and composing. Nice to have anyways, if possible.

Timbre/tone control would help greatly, especially pseudo volume control - it would bring the dynamics, and timbre control would help with sound variety. Noise generator would improve the percussion too, even though PC Speaker experience shows that even square tone alone is enough to make a good rythm parts.

Proper composition of new original music, with good variety and dynamics, is of course would bring the greatest improvement to the matter.

To avoid mixing up the stuff in the next gen engine thread or scattering it around, collecting all info here:


There is a few games with seemingly unique engines that weren't used anywhere else. What they has in common is the strong vibrato on the tone channel, which I think is underexplored area in modern engines.

Saboteur and Sigma 7 engines has one tone channel and noise drums, Sigma 7 also has phasing effects going on the tone channel.

Galaxy Force has two channels of tone and noise drums. The second channel sounds somewhat like ZX-10.

Another game that seemingly has the same weird and rare engine as Galaxy Force - Count Duckula. The same year, but seems that it has totally different authors.


Another unique sounding engine that does not seem to be used anywhere else is in the game Transmutter.

341

(135 replies, posted in Sinclair)

I thought we had one, but I wasn't able to locate, and this one has my post with mention of Galaxy Force and few other interesting old engines. Better to split it to a separate thread anyways.

342

(135 replies, posted in Sinclair)

Another game that seemingly has the same weird and rare engine as Galaxy Force - Count Duckula. The same year, but seems that it has totally different authors.

I was totally sure 3 was Wham. It sounds exactly like Wham, pure square, the carrier hiss, the echo trick at the beginning. Then the drums kick in, typical LS ones. Maybe it is the third version of his engine? Going to investigate.

Edit: more likely that's the first LS engine, or maybe an engine that inspired Lyndon to make his own (music credited for Barry Leitch). Main sound loop looks very similar to Wham, but with some changes in registers usage.

344

(51 replies, posted in Sinclair)

I'm on Windows 7 x64.

Tried it few more times, there was no crash, but the app remains in the processes. Maybe this help to locate the issue.

345

(51 replies, posted in Sinclair)

Great stuff, more the merrier, especially with new ideas on tracker internal architectures and UI design.

One bug report so far - when I closed program, Windows error occured, 'the program was stopped, close it?' (not sure how it is in english, I'm on localized Windows).

346

(7 replies, posted in Sinclair)

Yes, import function is part of each engine script, frontend only provides file selection dialog. I just reused the same import function over and over again, as it was designed for Phaser3.

347

(22 replies, posted in Sinclair)

Default settings for drum is 20 (slide) and 2 (pitch).

On a side note, yeah, there is a little mess with lack of zero value in 1tracker. I didn't thought it could be important when I started the project, now it would be quite difficult to add it, all engine scripts would need a fix to support that. But I'll get to it eventually, as it makes things more obvious (0 to disable something).

348

(164 replies, posted in Sinclair)

No callbacks there, that's just a basic player library, after all. The only way to get actual play position is to hook up to the emulated RAM in GME, which likely will require to customize its code. Engine scripts then could have a special callback that would watch for specific RAM addresses and translate them into position to display, in a way specific for each engine and engine script.

349

(164 replies, posted in Sinclair)

Vortex Tracker II actually needs an alternative (there is few already, but not very popular). The reason is that VT2 basically a Pro Tracker 3 (Zx Spectrum's) clone, limited by its original, slightly expanded format. While it is really good for music in general, there were even better formats on ZX (ASC Sound Master, for one), and there is also specific requirements for music in games that needs it to be as compact as possible, but PT3 format isn't much effective in this regard (a song takes 5K easily). There is no need to replace VTII, but providing alternative to handle specific cases would be nice.

Cursor following song while it is playing would be pretty convinient, but unfortunately it is pretty tricky (not impossible) to implement it due to the multi-engine concept itself. Tracker would need to somehow get actual playing position, but that needs to be reported by each engine, and not all engines actually use rows and speed concept internally (some just store delays between events). Another idea is to just move cursor approximately, depending on play time, but this needs very precise speed-to-time translation, which is again very tricky, because beeper engines tend to have major tempo fluctuations. So yes, at the time being we have to live without it.

350

(37 replies, posted in Other Platforms)

Yeah, good luck with all that.