#include #include #include #include #include float baseVolume=2.0f; float balance=0.5f; int echoDelay = 16000; float echoGain = 0.5f; int isActive = 1; int hasEcho = 1; #define BUFFER_BITS 18 #define BUFFER_SIZE (1< b ) ? a : b; } float workingValue; void tune( float volume ) { workingValue *= volume; } void echo( int delay, float gain ) { workingValue += gain * inputbuffer[( bufferIndex - delay ) & IDX_MASK]; } void multiecho( int delay, float gain ) { workingValue += gain * outputbuffer[( bufferIndex - delay ) & IDX_MASK]; } int main(){ DSK6713_AIC23_CodecHandle handle; Uint32 val; /* Codec configuration settings */ DSK6713_AIC23_Config config = { 0x0017, // 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume 0x0017, // 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume 0x00d8, // 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume 0x00d8, // 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume 0x0011, // 4 DSK6713_AIC23_ANAPATH Analog audio path control 0x0000, // 5 DSK6713_AIC23_DIGPATH Digital audio path control 0x0000, // 6 DSK6713_AIC23_POWERDOWN Power down control 0x0043, // 7 DSK6713_AIC23_DIGIF Digital audio interface format 0x0001, // 8 DSK6713_AIC23_SAMPLERATE Sample rate control 0x0001 // 9 DSK6713_AIC23_DIGACT Digital interface activation }; DSK6713_init(); DSK6713_DIP_init(); DSK6713_LED_init(); DSK6713_LED_off(0); DSK6713_LED_off(1); DSK6713_LED_off(2); DSK6713_LED_off(3); handle = DSK6713_AIC23_openCodec(0, &config); //Fill up the buffer for(bufferIndex = 0; bufferIndex < BUFFER_SIZE; bufferIndex++){ Uint32 val; while(!DSK6713_AIC23_read(handle, &val)); loutputbuffer[bufferIndex]=linputbuffer[bufferIndex]=(float)((signed short)val); while(!DSK6713_AIC23_read(handle, &val)); routputbuffer[bufferIndex]=rinputbuffer[bufferIndex]=(float)((signed short)val); } while( isActive ) { inputbuffer = linputbuffer; outputbuffer = loutputbuffer; while(!DSK6713_AIC23_read(handle, &val)); workingValue = (float)((signed short)(val)); linputbuffer[bufferIndex] = workingValue; if( hasEcho ) { multiecho( echoDelay, echoGain ); } loutputbuffer[bufferIndex] = workingValue; tune( min( balance * 2.0f, 1.0f ) * baseVolume ); while(!DSK6713_AIC23_write(handle, (signed short) workingValue)); inputbuffer = rinputbuffer; outputbuffer = routputbuffer; while(!DSK6713_AIC23_read(handle, &val)); workingValue = (float)((signed short)(val)); rinputbuffer[bufferIndex] = workingValue; if( hasEcho ){ multiecho( echoDelay, echoGain ); } routputbuffer[bufferIndex] = workingValue; tune( min( (1.0f-balance) * 2.0f, 1.0f ) * baseVolume ); while(!DSK6713_AIC23_write(handle, (signed short) workingValue)); isActive = DSK6713_DIP_get( 3 ); hasEcho=DSK6713_DIP_get( 0 ); if( hasEcho ) { DSK6713_LED_on(0); } else { DSK6713_LED_off(0); } bufferIndex = ( bufferIndex + 1 ) & IDX_MASK; } /* Close the codec */ DSK6713_AIC23_closeCodec(handle); }