Showing posts with label Synthesis. Show all posts
Showing posts with label Synthesis. Show all posts

Monday, May 27, 2024

Synth Microprocessor Applications

Something people forget is how much was done with so little compute power in the early days of the digital synth and how powerful modern microprocessors have become today. Rough order of performance from top to bottom.

[edit] 20240607 Thanks to all the comments and suggestions from r/synthdiy. Added Ksoloti Core rev 0.5/Axoloti Core rev 1.2 which are both 168MHz STM32's.

Microprocessor Cores CPU Speed (MHz) Application Description
Snapdragon X Elite 12 Up to 3800 Copilot+PC 12-core Oryon CPU, 4nm process
Apple M1 8 Up to 3200 Mac Mini,
MacBookAir/Pro,
iPad Pro,
iPad Air
8-core CPU
4 performance
4 efficiency cores
5nm process
Intel Core i3-1115G4 2/4 1.7-3.0 GHz base
4100 turbo
Ableton Push 3 Dual Core Hyperthread
Apple A10X Bionic 6 Up to 2380 iPad Pro (2nd gen) 6-core CPU
3 high-performance Hurricane cores and
3 energy-efficient Zephyr cores
10 nm process
Raspberry Pi 5B 4 2400 ARM Cortex A76 @2.4GHz
Raspberry Pi 4B 4 1800 Korg Opsix Mk2,
Wavestate Mk2,
Modwave Mk2
ARM Cortex-A72 (ARM v8)
64-bit SoC at 1.8GHz
ARM? 4 1800
MPC Live/2/One/+/X
MPC 61/MPC X SE
1.8GHz quad-core
2GB RAM
4GB RAM
VisionFive 2 4 1500 RISC V starFive Jk 1110 64bit SOC
with RV64GC, up to 1.5GHz
Raspberry Pi 3B 4 1200 Korg Opsix,Wavestate,
Modwave,MonomeNorns
Critter&GuitariOrganelle
ARM Cortex-A53 SoC processor
running at 1.2 GHz,
Atom D510 2 1660 Korg Kronos x86 standard Intel D510MO motherboard
with a dual-core Atom D510 at 1.66GHz.
Raspberry Pi Zero 2W 4 1000 ARM Cortex-A53 CPU at 1GHz.
Raspberry Pi Zero W 1 1000 Mini Dexed 1GHz ARM11 single core
Teensy 4.1 1 600 M8 Trakcer, ARM Cortex-M7
Daisy DSP
(Cortex-M7)
1 480 Daisy DSP ARM Cortex-M7 MCU
running at 480MHz
Renesas RZ/A1L 1 400 Synthstrom
Deluge
ARM Cortex-A9 core
running at 400MHz
with 3MB of on-chip SRAM
ESP32 2 Up to 240 Woovebox Tensilica Xtensa LX6
Raspberry Pi Pico 2 Up to 133 pikoCore, zeptoCore ARM Cortex-M0+ Dual-core
STM32F446ZET6 1 180 Korg NTS-1 ARM Cortex-M4 core
Teensy 3.6 1 180 MicroDexed,
MicroDexed Touch
ARM Cortex-M4F
STM32F427/429
STM32F427
1 168 Ksoloti Core rev 0.5
Axoloti Core rev 1.2
STM32F429ZGT6
ARM Cortex-M4 core
DSP563xx 1/2


5/8
upto 150 Virus A/B/C/TI/TI2
Waldorf MicroQ
Nord Lead3/Modular
Korg MS2000/Microkorg
NovationNova/Supernova
24bit DSP
Adafruit NeoTrellis M4 1 120 Adafruit NeoTrellis M4 with
Enclosure and Buttons Kit Pack
ARM Cortex-M4 Single Core 120Mhz
ArduinoDue 1 84 Linnstrument ARM Cortex-M3 Single Core 84Mhz
STM32l476VGT6
(or 475)
1 80 Plinky ARM Cortex-M4
STM32 Blue Pill 1 Up to 72 ARM Cortex-M3
Arduino UNO R4 1 48 ARM Cortex-M4 microprocessor
and a 16-fold increase in memory 32-bit
Spin Semiconductor FV-1 DSP 2? 33.55 Various Effect Pedals Parallel Processing DSP
sample rate at 32.768 KHz.t
ATmega328 1 8/16 ATmega328
Motorola 68000 1 7 to 25 Yamaha TX16W
Akai MPC 60?
Amiga/AtariST/Mac
16/32bit
YM21290 EGS "envelope" chip
YM212805 OPS "operator" chip
1 2 Yamaha DX7 Generated frequency+envelope data
Generated sound waveforms
I think the chips were about 2Mhz
SID 6581 1 1 Various Hardware Interfaces
Various Software Emulations
Commodore 64
Three oscillators
Four distinct waveforms per audio oscillator
One multi mode filter
Three ADSR volume envelopes
Three ring modulators
Oscillator sync for each oscillator
Two 8-bit ADC
External audio input
Random number/modulation generator
I think the chips were about 1Mhz

Tuesday, January 10, 2023

Korg Product Synthesis History

I am not sure about you but I have always found the product line of Korg a bit confusing with all the legacy synthesis tech, hardware and VST. It is a bit of a multi dimensional problem of time, development and an evolutionary tree with dead branches and multiple examples of past and present implementations. 

To get my head around this challenge, I cleaned up the Korg product list (Wikipedia) into a spreadsheet and then classified the major synth releases.  At this stage, I have not addressed minor synths, arrangers, grooveboxes, drum machines, samplers, etc and just limited the major recognisable synths and workstations.

I came up with the below table and my summary of the Korg product history.

The tldr.

Korg produced a line of analogy hardware synths from 1973 to 1985 when they pivoted into digital analog synths briefly,  perhaps playing catch up to their contemporaries like Roland or biding time while they worked on the killer rompler M1 and invented the workstation. 

The launch tempo seemed to slow in this second decade from a 3 years to 5 years between each major update. I have highlighted what I see as major products (in RED in the spreadsheet) as to what I see as the pulse of product release. 

Korg also innovated in the early days of romplers with vector/wave sequencing and waveshaping but then focused more on interactively improving polyphony and samples as technology allowed. 

In the mid 90's they remember their analog roots by adding the MOSS option to the Trinity, Triton and Karma. They upped this tech into MMT in the MicroKorg and Radias/R3. The advent of the Oasys computer in a synth was not only (the first?) multi-engine synth but cross-developed into VST with the launch of the Korg Collection.

Synthesis and Implementation

This leaves Korg with eight main streams of synthesis and three implementation streams.

Synthesis

Analog/VA Modelled - legacy hardware synths modelled in digital hardware and software.

DWGS (Digital Wave Generation System) - a brief dabble into complex waveform digital oscillators.  

PCM Wave (Romplers) - mostly retired hardware iteratively replaced by the current generation of hardware with software implementation of key models. A few PCM based experiments like Wavestation, 01/w and later Wavestate/Modwave.  

MOSS (Multi-Oscillator Synthesis System) -  tone generator with six-voice polyphony. The MOSS tone generator is a physical modelling tone generator that uses Sondius-XG (http://www.sondius.xg.com dead link, is this now SWAM tech?)  technology. MOSS physical modelling tone generators were developed under licence/patented works owned by Stanford University USA and Yamaha Corporation

  • Standard - simulates the oscillator of an analog synthesizer.
  • Comb Filter - This oscillator creates pitched components from noise or an impulse.
  • VPM (Variable Phase Modulation) - This oscillator uses phase modulation to generate harmonics.
  • Resonance -  uses filter resonance to produce mallet sounds and pad sounds.
  • Ring/Cross/Sync Modulation - oscillators for generating the sounds which could be produced on an analog synthesizer by modulating one oscillator with another. 
  • Organ Model - This simulates a drawbar organ with three drawbars (when one oscillator is used) or six drawbars (when two oscillators are used) (☞page 23 of this manual).
  • E. Piano Model (electric piano model) - a physical model that simulates a vintage electric piano.
  • Brass Model -  a physical model that simulates a brass instrument such as a trumpet or trombone. 
  • Reed Model - a physical model that simulates a woodwind instrument such as a sax or flute. 
  • Plucked String Model -  a physical model simulating plucked string instruments eg guitar, bass.
  • Bowed String Model - This is a physical model that simulates a bowed string.

MMT (Multiple-Modelling-Technology) - A total of nine oscillator algorithms including for (OCS1) four conventional analog synthesizer waveforms (sine, triangle, square, and sawtooth), digital synthesizer PCM waveforms, digital drum PCM waveforms, formant, noise, and an external audio signal. (OSC2) lets you choose the four different oscillator waveforms. There is also a vocoder.

  • sine, triangle, square, and sawtooth - with cross, unison and VPM modulation
  • digital synthesizer PCM waveforms
  • drum PCM waveforms
  • formant
  • noise
  • external audio signal.

VPM (Variable Phase Modulation) - VPM refers to Korg’s patented contributions (needs references, expired?) to Frequency Modulation (FM) synthesis;  and has been used since the early 4op Yamaha chips days, to more recent MOSS/MMT VA synths. MOD‐7 is a semi‐modular synth engine combining VPM, waveshaping, ring modulation, PCM sample playback, and subtractive synthesis. The MOD‐7 produces everything from classic FM keyboards and to rhythmic soundscapes. Initially developed for the Oasys and Kronos it is also the basis of the more recent Opsix.

AL-1 - is Korg’s most full‐featured VA (virtual analog) synthesizer to date and has a lot of similarities to MMT basic waveforms and later Prologue/MinilogueXD/NTS-1.

XMT (Xpanded modeling technology) - Korg's XMT, supplanting the MMT that drives the MicroKorg and provides 3 oscillators and 1 filter per Timbre, and 2 Timbres per Program, which can be split or layered. The oscillator selection contains classic analog waveforms (dual, unison, sync and ring modulated variations), noise (white, pink, blue, and resonant), FM-like VPM, an expanded set of DWGS oscillators, a selected set of PCM samples (including Mellotron, Wurlitzer, strings, choirs, etc). and the Mic in port to feed in to the filter, allowing for external oscillators.

Modern VA + User/MultiEngine - Korg has not really named this but it is the synthesis used by the NTS-1, MinilogueXD and Prologue. Seems to be based upon the AL-1 or MMT basic waveforms (Tri, Saw, Square) with a simple wave shaping function and an extra user multi-engine.

Implementation

My theory on Korg is that they cover three tranches and prices points of implementation
  • The Workstation - for the person who wants everything.
  • The Single Purpose Synth - more limited budget but performance focused semi professional gear
  • The Software Synth - the small/footprint constrained producers.

You can see in the table below there is fairly good coverage of their synthesis methods and implementations. I have applied some colour coding as how I see the Synthesis methods relating to each other. Going from old Analog (dark grey) to newer Analog (lighter greys), PCM in blue, etc.

Year KorgName Synthesis Model Name Kronos Hardware VST
1973 Analog VA Model mini700 miniKorg700s
1978 MS-20EX MS-20 MS-20
1981 PolySixEX PolySix PolySix
1981 Mono/Poly Mono/Poly
1985 DWGS Digital Analog DW-8000 FB-7999*
1988 Rompler PCM AI M1 M1
1991 AI2 NS5R
1995 HI Triton Triton
2004 HD-1 HD-1 Oasys/Kronos
2007 EDS/EDS-X M3/M50/Krome
1991 Vector/WaveSequencer HD-1 Wavestate Wavestate Native
1992 WaveShaper MOD-7 01/W
2021 Wavetable HD-1 Modwave Modwave Natve
2007 FM/VPM MOD-7 Opsix Opsix Native
1995 MOSS VA/Physical Model Prophecy/Z1/EXB-MOSS Prophecy
2002 MMT VA/Multimodel Radias/R3/MicroKorg Microkorg
2004 AL-1 Digital Analog AL-1 Oasys/Kronos
2012 XMT Digital Analog KingKORG
2018 VA+MultiEngine Digital Analog NTS-1/MinilogueXD/Prologue

Notes: * FB-7999 is not by Korg. Full Bucket Music. 

Hope you found this post useful. Feel free to leave comments.


Thursday, December 8, 2022

On Wavetables - Some Rambling Notes on Wavetable/Waveform Synths and VSTs

2048 samples @ 44.1 kHz = 4.64E-02 seconds = 21.53320313 Hz
If you do the maths 2048 samples per slot is close to the number of samples you have for a cycle at midi not f1@44.1Khz (or so). So you can sample a synth from f1 (+/- some cents) and voila you can use that sample as a slot for your wavetable. Wrong?

Serum uses up to 256, 2048 sample single cycle waves in a .wav file

Serum uses 32-bit floating-point wav, with 2048-length tables.

Serum FM Wavetable Studio http://glowshrimpsoftware.com/sfmwts.html

WaveEdit uses 16-bit fixed-point wav, with 64 x 256-length waveforms per bank. WaveEdit allows powerful creation and editing of wavetables for the E352 and E370 VCOs. Using standard WAV formats, the editor includes a full toolbox of shortcuts. An audio Preview is available to audition the waves before loading into the module. ROM A, ROM B, ROM C in the 'banks' directory.

https://synthtech.com/waveedit/

SynthMaster and SynthMaster One are already capable of loading any wavetable saved in Serum .wav format

Deluge supports Wavetables in WAV or AIFF files, with cycle sizes of at least 8 samples, and the cycle size must be a “power of two”, with 2048 being by far the most common. The number of cycles is only limited by the Deluge’s RAM. The files must be mono.

“for Serum”, and the Deluge can read these. Such files are in the WAV format, and include a tag named “clm” indicating that the file is a wavetable, and the cycle size.

Ableton User Wavetable format. Wavetable reads the first few seconds (up to 256 wavetables) from the file. It's downmixed to mono.
Wavetable ensures that there are at least 2 wavetables so that the position slider has something to cycle through. If the file was created using Serum, it's downsampled to 1024 samples per wavetable. This is because Serum use 2048 samples per wavetable.

Pigment Up to 256 positions exist in each wavetable. Each position holds a waveform containing 2048 samples. You can also load in a regular WAV file and Pigments will parse it into a wavetable for you. The first 2,048 samples will be placed in position 1, the second 2,048 samples will be placed in position 2, and so on, until the maximum of 256 positions has been filled. Only the first 524,288 samples will be used (256 x 2,048 = 524,288). If you load a file shorter than 524,288 samples, Pigments will only divide it into as many
positions as is necessary to “use up” those samples. For example, a file containing only 16,384 samples would be divided into eight positions (8 X 2,048 = 16,384).

The current 'frame-size' for Drambo's WaveTable oscillator is 2048 and WaveEdits frames are 256

modwave supports wavetables with up to 64 2048-sample-length. You can import tables in Serum and WaveEdit formats - just load them directly into the modwave Editor/Librarian. If there are more than 64 tables, the modwave will assume that it's a generated crossfade and drop some of the intermediate tables to create a 64-table version. The modwave native storage format is 32-bit floating-point, 2048-length.

“230 million wavetable variations out of the box”. In fact, if my math is correct, that’s one new wavetable variation per second, every day, for roughly 7.29 years. Just sayin’.

A wavetable in Surge XT consists of up to 512 single-cycle waveforms (frames), each of which can consist of up to 4096 samples. Using the Morph parameter it is possible to sweep across the waveforms in the wavetable.

Illustration 70: Wavetable

The individual waves are equidistant in the table. When the shape setting is between two individual waves, they will be mixed to ensure smooth travel. You can’t edit the wavetable contents directly within Surge XT, but it is possible to generate custom wavetables with external software.

Surge XT can also import wavetables containing a clm block to indicate loop size (as used by Serum), a cue block (as used by various products including Native Instruments) and a smpl block. Wavetable files without loop information are loaded as one-shots.

This effectively lets you import various wavetables from other products such as Serum. All those 3rd party wavetables that have been tested in Surge XT have been reported to work flawlessly. To import custom wavetables, use the wavetable selection bar at the bottom of the oscillator display. This is where you can also download additional wavetable content.  Alternatively, you can simply drag-and-drop any compatible wavetable file anywhere over the Surge interface to load it.

You can even create your own wavetables for Surge using wt-tool or WaveEdit.

The individual waves are equidistant in the table. When the shape setting is between two individual waves, they will be mixed to ensure smooth travel. You can’t edit the wavetable contents directly within Surge XT, but it is possible to generate custom wavetables with external software.

Surge XT can also import wavetables containing a clm block to indicate loop size (as used by Serum), a cue block (as used by various products including Native Instruments) and a smpl block. Wavetable files without loop information are loaded as one-shots.

This effectively lets you import various wavetables from other products such as Serum. All those 3rd party wavetables that have been tested in Surge XT have been reported to work flawlessly. To import custom wavetables, use the wavetable selection bar at the bottom of the oscillator display. This is where you can also download additional wavetable content.  Alternatively, you can simply drag-and-drop any compatible wavetable file anywhere over the Surge interface to load it.

You can even create your own wavetables for Surge using wt-tool or WaveEdit.
The original Adventure Kid waveforms are 600 samples.

Vital by Matt Tytel.
Vital has a detailed Wavetable editor which can import FLAC, WAV, and export to WAV and resample a preset to a wavetable !!!
Vital has a native Wavetable format which seems to be JSON with binary encoded data. The default/factory 2048 samples + 256 wavetables.

Vital Basic ($0) 75 presets +25 wavetables
Vital Plus ($25) 250 presets ​+ 70 wavetables
Vital Pro ($80) 400+ presets + 150 wavetables ​

Tutorials

Helm
Dual oscillators (12 different waveforms, Sin, Saw, Square, Ramp, Rev Ramp, Course Medium Fine Quantised Sine, Course Medium Fine Quantised Saw) with cross modulation and up to 15 unison oscillators each. Sub oscillator with shuffle waveshaping
32 voice polyphony

Synapse Audio Dune2/3 Wavetables can have a varying amount of waveforms stored in them, between 3 to 64 waveforms in Dune 2 and 1 and 256 waveforms in Dune 3. 

The 1010 Music Nanobox Fireball manual says the wavetables should consist of 512 waveforms, with length 2048 each. I checked the Factory wavetables and see they have a number of samples that is consistent with 508 waveforms, rather than 512 (or waveforms of length 2032, but visually it seems like it's the former). So I created some wavetables in this format (at 48kHz/24 bit, like the factory tables)

The Waldorf Quantum and Waldorf Iridium have quite liberal limitations. Current Quantum and Iridium firmware has a maximum of 2,000 waveforms per wavetable:

4096 sample period x 217 waveforms
2048 sample period x 430 waveforms
1024 sample period x 846 waveforms
512 sample period x 1,645 waveforms
256 sample period x 2,000 waveforms
128 sample period x 2,000 waveforms
64 sample period x 2,000 waveforms

Wavetables must come in a single channel WAV file with 64 waves next to each other, each with 128 (or 256) samples. The Waldorf Blofeld has 38 slots (from 80 to 118) for custom Wavetables, and each can have a 14 character ASCII name. A simple tool for transforming wavetables from a WAV file into Waldorf's Blofeld SysEx midi format on Github.  https://github.com/clrnd/wave2blofeld

Description of PPG Wave waveforms and wavetables. It’s available here. each waveform consists of 64 samples, and there are 256 waveforms total, we can determine that the waveform table is 16KiB long.

UVI Falcon
On Mac: ~/Documents/UVI/Falcon/User Data/Wavetable
On PC: Documents\UVI\Falcon\User Data\Wavetable
Slices will also be imported if slices are arranged one after the other within an audio file, and the number of samples per slice is specified at the end of the file name following an underscore (e.g. “MySweep_128.wav”).

Uh-e Zebra 2
You cannot import wavetables but you can design your own waveforms with up to 16 waveforms to morph through per OSC

Access Virus TI2 has 64 forms if you count the Sine and Tri waves) Classic Oscillator Spectral Waves,

Korg DW8000 Waveforms. 16 Waveforms


The Yamaha TX81Z has eight waveforms.  A few seem to be in the PreenFM2 (such as, of course, Wave 1)  But it's not entirely clear which ones are fully replicated in the PreenFM2 by default. It might be interesting to add waveforms from the TX81z and varying feedback levels for each waveform. This took a very long time to get right. Considering the TX waveforms are 4096 samples and the PFM2 has a max 1024 samples they aren't 1:1 but sound basically the same.
TX81Z Waveforms and Harmonics

The Roland JD-800 employs Linear Arithmetic synthesis (introduced and made famous by the Roland D-50), which combines sample playback with digital synthesis. The JD-800 has 108 built-in waveforms, which can be expanded via PCM cards. Roland JD-800 3 MB of PCM ROM with 108 waveforms + 1 MB expansion, 4 waveforms (tones) per patch
SL-JD80-01 Drums & Percussion STANDARD
SL-JD80-02 Drums & Percussion DANCE
SL-JD80-03 Rock Drums
SL-JD80-04 Strings Ensemble
SL-JD80-05 Brass Section
SL-JD80-06 Grand Piano
SL-JD80-07 Guitar Collection
SL-JD80-08 Accordion

AudioTerm Tutorial
"The wavetables generated by the KTERM wavetable generator can be used with the following
products (other products may also work):
Terratec Komplexer (direct *.WT format support)
ImageLine Harmor (import *.WT file as image to Harmor)
Vemberaudio Surge (direct *.WT format support)
VAZ Modular /2010 (direct format support)
Wusik Wusikstation (use loop position modulation on a KTERM wavetable)
Camel Audio Alchemy (import KTERM wavetable as *.WAV)
Native Instruments Reaktor (use loop position modulation on a KTERM wavetable)
Waldorf Blofeld (direct *.SYX format support)
Ensoniq Eps16+ (direct *.EFE format support)
Ensoniq ASR series (direct *.EFE format support)
PPG WaveGenerator (direct *.wts format support)
Synapse Audio Dune2 (direct *.WT format support)
Xfer Serum (direct format support)"
AudioTerm by Mathias Gurk
Post by HighLordFixer » Fri Jan 26, 2018 2:24 pm

Other Wavetable Synths
  • Hardware (Wavetables)
    • Hydrasynth
  • Hardware (Waveforms)
    • TX81Z
    • Access Virus TI wavetables ?
  • Software
    • Spectrasonic Omnisphere
    • U-he Zebra 2
    • Native Instruments MassiveX
    • Camel Audio Alchemy
    • Sonic Academy Node (wavetable maker) + ANA2 (3 OSC + Noise 6 voice)
    • Steinberg Wavelab
    • UVI Falcon3
Wavetable Datasources










Monday, July 18, 2022

Synth Block Diagram Research and Design Patterns

 What started as a few random investigations seems to have given me quite some insight into synth design.

I would be interested to hear anyone's thoughts on and how you use block diagrams and any hybrid synths (soft or hard) that I have overlooked and should check out.