Digital synthesizer project for personal entertainment and education.
On top of those listed in the cargo manifest, the following system packages are required (exact package name will depend on your distro):
pkg-config
libzmq
≥ 4.1alsa
if compiling on Linux (seecpal
docs for more details)
Hardware device drivers are gated behind the hardware
feature flag and will only work on Linux.
- Generalize stream pattern to N-channel audio
- Implement
StereoConsumer
- Implement
- Implement
WavWriter
to save waveform to file - Interface with hardware inputs (e.g.
MeatSpacePot
real-worldPot
implementor) - Figure out sampling/looping scheme -- how should this be implemented?
- Research and implement more filters
- Define different rooms or parameterize
filters::reverb
- Envelope filters?
- Band-pass filters?
- Define different rooms or parameterize
- Research and implement a few instruments
- At the very least, a good-sounding digital keyboard and some sort of drumkit
- Explore possibility of integration of 3rd-party effects (e.g. VST instruments)
- Implement music handling
- Notes and operations on notes
- Scales and operations on scales
- Feeding notes/scales into controls
- Research and implement more controls
- Consider what a
Keyboard
might be -- how are the buttons mapped to notes, or to sounds? How is the sound from a keypress fed into aConsumer
?
- Consider what a
- Implement metronome
-
Sort out the'static
situation (shouldn't be a requirement forGenerator
,Filter
types)- Currently prioritizing ease of use and functionality over correctness --
'static
as a requirement forGenerator
has not proven to be a roadblock in any way, and it may be preferable to code littered with<'a>
explicit lifetimes
- Currently prioritizing ease of use and functionality over correctness --
- Implement some form of CLI for
psynth-play
such that doing new things doesn't always involve modifying thebin/main.rs
and recompiling