-
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
-
lilakmonoke
synch-val just sends out all variables from left to right if one of them changes. sorry, i thought that comes along with the patch.
@weightless yes thats it exactly, thanks! i started off with nested ifs but then thought thats exactly what logic comparators are for, but the left to right rule in pd is really a bitch in logic networks.
anyways, thats a much simpler solution, thanks. i recon this patch might be useful to somebody. i make minimal experimental hardware music and do all my sequencing in pd by now ... audio tracks are in the signature.
-
lilakmonoke
here is a patch i just made because i do a lot of midi sequencing and these vintage machines have very different midi time lag.
it basically takes three integers for milliseconds, finds the lowest one and then delays the output to the other two machines accordingly. using "pipe". i usually feed it with bangs but pipe will also delay numbers etc. ... so this can be used in many ways.
im wondering if this could be written simpler, i use nested logical comparators and the correct order of the variables is a bit of a nightmare to figure out in PD.
-
lilakmonoke
those are good looking graphics, what pure data version are you using? im on debian vanilla and it looks horrible.
-
lilakmonoke
here is another one that turned out really well i think. its based on a strange swing pattern: 3232323231=24
from pure data straight to tape, no edits, only euclidian patterns and number sequences that drive them. listen to one instrument and you can hear the pattern changes ... its how they all go together thats interesting to me.
-
lilakmonoke
fucking awesome! although i see how difficult it is to control the compositional part of it but the structural part is stunning. the power of the euclidian algorhythm!
-
lilakmonoke
sounds great to me! really like the soundtrack to some future william gibson scripted cyberpunk video game. im working on something similar but more minimal based on patterns so it would be great to be able to look at the patches.
-
lilakmonoke
the psychotic cover image goes really well with the audio ... "only one cassette was made ... " and SOLD OUT is funny but kind of pointless
-
lilakmonoke
just updated the post with recent tracks, now that we can embed soundcloud stuff. excellent move of the forum, thanks!
-
lilakmonoke
i just did this piece where im emulating the obscure opl2 2-op fm chip. the fm sounds are run through an analog filter and the bassdrum is from an 808. all the patterns are based on 5 versus 12. all recorded on tascam 644 cassette deck.
there is an extensive description on muffwiggler:
http://www.muffwiggler.com/forum/viewtopic.php?p=1595749#1595749]
high res audio:
http://tindeck.com/listen/idwc
soundcloud:
the patch (there is no way to include imgs?):
http://googledrive.com/host/0B1beo8lTIeKlOVlESHpWbkpIR2c/helike.png
-
lilakmonoke
ive been messing around with simulating drums with frequency modulation in pure data but dont really get anywhere. digital fm sounds really good but what is missing is the right dynamics like in this video about japanese taiko drumming.
physical drums is all about the buildup that happens when you add new strokes to the skin. its kind of an energy pool that you add to which fades away if you dont keep it up.
anybody has any clue how to simulate that efficiently? im on a really fast linux machine so processing power is not really an issue.