// Very basic Karplus-Strong // based on this explanation http://sites.music.columbia.edu/cmc/MusicAndComputers/chapter4/04_09.php #include #include Adafruit_MCP4728 mcp; #define nsamp 128 #define dacmax 256 unsigned int phase; unsigned int repeats; void setup() { Serial.begin(115200); if (!mcp.begin(0x64)) { while (1) { delay(100); } } // mcp.setSpeed(400000L); // mcp.setSpeed(800000L); mcp.setSpeed(800000L); phase=0; pluck(); } byte waveform[nsamp]; void pluck(){ Serial.println("pluck"); for (int i=0; i nsamp ) { phase = 0; repeats += 1; } s2 = waveform[phase]; waveform[p0] = ( s1 & s2 ) + ((s1 ^ s2) >> 1); mcp.fastWrite(s1 << 4, 0, 0, 0); if( repeats > 100 ) { pluck(); repeats = 0; } }