-
lilakmonoke
this thread is 7 years old but still fascinating, especially acreills rundown of the vintage synths synthesis as im working on an old school wavetable synth with variable sample rate for a while. i still havent found a way to simulate variable sample rate with correct mirror frequencies in PD. the best way to do this now in hardware would be FPGA and an A-Law Dac that is being driven by the fpga with variable speed - i think.
synths like the PPG wave or the microwave sound exactly so cool because the mirror frequencies move with the tuning harmonically - or disharmonically there is a video of an interview with one of the engineers of the prophet vs where he explains that a strange sounding sine from a PPG wave was one of the main inspirations for the prophet vs.
so tuning, sample rate and resolution are essential for the sound of an instrument.does anybody have any clue as to how to simulate the mirror frequencies and variable sample rate in PD?
-
lilakmonoke
hi folks, thanks for the kind comments!
sure ill share the patch eventually but right now its an uncommented messy laboratory affair. best thing you can do right now is look at the patch image above which is quite self explanatory.
here is the vs rom in one wav file, scan this in 128 chunks of 128 samples and you have the single wave data.
harmonic aliasing is best described by acreil in the above mentioned blog post because thats where i got the idea from. the rest is trial and error and a lot of listening to integer combinations.
harmonic aliasing is actually my own term for what im trying to do. here is how i would describe it:
-
if you repeat 128 samples with a phasor at 128 hz (or 64/32/16/8/4/2) or any multiple of 128 your phasor restarts exactly at the beginning of the wave data and the aliasing frequencies generated by the steppyness of the data will follow the harmonic overtone series 1,2,3 etc. depending on the multiple.
-
if you introduce another prime divider ie. 3 as in 128 / 3 the phasor will line up with the sample data every 3rd sample and the osc will alias at the 3rd subharmonic frequency which will be somewhat more disharmonic than any overtone.
-
another way to look at it would be the pattern repetitions. at subdivision 5 the phasor starts at 5 different points in the sample data and its easy to imagine that the readout patterns are all slightly different ... but the whole thing cycles after 5 phasor rounds = 5th subharmonic..
-
if you subdivide 128 further with a higher prime ie. 563 you will get 562 different sounding samples until nr. 563 lines up again. get the idea?
this is all very easy to hear once you experiment with prime subdivisions and multiplications. just remember its all based on synching the data flow from the sample with the frequency of the index phasor. this will work with ANY sample data, the vs rom is just cool to use for vintage synth fans.
whats important for proper aliasing is that you use a simple [tabread] into the data without any interpolation like tabread4 or oversampling!
all the other elements in the synth like delay, waveshaper, sequencer follow the same rule as they are just repetition devices like the wavetable oscillator.
if you finally synch everything to the sample rate of your soundcard the voltages that hit your speakers will repeat in exact patterns. thats the idea of this synth: precision number repetition controlled by harmonic/disharmonic integer combinations ... just like the great 80s synths waldorf microwave or prophet vs.
-
-
lilakmonoke
hi all ... im developing a funky wavetable synth thats inspired by the sequential circuits prophet 2000 from 1985. it uses the original 12 bit ROM from this synth and and a synthesis menthod called harmonic aliasing.
- all frequencies and repeat rates are related by simple integer relationships
- adaptive just intonation = infinite tuning systems
- 3 oscillators per voice
- wavetables by multiplexing oscs with waveshaped sines
- variable sample rate simulation via resampling with audiorate wavetables (BLITs)
- integrated complex numeric sequencer
- integrated delay for hardware mixer feedback loop with analog eqs
basically it includes everything i think is cool about numeric sequencing and is still really low on dsp because its all based on integers mechanics like early wavetable synths.
this synth can sound really ambient or real raw depending on the complexity of the number relationships and the waveshaping settings. eventually this is going to be a hardware synth with FPGA technology, variable sample rate per oscillator and analog eqs/filter ... just like in the 80s
project logo:
https://i.imgur.com/F1kqrMt.png
prototype patch:
wave multiplexing:
.
harmonic aliasing is inspired by a patch by acreil: https://forum.pdpatchrepo.info/topic/6759/new-anti-aliasing-and-phase-distortion-abstractions.
early discussion: https://forum.pdpatchrepo.info/topic/11176/adaptive-sample-rate-and-harmonic-aliasing-in-pd
.
mixer delay feedback loop feature:
lots of different sounds with audiorate waveshaping:
.
-
lilakmonoke
that vocal filter with fm is really nice! im working on a wavetable synth that could use a good filter ...
-
lilakmonoke
here is a description of the waveform generation. now we need a patch for this ...
"the main idea behind BLIT is that these analog synth waveforms that we are trying to generate digitally can be thought of as the integral (over tt) of impulse trains.
a sawtooth can be thought of as the integral of the sum of a little bit of DC and an impulse train. a square wave is the integral of impulses of alternating signs. the triangle wave is the integral of the square wave.
so, to create bandlimited waveforms of the above, the impulse trains are bandlimited which means that each impulse δ(t−tn)δ(t−tn) is replaced by a sinc(t−tn)sinc(t−tn) function, which is that impulse bandlimited through a Nyquist brick-wall LPF. that sequence of bandlimited impulses is a BLIT.
then, since integration is a filter with s-plane transfer function of H(s)=1sH(s)=1s and is LTI (Linear, Time-Invariant), integrating the BLITs will introduce no new frequency components. if your BLITs are bandlimited, so are the other waveforms that are derived from filtering the BLITs."
-
lilakmonoke
hi david ... thanks! impulse~ seems to be what im interested in. whats in that abstraction? weiss-archive.de is the author?
i know how to do an impulse train, its described in the miller puckette book and based on half a sine wave that can be shaped via ring modulation with another sine wave. but the one in the video seems to be based on another transfer function + a low pass filter for bandwidth limiting. also he describes that it can be integrated into a saw, pulse and triangle wave. but how?
all this should be easy to do in pure data but without a description of the process i dont know where to start.
-
lilakmonoke
hi all ... i just saw this fascinating video where stefan stenzel from german synth designer waldorf explains how to use BLITs for sample rate conversion but cant figure out how to do this in PD.
specifically im trying to simulate a mid 80s sample based synth with variable sample rate oscillators. maybe thats the way to go? does anybody have a patch that demonstrates BLITs?
there seems to be hardly any info on this around the only thing i can find is this:
https://dsp.stackexchange.com/questions/15779/band-limited-impulse-train-synthesis
-
lilakmonoke
really interesting this guy is from waldorf, who definitely know how to write brilliant audio code ... im not sure i would know how to do this in pd so id love to see an example patch.
ive just tried the approach by acreil and this works! its rather simple too, all you have to do is find a close integer relationship between the number of samples in your waveform, (128 in my case) and the frequency you want it to be played. ie. 8 : 5 x 128 and voila ALL DISHARMONIC ALIASING DISAPPEARS and turns into harmonic overtones, no matter how high the frequency is.
ill include a patch soon ...
-
lilakmonoke
this is really intersting and based on the same idea i think. im not sure if it will work with samples but maybe it includes a solution to that too. thanks!
if somebody has another solution please let me know. variable samplerate is the solution to all disharmonic aliasing! it will still alias but in a good way ... here is an interview with one of the inventors of this synth where he explains why ...
more discussion about harmonic aliasing:
https://forum.pdpatchrepo.info/topic/11176/adaptive-sample-rate-and-harmonic-aliasing-in-pd
.
-
lilakmonoke
hi all .. i have a tricky problem and am kind of stuck.
i want to simulate a sampler with variable samplerate, more precisely the sequential circuits prophet VS. ... this synth used wave data with 128 samples each and had 32 oscillators that were tuned via subdividing a fixed clock rate into variable bitrate DACs.
ie. playing a sample at 200 hz clockrate resulted in a DAC samplerate of 200 x 128 = 25800 hz ... this of course results in totally different aliasing than fixed samplerate because the nyquist frequency moves harmonically with each tuning.
im trying to simulate that in PD with over/undersampling but how?
here is how it sounds now: http://tindeck.com/listen/jvchf