Declarative, non-intrusive, compile-time C++ reflection for audio plug-ins

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • avendish

    declarative polyamorous cross-system intermedia objects

  • > but no examples of what it's like to consume those objects.

    I'm not sure I understand: the whole idea is that since the objects are just C++ structs, to "consume" them from some C++ program would just mean including the file and using it.

    Otherwise, if you want to know how you can do similar reflection on it (for instance to generate an UI from any of those processor) the simplest example is the python binding, the meat of it fits in ~100 lines of code:

    https://github.com/celtera/avendish/blob/main/src/python/pro...

    if that is what you mean, then yeah what I plan to do is to write some documentation to explain the techniques and reflection API

  • LitterPower

    Source Code for Litter Power

  • If you wrote a software that worked with soundflower it means that at some point you used to call either the CoreAudio API directly or any abstraction on top of it (RtAudio, PortAudio, ...). Thus harder to port to another OS :-)

    Here the idea is to write the algorithms in a way that is more future-proof, by not having them to depend on any run-time API, just a generic specification. This way the algorithms will still be useful in 10 years when everyone has moved to API N+1, unlike a metric ton of existing audio software which depends on a specific audio / media-object API for no good reason (today ! When they were written C++ wasn't advanced enough to allow this at all)

    - all the objects in https://github.com/pcastine-lp/LitterPower for instance

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • essentia

    C++ library for audio and music analysis, description and synthesis, including Python bindings

  • q

    C++ Library for Audio Digital Signal Processing (by cycfi)

  • Fundamental

  • - ditto for all the VCV algorithms : https://github.com/VCVRack/Fundamental/tree/v1/src

    etc etc, there's a couple hundred of those, which always depend on some API and are thus not easily portable across environments.

  • vst3_public_sdk

    VST 3 Implementation Helper Classes And Examples

  • > it does generate something compatible with VST2.x and I've been working on VST3 this week-end (and pulling a few hairs, that API is horrendous, the smallest example is a few thousand lines of codes).

    Oh that is awesome!!!

    If you want a tip about the smallest possible VST3 implementation, (and maybe you already know this) there is a class called "SingleComponentEffect", and an example called "AGainSimple" that uses it and is a fully self-contained single file full VST3 plugin:

    https://github.com/steinbergmedia/vst3_public_sdk/search?q=s...

    Also, I spent some time trying to get VST3 SDK usable with vcpkg so you could just do:

      // vcpkg.json

  • Vcpkg

    C++ Library Manager for Windows, Linux, and MacOS

  • And your CMake would just install it for you:

    https://github.com/microsoft/vcpkg/issues/5660#issuecomment-...

    It ended up requiring more changes than this, but in the end I wound up fixing the CMake build so it spit out both the VST3 SDK (helper classes) shared lib and the almost-header-only lib ("pluginterfaces" directory).

    I ought to upload the patches somewhere in case it's useful for you/anyone else.

      > "yes, that's a goal, make your DSP processor in C++ and then write a small UI for it in python or QML without having to write binding code."

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • vst3sdk

    VST 3 Plug-In SDK (by GavinRay97)

  • Which has a patch with the changes -- EXCEPT for the file "Config.cmake.in", which I can't remember what it does.

    I also just said fuck it and zipped up the whole project, you can download it here:

    https://github.com/GavinRay97/vst3sdk/blob/master/vst3sdk.zi...

    With this fixed version, using the VST3 SDK becomes much much easier.

    All you have to do is add it as a vendored subproject in CMake:

      project(VST3Example CXX)

  • delimited

  • Using gcc extended asm you can pass literal constants to the asm and they will be expanded textually (or at least their address will). I don't think the details are fully documented anywhere and I had to use intel syntax to make it work, but it might be possible even wit AT&T syntax.

    Take a look a this[1] for example. See how trampoline, the destructor and the size are passed in with the 'i' constraint and are referred to their value with the %cX constraint (yes, the code is write only and even with a lot of comments I have only the most vague idea of what I was trying to do here).

    Probably more work is require for PIC though.

    [1] https://github.com/gpderetta/delimited/blob/7e755d643ee45897...

  • DPF

    DISTRHO Plugin Framework

  • Re 1: Why not create a DPF wrapper for this and have DPF create the ladspa/dssi/vst2/vst3/lv2 for you? -> https://github.com/DISTRHO/DPF

  • vst3_pluginterfaces

    VST 3 API

  • These 2 soul-crushing lines in the build file:

    https://github.com/steinbergmedia/vst3_pluginterfaces/blob/m...

      # pluginterfaces should actually be a header-only library,

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Ask HN: What audio/sound-related OSS projects can I contribute to?

    22 projects | news.ycombinator.com | 22 Mar 2023
  • Foobar2000

    8 projects | news.ycombinator.com | 25 Jan 2022
  • Ask HN: Manufacturing somewhat novel MIDI controller

    1 project | news.ycombinator.com | 10 Nov 2023
  • Festival is a music player for local album collections

    1 project | news.ycombinator.com | 30 Jun 2023
  • Festival v1.0.0 - A local music player

    2 projects | /r/linux | 28 Jun 2023