mirror of
https://github.com/vsariola/sointu.git
synced 2025-06-04 01:28:45 -04:00
Improve README.
This commit is contained in:
parent
78d4cd50e8
commit
d328431413
70
README.md
70
README.md
@ -14,28 +14,25 @@ produce the audio; however, by now the internal virtual machine has been
|
|||||||
heavily rewritten and extended to make the code more maintainable, possibly
|
heavily rewritten and extended to make the code more maintainable, possibly
|
||||||
even saving some bytes in the process.
|
even saving some bytes in the process.
|
||||||
|
|
||||||
Project goals and current state
|
Implemented features
|
||||||
-------------------------------
|
--------------------
|
||||||
|
- **Per instrument polyphonism**. An instrument has the possibility to
|
||||||
The overly ambitious primary goals of the project:
|
have any number of voices, meaning in practice that multiple instruments can
|
||||||
- **Cross-platform support for win / mac / linux**. The build is already based
|
reuse the same opcodes. Done, see [here](tests/test_polyphony.asm) for an
|
||||||
on CMake and compiles on Windows. Cross-platform YASM macros have been
|
example and [here](src/opcodes/flowcontrol.asm) for the implementation. The
|
||||||
drafted and remain to be tested. Once the project is more mature, I will
|
maximum total number of voices will be 32: you can have 32 monophonic
|
||||||
try compiling on other platforms.
|
instruments or any combination of polyphonic instruments adding up to 32.
|
||||||
- **Per instrument polyphonism**. An instrument should have the possibility to
|
- **Any number of voices per track**. For example, a polyphonic instrument of
|
||||||
have any number of voices. A draft of this has been written, but remains to
|
3 voices can be triggered by 3 parallel tracks, to produce chords. But one
|
||||||
be tested. The maximum total number of voices will be 32: you can have 32
|
track can also trigger 3 voices, for example when using arpeggio. A track
|
||||||
monophonic instruments or any combination of polyphonic instruments adding
|
can even trigger 2 voices of different instruments, alternating between
|
||||||
up to 32.
|
these two; maybe useful for example as an easy way to alternate between an
|
||||||
- **Chords / more than one track per instrument**. For example, a polyphonic
|
open and a closed hihat.
|
||||||
instrument of 3 voices can be triggered by 3 parallel tracks, to produce
|
|
||||||
chords. A draft of this has been written, but remains to be tested.
|
|
||||||
- **Easily extensible**. Instead of %ifdef hell, the primary extension
|
- **Easily extensible**. Instead of %ifdef hell, the primary extension
|
||||||
mechanism will be through new opcodes for the virtual machine. Only the
|
mechanism will be through new opcodes for the virtual machine. Only the
|
||||||
opcodes actually used in a song are compiled into the virtual machine. The
|
opcodes actually used in a song are compiled into the virtual machine. The
|
||||||
goal is to try to write the code so that if two similar opcodes are used,
|
goal is to try to write the code so that if two similar opcodes are used,
|
||||||
the common code in both is reused by moving it to a function. This opcode
|
the common code in both is reused by moving it to a function.
|
||||||
extension mechanism is done.
|
|
||||||
- **Take the macro languge to its logical conclusion**. Only the patch
|
- **Take the macro languge to its logical conclusion**. Only the patch
|
||||||
definition should be needed; all the %define USE_SOMETHING will be
|
definition should be needed; all the %define USE_SOMETHING will be
|
||||||
defined automatically by the macros. Furthermore, only the opcodes needed
|
defined automatically by the macros. Furthermore, only the opcodes needed
|
||||||
@ -58,26 +55,39 @@ The overly ambitious primary goals of the project:
|
|||||||
- **Test-driven development**. Given that 4klang was already a mature project,
|
- **Test-driven development**. Given that 4klang was already a mature project,
|
||||||
the first thing actually implemented was a set of regression tests to avoid
|
the first thing actually implemented was a set of regression tests to avoid
|
||||||
breaking everything beyond any hope of repair. Mostly done, using CTests.
|
breaking everything beyond any hope of repair. Mostly done, using CTests.
|
||||||
Ttests for new opcodes / opcode variants implemented since 4klang are not
|
Tests for new opcodes / opcode variants implemented since 4klang are not
|
||||||
done.
|
done.
|
||||||
- **Support for 64-bit targets**. Not started.
|
|
||||||
|
Future goals
|
||||||
|
------------
|
||||||
|
|
||||||
|
- **Cross-platform support for win / mac / linux**. The build is already based
|
||||||
|
on CMake and compiles on Windows. Cross-platform YASM macros have been
|
||||||
|
drafted and remain to be tested. Once the project is more mature, I will
|
||||||
|
try compiling on other platforms.
|
||||||
|
- **New opcodes**. At least: bit-crush, compressor (with side-chaining),
|
||||||
|
change bpm. Maybe also equalizer.
|
||||||
|
- **Support for 64-bit targets**.
|
||||||
- **Browser-based GUI and MIDI instrument**. Modern browsers support WebMIDI,
|
- **Browser-based GUI and MIDI instrument**. Modern browsers support WebMIDI,
|
||||||
WebAudio and, most importantly, they are cross-platform and come installed
|
WebAudio and, most importantly, they are cross-platform and come installed
|
||||||
on pretty much any computer. The only thing needed is to be able to
|
on pretty much any computer. The only thing needed is to be able to
|
||||||
communicate with the platform specific synth; for this, the best
|
communicate with the platform specific synth; for this, the best
|
||||||
option seems to be to run the synth inside a tiny websocket server that
|
option seems to be to run the synth inside a tiny websocket server that
|
||||||
receives messages from browser and streams the audio to the browser.
|
receives messages from browser and streams the audio to the browser.
|
||||||
Only the feasibility of the approach is proven (localhost websocket calls
|
The feasibility of the approach is proven (localhost websocket calls
|
||||||
have 1 ms range of latency), but nothing more is done yet.
|
have 1 ms range of latency), but nothing more is done yet.
|
||||||
|
|
||||||
Possible, nice-to-have ideas:
|
Nice-to-have ideas
|
||||||
|
------------------
|
||||||
|
|
||||||
- **Sample import from gm.dls**. This is Windows only, but implementing it
|
- **Sample import from gm.dls**. This is Windows only, but implementing it
|
||||||
should be easy and the potential payoffs pretty high for Windows users, so
|
should be easy and the potential payoffs pretty high for Windows users, so
|
||||||
it is a nice prospect.
|
it is a nice prospect.
|
||||||
- **Tracker**. If the list of primary goals is ever exhausted, a browser-based
|
- **Tracker**. If the list of primary goals is ever exhausted, a browser-based
|
||||||
tracker would be nice to take advantage of all the features.
|
tracker would be nice to take advantage of all the features.
|
||||||
|
|
||||||
Anti-goals:
|
Anti-goals
|
||||||
|
----------
|
||||||
- **Ability to run Sointu as a DAW plugin (VSTi, AU, LADSPA and DSSI...)**.
|
- **Ability to run Sointu as a DAW plugin (VSTi, AU, LADSPA and DSSI...)**.
|
||||||
None of these plugin technologies are cross-platform and they are full of
|
None of these plugin technologies are cross-platform and they are full of
|
||||||
proprietary technologies. In particular, since Sointu was initiated after
|
proprietary technologies. In particular, since Sointu was initiated after
|
||||||
@ -120,17 +130,17 @@ http://zine.bitfellas.org/article.php?zine=14&id=35) will still be helpful for
|
|||||||
manipulate the signals. Since then, 4klang has been used in countless of scene
|
manipulate the signals. Since then, 4klang has been used in countless of scene
|
||||||
productions and people use it even today.
|
productions and people use it even today.
|
||||||
|
|
||||||
However, 4klang is pretty deep in the [%ifdef hell](https://www.cqse.eu/en/blog/living-in-the-ifdef-hell/), and the polyphonism was
|
However, 4klang is pretty deep in the [%ifdef hell](https://www.cqse.eu/en/blog/living-in-the-ifdef-hell/),
|
||||||
never implemented in a very well engineered way (you can have exactly 2
|
and the polyphonism was never implemented in a very well engineered way (you
|
||||||
voices per instrument if you enable it). Also, reading through the code,
|
can have exactly 2 voices per instrument if you enable it). Also, reading
|
||||||
I spotted several avenues to squeeze away more bytes. These observations
|
through the code, I spotted several avenues to squeeze away more bytes. These
|
||||||
triggered project Sointu. That, and I just wanted to learn x86 assembly, and
|
observations triggered project Sointu. That, and I just wanted to learn x86
|
||||||
needed a real-world project to work on.
|
assembly, and needed a real-world project to work on.
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
-------
|
-------
|
||||||
|
|
||||||
The original 4klang was developed by Dominik Ries (gopher) and Paul Kraus
|
The original 4klang was developed by Dominik Ries ([gopher](https://github.com/hzdgopher/4klang)) and Paul Kraus
|
||||||
(pOWL) of Alcatraz.
|
(pOWL) of Alcatraz.
|
||||||
|
|
||||||
Sointu was initiated by Veikko Sariola (pestis/bC!).
|
Sointu was initiated by Veikko Sariola (pestis/bC!).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user