(posted this on the Pd forum, but it was suggested that I e-mail the list as well, so here I am out of lurk mode)
I was working on some patches with bandpass filters that were initially [vcf~], but I ended up deciding not to vary the center frequency, so I replaced them with [bp~]. Now I find that [bp~] sounds different; e.g., a [phasor~ 100] going through a [bp~ 440 3] sounds different from one going out the left outlet of a [vcf~ 3] with [sig~ 440] going into its center inlet. I couldn't find anything in the help files indicating that they're different other than using control vs. signal for the center frequency, so what's the deal? How do I replace a non-varying [vcf~] with a [bp~] that sounds the same?
--Stefán
Ichabod a écrit :
(posted this on the Pd forum, but it was suggested that I e-mail the list as well, so here I am out of lurk mode)
I was working on some patches with bandpass filters that were initially [vcf~], but I ended up deciding not to vary the center frequency, so I replaced them with [bp~]. Now I find that [bp~] sounds different; e.g., a [phasor~ 100] going through a [bp~ 440 3] sounds different from one going out the left outlet of a [vcf~ 3] with [sig~ 440] going into its center inlet. I couldn't find anything in the help files indicating that they're different other than using control vs. signal for the center frequency, so what's the deal? How do I replace a non-varying [vcf~] with a [bp~] that sounds the same?
source code for both object look really diferent, so i don't know if it is possible. but seriously : why do you need to replace vcf~ with bp~???
Cyrille
--Stefán
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Tue, Jul 14, 2009 at 8:32 AM, cyrille henry cyrille.henry@la-kitchen.frwrote:
source code for both object look really diferent, so i don't know if it is possible. but seriously : why do you need to replace vcf~ with bp~???
Cyrille
I wouldn't say I *need* to, I'd just like to... Here's an example: I was making a composition that used a choral pad with vcf~ objects acting as movable formants. I decided I only really need the voices to sing "aaaaah," so I realized I don't need the movable formants after all, so I can economize on CPU by using static bandpass filters rather than moving ones. I've never seen anything about differences between the filters' internal math, so I was surprised to find that they sound different.
So basically what I want to know is: if I have a vcf~ with a given q and constant center frequency, is there a way to replace it more cheaply?
--Stefán
Ichabod a écrit :
So basically what I want to know is: if I have a vcf~ with a given q and constant center frequency, is there a way to replace it more cheaply?
i agree that vcf~ made more computation, so it should be more cpu intensive. but did you benchmarck this? i mean : if you don't have 1000 of them, you will certainly not noticed any difference.
spending time to optimised 0.01% cpu is loosing time IMO.
use Super Colider if you wish to use 1000 filter in the same time...
just my opinion...
cyrille
--Stefán
Hallo, Ichabod hat gesagt: // Ichabod wrote:
So basically what I want to know is: if I have a vcf~ with a given q and constant center frequency, is there a way to replace it more cheaply?
I don't fully grok the method used in vcf~, but if you want to have consistent filters with reproducable algorithms, you could build filters with the elementary filter objects provided in Pd, i.e. rzero~, rpole~, czero~ and cpole~ or biquad~. Then the filter program is in the diagram.
Common methods to design filters are the Filter-EQ-Cookbok and J.O. Smith's filter/dsp website. The rj-library http://trac.rjdj.me/wiki/RjLibnew includes some helpers for this.
Frank
Thanks for the responses! I've seen the filter patches in the RJ library but haven't tried them yet; I guess I should.
Also, since Cyrille mentioned benchmarking, what's the best way to do this?
--Stefán
Hallo, Ichabod hat gesagt: // Ichabod wrote:
Thanks for the responses! I've seen the filter patches in the RJ library but haven't tried them yet; I guess I should.
Also, since Cyrille mentioned benchmarking, what's the best way to do this?
For rough benchmarking dsp objects, I generally just put what I'd like to test into an abstraction, then I create a lot of copies and watch the load meter accessible through the Pd menu. It's a bit crude, but quick to do.
For benchmarking message based objects I use [cputime]: Again make an abstraction that e.g. receives a bang on a global receiver to start the calculation. Then use a triple-trigger:
[start benchmark( | [t b b b] | | | | | [s reset_cputime] | [s benchmark] [s get_cputime]
[s reset_cputime] | [s get_cputime] | | [cputime] | [0\
Frank