No control over feedback amount? Also, a trick to get an "undo"?

Haven't even received my board yet, let alone built or used it, but after reading through all the docs and forum posts, I'm wondering something about the controls -

It doesn't appear that there's any control over feedback amount, is that correct? So when overdubbing, the layers will continue to stack up and there's no way to fade the old layers out? I'm coming from more of a guitar-oriented looper perspective (though I don't play guitar), so this is something that I think of as one of the essential parts of a looper. I guess maybe it's not as important for beat-oriented players?

If I'm right that there's no way to control feedback and it's permanently set to 100%, has anyone figured out a workaround? I'm kind of wishing the hardware overdubbing had been left in if this is the case, because then I could just hack it in myself.

Along a similar line, I was thinking about the lack of an undo. I don't care so much about making a mistake and wanted to strip off the last layer, but sometimes I do find it useful to build something up into craziness and then return to the original loop. Could I turn on bank summing, and then record a base loop into bank 0, then switch over to bank 1 and do whatever weird stuff, and once it's built up enough, just turn off bank 1 to get down to just the original loop? I can't figure out whether the 2 banks are sync'ed in time, but I think they are not, is that right?


  • Overdubbing is done in the digital domain (contrary to what was done in very early hardware). Look at line 608 of the firmware, it's only a matter of attenuating outputByte.

    The naive thing to do would be sum = ((outputByte * feedbackGain) >> 8) + adcInputByte; ; with feedbackGain in the 0-255 range. gcc will not generate the right code for this and promote both operands to 16 bits, so this part will have to be coded in ASM:

    static inline int8_t SignedMulScale8(int8_t a, uint8_t b) {
    uint8_t result;
    "mulsu %1, %2" "\n\t"
    "mov %0, r1" "\n\t"
    "eor r1, r1" "\n\t"
    : "=r" (result)
    : "a" (a), "a" (b)
    return result;

    sum = SignedMulScale8(outputByte, feedbackGain) + adcInputByte;

    Now you have to find a way of letting the user control feedbackGain!
  • Hmm. Although I do some DSP work, I have zero experience programming for MCUs, so that's a bit out of my grasp at the moment. Perhaps I will try to do it at some point though. Thanks for the tip!
  • edited July 2010
    Mr. Pichenettes,

    What about just decreasing feedback to 0 in the code? So the WTPA would by default only play a loop once. Then it would be simple to do the overdubbing in analog, and you'd have an analog feedback control. This obviates the need to hack in a new control to the WTPA code, just hard-set feedback gain to 0, always mute throughput audio, and do the mixing in hardware. What do you think? Seems like that solution would be much simpler than adding feedback control to the code, eh?

    I guess it kind of sucks to do a/d/a conversion for every repeat, but I'm sure some people would like that the loop sounds worse with every go-around. This would also allow an effects loop, so you can progressively distort, filter, ring modulate, or whatever, each repeat more and more.
  • iirc, the WTPA originally did the mixing in hardware as you suggest. Don't know why this was dropped in favor of software mixing.
  • Digital was just simpler. Less hardware, less noisy routing, less processing time. Less ADC channel switching. Easier to overdub an infinite number of layers because gain errors don't compound, although I admit it sounds cool sometimes when they do. Less crap for the kit builder to troubleshoot. I also wasn't sure what I was getting out of doing it in analog was that useful, since _I_ never used it and at that point I was the only beta tester.

    If I were going to add feedback gain control (with this sampler anyway) it would almost certainly be in software.
    Olivier's assembly is a good start!

  • But the hardware would still need to change in that case, right? Because you'd need to add a pot to control feedback, unless you used the effects pot, which is kind of a bummer to have one pot controlling so much. But I guess it's not a bad compromise.
  • You could add a new MIDI message to listen for...
Sign In or Register to comment.