#include #include #include #include #include "system.h" #include "altera_avalon_pio_regs.h" #include "altera_avalon_timer_regs.h" #include "sys/alt_irq.h" typedef struct { int p_length; int delay_length; int stringNum; int fret; }note; int main (int argc, char **argv) { int numNotes = 24; int currentNote; int output[6]; int delay[6][535]; int StringP[6]; int ptrin[6]; int ptrout[6]; int seed; //int Fs = 44100; int TimerCurrentVal, TimerPrevVal; int strike; int Sample; int samplecount; int millisecondcount; int targetTime; int i, j; int dist = 0; int loopCount =0; millisecondcount = 0; targetTime = 10; int dummy; //initialize random stuff seed = 10000; srand(seed); int fretArray[6][10] = { 569, 537, 507, 478, 452, 426, 402, 380, 358, 338, 427, 403, 380, 358, 339, 320, 302, 285, 269, 254, 320, 302, 285, 269, 254, 240, 226, 214, 202, 190, 240, 227, 214, 202, 190, 180, 170, 160, 151, 143, 190, 179, 170, 160, 151, 142, 134, 127, 120, 113, 117, 110, 105, 98, 93, 88, 83, 78, 74, 70}; //"Enter Sandman" by Metallica note Song[numNotes]; Song[0].stringNum = 0; Song[0].fret = 0; Song[0].delay_length = 500; Song[1].stringNum = 1; Song[1].fret = 7; Song[1].delay_length = 250; Song[2].stringNum = 2; Song[2].fret = 5; Song[2].delay_length = 250; Song[3].stringNum = 0; Song[3].fret = 6; Song[3].delay_length = 250; Song[4].stringNum = 0; Song[4].fret = 5; Song[4].delay_length = 500; Song[5].stringNum = 1; Song[5].fret = 7; Song[5].delay_length = 250; Song[6].stringNum = 0; Song[6].fret = 2; Song[6].delay_length = 20; Song[7].stringNum = 1; Song[7].fret = 4; Song[7].delay_length = 250; Song[8].stringNum = 1; Song[8].fret = 3; Song[8].delay_length = 20; Song[9].stringNum = 2; Song[9].fret = 5; Song[9].delay_length = 100; Song[10].stringNum = 1; Song[10].fret = 2; Song[10].delay_length = 20; Song[11].stringNum = 2; Song[11].fret = 4; Song[11].delay_length = 100; Song[12].stringNum = 0; Song[12].fret = 2; Song[12].delay_length = 20; Song[13].stringNum = 1; Song[13].fret = 4; Song[13].delay_length = 250; Song[14].stringNum = 1; Song[14].fret = 3; Song[14].delay_length = 20; Song[15].stringNum = 2; Song[15].fret = 5; Song[15].delay_length = 100; Song[16].stringNum = 1; Song[16].fret = 2; Song[16].delay_length = 20; Song[17].stringNum = 2; Song[17].fret = 4; Song[17].delay_length = 100; Song[16].stringNum = 0; Song[16].fret = 2; Song[16].delay_length = 20; Song[17].stringNum = 1; Song[17].fret = 4; Song[17].delay_length = 250; Song[18].stringNum = 1; Song[18].fret = 3; Song[18].delay_length = 20; Song[19].stringNum = 2; Song[19].fret = 5; Song[19].delay_length = 100; Song[20].stringNum = 1; Song[20].fret = 2; Song[20].delay_length = 20; Song[21].stringNum = 2; Song[21].fret = 4; Song[21].delay_length = 100; Song[22].stringNum = 0; Song[22].fret = 0; Song[22].delay_length = 20; Song[23].stringNum = 1; Song[23].fret = 2; Song[23].delay_length = 250; for(i=0; i0) ? 5000 : -5000; strike += (dist == 0) ? delay[i][ptrin[i]] : ((delay[i][ptrin[i]]>0) ? 5000 : -5000); delay[i][ptrin[i]] =((delay[i][ptrin[i]] + delay[i][ptrout[i]])>>1); if (ptrin[i] == StringP[i]) { ptrin[i] = 0; } else { ptrin[i]++; } if (ptrout[i] == StringP[i]) { ptrout[i] = 0; } else { ptrout[i]++; } } IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, strike); } if((targetTime == millisecondcount)&& (currentNote < (numNotes-1))) { currentNote++; StringP[Song[currentNote].stringNum] = Song[currentNote].p_length - 1; ptrin[ Song[currentNote].stringNum] = 0; ptrout[ Song[currentNote].stringNum] = 1; for (i = 0; i