Re: [Faudiostream-users] Faust HTTP speed
Hi Stephane, Sorry, it's 10ms to update a parameter... math error on my part. As I said, it takes about 30 seconds to update a Faust jack client with 3136 (=49*64) parameters, which is roughly 10 ms per parameter. This was with jack, the jack client written in Faust, and the Python script performing the update, all running on my MacBook Pro. There are two versions of the Python, one that opens a new connection for each update and one that keeps the connection open; the timing for both is the same. I also tried it with jack and the Faust jaxk client running on a RPi4 and the Python running on my MBP, with the same ~10ms/update result. The 49x64 parameter matrix corresponds to playing sixth-order ambisonics over a 64 speaker array, which is the situation at the Stage at CCRMA. The decoder has two matrices, high and low frequencies, so about a minute to update. I'm looking for a solution that would be at least 10x faster. Thanks... Aaron On Tue, Jan 3, 2023 at 12:44 AM Stéphane Letz wrote: > How do you measure this « 100 ms to update » delay? > > Stéphane > > > Le 3 janv. 2023 à 02:12, Aaron Heller a écrit : > > > > As a warmup exercise for the next version of my ambisonic decoder > engine, I made a matrix mixer in Faust and compiled it with httpd support. > You can see the code and the Python program I wrote to control it in the > repo --- mmd.dsp and mmd_control.py, respectively: > > > https://bitbucket.org/ambidecodertoolbox/adt_evaluation/src/AES153/faust/ > > > > It looks like it takes ~100 ms to update a single entry, so I assume > it's processing one request per slow-time loop. In my application, these > matrices could have thousands of entries, so, for example, a 49x64 matrix > takes over 30 seconds to update. Is there a way to speed this up? Are > there better ways to update the coefficients of an array? Over the network > is convenient, but loading from a local file would be fine too. > > > > Thanks... > > > > Aaron Heller > > Menlo Park, CA US > > > > ___ > > Faudiostream-users mailing list > > Faudiostream-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
[Faudiostream-users] Faust HTTP speed
As a warmup exercise for the next version of my ambisonic decoder engine, I made a matrix mixer in Faust and compiled it with httpd support. You can see the code and the Python program I wrote to control it in the repo --- mmd.dsp and mmd_control.py, respectively: https://bitbucket.org/ambidecodertoolbox/adt_evaluation/src/AES153/faust/ It looks like it takes ~100 ms to update a single entry, so I assume it's processing one request per slow-time loop. In my application, these matrices could have thousands of entries, so, for example, a 49x64 matrix takes over 30 seconds to update. Is there a way to speed this up? Are there better ways to update the coefficients of an array? Over the network is convenient, but loading from a local file would be fine too. Thanks... Aaron Heller Menlo Park, CA US ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
[Faudiostream-users] Online FAUST compiler and MacOS Monterey quarantine -- a solution
I'm sending this along in case someone else encounters it and this saves them 30+ minutes of head scratching and online searching. MacOS Monterey adds the extended attribute "com.apple.quarantine" to any files that are downloaded from the internet. Even if you've download a zip file, the contents get marked when it is unzipped. So when I use the FAUST online compiler (a wonderful resource, by the way) to make a VST or AU plugin, host programs like Plogue Bidule will refuse to load it, throwing an error about unsigned binaries. Apple is trying to protect you from running malware, so use this only if you trust the source of the file. A better fix would be if the online FAUST compiler signed the binaries it produced, but here's what you can do for now: In a terminal, xattr shows the extended attribute: heller% xattr -r CMAP8c8s4c3h3vacnn3dvienna.vst CMAP8c8s4c3h3vacnn3dvienna.vst/Contents/MacOS/CMAP8c8s4c3h3vacnn3dvienna: com.apple.quarantine CMAP8c8s4c3h3vacnn3dvienna.vst/Contents/MacOS: com.apple.quarantine CMAP8c8s4c3h3vacnn3dvienna.vst/Contents/Info.plist: com.apple.quarantine CMAP8c8s4c3h3vacnn3dvienna.vst/Contents/PkgInfo: com.apple.quarantine CMAP8c8s4c3h3vacnn3dvienna.vst/Contents: com.apple.quarantine CMAP8c8s4c3h3vacnn3dvienna.vst: com.apple.quarantine The fix is to remove the attribute: heller% xattr -dr com.apple.quarantine CMAP8c8s4c3h3vacnn3dvienna.vst heller% xattr -r CMAP8c8s4c3h3vacnn3dvienna.vst [no output] Aaron Heller Menlo Park, CA US ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
[Faudiostream-users] Cross-compiling Win64 VSTs on MacOS 12.6.2, missing dll
I'm trying to compile a FAUST dsp file to VST for Win64 Plogue Bidule as the host. This worked fine before I upgraded to Monterey and reinstalled MacPorts. Using faust2faustvst on my Mac produces a VST that works fine in Bidule on my Mac (Intel processor). Using faust2w64vst on MacOS, produces a VST DLL that results in an Error 126 when Bidule on Win64 tries to load it (calls "LoadLibrary"). The online Faust compiler produces a DLL that loads without error. Looking at the two DLLs in a Win64 dependencies checker (dependancies.exe), I see that the one compiled on my Mac needs libwinpthread-1.dll and the one compiled online does not. Note that the dependency checker stops at the first missing file, so there may be others. I'm using mingw-w64 version 10.0.0 from MacPorts as the cross-compiler toolchain on my Mac, which includes gcc version 12.2. What version of mingw does the online compiler use? Ubuntu 22.04LTS (jammy) uses mingw-w64 8.0.0. I'll note that when linking, I get the warning: x86_64-w64-mingw32-dllwrap: WARNING: x86_64-w64-mingw32-dllwrap is deprecated, use gcc -shared or ld -shared instead Simply substituting "ld -shared" for dllwrap results in the error: x86_64-w64-mingw32-ld: unrecognized option '--target=x86_64-w64-mingw32' Looks like a pretty mature port https://ports.macports.org/port/mingw-w64/details/ Thanks for any help with this... Aaron Heller Menlo Park, CA US ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Compile error message with ADT
I've removed the now-conflicting definition of "route" from the ADT decoder and pushed it to the ADT repo. https://bitbucket.org/ambidecodertoolbox/adt/src/master/ As Henrik noted, it was not used in the implementation, so an easy fix! Thanks... Aaron On Mon, Oct 28, 2019 at 8:05 AM Stéphane Letz wrote: > > > Le 28 oct. 2019 à 15:40, Henrik Frisk a écrit : > > > > Thank you Stéphane for the swift response! > > The point is that « route » is now a language primitive, so any code > that was defining the symbol will possibly break. If the code was initially > generated by « Ambisonic Decoder Toolkit », then ADT will need to be > updated. > > > > > I will consider upgrading to Master dev. Are there any things that are > not funktional in dev? > > > > Henrik > > > > Nothing I am aware of ((-; > > Stéphane > > ___ > Faudiostream-users mailing list > Faudiostream-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Precision of constants in generated C++
Thanks! Aaron On Sunday, April 24, 2016, Stéphane Letz wrote: > Fixed on GIT for 'float' and ‘double'. Note the ‘quad’ handling is not yet > fully implemented as deferent places in the compiler. > > Stéphane > > > > Le 24 avr. 2016 à 03:43, Aaron Heller > > a écrit : > > > > Looking over the C++ that Faust generates, it seems that constants are > always single precision, regardless of the translation options. I > appreciate that the input and output samples are aways going to be single > precision, but there are times when it would be useful to have greater > precision internally, say the coefficients in a biquad IIR filter when the > cutoff frequency is much lower than the sample rate. > > > > To illustrate, the program: > > > > process = _: *(1/9) :_; > > > > with no options compiles to: > > > > output0[i] = FAUSTFLOAT((0.11f * float(input0[i]))); > > > > with -double compiles to: > > > > output0[i] = FAUSTFLOAT((0.11 * double(input0[i]))); > > > > and -quad > > > > output0[i] = FAUSTFLOAT((0.11 * quad(input0[i]))); > > > > so the samples are getting converted, but the representation of 1/9 > remains single precision. I'd expect to see a lot more digits in double > and quad. I'm using this version of Faust currently: > > > > bash-3.2$ faust -v > > FAUST : DSP to C, C++, JAVA, JavaScript/ASMJavaScript, WebAssembly, LLVM > IR version 2.0.a42 > > Copyright (C) 2002-2016, GRAME - Centre National de Creation Musicale. > All rights reserved. > > > > > > Thanks for any feedback or advice... > > > > Aaron Heller (hel...@ai.sri.com ) > > Menlo Park, CA US > > > -- > > Find and fix application performance issues faster with Applications > Manager > > Applications Manager provides deep performance insights into multiple > tiers of > > your business applications. It resolves application problems quickly and > > reduces your MTTR. Get your free trial! > > > https://ad.doubleclick.net/ddm/clk/302982198;130105516;z___ > > Faudiostream-users mailing list > > Faudiostream-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > > > -- > Find and fix application performance issues faster with Applications > Manager > Applications Manager provides deep performance insights into multiple > tiers of > your business applications. It resolves application problems quickly and > reduces your MTTR. Get your free trial! > https://ad.doubleclick.net/ddm/clk/302982198;130105516;z > ___ > Faudiostream-users mailing list > Faudiostream-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > -- Find and fix application performance issues faster with Applications Manager Applications Manager provides deep performance insights into multiple tiers of your business applications. It resolves application problems quickly and reduces your MTTR. Get your free trial! https://ad.doubleclick.net/ddm/clk/302982198;130105516;z___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
[Faudiostream-users] Precision of constants in generated C++
Looking over the C++ that Faust generates, it seems that constants are always single precision, regardless of the translation options. I appreciate that the input and output samples are aways going to be single precision, but there are times when it would be useful to have greater precision internally, say the coefficients in a biquad IIR filter when the cutoff frequency is much lower than the sample rate. To illustrate, the program: process = _: *(1/9) :_; with no options compiles to: output0[i] = FAUSTFLOAT((0.11f * float(input0[i]))); with -double compiles to: output0[i] = FAUSTFLOAT((0.11 * double(input0[i]))); and -quad output0[i] = FAUSTFLOAT((0.11 * quad(input0[i]))); so the samples are getting converted, but the representation of 1/9 remains single precision. I'd expect to see a lot more digits in double and quad. I'm using this version of Faust currently: bash-3.2$ faust -v FAUST : DSP to C, C++, JAVA, JavaScript/ASMJavaScript, WebAssembly, LLVM IR version 2.0.a42 Copyright (C) 2002-2016, GRAME - Centre National de Creation Musicale. All rights reserved. Thanks for any feedback or advice... Aaron Heller (hel...@ai.sri.com) Menlo Park, CA US -- Find and fix application performance issues faster with Applications Manager Applications Manager provides deep performance insights into multiple tiers of your business applications. It resolves application problems quickly and reduces your MTTR. Get your free trial! https://ad.doubleclick.net/ddm/clk/302982198;130105516;z___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Matrix multiplication
Hi Pierre, I took a 25x32 matrix of random numbers between -1 and +1 and made a VST plugin using this code. On my MacBook with Plogue Bidule as the host, it uses about 3% of the CPU. Perhaps you can describe your application a bit. Aaron On Fri, Oct 10, 2014 at 1:42 PM, Pierre Lecomte wrote: > Thank you for your solution ! > It's working for small matrix dimensions. > I tried with a big matrix (32 inputs, 25 outputs) but unfortunately it's > killing the CPU, lots of xruns, and no sound.. > Maybe an alternate solutions for big matrix .. ? > > Thanks > Pierre > > > Pierre, > > > > There's probably a better way, but this works for what I need. > > > > > > // bus with gains > > gain(c) = R(c) with { > > R((c,cl)) = R(c),R(cl); > > R(1) = _; > > R(0) = !; > > //R(0) = !:0; // if you need to preserve the number of outputs > > R(float(0)) = R(0); > > R(float(1)) = R(1); > > R(c) = *(c); > > }; > > > > // n = number of inputs > > // m = number of output > > matrix(n,m) = par(i,n,_) <: par(i,m,gain(a(i)):>_); > > > > a(0) = (0.5, -0.5, 1.1, 1.2,0); > > a(1) = (1,2,3,4,-1); > > a(2) = (0.5,0.5,0,0.25,1/3); > > a(3) = (0,0,0,.1, sqrt(2)); > > > > process = matrix(5,4); > > > > Aaron (hel...@ai.sri.com) > > Menlo Park, CA US > > > > > > On Mon, Sep 22, 2014 at 8:12 AM, Pierre Lecomte > > > > > wrote: > > > Hello, > > > > > > I would like to know if there is a easy-way to perform matrix > > > multiplication in FAUST : > > > > > > More precisely, I would like to multiply N input audio streams by a > > > constant matrix (M x N) to obtain M output audio streams : > > > > > > a0 a1 a2 in1out1 > > > a3 a4 a5 X in2= out2 > > > > > >in3 > > > > > > I would like to avoid to explicitely write the matrix operation : > > > out1 = a0 in1 + a1 in2 + a2 in3, etc. > > > > > > Thank you for your help > > > > > > Pierre > -- Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://p.sf.net/sfu/Zoho___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Matrix multiplication
Pierre, There's probably a better way, but this works for what I need. // bus with gains gain(c) = R(c) with { R((c,cl)) = R(c),R(cl); R(1) = _; R(0) = !; //R(0) = !:0; // if you need to preserve the number of outputs R(float(0)) = R(0); R(float(1)) = R(1); R(c) = *(c); }; // n = number of inputs // m = number of output matrix(n,m) = par(i,n,_) <: par(i,m,gain(a(i)):>_); a(0) = (0.5, -0.5, 1.1, 1.2,0); a(1) = (1,2,3,4,-1); a(2) = (0.5,0.5,0,0.25,1/3); a(3) = (0,0,0,.1, sqrt(2)); process = matrix(5,4); Aaron (hel...@ai.sri.com) Menlo Park, CA US On Mon, Sep 22, 2014 at 8:12 AM, Pierre Lecomte wrote: > Hello, > > I would like to know if there is a easy-way to perform matrix > multiplication in FAUST : > > More precisely, I would like to multiply N input audio streams by a > constant matrix (M x N) to obtain M output audio streams : > > a0 a1 a2 in1out1 > a3 a4 a5 X in2= out2 >in3 > > I would like to avoid to explicitely write the matrix operation : > out1 = a0 in1 + a1 in2 + a2 in3, etc. > > Thank you for your help > > Pierre > > > -- > Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer > Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports > Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper > Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer > > http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk > ___ > Faudiostream-users mailing list > Faudiostream-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > -- Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] recursive structures
Hi Geoffrey, I found recursive composition the most difficult part of Faust to master. One think to keep in mind is that the ~ operator has the highest precedence of all the operators, so when you write A ~ B, the output of B is split into two signals, one will be connected to the first input of A, the other is an output. In your case, where you want to send it to an earlier operator, you need to add parentheses to override the precedence. I think this does what you want: process = ((*(1),*(2) :+) ~ *(3)) ~ *(4) ; or process = (*(1),*(2) :>_) ~ (_<: *(3), *(4)) ; I did it as a number of small steps, using faust2firefox at each step to confirm process = *(1),*(2); // two wires with gain process = *(1),*(2) :+ ; // sum them process = (*(1),*(2) :+) ; // group to override ~ precidence process = (*(1),*(2) :+) ~ *(3) ; // first recursive loop, uses first input of + process = ((*(1),*(2) :+) ~ *(3)) ; // group again process = ((*(1),*(2) :+) ~ *(3)) ~ *(4) ; // second recursive loop, uses second input of + // reduce to one recursive composition, the A ~ B structure is clearer process = (*(1),*(2) :+) ~ (_<: *(3), *(4)) ; // for complete symmetry, replace + with merge process = (*(1),*(2) :>_) ~ (_<: *(3), *(4)) ; I hope that helps, Aaron Heller (hel...@ai.sri.com) Menlo Park, CA US On Sat, Apr 5, 2014 at 4:01 AM, Geoffrey Barton wrote: > Firstly, not having posted before, I should like to express my admiration > for the creators of Faust. It has a way to go but already shows a better > way of writing signal processing code! > > > Is there any way of getting a feedback structure such as:- > > process=_,_: (*(x1),*(x2)): + ~ (*(y1),*(y2)); > > > so that the input gain x1 sums with the feedback gain path y1 and the > input gain x2 to the feedback path y2? > > I have tried all kinds of re-arrangement but, being a beginner at Faust, > it either does not compile or ends up with the same block diagram as before! > > Geoffrey > > > -- > > ___ > Faudiostream-users mailing list > Faudiostream-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > -- ___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Issue with latest version of Faust and Max/MSP plug-in generation
Hi Orlarey, I can add a few details. As near as I can tell, the problem is with the faust2msp script, as I can copy the dsp file to the faust/examples directory and then 'make msp' will create mxo files with a bundle in Contents/MacOS. (I don't have a copy of MaxMSP to confirm it works correctly). Andrew has upgraded to Maverick, but I'm still on Mountain Lion. The faust2msp script started failing when I upgraded to Xcode version 5.0.1, which was released concurrently with the Maverick upgrade. faust2vst and faust2au are working correctly. Thanks… Aaron On Wed, Nov 6, 2013 at 11:26 AM, Orlarey Yann wrote: > Hi Andrew, > > Have you the same problem with other architectures ? Is the generated C++ > code correct ? > > Cheers > > Yann > > > Le 06/11/13 19:22, Andrew Kimpel a écrit : > > Hi Faust forum. > > > > I've been using Faust in conjunction with Aaron Heller's Ambisonic > Decoder Toolkit (ADT) > > and have come across an issue with trying to generate Max/MSP plugins > from Faust .dsp > > files. The issue occurs both with my local version of Faust (under Mac > OS 10.9) and with > > the online compiler. > > > > What i'm seeing is that the actual Max/MSP executable file seems to be > missing / stripped > > out from the .mxo external, i.e when i go and open the 'Package > Contents' of the .mxo file > > and look under [Contents | MacOS] the folder is empty. Both the .cpp and > .dsp files are > > present however. > > > > Is anyone else seeing this or am i just doing something stupid? I've > been using Aaron's > > toolkit to generate custom Ambisonic decoders for installations and > haven't had any > > problems up until now. > > > > Any feedback / suggestions are appreciated. > > > > best, > > -Andrew > > > > > > > > > > > > > -- > > November Webinars for C, C++, Fortran Developers > > Accelerate application performance with scalable programming models. > Explore > > techniques for threading, error checking, porting, and tuning. Get the > most > > from the latest Intel processors and coprocessors. See abstracts and > register > > > http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk > > > > > > > > ___ > > Faudiostream-users mailing list > > Faudiostream-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > > > > > -- > November Webinars for C, C++, Fortran Developers > Accelerate application performance with scalable programming models. > Explore > techniques for threading, error checking, porting, and tuning. Get the most > from the latest Intel processors and coprocessors. See abstracts and > register > http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk > ___ > Faudiostream-users mailing list > Faudiostream-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > -- November Webinars for C, C++, Fortran Developers Accelerate application performance with scalable programming models. Explore techniques for threading, error checking, porting, and tuning. Get the most from the latest Intel processors and coprocessors. See abstracts and register http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Linear phase EQ?
Hi Marc, I recognize your name from the sursound list, so I assume you're interested in shelf filters for ambisonic(ish) decoders. I've been implementing a Faust backend for my Ambisonic decoder toolbox. The full implementation is not quite ready, but I have finished the phase-matched band-splitting filters as shown in the Appendix of our paper "Is My Decoder Ambisonic?" (aka BLaH3), as well as a state-variable realization of the the bessel filters used for near-field correction. I'm glad to share what I have, if that's useful. Aaron Heller (hel...@ai.sri.com) Menlo Park, CA US On Sun, Jun 23, 2013 at 7:11 AM, Marc Lavallée wrote: > > Bonjour! > > I'm new to the list, and to the Faust software; I tried it yesterday, > and like doctor Faust I'm ready to give my soul... But I need some > help, since I'm not a specialist in signal processing. > > I want to build a special stereo decoder, and part of the recipe > requires two Linear Phase EQs (one low-shelf and one-high shelf). It is > something easy to do with Faust? It is already available in some > library? > > Merci! > -- > Marc > > > -- > This SF.net email is sponsored by Windows: > > Build for Windows Store. > > http://p.sf.net/sfu/windows-dev2dev > ___ > Faudiostream-users mailing list > Faudiostream-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > -- This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
Re: [Faudiostream-users] Regalia-Mitra filter bank in FAUST
In general, I've found that the combination of 'par' and 'sum' with 'take' triggers long translation times, because take is O(n) in the number of graph nodes generated, so the overall behavior is O(n^2). I was trying to implement a hilbert transformer (512 length FIR) with the definition of 'fir' in filter.lib and getting compilations that timed out at 500s (I didn't have the patience to wait 60 min). I made a new definition of fir that avoids sum and take (and has some other special case rules) and now get translation times around 0.5 sec. Looking at the 'light' case, both generate the same C++ code. I put a copy of the full file at http://www.ai.sri.com/ajh/hilbert.dsp // light length = 33 //process = firx(hilbert_light_coeffs); //real 0m0.033s user 0m0.016s sys 0m0.013s //process = fir(hilbert_light_coeffs); //real 0m0.068s user 0m0.048s sys 0m0.016s // medium length = 257 //process = firx(hilbert_medium_coeffs); //real 0m0.116s user 0m0.096s sys 0m0.017s //process = fir(hilbert_medium_coeffs); // abort at 500s // heavy length = 513 process = firx(hilbert_heavy_coeffs);//real 0m0.516s user 0m0.492s sys 0m0.022s //process = fir(hilbert_heavy_coeffs); // abort at 500s firx(coeffs) = fir_cell(coeffs):>_ with { fir_cell(0) = !; fir_cell(float(0)) = fir_cell(0); fir_cell(1) = _; fir_cell(float(1)) = fir_cell(1); fir_cell((0,(coeffs))) = (mem:fir_cell(coeffs)); fir_cell((float(0),(coeffs))) = fir_cell((0,coeffs)); fir_cell((c,0)) = fir_cell(c); fir_cell((c,float(0))) = fir_cell((c,0)); fir_cell((c,(coeffs))) = _<:fir_cell(c),(mem:fir_cell(coeffs)); fir_cell(c) = *(c); }; Best... Aaron Heller (hel...@ai.sri.com) Menlo Park, CA US -- Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users
[Faudiostream-users] VST unique IDs and lables
Hi... I've been having a lot of fun writing Faust programs and generating VST plugins to use in Plogue Bidule. One problem is that many of the programs have the same set of GUI items or no GUI at all, so they get the same 'unique ID' and Bidule flags them as an error. My workaround is to make a do-almost-nothing control with a unique name. (it has to do something or else it gets optimized out of the graph).Is there a better way to deal with this? Perhaps specify the ID in the declarations. Or include the plugin name and author strings in the hash. Also, is there a way to set the labels on the plugin inputs and outputs? I'd be happy to work on the VST architecture files with a bit of guidance. Thanks... Aaron Heller (hel...@ai.sri.com) Menlo Park, CA US -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users