376

(164 replies, posted in Sinclair)

v0.26 is up. Much faster Z80 assembler (in AngelScript), still not as fast as any native would be, but work gets more comfortable. Many minor fixes as well.

377

(135 replies, posted in Sinclair)

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 as two channels of tone noise drums. The second channel sounds somewhat like ZX-10.

Maybe we could somehow exploit the saw/triangle generator for vibrato? Triangle should be good enough for this use. Should be easier than FM, too.

378

(164 replies, posted in Sinclair)

v0.25 is out of WIP. Now powered with SDL2, which supposedly solves some issues. For one, it now switches to the fullscreen and back blazing fast under Windows, unlike the old version. It also brings separate files for fonts (which is now 1-bit) and color schemes, and a pile of the font and color scheme files to look pretty and provide flexibility regarding screen sizes. It seemignly compiles fine under Ubuntu without editing the code, just by 'make' command (given SDL2 installed, not sure about AngelScrpit). I accidentally Pytha engine, too.

379

(164 replies, posted in Sinclair)

The window can be of any resolution.It is kind of a pseudo text mode, customizeable through the config file (width and height in text characters), and the font.bmp. Smaller font graphics, smaller window; different aspect ratio of the characters also takes effect. The defaults is done for 1920x1080.

Actually, I probably should add a few fonts and selection through the config file, for better convinience.

380

(164 replies, posted in Sinclair)

No, the idea of the changes in file structure and makefile was to compile and link AngelScript as part of the program, directly through object files, not as a lib.

Migrating to SDL2 is actually a good idea, I had a few SDL2 projects done, so will put it to plans. It just happened that the program does not really needed things that SDL2 has to offer, so I kept it plain SDL so far.

The display issue is really weird, as I don't have it neither under Windows nor under Linux. The construct is for normal view, it aligns the scrolling for blocks properly. My only guess is that it is some unitialized variable or getting out of bounds, althogh considering proper results in two very different environments, I'd expect the issue to be more exposed. Also, row < 24 means it is somehwere in the scrolling logic, as it is half of the pattern view height, the position to keep cursor line once scrolling starts. I'll think more about it.

381

(164 replies, posted in Sinclair)

So, tried to mess up with Ubuntu under VirtualBox, and got really weird results. Here is WIP source for 0.25: http://shiru.untergrund.net/temp1/1tracker_src.zip

I tried to reogranize files to simplify build process. Just 'make' it, and it should be enough (I only had to also 'sudo apt-get install libsdl-dev').

Weirdities:

- The program does not start if JIT is enabled in the config file (closes window right away)
- The program works without JIT, but produces no sound and occasionally reports missing data
- File dialog allows me to browse everywhere, just like under Windows. No changes has been made to the code

Please take a look, is the behaviour the same on your system?

382

(164 replies, posted in Sinclair)

The first = is a bug, I normally don't use such unsafe constructions (apart from a piece related to dirent code).

Yes, I think it going to work if the line will be disabled in the chopped view. I'm trying to compile it under Linux at the moment, to look into directory navigation issue. Not sure if I'll be able to fix that part, but will put an updated version soon anyway, with the display fix at least.

383

(164 replies, posted in Sinclair)

What does the filebrowser show at the bottom of the screen, where full current path is supposed to be displayed? Is the directories above executable actually seen there? I don't know much of Linux, maybe some permissions/security stuff is involved?

The second bug is very weird, definitely don't have anything like that here. Will think over it. Maybe I need to setup a virtual machine and see it by myself, after all.

384

(164 replies, posted in Sinclair)

1tracker got an update. No new engines this time, sorry. Instead, I tried another improvement to the 'single pattern' concept, that is called 'chopped view'. When it is enabled through the new alternative menu (hold Ctrl to see it), only current block is displayed starting from the top of the screen, like a separate pattern. I hope that obstructing visibility of other blocks should help to focus attention on current block, and make it more comfortable to work in case of short blocks (less scrolling). If you split your song into blocks of 16 or 32 lines, it will work similar to the traditional pattern/order list view in a way.

Linux users, please let me know what changes this version needs in order to compile it. Hopefully less changes will be needed this time. I also just noticed that dirent.h had a wrong include path, docs say it should be there, so file dialogs should work properly.

Thanks a lot for the write-up, now I get how it works. Pretty clever and cool stuff. 1-bit synthesis findings still able to amaze me, after so many engines and years.

386

(22 replies, posted in Sinclair)

Now that's some black magic is going on here.

387

(10 replies, posted in Sinclair)

I didn't have enough time yet to devote it to this idea, but I'm definitely want to work on it sometime.

You would need to spend most of the CPU time on both machines to run the MIDI protocol, as Spectrum does not have hardware serial I/O.

Really great video, was very interesting to watch.

Never was able to make my TI calc connect to PC, and it eventually bricked out on its own by just laying around (not powering on no matter what), so I never was able to see the thing in action. As I understand from the docs, the only way of data exchange in HT2 is the save states, i.e. loading/saving snapshot back and forth by the OS/linking software means. However, as the tracker naturally uses the I/O port as an audio output, it could be also used for a 'tape save' routine to store songs data to an external media (any modern audio recording device) quite easily. Such feature could be handy for frequent backup purposes.

Minor update to the 1bitstudio. All plugins now support Program Change event to switch between presets, also support preset name edits. phasesynth got extra oscillator mode, pin pulse in addition to the square/pulse wave.

Another different, but a bit related thing - VT2i. This is AY-3-8910 emulator combined with Vortex Tracker II instruments system. I.e. you can just load VT2 sample and ornament files and use them with a modern DAW.

392

(135 replies, posted in Sinclair)

Thinking on the 1-bit SuperSaw on ZX and messing up with assembly code a bit, I tried this thing. The idea behind it is the early electronic orgrans that used frequency dividers to form sound registers. So only one real counter here. Can't remember if we ever used something like this?

    ld hl,0
    ld de,400
    
loop
    
    add hl,de
    ld a,h
    cp #80    ;duty 1
    sbc a,a
    out (#fe),a

    push hl
    
    add hl,hl
    ld a,h
    cp #80   ;duty 2
    sbc a,a
    out (#fe),a
    
    add hl,hl
    ld a,h
    cp #80   ;duty 3
    sbc a,a
    out (#fe),a
    
    pop hl
    jp loop

This is one channel with 16-bit adder, the usual idea with duty cycle control like in Tritone. The trick is to generate a number of octave doubled derivatives (phase synced, though) by multiplying the adder by 2 (adding the adder to itself) a few times, two in this example. It adds octave doubles to the sound. Interesting thing is that the three duty cycles kind of have a limited control on the strength of the octave harmonics.

Another thing is that just applying a few duty checks to single unchanged adder also affects the timbre in a way:

    add hl,de
    ld a,h
    cp #80
    sbc a,a
    out (#fe),a

    ld a,h
    cp #08
    sbc a,a
    out (#fe),a

The principial issue with a single oscillator that would produce detuned derivatives is the phase sync, I think. For now I see no way to produce detuned copies with their own phase (phases interference is what creates the effect), you'd need an unique counter to store the phase anyway. To me it seems that all possible approaches that adds/subs something constant to the main osc would produce fully synced (constant relation) phase, thus no effect.

Well, basically that's what Mister Beep always doing in his 8-channel songs for bass, to increase its strength - a few voices of slightly detuned copies of the same bassline. Just pushed way further, like all 8-16 channels set up to do this thing automatically. So a basic version can be done on the Octode (narrow pin wave) or Squeaker (square wave) base, but for more interesting results more channels (CPU power) is needed.

Added yet another synth to the 1bitstudio - phatsynth. It is based on the idea of JP8000's SuperSaw, just in 1-bit. Was just an experiment, but the results were quite interesting. It can generate a pack of square/pulse/pin voices, up to 16, detuned around the base frequency, with controllable duty/pulse width, phase reset, etc. The number of voices works kind of resonant filter at times. Velocity can be targeted to many of the parameters besides the volume, it is useful here to create controllable changes in sound.

And now something different, but related. I never was able to find a VSTi arpeggiator that would work with any MIDI synth and allow to create true chiptine arpeggios. There are MIDI arpeggiators out there, but they're targeted to trance and such styles, taking an arpeggio pattern designed in the program itself, then playing it relatively slow as a sequence on note on/offs, thus creating major buzz, and sounding nothing like chiptune arpeggios. I also seen that people imitate chiptune arpeggios in MIDI using tons of manual pitch bend automation edits. So I made a chiptune VSTi arpeggiator - ChipArp. It designed to work best with the 1bitstudio synths, because all of them support any reasonable pitch bend ranges, unlike other synths that often limited to two octaves, if properly supports the pitch bendrange RPNs at all. ChipArp just takes normal chords as input, so no learning of quirky editors or messing with 0-4-7 etc numbers is required.

Tested with Reaper only. Should work in any VST host that supports MIDI in/out type of VSTi plugins, i.e. where all 'traditional' VST arpeggiators will work (Psycle does not support them, for example). It may work with other VSTi synths than ones from 1bitstudio, but so far I found only one that actually supports pitch bend in a way that is usable for arpeggios.

Download ChipArp

Yeah, I wanted to do some updates for a long time, just having lots of other things to do, and this one always had lower priority until now.


While I'm on it, I did more updates, mostly focused on adding more colors to the sound palette.

'sweepsynth' has been added. It allows to imitate a wide range of 1-bit sounds, including Music Studio, Lyndon Sharp's engine, ZX-10, as well as Octode (in its thin and fat versions) and Huby. It basically just sweeps the pulse width.

'tndrums' got improvements to the tone generation. Now it allows to generate not just square wave, but pulse wave of any duty cycle, or 'pin' wave. This helps to create the very pronounced drums like Music Studio has.

'pulsesynth' got an option to compensate the QChan-like weak low end by varying the pulse width depending on the note, similar to what SpecialFX engine does.

'noisesynth' has been added. It is kind of Phaser1 that uses a pair of customizeable pseudo random generators instead of square tone. This allows to create a range of harsh, metallic, and glitchy sounds, including an FM 'electic guitar' alike. This design can be actually used for an ZX Spectrum engine, I think.

The bundle got an (long awaited by myself) update. Internal preset saving system has been reworked to a more flexible one that allows adding more parameters in the future. Legacy data still supported to (hopefully) avoid breaking older compositions, if any has been made. This allowed to add more features to the synths, such as various mixing modes (basic addition, OR/XOR for polyphonic distortions), optional note cut (to play staccato easily), velocity targeting to various parameters. Also MIDI modulation has been implemented in all synths.

399

(135 replies, posted in Sinclair)

A random idea for an engine - basic 1-bit speech synthesizer (like ones that Mister Beep used in some intros to his songs) designed to make music. Something like that: one channel for variable pitch one-shot and looped samples for consonants and vowels, another channel for tone (Phaser-like maybe) and non-interrupting drums (slide based, optional noise). Besides vowels, some basic looped waveforms could be used to create musical parts on the first channel.

As for controls, something like AlterEgo, but simplifed. Like, array of strings of syllable-separated transcription of the text, automatically loops on the vowels, advances to the next syllable (and pitch) with a new note.

utz, MIDI shield is just a level translator/optocoupler, it actually works as RS-232 on the Arduino side, all messages decoded in software. The schematics above is pretty much it, sans the buttons and MIDI out (which is just socket and pair of resistors). Actually I have all needed parts (optocoupler is the least common of them, but easily obtainable), so in case I'll need MIDI shield, it is easier to just make one.

PROTODOME, wow, your project sounds really cool, and has a great showcase. You should totally share the stuff on it.


Alright, so I guess we should move into the MIDI-driven synth direction then. I also know there is PC software that can redirect MIDI messages into COM port for Arduino, so no extra hardware is needed. There is also a way to reflash some of Arduino's to appear as a USB MIDI device (like Teensy, but on normal Arduino boards with custom firmware). So we have plently options to do it in hardware. And for software, VSTi Arduino emulator is possible, and can be made eventually, to make things even more accessible, without turning them into something completely virtual.