HexoDSP/README.md

157 lines
6 KiB
Markdown
Raw Normal View History

2021-05-18 01:59:00 +00:00
# HexoSynth - A hexagonal modular synthesizer
This project aims to create a modular synthesizer. Like those encountered
in projects like VCVRack or Bitwigs Polygrid.
The core idea is having a hexagonal tile map for laying out module
instances and connect them at the edges to route audio signals and CV signals
to inputs of other modules.
A goal is to provide a simple wireless environment to build
sound effects, synthesizers or whole generative music patches from
predefined modules.
Hosting plugins (VST, LV2, ...) is out of the scope of this project.
The goal is rather to have a good set of predefined modules.
## State of Development
This project is still (2021-03-17) under heavy development and is considered
pre alpha stage. There is no noteworthy functionality yet implemented.
Just a lot of prototype code and plumbing.
Make sure to follow [Weird Constructors Mastodon
account](https://mastodon.online/@weirdconstructor) or the releases of this
project to be notified once I release a beta or stable release.
### Road Map / TODO List
I have a pretty detailed TODO list in my private notebook, but
this is the rough road map:
- Make a UI that is more or less fluently usable and easily extendable
with new modules.
- Take a bit of care that there is online help.
- Add lots of modules (Oscillators, Filters, Envelopes, LFOs, Quantizers, ...).
- Factor out the DSP code into it's own crate.
- Comment the code for easier maintenance.
## Running the Standalone Example:
You need nightly rust:
rustup toolchain install nightly
To run the example:
cargo +nightly run --release --example standalone
You might need following dependencies (Ubuntu Linux):
sudo apt install libjack0 libjack-jackd2-dev qjackctl libx11-xcb-dev libxcb-icccm4-dev libxcb-dri3-dev
These might work on Debian too:
sudo apt install libjack0 libjack-dev libx11-xcb-dev libxcb-icccm4-dev libxcb-dri2-dev
## Running the Automated Testsuite:
There exists an automate test suite for the DSP and backend code:
cargo test
## Known Bugs
* The ones you encounter and create as issues on GitHub.
## Contributions
I currently have a quite precise vision of what I want to achieve and my goal
is to make music with this project eventually.
The projects is still young, and I currently don't have that much time to
devote for project coordination. So please don't be offended if your issue rots
in the GitHub issue tracker, or your pull requests is left dangling around
for ages.
I might merge pull requests if I find the time and think that the contributions
are in line with my vision.
Please bear in mind, that I can only accept contributions under the License
of this project (AGPLv3 or later).
## Contact the Author
You can reach me via Discord or Mastodon. I'm joined most public Rust Discord
servers, especially the "Rust Audio" Discord server. I am also on freenode.net,
for instance in the `#lad` channel (nick `weirdctr`).
## Support Development
You can support me (and the development of this project) via Liberapay:
<a href="https://liberapay.com/WeirdConstructor/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
## License
This project is licensed under the GNU Affero General Public License Version 3 or
later.
The fonts DejaVuSerif.ttf and DejaVuSansMono.ttf under the license:
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
### Why (A)GPL?
Picking a license for my code bothered me for a long time. I read many
discussions about this topic. Read the license explanations. And discussed
this matter with other developers.
First about _why I write code for free_ at all, the reasons are:
- It's my passion to write computer programs. In my free time I can
write the code I want, when I want and the way I want. I can freely
allocate my time and freely choose the projects I want to work on.
- To help a friend or member of my family.
- To solve a problem I have.
- To learn something new.
Those are the reasons why I write code for free. Now the reasons
_why I publish the code_, when I could as well keep it to myself:
- So that it may bring value to users and the free software community.
- Show my work as an artist.
- To get into contact with other developers.
- To exchange knowledge and help other developers.
- And it's a nice change to put some more polish on my private projects.
Most of those reasons don't yet justify (A)GPL. The main point of the (A)GPL, as far
as I understand: The (A)GPL makes sure the software stays free software until
eternity. That the _end user_ of the software always stays in control. That the users
have the means to adapt the software to new platforms or use cases.
Even if the original authors don't maintain the software anymore.
It ultimately prevents _"vendor lock in"_. I really dislike vendor lock in,
especially as developer. Especially as developer I want and need to stay
in control of the computers and software I use.
Another point is, that my work (and the work of any other developer) has a
value. If I give away my work without _any_ strings attached, I effectively
work for free. This compromises the price I (and potentially other developers)
can demand for the skill, workforce and time.
This makes two reasons for me to choose the (A)GPL:
1. I do not want to support vendor lock in scenarios for free.
I want to prevent those when I have a choice, when I invest my private
time to bring value to the end users.
2. I don't want to low ball my own (and other developer's) wage and prices
by giving away the work I spent my scarce private time on with no strings
attached. I do not want companies to be able to use it in closed source
projects to drive a vendor lock in scenario.
We can discuss relicensing of my code or project if you are interested in using
it in a closed source project. Bear in mind, that I can only relicense the
parts of the project I wrote. If the project contains GPL code from other
projects and authors, I can't relicense it.