Skip to content

Commit

Permalink
rename Karplus-StrongSinger KarplusStrongSinger:
Browse files Browse the repository at this point in the history
for faust2lv2
  • Loading branch information
magnetophon committed Oct 23, 2016
1 parent df02aaa commit 9cf668a
Show file tree
Hide file tree
Showing 19 changed files with 115 additions and 230 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,5 @@ Karplus-StrongSingerMaxi
/PureDataBass/
/README.html
/classicVocoderFull
/KarplusStrongSinger
/KarplusStrongSingerMaxi
2 changes: 1 addition & 1 deletion Karplus-StrongSinger.dsp → KarplusStrongSinger.dsp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
declare name "Karplus-StrongSinger";
declare name "KarplusStrongSinger";
declare version "1.1.3";
declare author "Bart Brouns";
declare license "GNU 3.0";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
declare name "Karplus-StrongSingerMaxi";
declare name "KarplusStrongSingerMaxi";
declare version "1.1.3";
declare author "Bart Brouns";
declare license "GNU 3.0";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
declare name "Karplus-StrongSingerMaxi";
declare name "KarplusStrongSingerMaxi";
declare version "1.1.3";
declare author "Bart Brouns";
declare license "GNU 3.0";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
declare name "Karplus-StrongSinger";
declare name "KarplusStrongSinger";
declare version "1.1.3";
declare author "Bart Brouns";
declare license "GNU 3.0";
Expand Down
102 changes: 51 additions & 51 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# VoiceOfFaust

Turns any monophonic sound into a synthesizer, preserving the pitch and spectral dynamics of the input.
Turns any monophonic sound into a synthesizer, preserving the pitch and spectral dynamics of the input.
The name was chosen because I use it mostly to turn my voice into a singing robot, and it's made in [Faust](http://faust.grame.fr).

[These](http://magnetophon.nl/sounds/magnetophon/oldCombo.flac) [are](https://raw.githubusercontent.com/magnetophon/VoiceOfFaust/master/Caribean.mp3) some silly demo songs.
Expand All @@ -17,39 +17,39 @@ VoiceOfFaust consists of:
* a "super-saw" that can be cross-faded to a "super-pulse", free after [Adam Szabo](https://www.nada.kth.se/utbildning/grukth/exjobb/rapportlistor/2010/rapporter10/szabo_adam_10131.pdf)
* flexible Q and frequency setting for the filters
* an elaborate feedback and distortion matrix around the filters
* a couple of vocoders based on oscillators with controllable formants,
so IOW: oscillators that sound like they have a band pass filter on them.
* a couple of vocoders based on oscillators with controllable formants,
so IOW: oscillators that sound like they have a band pass filter on them.
The types of oscillator used in these, are:
* [CZ resonant](#czvocoder) oscillators, ported from a pd patch by [Mike Moser-Booth](http://forum.pdpatchrepo.info/topic/5992/casio-cz-oscillators)
* [PAF](#pafvocoder), ported from a pd patch by [Miller Puckette](http://msp.ucsd.edu/techniques/v0.11/book-html/node96.html)
* [FM](#fmvocoder), based on code by [Chris Chafe](http://chrischafe.net/glitch-free-fm-vocal-synthesis/)
* [FOF](#fofvocoder), based on code by [Michael Jørgen Olsen](https://ccrma.stanford.edu/~mjolsen/220a/fp/Foflet.dsp) and extended as inspired by [Csound](https://csound.github.io/docs/manual/fof2.html)
* [FM](#fmsinger), with modulation by the voice
* [ring-modulation](#czringmod) with a few other CZ-oscillators
* [Karplus-Strong](#karplus-strongSinger): The famous [synthesis technique](https://en.wikipedia.org/wiki/Karplus%E2%80%93Strong_string_synthesis) used as an effect
* [KarplusStrong](#karplus-strongSinger): The famous [synthesis technique](https://en.wikipedia.org/wiki/Karplus%E2%80%93Strong_string_synthesis) used as an effect
* [Phase modulation](#pmfx) used as an effect
* All oscillators are synchronized to a single saw-wave, so they stay in phase, [unless you don't want them to!](#phase-parameters)
* powerful [parameter mapping system](#parameter-mapping-system)
* powerful [parameter mapping system](#parameter-mapping-system)
Lets you set different parameter values for each band, without having to set them all separately
* All synths are spatialized at their core: sounds are generated in stereo, multichannel or ambisonics format,
* All synths are spatialized at their core: sounds are generated in stereo, multichannel or ambisonics format,
not made in mono and afterwards given some stereo width with effects.
* [formant compression/expansion](#formant-compression/expansion):
* [formant compression/expansion](#formant-compression/expansion):
Make the output spectrum more flat or more resonant, at the twist of a knob.
* flexible [in and output routing](#in-and-output-routing), totally changing the character of your synth.
* all parameters, including routing, are step-less, meaning any 'preset' can morph into any other, with the only exception of the octave setting
(though for some of the synths even that one is continuously variable)
* multi-band [deEsser](#deesser) and [reEsser](#reesser)
* Optionally use as a [master-slave](#master-slave) pair
* This is a workaround for the need for an external pitchtracker, making it possible to use these as plugins.
It has the nice side effect that your sounds become fully deterministic:
* Optionally use as a [master-slave](#master-slave) pair
* This is a workaround for the need for an external pitchtracker, making it possible to use these as plugins.
It has the nice side effect that your sounds become fully deterministic:
because a pitchtracker will always output slightly different data, or at least at slightly different moments relative to the audio, the output audio can sometimes change quite a bit from run to run.
* [configuration file](lib/constants.lib)
Through this file, lot's of options can be set at compile time, allowing you to adapt the synth to the amount of CPU power and screen real-estate available.
* [configuration file](lib/constants.lib)
Through this file, lot's of options can be set at compile time, allowing you to adapt the synth to the amount of CPU power and screen real-estate available.
Some of the highlights:
* number of bands of the vocoders
* number of output channels
* whether we want [ambisonics](https://en.wikipedia.org/wiki/Ambisonics) output
* whether a vocoder has nrBands or nrBands * nrOutChan oscillators. [more info](#doubleOscs)
* whether a vocoder has nrBands or nrBands * nrOutChan oscillators. [more info](#doubleOscs)
* Lots more, described in [Features](#features).

<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again -->
Expand Down Expand Up @@ -77,8 +77,8 @@ VoiceOfFaust consists of:
- [other synthesizers](#other-synthesizers)
- [FMsinger](#fmsinger)
- [CZringmod](#czringmod)
- [Karplus-StrongSinger](#karplus-strongsinger)
- [Karplus-StrongSingerMaxi](#karplus-strongsingermaxi)
- [KarplusStrongSinger](#karplus-strongsinger)
- [KarplusStrongSingerMaxi](#karplus-strongsingermaxi)
- [master-slave](#master-slave)

<!-- markdown-toc end -->
Expand All @@ -87,15 +87,15 @@ VoiceOfFaust consists of:
## Building and running


You need Faust from git, because version 0.9.73 and earlier have a bug in lf_sawpos.
You need Faust from git, because version 0.9.73 and earlier have a bug in lf_sawpos.
Otherwise, at least use my_lf_sawpos in lib/master.lib.

Then run ``./install.sh`` to compile. (It doesn't actually install anything.)

It is recommended to run the included puredata pitch tracker.
It is recommended to run the included puredata pitch tracker.
Run it with:
```pd -nodac -nomidi -jack -nogui /path/to//VoiceOfFaust/PureData/OscSendVoc.pd```
The built in pitch-tracker is a bit crude, because Faust cannot do FFT (yet).
The built in pitch-tracker is a bit crude, because Faust cannot do FFT (yet).
Consider it the backup/try-out pitch tracker.


Expand All @@ -108,19 +108,19 @@ Consider it the backup/try-out pitch tracker.
##### parameter mapping system


The parameters for the vocoders use a very flexible control system:
Each parameter has a bottom and a top knob, where the bottom changes the value at the lowest formant band,
and the top the value at the highest formant band.
The rest of the formant bands get values that ere evenly spaced in between.
The parameters for the vocoders use a very flexible control system:
Each parameter has a bottom and a top knob, where the bottom changes the value at the lowest formant band,
and the top the value at the highest formant band.
The rest of the formant bands get values that ere evenly spaced in between.
For some of them that means linear spacing, for others logarithmic spacing.

For even more flexibility there is a parametric mid:
For even more flexibility there is a parametric mid:
You set it's value and band number and the parameter values are now:
* 'bottom' at the lowest band, going to:
* 'mid value' at band nr 'mid band', going to:
* 'top value' at the highest band.
Kind of like a parametric mid in equalizers.
If that's all a bit too much, just set ``para`` to 0 in the [configuration file](lib/constants.lib),
Kind of like a parametric mid in equalizers.
If that's all a bit too much, just set ``para`` to 0 in the [configuration file](lib/constants.lib),
and you'll have just the top and bottom settings.

##### formant compression/expansion
Expand Down Expand Up @@ -154,7 +154,7 @@ See the [site](#http://www.katjaas.nl/helmholtz/helmholtz.html) of the pitchtrac
##### reEsser

Disabled by default, but can be enabled in the [configuration file](lib/constants.lib).
It replaces or augments the reduced highs caused by the
It replaces or augments the reduced highs caused by the

##### doubleOscs

Expand All @@ -164,13 +164,13 @@ This is a compile option, with two settings:

##### in and output routing

The vocoders can mix their bands together in various ways:
We can send all the low bands left and the high ones right,
we can alternate the bands between left and right,
we can do various mid-side variations
we can even do a full [Hadamard matrix](https://en.wikipedia.org/wiki/Hadamard_matrix).
The vocoders can mix their bands together in various ways:
We can send all the low bands left and the high ones right,
we can alternate the bands between left and right,
we can do various mid-side variations
we can even do a full [Hadamard matrix](https://en.wikipedia.org/wiki/Hadamard_matrix).
All of these, and more, can be clicklessly cross-faded between.

In the [classicVocoder](#classicvocoder), a similar routing matrix is between the oscillators and the filters.


Expand Down Expand Up @@ -204,7 +204,7 @@ The gui of the classicVocoder has two sections:
* width of the pulse wave
* mix between a single oscilators and multiple detuned ones
* detuning amount
* filters
* filters
Containing the parameters for the synthesis filters:
* bottom, mid and top set the resonant frequencies
* Q for bandwidth
Expand All @@ -215,7 +215,7 @@ The gui of the classicVocoder has two sections:
* all other filters
* distortion amount
* DC offset

##### CZvocoder

[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/czVocoder-svg/process.svg)
Expand All @@ -225,7 +225,7 @@ You can adjust:
* the formant frequencies
* the [phase parameters](#phase-parameters)


##### PAFvocoder

[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/PAFvocoder-svg/process.svg)
Expand All @@ -244,9 +244,9 @@ Same parameters, different sound.

Original idea by [Xavier Rodet](http://anasynth.ircam.fr/home/english/media/singing-synthesis-chant-program).
Also has frequencies and phases, but adds:
* skirt and decay:
* skirt and decay:
Two settings that influence the brightness of each band
* Octavation index
* Octavation index
Normally zero. If greater than zero, lowers the effective frequency by attenuating odd-numbered sinebursts. Whole numbers are full octaves, fractions transitional.
Inspired by [Csound](https://csound.github.io/docs/manual/fof2.html).

Expand All @@ -260,31 +260,31 @@ A sine wave that modulates its frequency with the input signal.
There are five of these, one per octave, and each one has:
* volume
* modulation index
* modulation dynamics
* modulation dynamics
This fades between 3 settings:
* no dynamics: the amount of modulation stays constant with varying input signal
* normal dynamics: more input volume equals more modulation
* inverted dynamics: more input equals less modulation.


#### CZringmod

[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/CZringmod-svg/process.svg)

Ringmodulates the input audio with emulations of Casio CZ oscillators.
Again five octaves, with each octave containing three different oscillators:
* square and pulse, each having volume and index (brightness) controls
* reso, having a volume and a resonance multiplier:
* reso, having a volume and a resonance multiplier:
This is a formant oscillator, and it's resonant frequency is resMult is multiplied by the formant setting top right.
It is intended to be used with an external formant tracker.
* There is a global width parameter that controls a delay on the oscillators for one output.
The delay time is relative to the frequency.
Because this delay is applied to just the oscillators, and before the ringmodulation, the sound of both output channels arrives simultaneously.
This creates a mono-compatible widening of the stereo image.

#### Karplus-StrongSinger
#### KarplusStrongSinger

[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/Karplus-StrongSinger-svg/process.svg)
[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/KarplusStrongSinger-svg/process.svg)

This takes the idea of a [Karplus Strong algorithm](https://en.wikipedia.org/wiki/Karplus%E2%80%93Strong_string_synthesis), but instead of noise, it uses the input signal.
The feedback is ran trough an allpass filter, modulated with an LFO; adapted from the nonLinearModulator in instrument.lib.
Expand All @@ -302,9 +302,9 @@ For the allpass filters you can set:
* phase offset between the left and right LFO's.
To round things off there is a volume for the dry path and a feedback amount for the delayed one.

#### Karplus-StrongSingerMaxi
#### KarplusStrongSingerMaxi

[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/Karplus-StrongSingerMaxi-svg/process.svg)
[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/KarplusStrongSingerMaxi-svg/process.svg)

To have more voice control of the spectrum, this one has a kind of vocoder in the feedback path.
Since we don't want the average volume of the feedback path changing much, only the volumes relative to the other bands, the vocoder is made out of equalizers, not bandpass filters.
Expand All @@ -324,18 +324,18 @@ It loses the octave slider, and instead has a separate delay and modulation for

[Block diagram](https://magnetophon.github.io/VoiceOfFaust/images/master-svg/process.svg)

* This is a workaround for the need for an external pitchtracker, making it possible to use these as plugins.
It has the nice side effect that your sounds become fully deterministic:
* This is a workaround for the need for an external pitchtracker, making it possible to use these as plugins.
It has the nice side effect that your sounds become fully deterministic:
because a pitchtracker will always output slightly different data, or at least at slightly different moments relative to the audio, the output audio can sometimes change quite a bit from run to run.
* The master is a small program that receives the audio and the OSC messages from the external pitch tracker,
* The master is a small program that receives the audio and the OSC messages from the external pitch tracker,
and outputs:
* a copy of the input audio
* a saw wave defining the pitch and phase
* the value of fidelity, from the pitch tracker, as audio.
* The slaves are synths and effects that input the above three signals.
* The outputs of the master can be recorded into a looper or DAW,
and be used as song building blocks, without needing the pitch tracker.
Now you are 100% free to switch synths, automate parameters, etc.
* The outputs of the master can be recorded into a looper or DAW,
and be used as song building blocks, without needing the pitch tracker.
Now you are 100% free to switch synths, automate parameters, etc.


VoiceOfFaust started life as a port of [VocSynth](https://github.com/magnetophon/VocSynth).
Expand Down
3 changes: 0 additions & 3 deletions faust2firefox

This file was deleted.

Loading

0 comments on commit 9cf668a

Please sign in to comment.