Re: [music-dsp] Reading a buffer at variable speed
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
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 Sullivanwrote: > 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
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
>>>> 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 <ben.a...@outlook.com>: > >> 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 <music-dsp-bounces@music. > columbia.edu> on behalf of Maximiliano Estudies <maxiestud...@gmail.com> > *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
>> 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 <music-dsp-boun...@music.columbia.edu> on behalf of Maximiliano Estudies <maxiestud...@gmail.com> 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<http://maxiestudies.com> ___ dupswapdrop: music-dsp mailing list music-dsp@music.columbia.edu https://lists.columbia.edu/mailman/listinfo/music-dsp
[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