Big convolution | Using RackAFX/RackAFX Projects | Forum

Avatar

Please consider registering
guest

sp_LogInOut Log In sp_Registration Register

Register | Lost password?
Advanced Search

— Forum Scope —




— Match —





— Forum Options —





Minimum search word length is 3 characters - maximum search word length is 84 characters

sp_Feed Topic RSS sp_TopicIcon
Big convolution
Avatar
Member
Members
July 24, 2018 - 7:28 pm
Member Since: July 24, 2018
Forum Posts: 5
sp_UserOfflineSmall Offline

Hi will. I am using RackAFX to create my new plug in for my university degree work. I use your book to implement a FIR filter with a convolution but the problem is I need more length for the arrays. And the limit in this method is like 1500. I need minimum 44100/3 and max 2*44100. The only thing that I want to do is implement this big convolution with to array that I define like dynamic memory. I don't know if you know a different form to implement this. I also read the appnote that you have about fast convolution. I have to questions about it. First if the method that you use in this case is similar of the FIR implementation of your book. And second I try to run the DemoFFTconvelver. But when I try to load it, RackAFX shows a message that saids: convolver.dll no found. Where I have to download this dll File. Finally is important to tell you that the two array that I want to make convolution are dynamics and with other methods I generate the samples of each. Thanks for your time willSmileSmileSmileSmileSmileSmileSmileSmileSmileSmile

Avatar
Admin
July 26, 2018 - 1:29 pm
Member Since: January 29, 2017
Forum Posts: 698
sp_UserOfflineSmall Offline

The RackAFX convolver is limited to 1024 points. And the convolution is straight linear convolution (inefficient). 

However, you can do insanely long convolutions with the HiFiLoFiConolver object. One of my grad students used it for long reverb convolution as well as convolving with guitar amp cabinet IRs. He wrote a short App Note that is somewhat mis-title - it doesn't require FFTW, but if you have it installed and you have modified your Visual Studio project to link with it, you can enable it for faster processing. My grad student was getting good results both with and without it. It looks like you found this already. I will do some checking with that DLL that is says is missing and get back to you some time late next week (I am in the middle of traveling). That DLL is not the FFTW DLL, which has a different name. 

http://www.willpirkle.com/app-.....with-fftw/

The HiFiLoFiConvolver object performs a variation of Gardener's Fast Convolution, and it is not linear convolution.

In the Fall I'll be launching a new version of RackAFX and a new plugin framework called ASPiK. With that are more than 55 built-in C++ objects for you to use in your plugins and that includes a new FastConvolver object I coded from scratch using the FFTW package. I can't release anything in the near future, but these changes will start happening around October or so. 

- Will 

Avatar
Member
Members
July 29, 2018 - 11:21 pm
Member Since: July 24, 2018
Forum Posts: 5
sp_UserOfflineSmall Offline

Hi will. I found the problem of the convolver.dll. It was that I was building the code with x64. And the dll was not on the plugin folder. I test the program of your students and it works very good. I only have one problem. The two stage FFT have a function name "fftconv.init", this function receives the convolution head block size, tail block size , the IR array and the convolution length. This method is in prepare for play function and initialize when we put play for the song. In the process audio frame is the function name "fftconv.process" and this receives the input buffer, output buffer, and length. My problem is that in my program I change the values of my IR vector all the time it changes by a function that calculate values every moment. But when I try to initialize fftconv in process audio frame it freeze my computer and RackAFX automatically close, I also try with the reset function and the initialize, and gives me the same problem. I don't know if you have an idea of how to refresh the values of IR array and then calculate the convolution. Thanks for your time Will. Laugh

Avatar
Admin
July 31, 2018 - 5:22 pm
Member Since: January 29, 2017
Forum Posts: 698
sp_UserOfflineSmall Offline

Try compiling in Release mode to avoid CPU overhead from the Debug stub code. 

In many of my IR plugins that use linear convolution, I can only really update the IR on every buffer, rather than every frame. 

It sounds like you are running up against the CPU wall.

- Will

Avatar
Member
Members
November 15, 2021 - 6:24 am
Member Since: April 29, 2020
Forum Posts: 22
sp_UserOfflineSmall Offline

I am also interested in using very long IR for fast convolution. I think that somewhere it will not be possible any more to do enough calculations in the loop. If there are calculations - for example changing the IR itself - that take too much time, I put them out in a separate thread so that the audio engine is not disturbed.

Writing a fast convolution is tricky. 1024 is too short, I would also like to have the length of at least few seconds. Laugh

Avatar
Admin
November 25, 2021 - 3:12 am
Member Since: January 1, 2020
Forum Posts: 107
sp_UserOfflineSmall Offline

Good necro thread, thanks Marc. I haven't heard of this before, hopefully it outperforms the venerable PFFT convolver.  *^‿^/

Yep convolution size is no problem for these magical O(N log N) machines. You just can't update the IR's each audio frame as noted. Usually you'd just need to do that once at init and SR reset.

Cheers

Avatar
New Member
Members
January 10, 2022 - 4:51 am
Member Since: January 23, 2020
Forum Posts: 1
sp_UserOfflineSmall Offline

Hello all,

 

I have been struggling to get the HiFiLoFiConvolver project open as found here: Will Pirkle Audio Technology | Fast Convolution with FFTW

I am able to open it in RackAFX as a project and then I compile it in VS19 with LNK issues, which prevents building and subsequently loading in RackAFX:

 

VS19 gives me the following errors when I try to clean/build:

Severity Code Description Project File Line Suppression State
Error LNK2001 unresolved external symbol GetPluginFactory DemoFFTConvolver D:\RackAFX\RackAFXProjects\DemoFFTConvolver (1)\DemoFFTConvolver\vst3plug.def 1
Error LNK2001 unresolved external symbol VSTPluginMain DemoFFTConvolver D:\RackAFX\RackAFXProjects\DemoFFTConvolver (1)\DemoFFTConvolver\vst3plug.def 1
Error LNK1120 2 unresolved externals DemoFFTConvolver C:\Users\marlo\AppData\Roaming\RackAFX 7.0\PlugIns\DemoFFTConvolver.lib 1

When I look at the vst3plug.def file, it shows the externals as the following:

EXPORTS
        GetPluginFactory
        VSTPluginMain

When investigating this LNK errors, it seem that it has to do with missing libraries, wrong header files, etc.  

Can you help me to resolve this issue?

Thanks in advance!

Avatar
Admin
January 10, 2022 - 10:34 am
Member Since: January 1, 2020
Forum Posts: 107
sp_UserOfflineSmall Offline

Hi Marlow, 

I haven't tried yet so unless it's something simple & you just need to Add->Existing Item... (ctrl-shft-A) to find those missing files, I may not be able to help. Not entirely sure the project will work irrespective of the LNK errors it being 9 years old, can't say though as I use ASPiK.

My suggestion would be to study how Madhur has used the TwoStageFFTConvolver object in the RackAFX files and then try to implement the same into your own project. The code on his Github page seems updated, so you might use that instead for those files.

Maybe someone else has better tip or tried the project though

Cheers

Forum Timezone: America/New_York

Most Users Ever Online: 152

Currently Online:
6 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

Chaes: 56

Skyler: 48

StevieD: 46

Derek: 46

Frodson: 45

Peter: 43

TheSmile: 43

Nickolai: 43

clau_ste: 39

jeanlecode: 37

Member Stats:

Guest Posters: 2

Members: 786

Moderators: 1

Admins: 6

Forum Stats:

Groups: 13

Forums: 42

Topics: 853

Posts: 3385

Moderators: W Pirkle: 698