226

(164 replies, posted in Sinclair)

Sure, but this is done on per-engine basis, so no quick fix. Some engines do break long lines, while others (Tritone Digi?) not. Will handle this a bit later.

227

(12 replies, posted in General Discussion)

All Tritone songs before Beepola were made with the XM converter. Some of them still made with the converter, because it gives the super speed capability (to imitate arpeggios and slides).

228

(35 replies, posted in Other Platforms)

A ton of distractions happened since, but English translation of the making of the demo is finally here: https://habr.com/ru/post/486010/

I'm not much familiar with the Savage code, and it is super convoluted to figure it out at quick glance, but it looks like it relies to IM2 handler a lot. Simply removing it certainly won't work. The engine can be rewritten (recreated) to work without interrupts, I think, but it is more like making a new engine from scratch than a simple edit.

230

(5 replies, posted in Other Platforms)

Now not 1-bit, but ZX Spectrum related - I made a PT3 player (with AY emulation) that plays files loaded into the internal memory. Cool thing about ESP8266 is that you can load these files over Wi-Fi. Forum thread.

231

(5 replies, posted in Other Platforms)

As a first step, I ported over my PC Speaker album System Beeps. Due to the nature of the platform it comes in form of source code (for regular Arduino IDE). More info on the official forum.

232

(5 replies, posted in Other Platforms)

ESPboy is an open source DIY handheld, kind of Arduboy, but powered with 32-bit ESP8266, and with a color screen. For sound it only features 1-bit piezo on the board (maybe will be replaced with a tiny speaker in further revisions), controlled via GPIO line. The creator of the thing asked me to help with the sound code, his intent is to bring ZX Spectrum beeper music to the platform. So I'll be porting some engines (Phaser1 is ported as proof of concept at the moment). Thought it may be interesting to some folks here.

More info on the device:

https://hackaday.io/project/164830-espb … cation-fun
http://community.espboy.com/

233

(1 replies, posted in Sinclair)

I'm pretty sure that ZOSYA is in fact Oleg Origin undercover (and it is not clear whether he is really an actual person, too). Oleg is known for disassembling a good amount of better classic engines back in 2012, such as Trantor and Dark Fusion, as well as making a few new ones, but he never released the source to those. Sounds much like one of the latter.

Not BuzzKick for sure.

234

(5 replies, posted in Sinclair)

Sounds legit, would be at home in a pre-1985 ZX game.

You don't really need to hand tune pitch values, just use any script engine to calculate them out. JS, Python, etc.

Then, if you go with composing by typing in the pitch values, you don't have to have a spreadsheet. Just make aliases, like C_2=100 (or C_2 equ 100 in some assemblers). Now you can just use note names in your db's.

Then, to save time, you can just generate both pitch values and aliases with the same script, and save a ton of time. You can do this with https://js.do/, for example. Just go there, copy/paste code below, click Run.

<script>

    //standart note table for a high octave

    NoteFreqTable=new Array( 2093.0,2217.4,2349.2,2489.0,2637.0,2793.8,2960.0,3136.0,3322.4,3520.0,3729.2,3951.0 );

    NoteNameTable=new Array("C_","Cs","D_","Ds","E_","F_","Fs","G_","Gs","A_","As","B_");
    
    //generate note to period table

    cpuClock=3500000.0;
    cpuToneLoop=200.0;    //cycles per engine loop
    div=32.0;

    for(octave=0;octave<8;++octave)
    {
        for(note=0;note<12;++note)
        {
            period=Math.floor((cpuClock/(cpuToneLoop/2.0))/(NoteFreqTable[note]/div));

            document.write(NoteNameTable[note]+octave+" equ "+period+"<br>");
        }

        div=div/2;
    }

</script>

235

(21 replies, posted in Sinclair)

Did a small song using actual wtbeep engine, for CAFe 2019: https://soundcloud.com/shiru1bit/falling-asleep

236

(135 replies, posted in Sinclair)

The super fine volume/duty effect is certainly real and can be used, that's what I was referring to as having potential (will do something in this regard a bit later).

As for harmonics, yes, I suspect most of it comes from the downsampling filter in emulators, seems to be some unwanted oscillation at high frequencies. Still not clear if there is more to it.

237

(135 replies, posted in Sinclair)

Yeah, seems this technique has potential that is worth to explore further.

For now, the same thing with two channels and slides, demonstrates tons of harmonics.

238

(135 replies, posted in Sinclair)

I suspect I'm actually rehashing some old idea, just been experimenting with the phase shift to control volumes yet again. This snippet produces interesting harmonics as the volume rises very smoothly:

    ld hl,0
    ld bc,1200    ;frequency
    ld ix,0
    ld a,0
    
loop1
    ld d,0
loop

    add hl,bc
    jp nc,$+5
    xor 16
    add ix,bc
    jp nc,$+4
    xor a
    
    out (#fe),a
    
    inc d
    jp nz,loop
    
    inc hl   ;slowly increase the volume
    
    jp loop

Volume control here is made of two 16-bit adders that get the same 16-bit value added (3 register pairs per oscillator). The first one inverts the phase, the second one resets it. Volume controlled by the distance between initial values of the adders.

239

(5 replies, posted in Sinclair)

Great work! Having fading noise going on alongside the tone channels definitely brings a new quality into the sound, making it closer to a sound chip of sorts.

Yes, something of this kind is certainly in my plains, with use of all the 1-bit VSTs and some of the old engines, too.

241

(0 replies, posted in Other Platforms)

If you ever interested about making music using a modern Android phone/tablet, you probably know one of the best mobile DAWs out there, Caustic 3. Not terribly powerful compared to desktop DAWs, but very solid, packed with great synths that cover up nearly all synthesis methods imaginable, and the UI is impressively useable with a touch screen. And it runs even on a dog turd type of devices, I tested it on an old, extremely sluggish 512M tablet, and it was totally useable. The app is not free (save/export disabled in the demo), though, but it is very cheap, and there is a fully functional free desktop PC version, too (hint, you can use it on a W10 tablet).

Now, how it could be useful for our dirty 1-bit deeds. There is a synth in the app called PCMSynth. Basically it is a powerful sample player. Recently I learned that besides of its own custom format it can also load any SF2 files. There is another synth called BeatBox, a sample powered drum machine, that supports loading sounds from regular WAV files.

So we can just get a SF2 pack of beeper tones, and perhaps a set of WAV files for drums (or just the same SF2 through PCMSynth). This could get really handy to prototype some beeper music on a go.

So far I did two SF2 packs and tried to use them, seems to be not too bad at all:

wtbeep
Lyndon Sharp's three engines

Oh my, it's been two years now. Two years of 'I'm too tired today, will get back to a song tomorrow'.

At least a new related thing, sampled all three known engines as a SF2 pack. May come handy in prototyping a song with a modern tool, or to bring up these pretty unique sounds into a modern mix.

243

(21 replies, posted in Sinclair)

In meanwhile, a demo song that shows up these sounds, as well as some of my other 1-bit DAW stuff: https://soundcloud.com/shiru8bit/lost-i … it-version

Detailed info is here: https://www.patreon.com/posts/lost-in-pseudo-1-28964800

244

(21 replies, posted in Sinclair)

This engine continues to fascinate me a lot, and although I haven't released anything made with it yet, I had an idea to sample its sounds into a SoundFont (sf2), to be able to use it in a modern DAW without going full on with writing a custom VST (it would need built-in Z80 emulation, doable, but would take much longer - saved it for later).

May come handy to someone - download here. It is a clean version, no carrier hiss there.

245

(164 replies, posted in Sinclair)

There are various limits, of course, but if a song plays in the tracker, it should be exportable - the tracker creates an AY file internally in order to play the music. So it is some bug, I guess, will take a look soon.

Edit: tested it, the export works fine, TAP plays correctly, so the issue is not confirmed. Update to the latest version, perhaps? (tested in 0.29)

I deal with this kind of feedback since 2007 or so, so yeah. Still difficult to stay cool at times.

A while back, way before I took the VST route, I had a desire to support LMMS, which was the best free FL-style DAW out there. I come to their IRC channel and started to ask questions, like, how to make native plugins, are there people who would want it. They said - nah, do VST instead. So I did eventually, and I guess it has been a good advice, after all.

x64 support is there now. What I love about releasing tons of free stuff that actually worth a fortune in development, is the feedback. Previously it used to be 'oh, but it does not work on my 64-bit system'. Now when I just get this resolved, it turned into both of 'oh, but it is not for Linux', 'oh, but it is not for Mac'.

I'm sure up to making software more accessible and to supporting more platforms, but only if it does not take too much effort/resources that could be otherwise spent to other developments (or to make damn music, I got a dozens of music tools already that I have never used myself). Unfortunately, for VST it is anything but easy. The original framework documentation is exceptionally bad, VST3 is exceptionally over engineered, there is tons of compatibility quirks between hosts, none of numerous VST wrappers out there are easy to setup or use, possibility of hooking up Qt or SDL is a total mystery, etc. No wonder most of VSTs out there were made with the SynthEdit, and you can barely find a properly programmed open source one.

I'm doing a really niche stuff that is barely getting any feedback, and it is a truly demotivating thing. Moving to a niche platform with much lesser user base, especially of the target audience (music producers), that is also happens to have no money to offer (zero job offers for desktop *nix in two decades for me), is a sure way to kill any and all remaining desire to do anything at all. x64 support is just a necessary evil to keep it up now, and it is relatively easy to do.

A true story: in 2002 or so I had to break any interaction with a friend, because he moved to Linux completely (he's a web designer, so GIMP and a text editor was all he needed) and developed a habit of calling me even so often and spend long hours simply repeatedly telling me that I should drop Windows ASAP, and start to program for Linux, because Linux is the new greatest thing in universe and Windows is shit and going to die out soon anyway. This kind of advertising worked very well in alienating me from this stuff up to this day.

Did another VST, this time a thing similar to the generative music from one-line C programs: http://shiru.untergrund.net/files/evalua.zip

This one got x64 support (comes in two versions). It starts to be the main issue with all of my plugins, people are always asking for 64-bit support. So it seems you have to have 64 bit to promote 1 bit technologies these days. Going to update all of my synths to x64 support sometime soon, as well as some maintenance for PCSPE.

250

(20 replies, posted in Sinclair)

cmgonzalez wrote:

Do you have any code example for that obscure solution that you mention?

No, if I had something, I sure would publish it already. At the moment, the only game I can think of that kind of used this approach was Sea Dragon port, where I did beeper effects. It used very crude sample-like effects, like every so often during rendering a frame the game just read a bit from an array and outputted it. As it was 50 hz targeted, rendering speed was relatively steady, thus 'sample rate' was steady enough too. I don't have this code around, and can't really recall how many times per frame the routine was called. I think it was the least possible number, to avoid introducing slowdowns. Maybe 8-16 updates per frame.