An open API service indexing awesome lists of open source software.

https://github.com/elecgeek/multisignalgene

Generates multi channels sounds from primitives
https://github.com/elecgeek/multisignalgene

algorithms cordic-algorithm cplusplus-11 cplusplus-14 cplusplus-17 jackaudio state-machine stl vhdl-code wavegenerator

Last synced: 24 days ago
JSON representation

Generates multi channels sounds from primitives

Awesome Lists containing this project

README

          

This project generates independent multi channels audio signals from commands.

There are 2 projects: a software version and an hardware version.

The main goal of this project is to change the parameters on the fly. That means, without any drops. If a frequency and an amplitude change, the sinusoid is faster/slower and higher/lower from the current point.
All the parameters can be changed by commands, unless otherwise. In such case, the compile time or start-up is specified.

Software version
----------------
The first version was written using the C++03 and GCC 4.6.2. The years later, the minimal versions was raised to GCC 5.5, GCC 7.5 and GCC 8.5. The minimum is now C++17.

New modules or improvements are written using the last version.
The legacy part remains as it, as long as there is no issues nor requests.

The "physical" output can be chosen, at start-up, among Jackaudio, a wave file or dummy.
The general output volume is, today, always set to 100% but the software can be updated to control this value.
For each channel:
* This audio is a waveform chosen, at start-up, among sine, triangle, pulse and continuous (with restrictions).
* The default one is chosen at compile time.
* This waveform can be frequency modulated TODO.
* This waveform can be amplitude modulated by two independent engines.
* Some modifiers applies to some engines (see README.commands).
* The volume can be changed at any time. The "destination" volume is set. A command defines the slew rate in order to change quickly or smoothly.
* As many as needed input commands channels can be set. There are many types (see README.parameters).
* As many as needed output commands channels can be set. The purposes are: i) display in a human readable ii) store for replays iii) use the software as a remote control of another instantiation, especially if there is the network in between iv) test that chained inputs and output give the same result.

There is no extended documentation files.
* Some data is in the code. A run of the Doxygen software, separately in the cpp and vhdl version folders generates the documentation in the format one wants.
* Some data (mostly schematics) is in the Documentation folder. A run of the Graphviz software (dot) exports in the format one wants. The work-flow exports into PNG, JPEG or PDF format. The files are in the artifact.
* Some information is in the specialized README files.

The commits into GitHub are up and running, but might contain bugs.

Hardware version
----------------
This version is on hold for some time.
It is similar to the software version but:
* The physical output and the audio waveform are defined at compile time.
* The general output volume is a real input.
* There is no output commands channels.
* There is only one input commands channel of one type.

This version is on hold.

Others related projects
-----------------------
There are two not pinned fun projects in the same GitHub user that implements only the pulse audio waveform. One is a pure electronics (logic and analogue) version, the other one is the VHDL only of a full digital version.