Re: [music-dsp] Reading a buffer at variable speed

2018-03-08 Thread Theo Verelst

I cannot understand from the problem definition if it's a matter of
learning to understand the frequency at a certain point of re-sampling
in mathematical form, supposedly some solution of the constants in a
standard e-power formula like a*e^(b*t+c) with two points of the graph
of such transform given, or if it's about some form of implementation
problem, like how does the number of samples come out exactly, what's the
integral of the function, or rounding issues?

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



Re: [music-dsp] Reading a buffer at variable speed

2018-02-06 Thread Ethan Fenn
Let's let t be the time, and s be the position in the buffer. So, for
example, playing back at double speed you'd just have s=2*t.

To make it exponential, and have s=0 at t=0, we can write:

s = C*R*(e^(t/C) - 1)

Here R is the initial playback rate (R=1 if it should start at normal
pitch), and C is the "chirp time", the time it takes for the playback rate
to increase by a factor of e.

To figure out how long it will take to play back, we set s=L (the length of
the buffer) and solve for t, giving:

t = C*ln(L/(C*R) + 1)

As for your first question, about why the thing you wrote doesn't seem to
work: it looks similar to some confusion I had when I first tried to figure
out how FM works. If you want a sine wave with an (angular) frequency of 1,
you write sin(t). If you want an angular frequency of 2, you write
sin(2*t). So it's tempting to think that if you want the frequency to be
f(t), a function of t, then you should write sin(f(t)*t). I suspect this is
where the factor of t came from in your equation. But this isn't right!
Instead what you want in my FM example is sin(F(t)), where F is in
antiderivative (i.e. integral) of f. The instantaneous frequency isn't
given by the thing that's multiplying t, it's given by the derivative of
the thing inside the sin function.

Hope that sheds some light on your problem.

-Ethan



On Tue, Feb 6, 2018 at 12:59 PM, Stefan Sullivan 
wrote:

> Can you explain your notation a little bit? Is x[t] the sample index into
> your signal? And t is time in samples?
>
> I might formulate it as a Delta of indicies where a Delta of 1 is a normal
> playback speed and you have some exponential rate. Would something like
> this work?
>
> delta *= rate
> t += delta
> y[n] = x[n - t + N]
>
> My notation probably means something different from yours, but the idea is
> the time varying index t accelerates or decelerates at a given rate. I've
> kind of written a hybrid of pseudocode and DSP notation, sorry.
>
> You would probably actually want some interpolation and for an application
> like this one I would probably stick with linear interpolation (even though
> most people on this list will probably disagree with me on that). Keep in
> mind, though, that skipping samples might mean aliasing which will mean
> low-pass filtering your signal (unless you know that there's no frequency
> content in offensive ranges), and since you're essentially doing a variable
> skip rate your low pass filter might either need to be aggressive or
> variable.
>
> Something about this algorithm scares me in it's seemingly unbounded need
> for memory. Seems like a lot of heuristic constraints...
>
> Stefan
>
>
> On Feb 6, 2018 06:45, "Maximiliano Estudies" 
> wrote:
>
> I am having trouble with this concept for quite some time now, I hope that
> I can explain it well enough so you can understand what I mean.
> I have signal stored in a buffer of known length. The buffer must be read
> at a variable speed, and the variations in speed have to be exponential, so
> that the resulting glissandi are (aurally) linear. In order to do that I
> came up with the following formula:
>
> x[t] = t * sample_rate * end_speed^(x[t] / T) where T is the total
> length of the buffer in samples.
>
> This doesn’t seem to work and I can’t understand why.
>
> And my second question is, how can I get the resulting length in
> milliseconds? (how long will it take to play the whole buffer)
>
> I hope I managed to be clear enough!
>
> Maxi
>
> --
> Maximiliano Estudies
> +49 176 36784771 <+49%20176%2036784771>
> maxiestudies.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
>
___
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Re: [music-dsp] Reading a buffer at variable speed

2018-02-06 Thread Stefan Sullivan
Can you explain your notation a little bit? Is x[t] the sample index into
your signal? And t is time in samples?

I might formulate it as a Delta of indicies where a Delta of 1 is a normal
playback speed and you have some exponential rate. Would something like
this work?

delta *= rate
t += delta
y[n] = x[n - t + N]

My notation probably means something different from yours, but the idea is
the time varying index t accelerates or decelerates at a given rate. I've
kind of written a hybrid of pseudocode and DSP notation, sorry.

You would probably actually want some interpolation and for an application
like this one I would probably stick with linear interpolation (even though
most people on this list will probably disagree with me on that). Keep in
mind, though, that skipping samples might mean aliasing which will mean
low-pass filtering your signal (unless you know that there's no frequency
content in offensive ranges), and since you're essentially doing a variable
skip rate your low pass filter might either need to be aggressive or
variable.

Something about this algorithm scares me in it's seemingly unbounded need
for memory. Seems like a lot of heuristic constraints...

Stefan


On Feb 6, 2018 06:45, "Maximiliano Estudies"  wrote:

I am having trouble with this concept for quite some time now, I hope that
I can explain it well enough so you can understand what I mean.
I have signal stored in a buffer of known length. The buffer must be read
at a variable speed, and the variations in speed have to be exponential, so
that the resulting glissandi are (aurally) linear. In order to do that I
came up with the following formula:

x[t] = t * sample_rate * end_speed^(x[t] / T) where T is the total
length of the buffer in samples.

This doesn’t seem to work and I can’t understand why.

And my second question is, how can I get the resulting length in
milliseconds? (how long will it take to play the whole buffer)

I hope I managed to be clear enough!

Maxi

-- 
Maximiliano Estudies
+49 176 36784771 <+49%20176%2036784771>
maxiestudies.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] Reading a buffer at variable speed

2018-02-06 Thread Maximiliano Estudies
 The buffer must be read at a variable speed,

>>Do you mean it has to be played out at higher sample rates ?
yes it has to be played out at higher sample rates, so I start at the
original sample rate and end at sample rate * some chosen value

 how long will it take to play the whole buffer

>>If you can derive an average rate out of it then you can determine it.

could you explain me how?


2018-02-06 17:15 GMT+01:00 Benny Alexandar :

> >> The buffer must be read at a variable speed,
>
> Do you mean it has to be played out at higher sample rates ?
>
> >> how long will it take to play the whole buffer
>
> If you can derive an average rate out of it then you can determine it.
>
> -ben
>
> --
> *From:* music-dsp-boun...@music.columbia.edu  columbia.edu> on behalf of Maximiliano Estudies 
> *Sent:* Tuesday, February 6, 2018 8:15 PM
> *To:* music-dsp@music.columbia.edu
> *Subject:* [music-dsp] Reading a buffer at variable speed
>
> I am having trouble with this concept for quite some time now, I hope that
> I can explain it well enough so you can understand what I mean.
> I have signal stored in a buffer of known length. The buffer must be read
> at a variable speed, and the variations in speed have to be exponential, so
> that the resulting glissandi are (aurally) linear. In order to do that I
> came up with the following formula:
>
> x[t] = t * sample_rate * end_speed^(x[t] / T) where T is the total
> length of the buffer in samples.
>
> This doesn’t seem to work and I can’t understand why.
>
> And my second question is, how can I get the resulting length in
> milliseconds? (how long will it take to play the whole buffer)
>
> I hope I managed to be clear enough!
>
> Maxi
>
> --
> Maximiliano Estudies
> +49 176 36784771 <+49%20176%2036784771>
> maxiestudies.com
>



-- 
Maximiliano Estudies
+49 176 36784771
maxiestudies.com
___
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Re: [music-dsp] Reading a buffer at variable speed

2018-02-06 Thread Benny Alexandar
>> The buffer must be read at a variable speed,

Do you mean it has to be played out at higher sample rates ?

>> how long will it take to play the whole buffer

If you can derive an average rate out of it then you can determine it.

-ben


From: music-dsp-boun...@music.columbia.edu 
 on behalf of Maximiliano Estudies 

Sent: Tuesday, February 6, 2018 8:15 PM
To: music-dsp@music.columbia.edu
Subject: [music-dsp] Reading a buffer at variable speed

I am having trouble with this concept for quite some time now, I hope that I 
can explain it well enough so you can understand what I mean.
I have signal stored in a buffer of known length. The buffer must be read at a 
variable speed, and the variations in speed have to be exponential, so that the 
resulting glissandi are (aurally) linear. In order to do that I came up with 
the following formula:

x[t] = t * sample_rate * end_speed^(x[t] / T) where T is the total length 
of the buffer in samples.

This doesn’t seem to work and I can’t understand why.

And my second question is, how can I get the resulting length in milliseconds? 
(how long will it take to play the whole buffer)

I hope I managed to be clear enough!

Maxi

--
Maximiliano Estudies
+49 176 36784771
maxiestudies.com
___
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp