0%

Book Description

Developing Virtual Synthesizers with VCV Rack takes the reader step by step through the process of developing synthesizer modules, beginning with the elementary and leading up to more engaging examples. Using the intuitive VCV Rack and its open-source C++ API, this book will guide even the most inexperienced reader to master efficient DSP coding to create oscillators, filters, and complex modules.

Examining practical topics related to releasing plugins and managing complex graphical user interaction, with an intuitive study of signal processing theory specifically tailored for sound synthesis and virtual analog, this book covers everything from theory to practice. With exercises and example patches in each chapter, the reader will build a library of synthesizer modules that they can modify and expand.

Supplemented by a companion website, this book is recommended reading for undergraduate and postgraduate students of audio engineering, music technology, computer science, electronics, and related courses; audio coding and do-it-yourself enthusiasts; and professionals looking for a quick guide to VCV Rack. VCV Rack is a free and open-source software available online.

Table of Contents

  1. Cover
  2. Half Title
  3. Title Page
  4. Copyright Page
  5. Table of Contents
  6. Preface
  7. Acknowledgments
  8. Chapter 1. Modular Synthesis: Theory
    1. 1.1. Why Modular Synthesis?
    2. 1.2. An Historical Perspective
      1. 1.2.1. The Early Electronic and Electroacoustic Music Studios
      2. 1.2.2. The Birth and Evolution of Modular Synthesizers
      3. 1.2.3. The Advent of a Standard
      4. 1.2.4. The Software Shift
    3. 1.3. Modular Synthesis Basics
      1. 1.3.1. Sound Sources
      2. 1.3.2. Timbre Modification and Spectral Processing
      3. 1.3.3. Envelope, Dynamics, Articulation
      4. 1.3.4. “Fire at Will,” or in Short: Sequencers
      5. 1.3.5. Utility Modules
  9. Chapter 2. Elements of Signal Processing for Synthesis
    1. 2.1. Continuous-Time Signals
    2. 2.2. Discrete-Time Signals
    3. 2.3. Discrete-Time Systems
    4. 2.4. The Frequency Domain
      1. 2.4.1. Discrete Fourier Series
      2. 2.4.2. Discrete Fourier Transform
      3. 2.4.3. Properties of the Discrete Fourier Transform
      4. 2.4.4. Again on LTI Systems: The Frequency Response
      5. 2.4.5. Computational Complexity and the Fast Fourier Transform
      6. 2.4.6. Short-Time Fourier Transform
    5. 2.5. Once Again on LTI Systems: Filters
    6. 2.6. Special LTI Systems: Discrete-Time Differentiator and Integrator
    7. 2.7. Analog to Digital and Back
    8. 2.8. Spectral Content of Typical Oscillator Waveforms
    9. 2.9. Understanding Aliasing
    10. 2.10. Filters: The Practical Side
    11. 2.11. Nonlinear Processing
      1. 2.11.1. Waveshaping
      2. 2.11.2. Amplitude and Ring Modulation
      3. 2.11.3. Frequency Modulation
    12. 2.12. Random Signals
    13. 2.13. Numerical Issues and Hints on Coding
    14. 2.14. Concluding Remarks
  10. Chapter 3. VCV Rack Basics
    1. 3.1. Overview of the System
    2. 3.2. Anatomy of a Module
    3. 3.3. Context Menus
    4. 3.4. Core Modules
      1. 3.4.1. AUDIO-8 and AUDIO-16
      2. 3.4.2. MIDI-CV
      3. 3.4.3. MIDI-CC
      4. 3.4.4. MIDI-GATE
      5. 3.4.5. MIDI-MAP
      6. 3.4.6. CV-MIDI, CV-CC, CV-GATE
    5. 3.5. Fundamental Modules
    6. 3.6. Quick Patches
      1. 3.6.1. Audio and MIDI Routing
      2. 3.6.2. East Coast Synthesis in One Minute
      3. 3.6.3. Using the SCOPE
      4. 3.6.4. Observing Aliasing
      5. 3.6.5. Using Polyphonic Cables
  11. Chapter 4. Developing with VCV Rack
    1. 4.1. Comparison with Other Platforms
      1. 4.1.1. Audio Processing
      2. 4.1.2. Scheduling
      3. 4.1.3. Polyphonic Cables
      4. 4.1.4. Expander Modules
      5. 4.1.5. Simplicity and Object-Oriented Programming
    2. 4.2. Plugins: Files and Directories
    3. 4.3. Plugins: Software Components
    4. 4.4. Setting Up Your System for Coding
      1. 4.4.1. Linux
      2. 4.4.2. Windows
      3. 4.4.3. macOS
      4. 4.4.4. Building VCV Rack from Sources
    5. 4.5. Building Your First “Hello World” Module
      1. 4.5.1. Build and Run
      2. 4.5.2. Structure of the Source Files
    6. 4.6. Adopting an IDE for Development: Eclipse
      1. 4.6.1. Importing a “Makefile Project”
      2. 4.6.2. Building the Project Inside Eclipse
  12. Chapter 5. The Graphical User Interface: A Quick Introduction
    1. 5.1. Generating SVG Files with Inkscape
      1. 5.1.1. Creating the Panel and the Background
      2. 5.1.2. Creating the Panel and the Background
    2. 5.2. Base Widget Objects for Knobs, Ports and Switches
      1. 5.2.1. Automatically Placing Components
  13. Chapter 6. Let’s Start Programming: The Easy Ones
    1. 6.1. Creating a New Plugin from Scratch, Using the Helper Script
    2. 6.2. Comparator Module
    3. 6.3. Muxing and Demuxing
    4. 6.4. Knobs: Displaying, Mapping, and Computing Their Values
    5. 6.5. Clock Generator
    6. 6.6. Sequencer Module
    7. 6.7. Binary Frequency Divider
    8. 6.8. Random Module
    9. 6.9. To Recap: Exercise Patches
      1. 6.9.1. Creating a Bernoulli Distribution and Bernoulli Gate
      2. 6.9.2. Polyrhythms
  14. Chapter 7. Getting Serious DSP: “Classroom” Modules
    1. 7.1. Handling Polyphony Properly
    2. 7.2. Linear Envelope Generator
    3. 7.3. Exponential Envelope Generator
      1. 7.3.1. A Virtual Analog RC Filter
      2. 7.3.2. Implementation of the Exponential Envelope Generator
    4. 7.4. Envelope Follower
      1. 7.4.1. Modelling a Diode Envelope Follower
      2. 7.4.2. Implementation of the Envelope Follower
    5. 7.5. Multimode State-Variable Filter
      1. 7.5.1. A Discrete-Time Model of the Multimode State-Variable Filter
      2. 7.5.2. Implementation of the State-Variable Filter
    6. 7.6. Polyphonic Filter
      1. 7.6.1. To Recap: Exercise with Patches
        1. 7.6.1.1. Simple Snare Sound Generation
        2. 7.6.1.2. Auto-Wah Effect
        3. 7.6.1.3. Creating a Step Filter
        4. 7.6.1.4. The Chemist’s Lab, Aka Polyphonic Noise Filters
  15. Chapter 8. Crunching Numbers: Advanced DSP Modules
    1. 8.1. Modal Synthesis
      1. 8.1.1. Modal Synthesis Principles
      2. 8.1.2. A State-Variable Filter Bank
      3. 8.1.3. The “Modal” Module
      4. 8.1.4. Adding Context Menu Options
      5. 8.1.5. Computational Cost
    2. 8.2. Virtual Analog Oscillator with Limited Aliasing
      1. 8.2.1. Trivial Oscillators
      2. 8.2.2. Oversampling: The Easy Solution
      3. 8.2.3. Implementing a Trivial Oscillator with Oversampling
      4. 8.2.4. Differentiated Parabolic Waveform and Its Extensions
      5. 8.2.5. Differentiated Parabolic Waveform Implementation
      6. 8.2.6. Computational Cost and Aliasing
      7. 8.2.7. Polyphonic Oscillator Module
    3. 8.3. Wavefolding
      1. 8.3.1. Trivial Foldback Algorithm
      2. 8.3.2. Antiderivative Anti-Aliasing Method
      3. 8.3.3. Wavefolder Module Implementation
    4. 8.4. To Recap: Exercise with Patches
      1. 8.4.1. A Modal Synthesis Patch
      2. 8.4.2. East Coast Classic
      3. 8.4.3. West Coast Mono Voice
      4. 8.4.4. Juntti Waveshaper
  16. Chapter 9. The Graphical User Interface: Creating Custom Widgets
    1. 9.1. The Rendering Library: NanoVG
    2. 9.2. Custom Widgets Creation
      1. 9.2.1. Custom Knobs and Buttons
      2. 9.2.2. Drawing Text
    3. 9.3. An Interactive Widget
  17. Chapter 10. Additional Topics
    1. 10.1. Debugging the Code
      1. 10.1.1. Running a Debug Session
      2. 10.1.2. Debugging a Segmentation Fault
      3. 10.1.3. Development Mode
      4. 10.1.4. Debugging with the Eclipse IDE
      5. 10.1.5. Other Debugging Methods
    2. 10.2. Optimization
      1. 10.2.1. Table Lookup for Transcendental Functions
      2. 10.2.2. Sine Approximation by Table Lookup
      3. 10.2.3. Quadratic Approximation of Sine
      4. 10.2.4. The Chamberlin Resonator as a Sine Oscillator
      5. 10.2.5. Reducing the GUI Processing Burden
    3. 10.3. Developing Expander Modules
    4. 10.4. Adding Factory Presets
    5. 10.5. Storing and Recalling Module Information through JSON
      1. 10.5.1. Storing and Recalling JSON Data for AModalGUI
    6. 10.6. Versioning the Code and Managing a Git Repository
    7. 10.7. Getting into the Third-Party Plugin List
    8. 10.8. Making a Revenue out of Coding
      1. 10.8.1. The VCV Store
      2. 10.8.2. Donations
      3. 10.8.3. Blank Panels
  18. Chapter 11. After Reading This Book
    1. 11.1. Forking the ABC Collection
    2. 11.2. Learn More about Virtual Analog Algorithms
    3. 11.3. Experiment with Novel Digital Algorithms
    4. 11.4. Build a Hybrid Hardware/Software Modular Rack
  19. Bibliography
  20. Index
18.117.72.224