Re: [music-dsp] Bandlimited morphable waveform generation

2016-09-22 Thread gm


Am 22.09.2016 um 12:18 schrieb André Michelle:


How do I detect discontinuities? It is easy to see when printed 
visually but I do not see how I can approach this with code. Do I need 
the ‘complete’ function at once and check or can I do it in runtime 
for each sample. I think so since you suggest that I can jump around 
within the function without alias? Because that would sound like a 
solution I wanted to have from the very beginning.


You "detect" them they way you construct them.
For instance you have a phase ramp, say from -.5 to .5, you know that 
the discontinuity happens
when your phase + frequency_step is > 0.5, and it happens in that 
fraction of a sample
when the phase would be 0.5, so it happens at (phase + frequency_step - 
0.5)/frequency_step fraction




I do not quite get this: C(1). Does it mean I have C(n) values of the 
function where C(1) is the second value?


It's about differentiability and smoothness
"The function f is said to be of differentiability class Ck if the 
derivatives f′, f′′, ..., f(k) exist and are continuous"

See https://en.wikipedia.org/wiki/Smoothness
But you can ignore this for now...



What frequency does the integrated sync function has?


It has the same bandlimit as your waveform should have


What is a 'fraction of a sample'?
The jump in your sawtooth waveform happens within a fraction of a sample 
time, as explained above
When you read your wavetables you also read them at fractions of a 
sample (and interpolate to get the value at this fraction of a sample), 
all your signal exists also between samples.



I am missing to many aspects of your suggestion. Any hints where to 
learn about this would be appreciated.


I also have a question: what is the benefit of having a synthesizer in a 
webbrowser?


___
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Re: [music-dsp] Bandlimited morphable waveform generation

2016-09-22 Thread Emanuel Landeholm
> How do I detect discontinuities? It is easy to see when printed visually
but I do not see how I can approach this with code. Do I need the
‘complete’ function at once and check or can I do it in runtime for each
sample. I think so since you suggest that I can jump around within the
function without alias? Because that would sound like a solution I wanted
to have from the very beginning.

How to detect discontinuities is an interesting question. In the context of
replacing discontinuities with corrective grains I'm wondering if a simple
algorithm that just looks at sample differences might be enough. A sinc
would produce false positivies, but at the same time it would be
"corrected" with an integrated sinc.

On Thu, Sep 22, 2016 at 12:18 PM, André Michelle 
wrote:

> Hi Andrew,
>
>
> I am having a hard time understanding what you are suggesting.
>
> Don't use wavetables!
>
>
> I would be pleased not to.
>
> As you have constructed your desired waveform as a continuous function
> all you have to do is work out where any discontinuities in C(n) occur
> and you can band limit those use corrective grains for each C(n)
> discontinuity at fractions of a sample where the discontinuity occurs.
> Adding sync to this is trivial is you just do the same thing, in fact
> you can jump between any two points in your waveform or waveform shape
> instantly if you want to create even more interesting waveforms.
>
>
> How do I detect discontinuities? It is easy to see when printed visually
> but I do not see how I can approach this with code. Do I need the
> ‘complete’ function at once and check or can I do it in runtime for each
> sample. I think so since you suggest that I can jump around within the
> function without alias? Because that would sound like a solution I wanted
> to have from the very beginning.
>
> For example a sawtooth is C(1) continuous all the time, it just has a
> jump in C(0) every now and again, so you just band limit those jumps
> with a C(0) corrective grain - which is an integrated sinc function to
> give you a bandlmited step, then subtract the trivial step from this,
> and add in this corrective grain at a fraction of a sample to
> re-construct your fraction of a sample band limited step.
>
>
> I do not quite get this: C(1). Does it mean I have C(n) values of the
> function where C(1) is the second value?
> What frequency does the integrated sync function has?
> What is a 'fraction of a sample'?
>
> Similarly you can bandlimit C(1) and C(2) discontinuities, after that
> the amplitude of the discontinuities is so small that it rarely
> matters if you are running at 88.2 / 96 khz.
>
>
> I am missing to many aspects of your suggestion. Any hints where to learn
> about this would be appreciated.
>
> ~
> André Michelle
> https://www.audiotool.com
>
>
> ___
> dupswapdrop: music-dsp mailing list
> music-dsp@music.columbia.edu
> https://lists.columbia.edu/mailman/listinfo/music-dsp
>
___
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Re: [music-dsp] Bandlimited morphable waveform generation

2016-09-22 Thread André Michelle
Hi Andrew,


I am having a hard time understanding what you are suggesting.

> Don't use wavetables!

I would be pleased not to.

> As you have constructed your desired waveform as a continuous function
> all you have to do is work out where any discontinuities in C(n) occur
> and you can band limit those use corrective grains for each C(n)
> discontinuity at fractions of a sample where the discontinuity occurs.
> Adding sync to this is trivial is you just do the same thing, in fact
> you can jump between any two points in your waveform or waveform shape
> instantly if you want to create even more interesting waveforms.

How do I detect discontinuities? It is easy to see when printed visually but I 
do not see how I can approach this with code. Do I need the ‘complete’ function 
at once and check or can I do it in runtime for each sample. I think so since 
you suggest that I can jump around within the function without alias? Because 
that would sound like a solution I wanted to have from the very beginning.

> For example a sawtooth is C(1) continuous all the time, it just has a
> jump in C(0) every now and again, so you just band limit those jumps
> with a C(0) corrective grain - which is an integrated sinc function to
> give you a bandlmited step, then subtract the trivial step from this,
> and add in this corrective grain at a fraction of a sample to
> re-construct your fraction of a sample band limited step.

I do not quite get this: C(1). Does it mean I have C(n) values of the function 
where C(1) is the second value?
What frequency does the integrated sync function has?
What is a 'fraction of a sample'?

> Similarly you can bandlimit C(1) and C(2) discontinuities, after that
> the amplitude of the discontinuities is so small that it rarely
> matters if you are running at 88.2 / 96 khz.

I am missing to many aspects of your suggestion. Any hints where to learn about 
this would be appreciated.

~
André Michelle
https://www.audiotool.com 

___
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp