Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1
  • 2

TOPIC: How to code several effects in the same program.

How to code several effects in the same program. 6 years 3 months ago #117

  • JR
  • JR's Avatar
  • OFFLINE
  • Senior Member
  • Posts: 77
  • Thank you received: 31
  • Karma: 6
A folk asked me about how to include several effects like echo, distortion, volume, tremolo ... in the same program.
There are several ways to do so, this is how I do it:

idea: Use the programmable toggle switch to select between different effects. Every time you toggle it, you commute between different guitar pedals.

The pseudo-code looks like:

setup
{

// enable timer interrupt for 44.1KHz sampling frequency.
// enable toggle switch interrupt every time it changes.
}

loop
{

//read ADCs
}

timer_interrupt_handler
{

if (effect==0) {//EFFECT CODE 0}
else if (effect==1) {//EFFECT CODE 1}
else if (effect==2) {//EFFECT CODE 2}
else if (effect==3) {//EFFECT CODE 3}
}

toggle_switch_interrupt
{

effect++;
if (effect==3) effect=0;
}

This first code is just an example program which increment the "effect" variable when the switch is activated (up or down). It includes a debouncing protection. Opening the serial monitor you can check how variable "effect" is incremented:
int toggle_switch = 2;
int toggle_value = 0;
int effect=0;
 
void setup()
{
  //start serial connection
  Serial.begin(9600);
  //configure pin2 as an input and enable the internal pull-up resistor
  pinMode(toggle_switch, INPUT_PULLUP);
   attachInterrupt(toggle_switch, switch_handler, CHANGE);
}
 
void loop()
{
  //print out the value of the effect variable
  Serial.println(effect);
}
 
void switch_handler()
{
  delayMicroseconds(100000); //debouncing protection
  if (toggle_value!=digitalRead(toggle_switch)) effect++;
  delayMicroseconds(100000); //debouncing protection
  toggle_value=digitalRead(toggle_switch);
}

The next code is a bit more complex, it is the skeleton where you can place the 4 different effects to be commuted:
// Licensed under a Creative Commons Attribution 3.0 Unported License.
// Based on rcarduino.blogspot.com previous work.
// www.electrosmash.com/pedalshield
 
   int in_ADC0, in_ADC1;  //variables for 2 ADCs values (ADC0, ADC1)
   int POT0, POT1, POT2, out_DAC0, out_DAC1; //variables for 3 pots (ADC8, ADC9, ADC10)
   int LED = 3;
   int FOOTSWITCH = 7; 
   int TOGGLE = 2; 
   int toggle_value = 0;
   int effect=0;
 
void setup()
{
  /* turn on the timer clock in the power management controller */
  pmc_set_writeprotect(false);
  pmc_enable_periph_clk(ID_TC4);
 
  /* we want wavesel 01 with RC */
  TC_Configure(/* clock */TC1,/* channel */1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC 
  | TC_CMR_TCCLKS_TIMER_CLOCK2);
  TC_SetRC(TC1, 1, 238); // sets <> 44.1 Khz interrupt rate
  //TC_SetRC(TC1, 1, 109); // sets <>   96 Khz interrupt rate
 
  TC_Start(TC1, 1);
 
  // enable timer interrupts on the timer
  TC1->TC_CHANNEL[1].TC_IER=TC_IER_CPCS;
  TC1->TC_CHANNEL[1].TC_IDR=~TC_IER_CPCS;
 
  /* Enable the interrupt in the nested vector interrupt controller */
  /* TC4_IRQn where 4 is the timer number * timer channels (3) + the channel number 
  (=(1*3)+1) for timer1 channel1 */
  NVIC_EnableIRQ(TC4_IRQn);
 
  //ADC Configuration
  ADC->ADC_MR |= 0x80;   // DAC in free running mode.
  ADC->ADC_CR=2;         // Starts ADC conversion.
  ADC->ADC_CHER=0x1CC0;    // Enable ADC channels 0 and 1.  
 
  //DAC Configuration
  analogWrite(DAC0,0);  // Enables DAC0
  analogWrite(DAC1,0);  // Enables DAC0
 
  //configure pin2 as an input and enable the internal pull-up resistor
  pinMode(TOGGLE, INPUT_PULLUP);
  attachInterrupt(TOGGLE, switch_handler, CHANGE); //Toggle switch interruption
}
 
void loop()
{
  //Read the ADCs
  while((ADC->ADC_ISR & 0x1CC0)!=0x1CC0);   // wait for ADC 0, 1, 8, 9, 10 conversion complete.
  in_ADC0=ADC->ADC_CDR[7];             		// read data from ADC0
  in_ADC1=ADC->ADC_CDR[6];             		// read data from ADC1  
  POT0=ADC->ADC_CDR[10];                  	// read data from ADC8        
  POT1=ADC->ADC_CDR[11];                    // read data from ADC9   
  POT2=ADC->ADC_CDR[12];                    // read data from ADC10    
}
 
void TC4_Handler()
{
 if (effect==0)       {/*HERE THE CODE FOR EFFECT 0*/}
  else if (effect==1)  {/*HERE THE CODE FOR EFFECT 1*/}
    else if (effect==2){/*HERE THE CODE FOR EFFECT 2*/}
      else             {/*HERE THE CODE FOR EFFECT 3*/}
 
  // We need to get the status to clear it and allow the interrupt to fire again
  TC_GetStatus(TC1, 1);
}
 
void switch_handler()
{
  delayMicroseconds(100000); //debouncing protection
  if (toggle_value!=digitalRead(TOGGLE)) effect++;
  delayMicroseconds(100000); //debouncing protection
  toggle_value=digitalRead(TOGGLE);
  if (effect==4) effect=0;
}

This last code is a full example of a multi-effects program; it includes volume/boost, distortion, echo and chorus/vibrato:
 
   int in_ADC0, in_ADC1;  //variables for 2 ADCs values (ADC0, ADC1)
   int POT0, POT1, POT2, out_DAC0, out_DAC1; //variables for 3 pots (ADC8, ADC9, ADC10)
   int LED = 3;
   int FOOTSWITCH = 7; 
   int TOGGLE = 2; 
   int toggle_value = 0;
   int effect=0;
   int upper_threshold, lower_threshold;
   #define MAX_DELAY 40000
   uint16_t sDelayBuffer0[MAX_DELAY];
   unsigned int Delay_Depth, DelayCounter = 0;
   #define MAX_DELAY 500
   #define MIN_DELAY 200
unsigned int count_up=1;
int p;
 
void setup()
{
   /* turn on the timer clock in the power management controller */
  pmc_set_writeprotect(false);
  pmc_enable_periph_clk(ID_TC4);
 
  /* we want wavesel 01 with RC */
  TC_Configure(/* clock */TC1,/* channel */1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC 
  | TC_CMR_TCCLKS_TIMER_CLOCK2);
  TC_SetRC(TC1, 1, 238); // sets <> 44.1 Khz interrupt rate
  //TC_SetRC(TC1, 1, 109); // sets <>   96 Khz interrupt rate
 
  TC_Start(TC1, 1);
 
  // enable timer interrupts on the timer
  TC1->TC_CHANNEL[1].TC_IER=TC_IER_CPCS;
  TC1->TC_CHANNEL[1].TC_IDR=~TC_IER_CPCS;
 
  /* Enable the interrupt in the nested vector interrupt controller */
  /* TC4_IRQn where 4 is the timer number * timer channels (3) + the channel number 
  (=(1*3)+1) for timer1 channel1 */
  NVIC_EnableIRQ(TC4_IRQn);
 
  //ADC Configuration
  ADC->ADC_MR |= 0x80;   // DAC in free running mode.
  ADC->ADC_CR=2;         // Starts ADC conversion.
  ADC->ADC_CHER=0x1CC0;    // Enable ADC channels 0 and 1.  
 
  //DAC Configuration
  analogWrite(DAC0,0);  // Enables DAC0
  analogWrite(DAC1,0);  // Enables DAC0
 
 
 
  //configure pin2 as an input and enable the internal pull-up resistor
  pinMode(LED, OUTPUT);
  pinMode(TOGGLE, INPUT_PULLUP);
  attachInterrupt(TOGGLE, switch_handler, CHANGE);
  pinMode(FOOTSWITCH, INPUT);     
}
 
void loop()
{
  //Read the ADCs
  while((ADC->ADC_ISR & 0x1CC0)!=0x1CC0);  // wait for ADC 0, 1, 8, 9, 10 conversion complete.
  in_ADC0=ADC->ADC_CDR[7];             // read data from ADC0
  in_ADC1=ADC->ADC_CDR[6];             // read data from ADC1  
  POT0=ADC->ADC_CDR[10];                   // read data from ADC8        
  POT1=ADC->ADC_CDR[11];                   // read data from ADC9   
  POT2=ADC->ADC_CDR[12];                   // read data from ADC10    
}
 
void TC4_Handler()
{
   // We need to get the status to clear it and allow the interrupt to fire again
  TC_GetStatus(TC1, 1);
 
  if (effect==0) // EFFECT 0: Volume-Booster    
  {
  digitalWrite(LED, HIGH);  
  //Adjust the volume with POT2
  out_DAC0=map(in_ADC0,0,4095,1,POT2);
  out_DAC1=map(in_ADC1,0,4095,1,POT2);
 
  //Write the DACs
  dacc_set_channel_selection(DACC_INTERFACE, 0);          //select DAC channel 0
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);//write on DAC
  dacc_set_channel_selection(DACC_INTERFACE, 1);          //select DAC channel 1
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC1);//write on DAC
  }
 
 
  else if (effect==1)  // EFFECT 1: Asymmetric Distortion  
  {
    digitalWrite(LED, LOW); 
   upper_threshold=map(POT0,0,4095,4095,2047);
  lower_threshold=map(POT1,0,4095,0000,2047);
 
  if(in_ADC0>=upper_threshold) in_ADC0=upper_threshold;
  else if(in_ADC0<lower_threshold)  in_ADC0=lower_threshold;
 
  if(in_ADC1>=upper_threshold) in_ADC1=upper_threshold;
  else if(in_ADC1<lower_threshold)  in_ADC1=lower_threshold;
 
  //adjust the volume with POT2
  out_DAC0=map(in_ADC0,0,4095,1,POT2);
  out_DAC1=map(in_ADC1,0,4095,1,POT2);
 
  //Write the DACs
  dacc_set_channel_selection(DACC_INTERFACE, 0);          //select DAC channel 0
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);//write on DAC
  dacc_set_channel_selection(DACC_INTERFACE, 1);          //select DAC channel 1
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC1);//write on DAC 
  }
    else if (effect==2) // EFFECT 2: Echo.
  {
    digitalWrite(LED, LOW); 
   //Store current readings  
  sDelayBuffer0[DelayCounter]  = (in_ADC0 + (sDelayBuffer0[DelayCounter]))>>1;
 
  //Adjust Delay Depth based in pot0 position.
  Delay_Depth =map(POT0>>2,0,2047,1,40000);
 
  //Increse/reset delay counter.   
  DelayCounter++;
  if(DelayCounter >= Delay_Depth) DelayCounter = 0; 
  out_DAC0 = ((sDelayBuffer0[DelayCounter]));
 
  //Add volume feature based in POT2 position.
  out_DAC0=map(out_DAC0,0,4095,1,POT2);
 
  //Write the DACs
  dacc_set_channel_selection(DACC_INTERFACE, 0);          //select DAC channel 0
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);//write on DAC
  dacc_set_channel_selection(DACC_INTERFACE, 1);          //select DAC channel 1
  dacc_write_conversion_data(DACC_INTERFACE, 0);          //write on DAC
  }
 
  else  // EFFECT 3: Chourus
  {
    digitalWrite(LED, LOW); 
  //Store current readings  
  sDelayBuffer0[DelayCounter] = in_ADC0;
 
  //Adjust Delay Depth based in pot0 position.
  POT0=map(POT0>>2,0,1024,1,25); //25 empirically chosen
 
  DelayCounter++;
  if(DelayCounter >= Delay_Depth) 
  {
    DelayCounter = 0; 
    if(count_up)
    {
       digitalWrite(LED, HIGH);
       for(p=0;p<POT0+1;p++) 
       sDelayBuffer0[Delay_Depth+p]=sDelayBuffer0[Delay_Depth-1]; 
       Delay_Depth=Delay_Depth+POT0;
       if (Delay_Depth>=MAX_DELAY)count_up=0;
    }
    else
    {
       digitalWrite(LED, LOW); 
       Delay_Depth=Delay_Depth-POT0;
       if (Delay_Depth<=MIN_DELAY)count_up=1;
    }
  }
 
  out_DAC0 = sDelayBuffer0[DelayCounter];
 
  //Add volume control based in POT2
  out_DAC0=map(out_DAC0,0,4095,1,POT2);
 
  //Write the DACs
  dacc_set_channel_selection(DACC_INTERFACE, 0);       //select DAC channel 0
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);//write on DAC
  dacc_set_channel_selection(DACC_INTERFACE, 1);       //select DAC channel 1
  dacc_write_conversion_data(DACC_INTERFACE, 0);       //write on DAC
 
}}
 
void switch_handler()
{
  delayMicroseconds(100000); //debouncing protection
  if (toggle_value!=digitalRead(TOGGLE)) effect++;
  delayMicroseconds(100000); //debouncing protection
  toggle_value=digitalRead(TOGGLE);
  if (effect==4) effect=0;
 
  Delay_Depth=300; //reset the variable.
} 

You can try including different effects like the example or the same effect with different variables setup.

File Attachment:

File Name: multi_effects.rar
File Size: 2 KB
keep it simple
Last Edit: 6 years 3 months ago by JR.
The administrator has disabled public write access.

How to code several effects in the same program. 5 years 5 months ago #233

  • Vince
  • Vince's Avatar
  • OFFLINE
  • New Member
  • Posts: 12
  • Thank you received: 7
  • Karma: 5
I add a LCD display on my pedal shield with the value of potentiometer and programmable switchs...now it's possible to use one of these potentiometer or a switch to choose différent effects.
// www.electrosmash.com/pedalshield
#include <LiquidCrystal.h>    // HD44780 compatible LCDs work with this lib - appelle la librairie pour l'afficheur LCD
int in_ADC0, in_ADC1, in_ADC2;  // variables for 2 ADCs values (ADC0, ADC1)
int POT0, POT1, POT2, out_DAC0, out_DAC1; //variables for 3 pots (ADC8, ADC9, ADC10) et les sorties des DAC
int Pot0=0; //variable entre 0 et 99 pour affichage du réglage du potentiomètre 0
int Pot1=0; //variable entre 0 et 99 pour affichage du réglage du potentiomètre 1
int Pot2=0; //variable entre 0 et 99 pour affichage du réglage du potentiomètre 2
 
const int LED = 3; // constante appelée LED pour la patte 3 qui pilote la led centrale
boolean SW, FW ; // 2 variables SW et FW pour afficher la position des 2 interupteurs paramétrables (le pied et celui de gauche)
int upper_threshold, lower_threshold;
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // définition des pattes pour l'afficheur
 
void setup()
{
  //ADC Configuration
  ADC->ADC_MR |= 0x80;   // digital vers analogique en mode conversion libre.
  ADC->ADC_CR=2;         // Commence la conversion analogique vers digital.
  ADC->ADC_CHER=0x1CC0;  // ouvre les canaux analogique vers digital 0,1,8,9 and 10  
pinMode(2, INPUT); // mode de cablage patte 2 en entrée
pinMode(7, INPUT); // mode de cablage patte 7 en entrée
pinMode(3, OUTPUT); // mode de cablage patte 3 en sortie
 
  //DAC Configuration
  analogWrite(DAC0,0);  // ouvre la conversion digital vers analogique canal 0
  analogWrite(DAC1,0);  // ouvre la conversion digital vers analogique canal 1
 
  // afficheur
  lcd.begin(16,2);                          // colonnes et lignes de l'afficheur 
  lcd.print("   MULTI EFFET  ");            // affiche le message 
  lcd.setCursor(0,1);                       // met le curseur en ligne 2
  lcd.print("   NUMERIQUE    ");            // affiche le message 
  delay (1000);                             // laisse le message 1 seconde
  lcd.clear();                              // efface l'écran
  lcd.print("    The Duke    ");            // affiche le message 
  lcd.setCursor(0,1);                       // met le curseur en ligne 2
  lcd.print("20 novembre 2014");            // affiche le message 
  delay (1000);                              // laisse le message 1 seconde
  lcd.clear();                              // efface l'écran
  delay(10);
}
 
void loop()
{
  //Read the ADCs
  while((ADC->ADC_ISR & 0x1CC0)!=0x1CC0);// wait for ADC 0, 1, 8, 9, 10 conversion complete.
  in_ADC0=ADC->ADC_CDR[7];               // read data from ADC0
  in_ADC1=ADC->ADC_CDR[6];               // read data from ADC1  
  POT0=ADC->ADC_CDR[10];                 // read data from ADC8        
  POT1=ADC->ADC_CDR[11];                 // read data from ADC9   
  POT2=ADC->ADC_CDR[12];                 // read data from ADC10     
 
  upper_threshold=map(POT0,0,4095,4095,2047);
  SW=digitalRead(2);
  FW=digitalRead(7);
  digitalWrite(3, FW) ;
  if (SW==0) {
  lower_threshold=map(POT0,0,4095,0000,2047);
  } 
  else {
  lower_threshold=map(POT1,0,4095,0000,2047); 
  }
 
  if(in_ADC0>=upper_threshold) in_ADC0=upper_threshold;
  else if(in_ADC0<lower_threshold)  in_ADC0=lower_threshold;
 
  if(in_ADC1>=upper_threshold) in_ADC1=upper_threshold;
  else if(in_ADC1<lower_threshold)  in_ADC1=lower_threshold;
 
  //adjust the volume with POT2
  out_DAC0=map(in_ADC0,0,4095,1,POT2);
  out_DAC1=map(in_ADC1,0,4095,1,POT2);
 
  //Write the DACs
  dacc_set_channel_selection(DACC_INTERFACE, 0);          //select DAC channel 0
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);//write on DAC
  dacc_set_channel_selection(DACC_INTERFACE, 1);          //select DAC channel 1
  dacc_write_conversion_data(DACC_INTERFACE, out_DAC1);//write on DAC
 
  // Gestion de l'affichage à partir de là
  Pot0=map(POT0,0,4095,0,99);
  Pot1=map(POT1,0,4095,0,99);
  Pot2=map(POT2,0,4095,0,99);
 
 
  lcd.setCursor(0,0);                // met le curseur en position 0 ligne 0
  if (SW==0) {
  lcd.print("SF Disto sym Vol");
  lcd.setCursor(8,1);                // met le curseur en position 5 ligne 2
  lcd.print("   ");                    // affiche X en 5 éme caractère ligne 2 et efface les caractères suivants
  } 
  else {
  lcd.print("SF Dis+ Dis- Vol");
  lcd.setCursor(8,1);                // met le curseur en position 5 ligne 2
  lcd.print(Pot1);                    // affiche X en 5 éme caractère ligne 2 et efface les caractères suivants
  }
  lcd.setCursor(0,1);                // met le curseur en position 5 ligne 2
  lcd.print(SW);                    // affiche X en 5 éme caractère ligne 2 et efface les caractères suivants
  lcd.print(FW);                    // affiche X en 5 éme caractère ligne 2 et efface les caractères suivants
  lcd.setCursor(3,1);                // met le curseur en position 5 ligne 2
  lcd.print(Pot0);                    // affiche X en 5 éme caractère ligne 2 et efface les caractères suivants
  lcd.setCursor(13,1);                // met le curseur en position 5 ligne 2
  lcd.print(Pot2);                    // affiche X en 5 éme caractère ligne 2 et efface les caractères suivants
 
}
The administrator has disabled public write access.
The following user(s) said Thank You: Ray

How to code several effects in the same program. 5 years 4 months ago #261

  • Vince
  • Vince's Avatar
  • OFFLINE
  • New Member
  • Posts: 12
  • Thank you received: 7
  • Karma: 5
DSC03691.jpg
The administrator has disabled public write access.
The following user(s) said Thank You: Ray

How to code several effects in the same program. 5 years 2 months ago #300

Hi.

I try your program with kcd but me don't work.

I try to work at the same time the delay effect and a lcd 16x2.

Separatly woks fine.

But when run the program I listen a "boom" "noise" in the output.


I change the lcd pins to 6,7,29,28,27,26 and adc to 11,12

can I help me?
Last Edit: 5 years 2 months ago by davidof1990.
The administrator has disabled public write access.

How to code several effects in the same program. 5 years 2 months ago #302

  • Ray
  • Ray's Avatar
  • OFFLINE
  • Moderator
  • Posts: 698
  • Thank you received: 149
  • Karma: 44
Connecting an LCD looks very cool but I dont have any schematics of how to do it, maybe Vince knows better...

It might crash because most of the codes use timers and maybe the LCD use them too... try to include some code without timers to start (like simple distortion of volume/boost).
The administrator has disabled public write access.

How to code several effects in the same program. 5 years 2 months ago #306

Hi, i solve my problem.

In my board i used DI (7),

I did not realize that this line of code I gave me some problems

--pinMode(7, INPUT);

Thanks-
The administrator has disabled public write access.

How to code several effects in the same program. 5 years 1 month ago #309

  • Aranda
  • Aranda's Avatar
  • OFFLINE
  • New Member
  • Posts: 1
  • Karma: 0
hello
I'm doing this project pedal but using the Arduino UNO and I make many mistakes, how do I use this same code of the effects work and I do not check errors ? :( :S
Please help !!
The administrator has disabled public write access.

How to code several effects in the same program. 5 years 1 month ago #311

  • Ray
  • Ray's Avatar
  • OFFLINE
  • Moderator
  • Posts: 698
  • Thank you received: 149
  • Karma: 44
Hi Aranda, we decided to to pedalSHIELD with arduino DUE because it has DACs (digital to analog converters) so generating music with it is easy.

In order to generate audio with Arduino UNO you would need an external RC network (PWM output) or an external DAC, check in google there is some nice tips of how to generate music with Arduino UNO.

In a nutshell, it is possible to make also a guitar pedal shield using Arduino UNO but unfortunately I reckon that the DUE code is not compatible...
The administrator has disabled public write access.

How to code several effects in the same program. 4 years 8 months ago #384

  • Gmis
  • Gmis's Avatar
  • OFFLINE
  • New Member
  • Posts: 2
  • Thank you received: 1
  • Karma: 0
Hey there,
my drummer and I were thinking of building that kind of an effect pedal. So I was just browsing the net, collecting some information, was a bit dissapointed with the adc bit resolution in the andruino boards and was searching for alternatives, when BAM! I found your pedal. What a marvelous idea to use two inputs and increase the resolution, I really enjoyed that part. And overall, great work. Thanks so much for sharing guys!
So, in the topic (well,kind of), our initial thought was to creat a chain of effects. Use some more pots and switches maybe an analog multiplexer,etc.
Do you believe that this ardruino board will be able to effectively run more than one effect simultaneously?
Have you tried this?
This will be our first ardruino project and our understanding on how much resource-hungry these applications are, is very primitive.

Best regards,
Jim
The administrator has disabled public write access.
The following user(s) said Thank You: Ray

How to code several effects in the same program. 4 years 8 months ago #385

  • Ray
  • Ray's Avatar
  • OFFLINE
  • Moderator
  • Posts: 698
  • Thank you received: 149
  • Karma: 44
I think that the idea of using 2 ADCs for improving the resolution could be further explored:

- There is that idea by Mike McGlinchy suggesting to use two ADCs in parallel, the pedalSHIELD pcb is prepared to do it and I have some examples but by default the board does not use it, you have to place one jumper to enable it.

- By default pedalSHIELD uses 2 ADCs, the first one reads the input signal and the second one reads the signal inverted, so you can use both readings to increase the resolution.

- There are other ideas that could be used, the most obvious is oversampling but so far nobody worked on it.

The negative side of everything is that Arduino DUE ADCs are not the most quiet in the market, there is always a very low background hiss, again I reckon that you can get very cool results using the default config but maybe some software or hardware mods can improve the situation.
Do you believe that this ardruino board will be able to effectively run more than one effect simultaneously?
Have you tried this?
Arduino DUE is pretty powerful, you can run 2 or 3 simple effects at the same time.
This will be our first ardruino project and our understanding on how much resource-hungry these applications are, is very primitive.
pedalSHIELD is a good platform to learn, and play, maybe not the ultimate hi-fi pedal, but you dont need to learn a new DSP language, or a complex architecture. And of course the Arduino community is great ;)
The administrator has disabled public write access.
The following user(s) said Thank You: Gmis
  • Page:
  • 1
  • 2
Time to create page: 0.381 seconds
Powered by Kunena Forum
Joomla SEF URLs by Artio