Skip to content

Video synthesizer (vsynth) preview #160

@vk2seb

Description

@vk2seb

Overview

vsynth is a (planned) new Tiliqua bitstream which emulates the architecture of an analog video synthesizer, with a few digital oddities. I might change the architecture a bit as this gets closer to being done, but I figured it might be fun to play with in its current form. Specs are:

  • 2 video oscillators (sine with 'fold' shaping)
  • 1 video feedback path with rotation / scale / translate
  • 1 'beam' (stroke-raster converter)
  • 2 video mixers
  • 2 intensity / color keying stages
  • 1 colorizer (whole chain is grayscale, palette colorizes it at the end)

These are hooked up as follows:

     Osc A ──┐
             ├──▶ Mixer 1 ──▶ Key 1 ──┐
     Osc B ──┘                        │
                                      ├──▶ Mixer 2 ──▶ Key 2 ──▶ Colorizer ──▶ OUT
                                      │                  │
          Feedback ─────────────────▶─┘                  │
    (rot/zoom/translate)                                 │
        ▲                                                │
        └──────── reads from framebuffer ────────────────┘
        ▲
        └ BEAM (stroke-raster: writes to feedback buffer)

Each component can be tweaked in the UI to create generative graphics. Some examples:

Image Image

I/O

  • Tiliqua input 0 and 1 are 'x' and 'y' inputs into the BEAM rasterizer, for plotting vectorscope traces onto the screen.
  • Tiliqua input 2 and 3 are 'morph' x and y inputs, these are CV controls which can be used to morph between different graphic presets.
    • Basically you can save 4 'presets', each preset becomes the edge of a square, and you can use these x and y inputs to select a preset or morph anywhere inbetween.
  • Tiliqua outputs 0-3 are CV outputs sampled from the intensity of 4 places on the screen -- meaning the generated shapes can also be used for CV-controlling other moduleds.

Quickstart

The quickest way to get started is:

  • Head over to the PRESET page, select a preset to save your graphics PRESET->slot: usr0/usr1/...
  • Hit the 'PRESET->random' button a bunch of times until you end up with something close to what you want.
  • Adjust the parameters manually until it's closer to what you want.
  • Switch to a different preset PRESET->slot: usr0/usr1/usr2 -- you'll see the display change, but your settings have been saved in the previous slot (in RAM, not in flash). You can always recall it by switching back to it.
  • Once you have set up 4 presets, you can:
    • Save all to flash using PRESET->save-all on the PRESET page.
    • Switch on PRESET->morph to turn on 4-way CV-morphing from inputs 2 and 3
      • Note: when PRESET->morph: Y, you can't manually tweak the video settings any more, you'll instead see all the values changing according to the current CV inputs morph.
  • At any time, you can BEAM->enable the beam rasterizer, which writes vector inputs from input 0 and 1 to the feedback buffer. Note: the BEAM settings are not saved in user presets, they are global.

Flashing

Bitstream archives are attached below. Note: they may take a few seconds to boot, if you previously saved options in that slot. After the first boot and first PRESET->save-all, it should be much faster to boot.

Flashing instructions are here, use the webflasher or the CLI, whatever you like.

NOTE: these bitstreams are pushing the memory clock to the edge in the interests of maximizing framerate. It's possible it won't boot on some devices, although I haven't seen this. If this bitstream doesn't boot on your device, let me know and I'll attach another one with slower clocks.

TODO (not done yet)

  • Some kind of 'preset copy' mechanism to copy existing presets into different slots. This will be useful for doing morphs between specific parameters instead of completely different presets.
  • Make the colorizer gradually morph between pallettes instead of hard cut.
  • Preset 'scenes', so we can store a number of 4-preset scenes, instead of just one.
  • MIDI control of all parameters and morphing
  • Code: not release yet, as it is not up to the rest of the repository's standards. It touches a lot of other components in the repository which could break other bitstreams, so I need to figure out how to refactor things for a clean merge. Maybe even vsynth could live out-of-tree (i.e still open source but in its own repository), given how much stuff it touches. I need to figure this out.

Comments

If you are having any trouble with this bitstream or have any ideas, feel free to comment below! Eventually I'd like to promote it to one of the factory bitstreams.

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions