Soundmagic Spectral


#1

At the moment I'm really in love with the soundmagic spectral effects by michael norris. Especially the spectral freeze is amazing!
http://www.michaelnorris.info/software/soundmagic-spectral

It's freeware but aparently not open source. Does anybody have a clue how to implement this on axoloti?
I think it relys quite heavily on FFT, wich is not really available on axoloti right?


#2

Hmm spectral processing on Axoloti is not something you should expect.

Check the analyzer in axo library called spectral/analyzer 24 and see how much dsp it uses, 38%.......... And that is just an analyzer. If you actually want to process stuff, you will need a device with a lot more processing power.

So I dont think we should expect any spectral processing in Axoworld.


#3

Ok thanks for the info. I will use a combination of the grainverb and the reverb from clds for now, wich is pretty much in a similiar realm. It's just that this spectral freeze is a tiny bit more spacious even with shorter decay times.


#4

We can always hope :slight_smile: I did try to hack into to analyzer and make outputs for each band but it didnt really work. And I had no idea what I was doing, anyway, so kind of expected :slight_smile:


#5

this may be a good starting place for you, if you know pure data.

The big thing about a spectral freeze is that it needs a fourier transform of some sort. If you're particularly ambitious, you might experiment with some different FFT algorithms and input sample sizes to see if any of them produce results that are good enough for your purposes, and also DSP-cheap. I assume this has been approached by someone already but you may be able to build on what's been done, or find something less accurate and cheaper that still works for the freeze effect, as I'm unsure how much accuracy is needed for a decent sounding spectral freeze.

You won't get any sort of direct port of the soundmagic plugin since its built for mac osx.


#6

I am totally covered in spectral domain in PD. Got everythig I need over there :slight_smile:

I would also like to suggest looking into the the new VST version of Paul Nasca's PaulStretch Algorithm.
It actually let you use it as a live input for spectral/FFT processing. As well as loading files into it :slight_smile:


#7

Ok thanks for the tips guys! So it won't be easy but there is hope, a good starting point I guess.

That Paul Stretch plugin looks great! I'm still using the ancient standalone software a lot, it's such a classic :slight_smile:


#8

I'd love to see more spectral stuff on Axoloti, but there are limits to what you can do on the board's processor, without heavy optimisation, that might well stop other stuff working properly.

a|x


#9

I can't check right now, but it's possible that Mutable Instruments Clouds Spectral Madness 'bonus' mode may have been ported to Axoloti object(s).

If not, then it should be :wink:

a|x


#10

Axoloti is made for low-latency operation.

Spectral processing conflicts with low-latency/small buffer processing. Pure data will also not be happy if you run pd at 16 sample block size and then use a [block~ 8192] inside a subpatch.

Without looking at the MI Clouds code, I suspect it switches everything to larger input/output buffers.

I'm not saying it really can't be done but involves quite some magic. One approach would be separating a single fft8192 call into 512 calls to distribute the CPU consumption into small time-slots.


#11

Yeah I used the old one a lot too.

O be honest I still prefer the old one, but this one is a bit more "finished"


#12

Interesting. Would you spawn a load of threads to do the work, in that scenario?

a|x


#13

No, no threads, just do one fft8192phaseX() call at k-rate intervals, to obtain one fft8192 result after 512 buffers of 16 samples. Really just slicing the FFT computation workload explicitly.


#14

Iirc I disabled the spectral mode in clds object as it was unusable. you can ‘edit’ the object to re-enable.
Though you’ll need to edit the firmware if you want to alter/improve is behavior.


#15

I see. Presumably you could reduce the number of bands, as a trade-off between quality and buffer-length.

a|x


#16

Oh, sorry, 8192 is the length of the buffer that gets updated every 512 k-rate cycles.

Do you think the Axoloti could resynthesise a 512-band fft at s-rate?

a|x


#17

512 k-rate cycles is 170.66ms latency, if my maths is correct.

a|x


#18

im aware of 3 methods for arbitrary fft resynthesis: ifft, additive, or vocoding.

ifft may be possible but is probably about as hard as the original fft. here's one approach using the regular fft to construct the ifft.

As far as additive or vocoding, you create a sine osc or send noise through a bandpass with amplitude equal to the band for each band of the fft. this would be equivalent to having either 512 sine oscs or 512 band passes running simultaneously. so good luck.

However, if the band centers have an integer harmonic relation (i.e. are parts of the overtone series of the lowest band's center) and the lowest band is centered at f, the resynthesis could be done by constantly updating a wavetable with length 1/f*48000 with a weighted sum of the wavetables for each band's sine. the harmonic requirement guarantees that all of the sine waves will complete an integer number of periods per each period of the fundamental, guaranteeing that the end of the table will line up with the start of the table regardless of the weightings, preventing the introduction of unwanted transients. Whether this is any more useful in practice isnt something I can comment on but its an option. Still probably too much going on for the axo since for an f0 of, say, 30hz, this will require 1600*512 multiplications AND additions per wavetable recalculation.


#19

Hi! Check this out.
https://sebiik.github.io/community.axoloti.com.backup/t/community-pedalboard/3641/4?u=valmir
The latch mode MIGHT sound a little bit like that.
No spectral things were harmed in the making of this patch.


#20

Interesting...

The fact that MI Clouds is able to do FFT and resynthesis (with some mangling in between), using a similar Cortex M4 MCU suggests it may also be possible on the Axoloti, though.

I wonder what resynthesis method Olivier went for.

a|x