Are you interested in contributing to the ZynAddSubFX project? There are a variety of ways that you can assist the project and many different skills that can be learned while contributing. You can lend a hand with non-technical community interaction roles, semi-technical roles involving knowledge of synthesis and/or basic programming techniques, or advanced programming implementation challenges/DSP design improvement roles. The roles listed here are ordered coarsely by complexity, but don't let that deter you from trying out something which you want to learn, everyone has to start somewhere.

Community Engagement

Open source isn't just about throwing software out in the open, but it's about the collaboration of multiple individuals to create something that would be difficult to build with just one individual. Community outreach efforts help introduce new contributors and new users. If you're interested in trying to get new individuals interested in contributing and making things run more smoothly for existing contributors, then it would be great to have some assistance. For example, creating pages like the one you're reading can be used to gain new interest or writing summaries about new features.

How to get started

There's no one right approach to how to build a community, so the first step should be a discussion. I'd recommend proposing an idea via IRC (#zynaddsubfx on irc.libera.chat) or the community mailing list to get the dialog started.

Multi-Platform Testing

testing by QualityIcons from the Noun Project

ZynAddSubFX (and Zyn-Fusion) run on Linux, OSX, Window, and BSD with platforms ranging between x86, x86_64, ARM, etc. So, there's a lot of different places where bugs can creep in. It's difficult to keep track of where errors can occur, when they have been introduced, and when they have been fixed. If you're interested in helping test a particular platform regularly, then please chime in to help make Zyn more stable, performant, and fun to use on your platform of choice. If you are familiar with debugging tools on your platform, that's a plus, but not strictly required.

Bug Reporting and Managment

Bug by Hea Poh Lin from the Noun Project

ZynAddSubFX has a large community across multiple websites. As such it can be tricky to keep track of all bugs, feature requests, and support requests. If you're interested in lending a hand towards the organization of these issues it would be appreciated. No technical experience needed.

How to get started

If you're interested in helping to report bugs, tag them, respond to inquires, and organize them so other contributors can efficiently navigate them, please inquire on the IRC channel for zyn (#zynaddsubfx on irc.libera.chat).



Documentation

documentation by shashank singh from the Noun Project

Open source documentation doesn't always cover the topics you're looking for quite in enough depth or breath and Zyn is no exception. Features are constantly getting added and the interface has recently undergone a major overhaul. As such there are plenty of gaps which need filling. While Zyn does have a spread of existing documentation, new efforts are being focused on a new user focused manual available at https://github.com/zynaddsubfx/user-manual .

The goal is to provide users with something that goes beyond what the features are in Zyn and to talk about how to use them to solve practical sound design challenges. The overall architecting of this work is being lead by unfa, but there is a huge amount of work involved in going from the provided outline to a full and easy to follow guide through ZynAddSubFX.

How to get started?

I'd recommend reading through the current outline on github and seeing what gaps exist. Old documentation can be ported over fairly simply as long as it fits the new flow though the document, so both beginner technical writers as well as advanced zyn users should feel comfortable taking steps to make the manual a more complete guide.

User Interface Programming and Refinement

Looking to leave a visual mark on the synth? The Zyn UI is a large one with many places which can be improved by new contributors. Since synthesizer interfaces have unique requirements (see LAC 2018 presentation on MRuby-Zest), Zyn does not use a traditional user interface toolkit, but uses one where the majority of code is in Ruby. As long as you're familiar with Ruby or another high level scripting language, it should not be too difficult to pick up.

How to get started

To start out, the MRuby-Zest user interface improvements is based off the designs provided by a set of mockups by Budislav (current profile). You can look at the mockups to understand how the current implementation deviates from the original design and you can find issues on the user interface on the github issue tracker. For more hands on guidance don't feel afraid to join the IRC channel(#zynaddsubfx on irc.libera.chat), use the mailing list , or start discussions on relevant issue threads.

General Programming

Like most open source projects the Zyn team loves to see interested developers help out. Within ZynAddSubFX you'll see a mixture of C, C++, and Ruby (for the UI). For many tasks you'll only need basic knowledge of any one language to get started.

How to get started

If you're interested in helping out coding we recommend checking out the issue trackers for bugs, features, and patches. There you should be able to find some issues marked 'beginner'. These issues should involve relatively few different source files and ideally it should be possible to finish them in a single sitting. Resulting changes should be contributed back through either the patch tracker or via a git pull request.

If you're trying to figure out more details, please feel free to hop onto the mailing list or into the community IRC channel (#zynaddsubfx on irc.libera.chat) to talk with other contributors.

Instrument Design and Refinement

Keyboard by Olivier Guillard from the Noun Project

People are always looking for new instruments to experiment with. For a one-off instrument musical artifacts hosts individual instruments for a variety of open source synths and effects. For larger collections of patches they can be shared via the mailing list.



Digital Signal Processing

Fourier transformation by Aenne Brielmann from the Noun Project

Are you interested in the math behind the music? In order to synthesize audio as well as manipulate existing audio streams ZynAddSubFX involves a fair amount of signal processing. The DSP involved varies from Fourier transforms, to filter banks, to simple waveform generation. If you want to help improve the current DSP under the hood or just generally learn about what happens in the domain of realtime audio, then contributing on this front should be a fun exercise.

How to get started

Ideally to approach DSP level problems you should have some basic level of familiarity with C++, a prototyping language (Python/Julia/MATLAB/R), and some experience with vector mathematics, but there will be opportunities to learn when getting started. If you have a particular idea in mind, then check the feature trackers to see if there is prior work on your particular idea. Otherwise, try joining the mailing list and IRC channel (#zynaddsubfx on irc.libera.chat) and get the conversation started.

Realtime System Level Programming

Do you want to understand how audio can be produced in a multi-threaded low latency context reliably? Do you want to write optimized mathematical routines, lock-free threading communication mechanisms, draw out diagrams walking through asynchronous program execution, or write embedded code?

Well, within low latency audio processing tools, you'll see some of all of these concepts. Creating reliable low-latency, high throughput code which is easy for users to control is hard. It involves a lot of pencil and paper work to establish designs and a fair amount of programming time to implement the designs in ways that they're hard to mistakenly break.

How to get started

Ideally if you want to get into this level you'll have a strong grasp of low level machine implementation details, such as cache behavior, x86 memory reordering, lock free primitives, the general C/C++ memory model, JACK, assembly, and programming constraints on small embedded devices. If you want to be involved in this role it's a natural extension of general programming. To get started there will need to be some direct discussion between yourself an other long term developers.



Donations

Any donations are appreciated and they're currently accepted by two developers. The project was started in March 2002 by Nasca Octavian Paul. He began to write ZynAddSubFX in order to create a synthesizer which could produce beautiful sounds, while being freely available to anybody who needs it. Since 2009, ZynAddSubFX has been lead by Mark McCurry. In these few years some major architectural changes have been brought about which culminated in the 3.0.0 UI rewrite release.

Mark McCurry (active maintainer):