< Back to IRCAM Forum

Bugs with mubu.additive~

Dear all,

I’m trying to use mubu as an additive synthesizer based on SDIF data provided by SPEAR, and am facing two problems:

1/ the pitches are slightly too high when compared to the original. It definitely reminds me a sample rate problem (44k vs 48k) but everything is set to 44100 Hz: the sound file, SPEAR, the audio driver, etc…

2/ for complex SDIF files (i.e. with a lot of partials), I get random NaNs at the output of mubu.additive~. By random I mean: 1/ they appear only at certain positions/frames of the SDIF files and 2/ the problematic frames change all the time when loading the patch a new time. This problem does not happen for simple SDIF files with a few number of partials

Those two problems are pretty consistent for all the sound files I tried.

Attached to this post are three sound files, the corresponding analysis as provided by SPEAR, and an example patch using Mubu.

I’d be totally delighted for any clue about how to solve this.

All the best,

Alexis

bug MUBU sdif.zip (3.4 MB)

Hi Alexis, funny, just yesterday I noticed that mubu.additive’s pitch does not correspond to well-tuned pianos. I seems to be ~53 midicents higher.
I also get the nan’s; we’ll look into this (instead of suspecting that the piano needs tuning…).
Cheers!

Hi again, the pitch issue is fixed and we’re on the NaN bug (partials with high indices are not loaded correctly) — btw, try this for a nice display mapping:

view partials paramcols Frequency Amplitude Phase

As a momentary workaround for both problems until the next release, you can use

mubu.additive~ ... @partrans -53 @maxpartials 5000

Sinusoidally yours, Diemo.

Hi Diemo,

Wunderbar, the temporary fix works well!

Now we can talk:

So my next questions are:
1/ how can I interpolate between frames using mubu.additive~? I noticed the argument “interframe”, but I don’t hear any difference. Even in normal playing speed, I get artifacts while switching from one frame to the other. Also, it would be also nice to be able to set the interpolation time for frequency, amplitude and phase.
2/ how can I filter out some partials that I don’t want to play? For instance don’t play the softest partials, or the frequencies under 50 Hz. Please don’t tell me: “export to a dict, edit the dict, and reimport it into the mubu”

Cheers

Alexis

Regarding the interpolation thing: what would be great actually would be a static interpolation between frames (so not an interpolation of the final waveform).

Let’s say for instance that:
. frame N contains partial M with values freq1,amp1,phase1
. frame N+1 contains partial M with values freq2,amp2,phase2

Then what I would expect if I put the cursor between frame N and N+1 would be to render the partial M with intermediate values based on linear interpolation: (freq1+freq2)/2,(amp1+amp2)/2,(phase1+phase2)/2.

Does it make sense?

absolutely! This happens with @interframe 1 for partials with the same value in the Index column (not the matrix row index!). Born/dying partials will be faded in/out.

1 Like