X100 inspired Guitar Processor

MarkzP

Active member
Here's a project I finally managed to get working:
https://github.com/MarkzP/X100

It's a Rockman X100 emulator - 4 presets (Dist, Edge, Cln1, Cln2), Chorus & "Echo" (I used Freeverb - I tried emulating the original BBD echo, but it sounded like crap)
The EQs are not 100% 1:1 with the original - I took some liberties; original components tolerances were not so great anyways. I always wanted to get a real unit, but they are very hard to find and/or very expensive. Therefore, starting with schematics I found on the 'webs, I attempted to model each key part as closely as possible at first, & then ajusted to taste. The signal path is quite true to the original.

I've been working on this for quite some time now, with dissapointing results until very recently.
The turning point was switching over to the OpenAudio library: https://github.com/chipaudette/OpenAudio_ArduinoLibrary
I "borrowed" & ported the modulated delay effect from MicroDexed https://codeberg.org/dcoredump/MicroDexed
I also ported the Freeverb effect to OpenAudio - it sounds really sweet!

At the moment, I am still using my frankenboard (made up of a Teensy 4.0 + rpi AudioInjector Zero + rough Preamp). However it already exeeds my expectations, so I jumped to gun & finally ordered a TGA MKII Board from BlackAddr
I'll post sound clips as soon as I get the real thing

Marc
 
Here's the signal flow from the Audio Design tool:
X100.jpg
 
Hi Marc,

Here's a project I finally managed to get working:
https://github.com/MarkzP/X100

Wow, nice thing! I hope I can find some time to get it running on my TGA board.

I "borrowed" & ported the modulated delay effect from MicroDexed https://codeberg.org/dcoredump/MicroDexed
I also ported the Freeverb effect to OpenAudio - it sounds really sweet!

Cool, my chorus is used in other software :)

The sources are an own project on codeberg: https://codeberg.org/dcoredump/effect_modulated_delay
Perhaps I will add the _F32 class to the sources so every thing is at one place.

BTW: The platereverb from Pio sounds also great... but you have to port it to _F32 by yourself...

Regards, Holger
 
Thanks Holger, I did not realize there was a separate repo for the delay - I will update the reference

when came time to implement the chorus effect, I remebered playing with it on Microdexed. As I was doing it, I was thinking that it couldn’t be that simple; it actually was - great work you did here

Marc
 
I'm trying to compile your code and get some errors I don't understand (I'm not very good of a programer), Could you help me with this?

Code:
D:\Users\commi\Docs\Arduino\libraries\BALibrary\src\common\ParameterAutomation.cpp: In instantiation of 'void BALibrary::ParameterAutomation<T>::reconfigure(T, T, size_t, BALibrary::ParameterAutomation<T>::Function) [with T = unsigned int; size_t = unsigned int]':
D:\Users\commi\Docs\Arduino\libraries\BALibrary\src\common\ParameterAutomation.cpp:146:16:   required from here
D:\Users\commi\Docs\Arduino\libraries\BALibrary\src\common\ParameterAutomation.cpp:74:19: error: call of overloaded 'abs(unsigned int)' is ambiguous
   74 |     m_scaleY = abs(endValue - startValue);
      |                ~~~^~~~~~~~~~~~~~~~~~~~~~~
In file included from d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\bits\std_abs.h:38,
                 from d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\cmath:47,
                 from d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\math.h:36,
                 from D:\Users\commi\Docs\Arduino\Shared_Arduino15\packages\teensy\hardware\avr\1.59.0\cores\teensy4/arm_math.h:361,
                 from D:\Users\commi\Docs\Arduino\libraries\BALibrary\src/LibBasicFunctions.h:27,
                 from D:\Users\commi\Docs\Arduino\libraries\BALibrary\src\common\ParameterAutomation.cpp:21:
d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\stdlib.h:70:9: note: candidate: 'int abs(int)'
   70 | int     abs (int);
      |         ^~~
In file included from d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\cmath:47,
                 from d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\math.h:36,
                 from D:\Users\commi\Docs\Arduino\Shared_Arduino15\packages\teensy\hardware\avr\1.59.0\cores\teensy4/arm_math.h:361,
                 from D:\Users\commi\Docs\Arduino\libraries\BALibrary\src/LibBasicFunctions.h:27,
                 from D:\Users\commi\Docs\Arduino\libraries\BALibrary\src\common\ParameterAutomation.cpp:21:
d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\bits\std_abs.h:79:3: note: candidate: 'constexpr long double std::abs(long double)'
   79 |   abs(long double __x)
      |   ^~~
d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\bits\std_abs.h:75:3: note: candidate: 'constexpr float std::abs(float)'
   75 |   abs(float __x)
      |   ^~~
d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\bits\std_abs.h:71:3: note: candidate: 'constexpr double std::abs(double)'
   71 |   abs(double __x)
      |   ^~~
d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\bits\std_abs.h:61:3: note: candidate: 'long long int std::abs(long long int)'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |   ^~~
d:\users\commi\docs\arduino\shared_arduino15\packages\teensy\tools\teensy-compile\11.3.1\arm\arm-none-eabi\include\c++\11.3.1\bits\std_abs.h:56:3: note: candidate: 'long int std::abs(long int)'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |   ^~~
Multiple libraries were found for "Bounce2.h"
  Used: D:\Users\commi\Docs\Arduino\libraries\Bounce2
  Not used: D:\Users\commi\Docs\Arduino\Shared_Arduino15\packages\teensy\hardware\avr\1.59.0\libraries\Bounce2
exit status 1

Compilation error: exit status 1

If I get it correctly, there is no definition to abs of unsigned int?


And another small question, when I import into the "audio degin tool" the "automatically generated code" it does not show your filters. but you posted an image of it with your filters. how do you make that?
 
I made it compile by changing line 74 in: ...\libraries\BALibrary\src\common\ParameterAutomation.cpp
from:
m_scaleY = abs(endValue - startValue);
to
m_scaleY = abs(int(endValue - startValue));
 
If I get it correctly, there is no definition to abs of unsigned int?
Because it is the identity function... Probably the correct approach is to define an absolute-difference function:

Code:
unsigned abs_difference(unsigned a, unsigned b)
{
  return a < b ? b - a : a - b;
}
Note that this cannot overflow like the code in #6
 
Thanks, I will update my copy of the BALibrary code.

Could you also explain how you added your libreries into the "audio degin tool"?
 
Back
Top