Csound Csound-dev Csound-tekno Search About

[Csnd] Aliasing when reading tables fast, how to avoid?

Date2010-11-14 22:04
FromJim Credland
Subject[Csnd] Aliasing when reading tables fast, how to avoid?

Folks - I'm sure this problem has been solved a million times, but I  
can't work the solution out.  If I'm reading a table from an audio  
file, and want to play at an increasing rate, how can I avoid aliasing  
noise?   Buggered if I can find the solution with google, and most  
things can be found with google.

I'm doing approximately this (where sound.wav is a couple of seconds  
long loop):

giWav	ftgen 0, 0, 0, 1, "sound.wav", 0, 0, 1
...
kcps line 1, p3, 100
aphasor phasor kcps
a1 tab aphasor, giWav, 1
out a1

Any bright ideas?  I assume it's an aliasing problem anyway, I may be  
wrong, but there's some pretty odd high frequency clutter appearing.  
Increasing the sr= is beneficial but not perfect.

Some kind of massive oversampling and a filter? 


Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2010-11-14 22:18
FromVictor Lazzarini
Subject[Csnd] Re: Aliasing when reading tables fast, how to avoid?
You'll need to decide what is the fastest rate you will play it   
back,  then filter it with a good parametric EQ, removing all
components that will be aliased. Then you can load and play it back at  
that rate.

Say you will play a sound 2x at 44100. Then you should apply a filter  
at around 10K, so that little energy is left
beyond 11025Hz. Then when this is played double-speed, very little  
will be aliased art 22050Hz.


Victor

On 14 Nov 2010, at 22:04, Jim Credland wrote:

>
>
> Folks - I'm sure this problem has been solved a million times, but I  
> can't work the solution out.  If I'm reading a table from an audio  
> file, and want to play at an increasing rate, how can I avoid  
> aliasing noise?   Buggered if I can find the solution with google,  
> and most things can be found with google.
>
> I'm doing approximately this (where sound.wav is a couple of seconds  
> long loop):
>
> giWav	ftgen 0, 0, 0, 1, "sound.wav", 0, 0, 1
> ...
> kcps line 1, p3, 100
> aphasor phasor kcps
> a1 tab aphasor, giWav, 1
> out a1
>
> Any bright ideas?  I assume it's an aliasing problem anyway, I may  
> be wrong, but there's some pretty odd high frequency clutter  
> appearing. Increasing the sr= is beneficial but not perfect.
>
> Some kind of massive oversampling and a filter?
>
> Send bugs reports to the Sourceforge bug tracker
>           https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
> "unsubscribe csound"
>



Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2010-11-14 22:44
FromJim Credland
Subject[Csnd] Re: Re: Aliasing when reading tables fast, how to avoid?
Victor - The problem is that the playback frequency is variable over a  
wide range.  I think your method only works when the playback  
frequency is known in advance.  Otherwise when playing back slowly all  
the top end will be missing.

thoughts?

J.
On 14 Nov 2010, at 22:18, Victor Lazzarini wrote:

> You'll need to decide what is the fastest rate you will play it   
> back,  then filter it with a good parametric EQ, removing all
> components that will be aliased. Then you can load and play it back  
> at that rate.
>
> Say you will play a sound 2x at 44100. Then you should apply a  
> filter at around 10K, so that little energy is left
> beyond 11025Hz. Then when this is played double-speed, very little  
> will be aliased art 22050Hz.
>
>
> Victor
>
> On 14 Nov 2010, at 22:04, Jim Credland wrote:
>
>>
>>
>> Folks - I'm sure this problem has been solved a million times, but  
>> I can't work the solution out.  If I'm reading a table from an  
>> audio file, and want to play at an increasing rate, how can I avoid  
>> aliasing noise?   Buggered if I can find the solution with google,  
>> and most things can be found with google.
>>
>> I'm doing approximately this (where sound.wav is a couple of  
>> seconds long loop):
>>
>> giWav	ftgen 0, 0, 0, 1, "sound.wav", 0, 0, 1
>> ...
>> kcps line 1, p3, 100
>> aphasor phasor kcps
>> a1 tab aphasor, giWav, 1
>> out a1
>>
>> Any bright ideas?  I assume it's an aliasing problem anyway, I may  
>> be wrong, but there's some pretty odd high frequency clutter  
>> appearing. Increasing the sr= is beneficial but not perfect.
>>
>> Some kind of massive oversampling and a filter?
>>
>> Send bugs reports to the Sourceforge bug tracker
>>          https://sourceforge.net/tracker/?group_id=81968&atid=564599
>> Discussions of bugs and features can be posted here
>> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
>> "unsubscribe csound"
>>
>
>
>
> Send bugs reports to the Sourceforge bug tracker
>           https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
> "unsubscribe csound"
>



Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2010-11-14 23:06
FromVictor Lazzarini
Subject[Csnd] Re: Re: Re: Aliasing when reading tables fast, how to avoid?
You could always use various copies of the same thing filtered at  
different frequencies and crossfade as you get higher/lower. That is  
how vco2 does alias-free waveforms
(multiple wavetables).

Also (I have not tried this), GEN 30 appears to allow re-sampling of  
tables to generate multiple wavetables. See the example in GEN32.

Victor

On 14 Nov 2010, at 22:44, Jim Credland wrote:

> Victor - The problem is that the playback frequency is variable over  
> a wide range.  I think your method only works when the playback  
> frequency is known in advance.  Otherwise when playing back slowly  
> all the top end will be missing.
>
> thoughts?
>
> J.
> On 14 Nov 2010, at 22:18, Victor Lazzarini wrote:
>
>> You'll need to decide what is the fastest rate you will play it   
>> back,  then filter it with a good parametric EQ, removing all
>> components that will be aliased. Then you can load and play it back  
>> at that rate.
>>
>> Say you will play a sound 2x at 44100. Then you should apply a  
>> filter at around 10K, so that little energy is left
>> beyond 11025Hz. Then when this is played double-speed, very little  
>> will be aliased art 22050Hz.
>>
>>
>> Victor
>>
>> On 14 Nov 2010, at 22:04, Jim Credland wrote:
>>
>>>
>>>
>>> Folks - I'm sure this problem has been solved a million times, but  
>>> I can't work the solution out.  If I'm reading a table from an  
>>> audio file, and want to play at an increasing rate, how can I  
>>> avoid aliasing noise?   Buggered if I can find the solution with  
>>> google, and most things can be found with google.
>>>
>>> I'm doing approximately this (where sound.wav is a couple of  
>>> seconds long loop):
>>>
>>> giWav	ftgen 0, 0, 0, 1, "sound.wav", 0, 0, 1
>>> ...
>>> kcps line 1, p3, 100
>>> aphasor phasor kcps
>>> a1 tab aphasor, giWav, 1
>>> out a1
>>>
>>> Any bright ideas?  I assume it's an aliasing problem anyway, I may  
>>> be wrong, but there's some pretty odd high frequency clutter  
>>> appearing. Increasing the sr= is beneficial but not perfect.
>>>
>>> Some kind of massive oversampling and a filter?
>>>
>>> Send bugs reports to the Sourceforge bug tracker
>>>         https://sourceforge.net/tracker/?group_id=81968&atid=564599
>>> Discussions of bugs and features can be posted here
>>> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
>>> "unsubscribe csound"
>>>
>>
>>
>>
>> Send bugs reports to the Sourceforge bug tracker
>>          https://sourceforge.net/tracker/?group_id=81968&atid=564599
>> Discussions of bugs and features can be posted here
>> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
>> "unsubscribe csound"
>>
>
>
>
> Send bugs reports to the Sourceforge bug tracker
>           https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
> "unsubscribe csound"
>



Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2010-11-14 23:19
FromJim Credland
Subject[Csnd] Re: Re: Re: Re: Aliasing when reading tables fast, how to avoid?
Will have a go tomorrow.  Need some sleep.

Just knocked up a similar function in puredata though. There's an  
oversampling demo in the help files, so I borrowed their code.  It  
solved the problem in the most straightforward (if not most  
computationally efficient) way.   Is there an oversampling solution  
for csound?  I can't imagine how it would work straightforwardly,  
probably running with very large values of sr?


On 14 Nov 2010, at 23:06, Victor Lazzarini wrote:

> You could always use various copies of the same thing filtered at  
> different frequencies and crossfade as you get higher/lower. That is  
> how vco2 does alias-free waveforms
> (multiple wavetables).
>
> Also (I have not tried this), GEN 30 appears to allow re-sampling of  
> tables to generate multiple wavetables. See the example in GEN32.
>
> Victor
>
> On 14 Nov 2010, at 22:44, Jim Credland wrote:
>
>> Victor - The problem is that the playback frequency is variable  
>> over a wide range.  I think your method only works when the  
>> playback frequency is known in advance.  Otherwise when playing  
>> back slowly all the top end will be missing.
>>
>> thoughts?
>>
>> J.
>> On 14 Nov 2010, at 22:18, Victor Lazzarini wrote:
>>
>>> You'll need to decide what is the fastest rate you will play it   
>>> back,  then filter it with a good parametric EQ, removing all
>>> components that will be aliased. Then you can load and play it  
>>> back at that rate.
>>>
>>> Say you will play a sound 2x at 44100. Then you should apply a  
>>> filter at around 10K, so that little energy is left
>>> beyond 11025Hz. Then when this is played double-speed, very little  
>>> will be aliased art 22050Hz.
>>>
>>>
>>> Victor
>>>
>>> On 14 Nov 2010, at 22:04, Jim Credland wrote:
>>>
>>>>
>>>>
>>>> Folks - I'm sure this problem has been solved a million times,  
>>>> but I can't work the solution out.  If I'm reading a table from  
>>>> an audio file, and want to play at an increasing rate, how can I  
>>>> avoid aliasing noise?   Buggered if I can find the solution with  
>>>> google, and most things can be found with google.
>>>>
>>>> I'm doing approximately this (where sound.wav is a couple of  
>>>> seconds long loop):
>>>>
>>>> giWav	ftgen 0, 0, 0, 1, "sound.wav", 0, 0, 1
>>>> ...
>>>> kcps line 1, p3, 100
>>>> aphasor phasor kcps
>>>> a1 tab aphasor, giWav, 1
>>>> out a1
>>>>
>>>> Any bright ideas?  I assume it's an aliasing problem anyway, I  
>>>> may be wrong, but there's some pretty odd high frequency clutter  
>>>> appearing. Increasing the sr= is beneficial but not perfect.
>>>>
>>>> Some kind of massive oversampling and a filter?
>>>>
>>>> Send bugs reports to the Sourceforge bug tracker
>>>>        https://sourceforge.net/tracker/?group_id=81968&atid=564599
>>>> Discussions of bugs and features can be posted here
>>>> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
>>>> "unsubscribe csound"
>>>>
>>>
>>>
>>>
>>> Send bugs reports to the Sourceforge bug tracker
>>>         https://sourceforge.net/tracker/?group_id=81968&atid=564599
>>> Discussions of bugs and features can be posted here
>>> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
>>> "unsubscribe csound"
>>>
>>
>>
>>
>> Send bugs reports to the Sourceforge bug tracker
>>          https://sourceforge.net/tracker/?group_id=81968&atid=564599
>> Discussions of bugs and features can be posted here
>> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
>> "unsubscribe csound"
>>
>
>
>
> Send bugs reports to the Sourceforge bug tracker
>           https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body  
> "unsubscribe csound"
>



Send bugs reports to the Sourceforge bug tracker
            https://sourceforge.net/tracker/?group_id=81968&atid=564599
Discussions of bugs and features can be posted here
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"

Date2010-11-15 21:37
FromMark Van Peteghem
Subject[Csnd] Re: Aliasing when reading tables fast, how to avoid?
I think you can handle this nicely with vco2init, vco2ft and oscilikt. 
With these you can let CSound create a bunch of tables behind the 
scenes, suitable for different rates so aliasing is avoided. Here is an 
example of how I did this.

Do this once:

iwave_new ftgen 0, 0, i_table_len, ...
i_tmp vco2init -iwave_new, iwave_new+1, 1.02, 128, i_table_len, iwave_new
iwave = -iwave_new

Then do this to generate the signal:

kfn    vco2ft kfreq, iwave, 1
asig   oscilikt 1, kfreq, kfn


In my case kfreq was the actual frequency I wanted, if you use samples 
you may have to adjust this.

I'm not sure how much memory this will use when your samples are big, 
but I used it successfully with i_table_len = 2^18, which is about 250,000.


Regards,

Mark

Jim Credland wrote:
>
>
> Folks - I'm sure this problem has been solved a million times, but I 
> can't work the solution out.  If I'm reading a table from an audio 
> file, and want to play at an increasing rate, how can I avoid aliasing 
> noise?   Buggered if I can find the solution with google, and most 
> things can be found with google.
>
> I'm doing approximately this (where sound.wav is a couple of seconds 
> long loop):
>
> giWav    ftgen 0, 0, 0, 1, "sound.wav", 0, 0, 1
> ...
> kcps line 1, p3, 100
> aphasor phasor kcps
> a1 tab aphasor, giWav, 1
> out a1
>
> Any bright ideas?  I assume it's an aliasing problem anyway, I may be 
> wrong, but there's some pretty odd high frequency clutter appearing. 
> Increasing the sr= is beneficial but not perfect.
>
> Some kind of massive oversampling and a filter?
>
> Send bugs reports to the Sourceforge bug tracker
>            https://sourceforge.net/tracker/?group_id=81968&atid=564599
> Discussions of bugs and features can be posted here
> To unsubscribe, send email sympa@lists.bath.ac.uk with body 
> "unsubscribe csound"
>
>