The possible next generation of demoscene 64k softsynths (Revision)

By Henrik Nordvik on Mon 09 April 2012 in misc.

This is a transcription of this video from Revision 2012.

Requirements for a 64k synth

  • small
  • flexible
  • somewhat usable

The Idea: Runtime Code Generation

  • Theory
    • Write synths & effects, hear changes instantly
    • JIT compiler in editor, store compiled data in intro
    • your synth is no longer limited to your own dsp routines
    • host language independently (?)
  • Implementation Challenges

    • How to implement this in my synth?
    • How to make this usable for non-coders?
    • Instansing
    • When writing runtime code, you want to contentrate on the good parts
  • Implementation: Compiler (bero)

    • designed a language (aulan)
    • supports integer, boolean, float, arrays, structs, functions, procedures, pointers, inline asm
      • translates to assmebler/native code
    • special feature: instance variables
    • language features:
      • mixture of basic, pascal and c
      • newline = end of block statement
    • compile to native code and links during runtime (Editor)
    • in your intro:
      • use generated assembly files
      • use bero's runtime linker code for object files as constant byte arrays etc.
      • use your normal linker if it supports COFF

Lets take a look at synth design

  • a (64k) synth has multiple layers
    • Voice layer
      • code that gets executed per active note
      • classic synth: fixed pipeline
      • most timecritical code
    • Channel Layer
      • code that processes the sum of all active notes of a single instrument
    • Global Layer
      • code that processes the output multiple instruments
      • e.g. sendto-effects, mastering chain
      • example: Buzz - generator & effect concept

Fixed Pipeline vs Dynamic Pipeline

  • Fixed Pipeline
    • A good fixed pipeline can be very versatile
    • It's small
    • Drawback: you need a good fixed pipeline (ask your musician :-)
    • global hardcoded effect-chain / sendto-effects
  • Dynamic pipeline
    • not all "modular" synths provide modularity on each level (like Buzz)
    • if done on voice level:
      • allows more complex synth patches
      • more implementation
        • the more granular, the more complex
    • GUIs for modular synths either require a bit of work or they are slightly challenging to use
    • custom mastering/effect chain for free
  • Hybrid / Semi-Dynamic pipeline
    • Some parts static, some parts dynamic

Parameter Automation / Envelopes

  • WOBWOBWOBWOBWOBWOBWOBWOBWOBWOBWOBWOB
  • very important to make instruments sound "alive"
  • Different approaches:
    • Modulation matrix (fixed pipeline)
    • modular: e.g. node based, operator stacking
    • LFO with fixed targets as volume, filter, pitch
  • if you implement this wrong:
    • bad performance

The Synth

  • What is it?
    • Concept blatantly stolen from buzz
    • You create machines, write code for thm
    • machines can be assigned to a midi channel
    • variables can be exported as parameters
    • parameters can be bound to midi-controllers

comments powered by Disqus

Recent posts

View all posts