Step 7: Variations and Notes
- Add an RC low pass filter on the output with selectable corner frequency
- Weirder modes: bit remapping? bit rotation?
- Repeat last N samples? This is heavily limited by the ATmega's RAM.
- Run off 9V wall adapter instead of USB power
- 6 8-bit outputs running into a 5.1 speaker system?
- Use an Arduino mini for a super small pedal
- Patch bay as an interface?
- Input volume knob
Because the ADC is really the primary bottleneck in this setup, any alternative ADC methods could be really helpful (there's a great reference of alternatives here, though ultimately it'd be easiest to use a dedicated ADC chip via SPI instead of implementing these manually). As the system is now, it's best to stick to mono inputs if you want to retain fairly accurate output.
Thanks to Andrew Armenia for help with input normalization, Dane Kouttron for explaining a few things about PWM on ATmega168s, James Miglietta for assuring me that guitar pedals run at normal audio voltages, and Blair Neal for wanting a bitcrusher/sample rate reducer in the first place.
Another great technique using an audio buffer and doing "real" effects has been demoed by Martin Nawrath.
I think one of the biggest benefits of Martin's approach is that he has an interrupt for the ADC sampling. Normally, the ADC is called in a blocking way using analogRead() (i.e., the code doesn't go past analogRead() until the conversion is made). Martin's technique frees up the code to do other things while the ADC is being done.