TheTechnobear's SSP/XMX development

yeah, for all modules, I always think about what will I have under cv control, and what won’t be…
deciding on cv inputs (and outputs) is down to lots of different factors, some technical (could be performance, or underlying implementation) , some use-case (e.g. does this fit what I the goal of the module?)

with omod, I really wanted to keep it pretty simple - it was modelled/inspried by ochd…
which is very simple, and the outputs are very much ‘related’ .
adding cv in to change ratios and phase, would kind of go against that, imho.

if you’re not careful, adding lots more controls to omod, is basically turning it into an 8 oscillator module… what advantage does that have? over using individual modules?
if we ‘need’ a multi oscillator module… how would that look ?
(Id prefer to review what modules we need , rather than just add complexity to modules)

then there is the technical side…
modulating phase has to be done very carefully…as its very ‘low level’ - if you just do it abruptly, you will get nasty audio artefacts.
so, if you’re just modulating phase with an lfo, depending on waveforms, you may need smoothing.
but if you want to full PM, they you don’t want any… as you need direct control over phase.

as for surround panner… yeah, Ive consider this many times, on many platforms… and indeed, Ive also thought the SSP would be great for this (as it has lots of outputs!)

my idea has always been to model this on the Buchla 227e or the Koma Poltergeist…
as surround panning is more than just about altering respective levels , you need a way to be able to modulate effectively… and using radial position is (I believe) more intuitive than x/y positions… thought of course, no reason I could not do both :slight_smile:


why have I not done it already?
I don’t currently have a way to enjoy quad sound in my studio… so not going to create something I cannot use/enjoy/test (choose which you think is most important :laughing: )

I keep thinking about buying 4 minirigs speakers (plus sub) for this… as they are small, so won’t take over my space - but gets pretty pricey …
other choice is another pair of HS7s, but im not thrilled by sound of the two I have already…
(great monitors, but for ‘performance’ they are lacking)

so yeah, Ive been prevaricating on this for quite some time (probably around 3+ years - lol)


edit: oops is more like 4+ years…
basically, Ziv approached me before this video… we talked about creating a ‘cheap’ hardware solution for this video…but whilst, I had the (computing) hardware to create it, I realised I was going to need to spend about $500+ on speakers to make it worth my while, and then also had no idea how to actually set this up the space im using ( cabling issues… e.g. running power and audio to different corners of room)

but yeah, I keep revisiting the idea… and Im soon re-arranging my studio space (again), and cabling in the new space might be a bit more practical. also, as its a separate space, Im more likely to use speakers. (as I tend to use headphones currently)

1 Like

Yes… i have been on the quad journey since about 2 years… i bought 4 JBL LSR305 for all 4 corners in the room and they are also not perfect, but hey, still sounds better than my 3000 EUR two speaker setup :slight_smile: and the expensive part was by far the two ADDAC803 quad spatializers which could very well be programmed in the SSP… Just not with my skills as a programmer :)… It is a whole new world and great fun to work in a quad setup… so for me totally worth the investment…

the ADDAC803 is based on:

TKK Akustiikka / TKK Acoustics Laboratory / Research / Spatial sound / Psychoacoustics and evaluation of spatial audio(VBAP,D%20or%203%2DD%20setups.

I have finally had a chance, and updated my disk image again (my computer suddenly didn’t like my SD reader - anyone else ever have that?) and have gone and installed all the supporter plugs so far, and mate! thankyou!

Comp is a game changer (obviously I have a bias haha) and all the other additions have been incredibly fun to delve into. Appreciate you as always.

1 Like

Public release day !

so as per release topic, today, I publicly release everything Ive been working on and was previously available by my EAP program :slight_smile:

It’s a bit later than expected, but Ive been pretty busy with visitors, and also just moved my music studio… so this kind of got lost in my to do list… but better late than never I guess!

anyways…

as always, Id like to begin, by thanking all my generous supporters on ko-fi, its been great to see the enthusiasm for the modules, and I hope you are enjoying them - inspires me to create more!

I know that many already have these modules , but its still an important milestone for me to release openly and for free for a couple of reasons

first, I want everyone to enjoy and have access to my modules.
this also enables us to share patches without concerns that someone doesn’t have module X.
so whilst the EAP is a way to give back to my supporters, its nice to know ALL ssp users have access to everything.

second, Im a big supporter of open source development.
so when my releases go ‘public’ , this is also when I can release the code on my public GitHub repo.
Im not going to go into all reasons why Open Source is important,
But one aspect for me, very relevant to the SSP , was best expressed by Émilie Gillet (of Mutable Instruments)… Education.
There is no better way to learn about coding, that by actually coding, and also review others code.
so when I make my modules code public, this means other developers can see how Ive made things work on the SSP… how I use the new SSP api, and this may help them developer their own modules.
perhaps not today, nor tomorrow, but one day… someone may have that wish :slight_smile:

as for the future… Im still pretty busy on other things at the moment.
but Ive ideas/plans for the SSP and as the winter starts to approach, I’ll hopefully start to get some more time to devote in this area.

8 Likes

dev blog update

as you’ll have seen on other topics, rnbo has managed to push the SSP dev back up my priority list a bit.

really enjoying the rnbo.

it goes a bit beyond, it quickly generating code.
I generally love to follow an iterative development model, I always have… long before agile development was even a thing (1980s? it started with the like of prototypes modelling).
so, Im currently exploring with rnbo, how this might fit into such a workflow.

the goal/approach is simple…
use rnbo to get started, then each iteration, remove ‘generic code’, to get to a more polished, final goal.
and the trick is to do so, in such a way that, rnbo does not force particular limitations.
so, potentially, all rnbo/template code could at some point have just disappear (or rather replaced/rewritten!).

of course, this requires a certain approach/discipline… but so far, it seems to be working pretty well.

also, it won’t suit every project… rnbo would have not added anything to many of the modules Ive already created for the SSP.
some examples:
CART, the modelling in rnbo would be alot of effort, and yet would represent a small fraction of the actual code required. (*)
similarly, the Mutable Instrument modules, are built around existing MI code… so really there is nothing to ‘model’.

so yeah… it’ll be interesting to see, outside my initial explorations with rnbo, how much I use it.

I suspect, it’ll just become another tool in the tool box.
but hopefully might help kickstart some modules, when Im in the ‘hmm, this idea could be cool’ phase.


( * ) ok, you could test out small ideas, e.g. to see how certain aspects might work. but you could arguably do this in Max, without rnbo… as you dont need the generated c++ code.

4 Likes

dev update…

so what have I been working on ?
(k, rhetorical really, since you will have seen my other posts :wink: )

so this week, I spent a lot of time, creating my own file browser, and virtual keyboard… since I wanted to add loading/saving of files to LOOP.

honestly, I was not looking forward to this at all… I knew it was going to be pretty tedious…
however, I do actually like the results, so it was worth while… as I do like the UI feel…

once, I had the file handling, I want to get on with a kind of variation of LOOP
a 4 track granular, thats based around RNBOs granulator~ object.

its very similar to LOOP, in fact mostly its just a different RNBO patch, with slightly different parameters, and this was its purpose… to see how easily I could create a fundamentally different module by just switching out the RNBO patch :slight_smile:

I know many will think, whats the point? we had GRA… and I get that, but choice is good :wink:
anyway, it is a bit different , as I explain in this post

anyway, so on EAP for this weekend, we have an updated LOOP release that includes file support, and the new early version of GRA4 for you to play with :slight_smile:

7 Likes

I really take my hat off to your active development!

1 Like

so no hope for connecting a USB keyboard to type/select those letters he?
(in this new dev)

hope springs eternal.

I’ve considered it a few times…
however, it’s not trivial and needs quite a bit of fiddling to explore, and thats quite tedious to do.
and frankly, to expend this effort just to type in a filename, feels kinda pointless effort.
esp, as 99.9% of users will never bother attaching a usb keyboard for this one task, which they will do very infrequently.

it’s one of those edge cases, where, sure if it zero effort, why not?
… but its far from zero effort. (well, for me as the developer ; ))

after @BENDY ’ s post about FFTs, I thought I’d take a look… since it’s been a while since I played in the frequency domain :slight_smile:

as I mentioned in the above post Max/RNBO already provides the basics (and fft~ object), so quick stab ( at the ‘SFFT’ module) was mostly about getting the data into a kind of usable form…so it could spit out frequencies and amplitudes, so they’d be kind of useful.

and that already brings up and interesting point…
the referenced module in the above post ( the Rossum Panharmonium ) does not really reveal the analysis it performs, rather its FFT is internal, and then it also does the re-synthesis.
the reason is simply, because it can then do most of its fun in the frequency domain.

… and that’s important, whilst I can chuck out things like frequencies for re-synthesis, we have no means of doing frequency domain processing (even if I sent this out as cv… you’d need completely different tools!)

I guess what Im saying is… FFT is rather a tool, that you can use to create other things… rather than being a useful ‘module’ in itself. (outside simple vocoder like applications)

so how did the SFFT perform… it used actually a bit less CPU than I expected.
about 3% for a single 1024 bin fft…
however, its pretty clear 1024 bins is likely not enough, and I probably also need to use a larger buffer…
and finally, I also very likely need to overlap (at least) 2 of these ffts to get less noise.
so definitely needs some tweaking…

currently, I was only outputting the top 5 v/oct signals + their respective amplitudes , though this could scale up… really, I just don’t want to expose a ton of outlets…
(but each extra outputs is, not that much cpu… mainly an a bit more sorting, and copying of data)

but, that comes back to ‘is it useful?’
I definitely need to do a bit of fiddling with bins and frame sizes to see if I can get a some better responses, there is not enough precision for my liking (*) .

of course, as an re-familiarisation/education exercise it was very much worthwhile…
partly due to the reading around, you do when playing with such things.
It’s kind of exciting to read about how you can process signal in the frequency domain.
and also getting a feeling for the cpu/processing requirements, and so whats viable is important.

so not sure, if this is something that will directly result in a module ‘release’,
but definitely has my brain spinning with ideas.

its also (again) proven RNBO as a good tool for prototyping ideas.
the above, I did 100% using the rnbo template Ive published, so no C++ coding.
basically, got it to work in Max, then pushed the button to move it to the SSP :slight_smile:


(*) bin resolution = SR / # bin, so works well for higher frequencies, but poor for low-midrange
remember: musical note , double frequency per octave… so low notes are very close together in frequency!

2 Likes

Ive been continuing my dev into FFTs … bit of dev, bit of research…

it started with getting overlapping working and rewriting things around that.
that led me to some deeper research on ffts, and what they can provide…
and had a bit of a lightbulb moment on some of the darker parts of ffts, that I didn’t really have a firm grasp on.

need to right a bit more code, but I do think I can make SFFT more accurate, and hopefully have some more ‘acceptable compromises’ in relation to accuracy, performance and latency.

that said, my gut feeling, seems ever more correct…
giving users the frequencies is not really the way forward! (*)
I believe the way forward is for more specialised spectral modules.

again, this is like Rossum Panharmonium…
it performs a spectral processing, using ffts, but the users don’t know/care about it.

the more Ive learnt about fft’s the more excited Ive become about what can be done in the frequency domain … lots of ideas for modules, which I never previously would have had a clue how to implement !

(that said, its not exclusive to SSP, Ive also been recently playing with RNBO on the Bela Salt… not as powerful, but interesting to run similar code on two platforms!)


(*) the issues are complicated to discuss without getting deep into frequency domain processing.
suffice to say, throwing back the top N frequencies and amplitudes doesn’t actually get you very far… and also is computational inefficient.
I guess broadly you can say… the FFT is the expensive part of the operation
It’s only worth doing because of what you can do in the frequency domain
(that would be computationally expensive/difficult in the the time domain)

so, converting back ‘prematurely’ to the time domain, gives you the ‘costs’ but not the benefits.

4 Likes

giving users the result of the analyses, as CV output(s) of frequencies
(whereas the Panharmonium already synthethises the analyses)
is maybe more in line with the modular way of the SSP ?

no, that was the point of my post :wink:

(some, fairly gross, simplifications follow… to keep this understandable)

modular is voltage (levels) over time, both audio and cv…
its all done (like the real world) in the time domain.

a small FFT frame is composed of 512 ( * ) frequency bins , which can (kind of) be thought of as a frequency / amplitude pair … so to do this in modular, you’d need 1024 wires !
(no, amplitude is not enough… you need a pair)

( * ) thats a relatively small fft, 1024, 2048, or more are pretty common … more so than 512!

then you need modules that can process all 1024 at one time… (in a ‘frame’).
this is getting into realms of vector processing, not the serial processing of a single wire…
and is why often frequency domain processing uses multi core/parallel processing.
so the modules that you would use to process these signals would be completely different.

of course, as a programmer, I could create a modular system that was designed to do this, with dedicated modules and could even move between the two domains… but this would not look like any modular you have seen :wink:


best analogy I can think of is modular video synthesis…
(btw: no expert in this area, so again, a simplification)
in many ways, analog (!) video has much in common… the RGB channels are 3 frequencies, that are split out, and use a sync signal to synchronise the frame/timing.

so what does video modular look like? how similar is it to audio modular?
on the surface it looks similar, but in practice its not… sure you can use a few eurorack modules for control, but the modules that actually do anything interesting, are video modules dedicated to the the task, specific to what you want to do with colour (etc) ( * )

so its pretty much a different world that has some interfacing to eurorack…
and it only has 3 signals + sync, we’d need 1024 + sync… (for that limited 512 bin fft !)

( * ) its also interesting, that video synthesis has to be done on analog signals, because they are so much simpler than representing a full digital signal… also look at the type of processing done in video, mainly messing with colour and sync… its pretty limited.
btw: don’t get me wrong, I think video synthesis is really cool!

another analogy, I guess, could be the Leibniz system by XAOC.
again, we see similarities… dedicated modules, that are connected with special wiring (a ribbon cable behind the panel)… and again, much simpler… its only 8 binary signals.


anyway, as I said, in the virtual world, I could create a modular frequency domain synthesis.
but it would look very different, even if it ran in parallel to normal time domain stuff.
for sure, it’d be a cool project … (but Ive no shortage of those :wink: )

so where does that leave us? well really back to what I said…

the best solution is to keep the modular aspects in the time domain.
and within a particular module… do the frequency domain processing.
obviously this can be done in C++. but the cool thing is , with RNBO users can also do this (*)

anyway hope the above is insightful…

I have actually given it quite a lot of thought, and find the area very interesting.
even so far as wondering about what could be possible, what a modular frequency domain processing system might look like… and for sure, I may explore this one day, in some form or another. (**)


( * ) ok, I’ll admit working with FFTs is not trivial…
whilst there are some simple things you can do, without too much understanding.
the cool stuff, does need a deeper understanding … but hey, you wanna do cool stuff, you have to be willing to put in the hours :wink:

(**) for those interested, looking at how Max tackles this is interesting…
hint: its quite ‘clever’, but a bit hack-y, and in practice only really works because Max/Gen~/Rnbo~ can get into low level coding… so its ‘fakery’ can be managed.

though, it has given me ideas on some fun n’ games I might have with all this on the SSP.
but you’ll have to wait n’ see , if anything comes of these!

2 Likes

for ko-fi supporters Ive just published the SFFT module…

this uses FFT to determine the 5 top frequencies (v/oct) and their amplitude from a given audio signal.
(has some limits which I talk about on ko-fi)

it actually seems to track pretty nicely, and is confusing very little CPU on the SSP.
probably to the point, I could likely push it quite a bit more, take a bit more cpu, and get even better results.

Im not sure this’ll ever be ‘released’ , really its, more of an exploratory tool for me, to get my feet wet… as already mentioned in this topic - I think there are more interesting/efficient ways to use FFTs on the SSP, which Id think I’m more likely to pursue.
but hey, thought , Id release to supports , as a small thank you.

2 Likes

thx, supported

i don’t need 1024 FFT streams but 16-32 would be nice

leave the user the choice of CV/Gate [out] and/or Audio [out] would be nice too

if user controlable pre-limenary filter could keep it all under control/constraint/limited

one more exploration for the holidays :slight_smile:

the holidays are approaching fast,
so, first a heartfelt thank you to those that have supported me this year…
its nice to know you interested in what I do.

I hope that you have enjoy some of my content from the year.

anyway… just one last thing for the year for supporters…
of course, a bit more from my exploration of FFTs on the SSP.

a spectra filter/eq module featuring 8 bands.

params:
(for each bin)
Bin - starting bin
Width - width of eq

inputs
Bin/Width
(yup fully cv controllable)

outputs:
OUT 1-8 - band output
SUM - output of all bands (1-8)
AUX - all content NOT in a band (1-8)

I had quite alot of fun with this using CLKD->OMOD-BIN 1-8 , then either audio or even just noise.

a bit of tech background…
this uses a single 1024 bin FFT, so each bin is ~47hz, we only use the lower 512, due to nyquist. it uses a 1024 sample buffer, so has about 21mS ‘latency’.

we then reconstruct the audio using 10 IFFTs, of the same character as the FFT.
Its kind of interesting as it gives us an idea of processing loads involved.

anyway, thats likely me done for the year… family arriving, and food and drink to be enjoyed.

Hope everyone has wonderful holidays.

Mark aka TheTechnobear

4 Likes

doh, seems I cannot stop … really this is last one :slight_smile:

Ive just updated SFFT, as I noticed some issues with previous ‘release’
whilst doing so, I change it, now it tracks 8 pitch/amp (up from 5)
(given everything else I do deals in ‘8s’ !)

2 Likes

Tried the Spectra filter, but it just sounds like sample-rate mismatch constant clicks and pops, settings change the timber of clicks, but they never go away. I’m sure this isn’t correct. I’ve tried getting things to sound smooth and not like hash since day one with this SSP, I’m pretty frustrated at the moment. I just re-flashed the card to see if it was just a bad image, but no.

It might be helpful if you post some presets that use your modules, idk

&e

do you get it in the AUX when all widths are set to zero?

Ive notice some artefacts…
but in my testing it seemed the same on SSP, as in max, and when run as vst n my Mac.
that said, my testing is somewhat different due to various constraints.

as mentioned on the GRA4/LOOP topic, this is all really exploratory stuff…
really to allow users to get involved, e.g. with testing, and to see part of the journey.

unlike my normal modules, these are very in the dev process,
this is why I labelled it exploratory, a peak behind the curtains.

as Ive talked about before here, Im not even sure where this rnbo stuff is going to end up (if at all) in my toolbox, Im mainly using it for prototyping , trying ideas outs… so very much exploration.
also this fft stuff, esp in this context, is also reasonably new to me.
and then rnbo is also new, no doubt with bugs in it.

so, perhaps this is my mistake…
too many factors, which make it all a bit too ‘bleeding edge’

of course I do understand people are busy, so perhaps the expectations are higher ( * ) … they want to just play with stuff that works. so, perhaps it’s better, I release when/if it’s further along the development path.
I’ll consider this over the holidays, as I certainly dont want people to ‘get frustrated’ !

( * )
hmm, counter example…
Id say I also consider the rnbo template also exploratory/alpha, and yet I think @Handsonicsuki has done some great things with that, and I believe is enjoying it.
though, thats not a module, so again, different expectations.

but, this politicking/expectation management , concerns me a bit…
one of the reasons I do ko-fi, was just to allow people to support me , just for my contributions to the community… but without creating ‘expectations’ which are hard to fulfill as this is a hobby for me.
its a concern, that Im now getting into ‘expectation management’, as its kind of going down the route of EAP being about ‘product delivery’ , which its not :frowning:
definitely needs some musing over …

just to confirm, this clicking… I’ve doubled checked I get also on the Mac, both in VST and in Max.
best test case I have is , sine wave 440hz () , bin=0, width =1
(
) this is easy to do in max, but also with plts using fm model, to get single sine wave

Im probably going to need to write some test patches in max to see whats going on.
either its an over simplification on my part/limitation on fft… or possibly a bug in rnbo fft/ifft.
all part of the exploration stage…

not sure when I’ll get time, given holidays are on us … so im already ‘sneaking out’ to do these test :laughing:

happy holidays, ho ho ho :santa: