//Echo_control.c Echo using two interrupts for read and write //3 sliders to control effects: buffer size, amplitude, fading short input, output; short bufferlength = 1000; //initial buffer size short i = 0; //buffer index short buffer[8000]; //max size of buffer short delay = 1; //determines size of buffer short delay_flag = 1; //flag if buffer size changes short amplitude = 1; //amplitude control by slider short echo_type = 0; //no fading (1 for fading) interrupt void c_int11() //ISR INT11 to write { short new_count; //count for new buffer output=input+0.1*amplitude*buffer[i]; //newest+oldest sample if (echo_type == 1) //if fading is desired { new_count = (i-1) % bufferlength; //previous buffer location buffer[new_count] = output; //to store most recent output } output_sample(output); //output delayed sample } interrupt void c_int12() //ISR INT12 to read { input = input_sample(); //newest input sample data if (delay_flag != delay) //if delay has changed { //->new buffer size delay_flag = delay; //reint for future change bufferlength = 1000*delay; //new buffer length i = 0; //reinit buffer count } buffer[i] = input; //store input sample i++; //increment buffer index if (i == bufferlength) i=0; //if @ end of buffer reinit } main() { comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop }