Need advice for some planned projects

Hi :slight_smile:

I have some big ideas I want to realize with the Befaco lich, and I have no idea about wheter or not it´s possible. I have no prior coding experience, so it´s a blank slate of possibilities. I am learning the basics of pure data and C++ currently, so I wont be completely helpless upon getting one. My question is more if it´s possible for the hardware/how difficult it might be.

Project 1:
A spectral analyzer with a variable amount of oscillators to replicate the input (allá Rossum Electronics Panharmonium). I´ve made a fourier analysis tool in PD, but need to figure out how to rout it to the controls. I´d like to know if this is possible for the processor, or if it´s to stranious to have multiple oscillators all drooning off at the same time.

A potentiometer: controls amount of oscillators from 1 to 20
B potentiometer: control the range of frequencies to be analyzed
C potentiometer: Dry/Wet mix
D potentiometer: Wave form select for oscillators
Button 1: Freeze
Button 2: tap for the rate at which the incoming audio is transformed to spectral data.
Gate 1: sets the rate at which the incoming audio is transformed to spectral data)
Gate 2: Freeze on/off

Project 2: Coco module emulation (8 bit digital looping delays)

I absolutely love the cocoquantus by Peter Blaser, especially the looper/delay part. Although it won´t be possible to get the noisy character replicated, I still find the unique functions like “Flip” and “skip”. The input needs to provide a 1ms attack and 200ms decay switch waveform filter. I´m still working on decoding the schematic, and then contemplate what makes the thing tick…
Here it is for anyone curiouse

A potentiometer: Feedback
B potentiometer: input gain
C potentiometer: speed of loop/delay time
D potentiometer: pitch amount/modulation
Button 1: “dolby” filter on/off
**Button 2:**loop on/off
Gate 1: “dolby” filter on/off CV
Gate 2: loop on/off CV

I hope this post is not somehow against the rules, but I´m asking for advice/methods of implimenting my ideas into a PD patch. Thanks :slight_smile:

Hi @0wlie,

It’s not against the rules and actually I’m a bit sad that we don’t get that much people discussing their patch ideas on this forum!

I suspect that trying to make anything with FFT in PD could give you performance problems. Your best bet is to do it in C++, because then you can use existing optimized code that would leave you with enough performance for multiple VCOs.

If you’re set on making it in PD, you may get better results if you start not with a FFT, but with a bandpass filter bank + envelope followers. This is kind of how it is usually done with analog vocoders or filter banks. The difference between using FFT and this approach is that with FFT you’re dealing with linear frequency bins distribution, while with filter bank you can use any frequencies that you find appropriate. So you can spread their frequencies logarithmically in order to get the same number of filters for each octave.

Also, it seems like you could use one audio input as mono audio, then you could use second input for something else - i.e. FM modulation. Or you could use it for one of the effects to perform it at audio rates.

Regarding the second project, it sounds quite doable. Note that CV inputs on OWL is updated every 1.33ms, so if you want to update something faster than that you’d have to use an audio input.

FYI, button/gates can’t be used separately - that is you have to button inputs that can be triggered by pressing physical button or by CV in gate input jacks. But gate output can be set independently, so you could use it for something. Could be used to output loop end or start trigger in the second case.

1 Like

Hi @0wlie!

posting ideas for cool projects is definitely not against the rules (do we even have any?).

Both projects are indeed very cool, and ambitious! If you’re just starting out in programming it would be good to set some intermediary goals. Start with the simplest possible version of your patch (one oscillator?) and build up.

Project 1:
The hardware is capable of running many oscillators (20 sine oscs is no problem) and is also capable of FFT transforms. Doing both simultaneously will be challenging. And Pure data is not very efficient, so to do Fourier analysis you’ll probably have to use c++. Good news is we’ve got you covered with some nice, fast libraries, see e.g. FFT Through.

Project 2:
Oh no that PDF is terrible! I’m sure it’s a great device, but reading that is worse than reading… someone else Perl script?
If I understand the ‘punching in’ bit correctly, then this is something I know and love: momentarily allowing sound into an almost closed feedback loop. Or maybe that’s not what they’re talking about at all?

1 Like

I must say, you’re not going to be able to sell $1000+ hipster instruments with that attitude! Readable schematics that makes sense and is not drawn with a pencil in your left hand, who would even want such a thing?!

2 Likes

Thanks for the advice with the bandpass filter, I will prototype that method!

I´m not quite sure how FM would fit into the project, but i guess you could get creative and somehow mess with the waveforms of the oscillators (but this would probably result in a distorted resynthesis image). I´m curiouse, why would you do the input in mono?

Thanks for the library!!

I´m still working on fully understanding the thing, although I belive your theory with the punch in/out is right. It has a very fragmented sound, and if you put the speed all the way up, almost granular. I fugured I could build a full kill variable filter to go in and out depending on gate, but I still have to figure out how to get the looper right as of now.

Regarding “resynthesis” - actually, I’m not sure if you’re supposed to use RFFT in this kind of voice. My understanding is that Panharmonium performs Fourier transform on incoming audio and uses frequency bins to control oscillator frequencies. But those would be just digital VCOs, not generated with RFFT. I may be wrong about this, didn’t research this module a lot.

Hey @0wlie and rest,
Great ideas!

I was just trying to make something Paulstretch-like, and ran into Derek Kwan’s GREAT abstractions: GitHub - derekxkwan/pdkvabs: pure data abstractions

Sadly, the rifft~ etc objects in Pd are not supported by the compiler! :frowning: So, it does not compile & I wouldn’t know how to do this otherwise in Pd. Was also looking at FAUST, but that also has very limited fft possibilities.

Any plans on expanding Heavy, by any chance? I can imagine FFT might also be a bit too CPU intensive!

Edit: just to start sharing more- here is the patch I was working on. Note: it does not work… But maybe someone can try finding a workaround. https://www.rebeltech.org/patch-library/patch/mij_paulstretchlike

All the best!

@maark,

Heavy is a complex compiler, it’s not very likely that it would get FFT operations added soon. It’s also fairly slow, so even if optimized code for FFT processing is integrated into it, it may end up not having enough resources for reasonable use.

I may be too pessimistic here, since they do have a convolution implementation that is conceptually similar and could be used as an example for FFT support. But If you want to use FFT right away, you should start writing C++ patches.

Hey @0wlie, I am slowly figuring out how to do the Panharmonium idea you mentioned.
As the [clone] pd object is not available in the Pd version the compiler supports, I made a tool to quickly make a lot of objects and inputs/outputs progamatically. This generated object can then be used in your patch.

Here’s an example creating a subpatch with 20 bandpass filters, which I feel is a good start. It would need envelope followers, then sending these values to also generated synthesis objects. It’s a start!

EDIT: Oof I’m not allowed to upload Pd files… @antisvin @mars can that be adjusted? :slight_smile:

I don’t think it’s a problem if PD uploads are allowed, but wouldn’t it be to use the web patcher for sharing code samples?

Btw, what kind of tool are you talking about - some kind of PD preprocessor script?

A Pd patch that uses libraries that are not allowed in the Heavy compiler, but which is able to generate subpatches which ARE useable in the heavy compiler and can then be copied into a new patch. I don’t think that would be suitable for the web patch uploader as it does not compile.

Mainly a tool to generate functions that you need a lot of (such as duplicating filters to create a filter bank), as the filter bank objects are again, not supported by the heavy compiler.

Ok, so this is done in PD itself? I’m surprised that it can do that kind of metaprogramming, that’s pretty cool. Maybe we should add that somewhere along official docs. Feel free to make a PR in the laboratory, especially if you plan to make more such utilities!

I’ve added PD to the list of allowed extensions here, btw.

.pd should work fine, but it is probably case sensitive. What error message are you getting?

I think if the purpose is to share a utility, then it’s okay to create a ‘dummy patch’ with Pd code even if it doesn’t compile online. Just make it clear in the description that the patch is meant to be downloaded, and how to run it.

I’ve added it to the enabled extensions list earlier today, it was missing there. Hence the error.

Thanks so much!

I made a quick test with creating filter banks with resynthesis using oscillators and envelope followers. You can find it HERE: OWL Patch Library – Rebel Technology

There’s also the “filters_with_envelopefollowers.pd” patch which does not compile but made it possible for me to create the subpatch [pd allfilters] which has 30 consecutive filters. The spacing and volume is wrong and thus it just sounds like a resonator- this needs work. But the working method is there. I do believe getting close to something like Panharmonium is possible using filter banks.