Skip to content
This repository has been archived by the owner on Oct 28, 2023. It is now read-only.
/ rsynth Public archive

A crate for developing audio plugins and applications in Rust.

License

BSD-3-Clause, MIT licenses found

Licenses found

BSD-3-Clause
LICENSE-BSD.txt
MIT
LICENSE-MIT.txt
Notifications You must be signed in to change notification settings

PieterPenninckx/rsynth

Repository files navigation

rsynth

A deprecated API abstraction for API's for audio plugins and applications. You could use it to write real-time audio effects, software synthesizers, ... and target different platforms (jack, offline processing, ...).

This crate has been deprecated

This crate has been deprecated. See this blog post for more information.

What should I do if I use this crate?

At the time of writing, here are some options

  • Use cpal if you want to "just" play audio on various platforms.
  • Use nih-plug if this is a good solution for you.
  • Write the plugin as a “core” library (a Rust crate or module). This is anyhow something I'd recommend, also if you use nih-plug, for instance. Per plugin standard that you want to support, create a separate crate that depends both on the “core” library and on an a library that is dedicated to that particular plugin standard (such as the lv2 crate and the clack crate (not (yet?) on crates.io).

Old documentation

Feature matrix

We focus on API's that are typically used for audio effects and software synthesizers. If you want to "just" play audio on various platforms, cpal may be better suited for you.

feature VST 2.4 via vst-rs Jack via jack Offline audio rendering
Full duplex audio input and output
Midi input
Midi output N/A
Sample accurate midi N/A
Multiple midi inputs and outputs N/A
Sampling frequency change N/A
Signal stopping the application N/A
Jack-specific events N/A N/A
Basic meta-data N/A
Access to the underlying host N/A
Parameter changes
GUI support

Feature flags

Many features are behind feature flags:

  • all: all the features below
    • backend-jack: create standalone jack applications.
    • backend-vst: create VST 2.4 plugins.
    • backend-combined-all: all the "combined" backends for offline processing and testing. This always include in-memory dummy and testing backends.
      • backend-combined-hound: read and write .wav files with the hound crate
      • backend-combined-wav-0-6: read and write .wav files with the wav crate
      • backend-combined-midly-0-5: read and write .mid files with the midly crate
    • rsor-0-1: add support for using the rsor crate for some methods (if you prefer rsor over vecstorage)

Documentation

The API documentation can be found

  • on docs.rs for the version that is distributed via crates.io.
  • on GitHub pages for the documentation of the master branch
  • on your local machine after running cargo rustdoc --features all

Philosophy and design

rsynth presents itself as a library, rather than a framework. Rather than trying to solve every problem (which is not feasible for the small team), rsynth is designed to be easy to combine with other crates for specific tasks, such as

  • polyphony: the name says it all
  • wmidi: encode and decode midi messages in real-time
  • midi-consts: constants for low-level handling of midi data
  • rtrb, a realtime-safe single-producer single-consumer ring buffer that can be used to communicate between threads.

Background on the design can be found in the design.md document.

Examples

There are full examples in the examples folder in the source code.

Current State

This crate has been deprecated. See this blog post for more information.

License

The source code of rsynth is licensed under the MIT/BSD-3 License.

Note that in order to use rsynth in combination with other crates (libraries), the combined work needs to comply with the license of that crate as well. In particular, the following optional dependencies may require your attention:

  • the hound crate (behind the backend-combined-hound feature) uses the Apache license, see its readme for more details
  • the wav crate (behind the backend-combined-wav feature) uses the LGPL license