Question about Funbox Earth Octave plus Mars Neural

cbcbd

New member
So this is kind of a question for @keyth72. I have been working on porting the Funbox planets to the Hothouse. I recently ported the Mars and Earth, and I thought, wouldn't it be awesome to have the Earth's octave on a footswitch with the Mars amp modeling. Obviously there were all kinds of issues with the sample rate between the two, but I think the thing that really killed me is I seemed to overload the processor when combining the two.

So the question I have is:

1. Did you ever get something like this to work, and I should just try harder.
2. Does anyone have a good lightweight octave up and down method?

The DaisySP built-in just doesn't cut it, and there doesn't seem to be any octave down. I have tried a bunch of other methodologies, but haven't had much success.
 
@cbcbd Good question, I have not tried combining those two effects on a single Daisy Seed, although I have paired those two effects on my pedalboard by using two separate Daisy Seed pedals, and it does sound really cool. There are a couple things you can try/check to see if the Daisy Seed can handle it:

1. Make sure you're compiling at the highest optimization, -Ofast in the makefile.
2. Make sure you have the Daisy Seed processor boost on, by passing "true" to the hardware initialization line. This lets the Daisy Seed use all of the available 480Mhz instead of 400Mhz on the ARM processor. "hw.Init(true)" in the main function is where that goes.
3. Use the highest block size you can, I'm pretty sure that is "256".
4. Mars uses both the neural model and impulse response, and I pushed the Daisy Seed to about the limit to do that, although I don't remember if I used all the above optimizations in the original code. Might try taking out the impulse response processing and see if it can handle the neural model with octave.

If I remember right I did a weird 6 sample buffer to make the octave code work. There is probably a better way to do this. That octave code is from @Steve Schulteis by the way, he may have some input. Here is the original code: https://github.com/schult/terrarium-poly-octave
 
I took out the IR to reduce the load and made it just a tone hack. You did use the 6 sample buffer which makes it like 8kHz. I tried to work with that, but I didn't find a better way, and trying to get it all working together produced bitcrushed mush.

On another note, I have ported the Mars, Earth and Venus so far, great job with everything you do. Your stuff sounds great. I just want you to start selling a PCB, so I don't have to get a bunch made ;-). It would be nice to have the expression, midi, and dip switches.

Thanks for the advice, I am going to try those optimizations. Have you ever found a good way to do a lightweight octave that sounds good on the Daisy? The Poly Octave stuff sounds great but it takes a lot.
 
2. Does anyone have a good lightweight octave up and down method?
If you're ok with being limited to single notes (no chords), you probably want one of the variations on the "overlap-add" (OLA) algorithm. The time domain portions of each of these videos give an overview of how it works, and they link to example source code in their descriptions.


 
Last edited:
Here are a few ideas for ways to reduce the processing power required by the poly octave code:
  • Remove the "down2" octave from BandShifter if you can live without it. Don't forget to also drop its sign calculation that happens in the update_down1 function.
  • Reduce the number of analysis filters (and increase the space between their center frequencies). This affects the quality of the results, but you should be able to get away with at least a small change before it becomes too noticeable. FYI, you may find some weird behaviors as you adjust this - I vaguely recall the algorithm being sensitive to center frequency and filter overlap changes in ways that were not always easy to predict.
  • Replace the resampling filters with versions that have fewer taps.
  • Drop the two eq filters. They're not essential.
  • Take a look at my experimental arbitrary-shift branch. I haven't done an apples-to-apples comparison with the octaves-only implementation, but I did put some effort into optimizing this more generalized version of the algorithm. Maybe there's something in there that helps. Note that the resampling in that branch is only by a factor of 2, rather than a factor of 6, so the analysis filters are running three times as often.

Regarding the 6-sample buffer: I'm applying the eq filters at the full 48 kHz sample rate. You can replace those with your other effect(s), feeding them from out_chunk, which is already a 6-sample buffer (returned by interpolate).
 
Last edited:
Back
Top