title: Obtain a real time Audio output from a speaker
body: <p>I'm currently editing an example code to get the output sound from a speaker.</p>
  
  <p>The input is given from a microphone. </p>
  
  <p>The process is expected to be done in real time.</p>
  
  <p>Can someone please help to change this code to give the expected output?</p>
  
  <p>This code is originally designed to output a given sound file.</p>
  
  <pre><code>#include "stdio.h"
  #include "usbstk5505.h"
  #include "usbstk5505_i2s.h"
  #include "csl_i2s.h"
  
  extern Int16 AIC3204_rset( Uint16 regnum, Uint16 regval);
  
  /*
   *
   *  AIC3204 Loop
   *      Loops audio from LINE IN to LINE OUT
   *
   */
  Int16 aic3204_loop_linein( )
  {
  Int16 sec, msec;
  Int16 sample, data1, data2;
  
  /* Configure AIC3204 */
  AIC3204_rset( 0, 0 );      // Select page 0
  AIC3204_rset( 1, 1 );      // Reset codec
  AIC3204_rset( 0, 1 );      // Select page 1
  AIC3204_rset( 1, 8 );      // Disable crude AVDD generation from DVDD
  AIC3204_rset( 2, 1 );      // Enable Analog Blocks, use LDO power
  AIC3204_rset( 0, 0 );
  
  /* PLL and Clocks config and Power Up  */
  AIC3204_rset( 27, 0x0d );  // BCLK and WCLK are set as o/p; AIC3204(Master)
  AIC3204_rset( 28, 0x00 );  // Data ofset = 0
  AIC3204_rset( 4, 3 );      // PLL setting: PLLCLK &lt;- MCLK, CODEC_CLKIN &lt;-PLL CLK
  AIC3204_rset( 6, 7 );      // PLL setting: J=7
  AIC3204_rset( 7, 0x06 );   // PLL setting: HI_BYTE(D=1680)
  AIC3204_rset( 8, 0x90 );   // PLL setting: LO_BYTE(D=1680)
  AIC3204_rset( 30, 0x88 );  // For 32 bit clocks per frame in Master mode ONLY
                             // BCLK=DAC_CLK/N =(12288000/8) = 1.536MHz = 32*fs
  AIC3204_rset( 5, 0x91 );   // PLL setting: Power up PLL, P=1 and R=1
  AIC3204_rset( 13, 0 );     // Hi_Byte(DOSR) for DOSR = 128 decimal or 0x0080 DAC oversamppling
  AIC3204_rset( 14, 0x80 );  // Lo_Byte(DOSR) for DOSR = 128 decimal or 0x0080
  AIC3204_rset( 20, 0x80 );  // AOSR for AOSR = 128 decimal or 0x0080 for decimation filters 1 to 6
  AIC3204_rset( 11, 0x82 );  // Power up NDAC and set NDAC value to 2
  AIC3204_rset( 12, 0x87 );  // Power up MDAC and set MDAC value to 7
  AIC3204_rset( 18, 0x87 );  // Power up NADC and set NADC value to 7
  AIC3204_rset( 19, 0x82 );  // Power up MADC and set MADC value to 2
  
  /* DAC ROUTING and Power Up */
  AIC3204_rset( 0, 1 );      // Select page 1
  AIC3204_rset( 0x0c, 8 );   // LDAC AFIR routed to HPL
  AIC3204_rset( 0x0d, 8 );   // RDAC AFIR routed to HPR
  AIC3204_rset( 0, 0 );      // Select page 0
  AIC3204_rset( 64, 2 );     // Left vol=right vol
  AIC3204_rset( 65, 0 );     // Left DAC gain to 0dB VOL; Right tracks Left
  AIC3204_rset( 63, 0xd4 );  // Power up left,right data paths and set channel
  AIC3204_rset( 0, 1 );      // Select page 1
  AIC3204_rset( 0x10, 00 );  // Unmute HPL , 0dB gain
  AIC3204_rset( 0x11, 00 );  // Unmute HPR , 0dB gain
  AIC3204_rset( 9, 0x30 );   // Power up HPL,HPR
  AIC3204_rset( 0, 0 );      // Select page 0
  USBSTK5505_wait( 100 );    // wait
  
  /* ADC ROUTING and Power Up */
  AIC3204_rset( 0, 1 );      // Select page 1
  AIC3204_rset( 0x34, 0x30 );// STEREO 1 Jack
                             // IN2_L to LADC_P through 40 kohm
  AIC3204_rset( 0x37, 0x30 );// IN2_R to RADC_P through 40 kohmm
  AIC3204_rset( 0x36, 3 );   // CM_1 (common mode) to LADC_M through 40 kohm
  AIC3204_rset( 0x39, 0xc0 );// CM_1 (common mode) to RADC_M through 40 kohm
  AIC3204_rset( 0x3b, 0 );   // MIC_PGA_L unmute
  AIC3204_rset( 0x3c, 0 );   // MIC_PGA_R unmute
  AIC3204_rset( 0, 0 );      // Select page 0
  AIC3204_rset( 0x51, 0xc0 );// Powerup Left and Right ADC
  AIC3204_rset( 0x52, 0 );   // Unmute Left and Right ADC
  AIC3204_rset( 0, 0 );    
  USBSTK5505_wait( 100 );    // Wait
  
  /* Initialize I2S */
  USBSTK5505_I2S_init();
  
  /* Play Tone */
  for ( sec = 0 ; sec &lt; 5 ; sec++ )
  {
      for ( msec = 0 ; msec &lt; 1000 ; msec++ )
      {
          for ( sample = 0 ; sample &lt; 48 ; sample++ )
          {
              /* Read 16-bit left channel Data */
              USBSTK5505_I2S_readLeft(&amp;data1);
  
              /* Read 16-bit right channel Data */
              USBSTK5505_I2S_readRight(&amp;data2);
  
              /* Write 16-bit left channel Data */
              USBSTK5505_I2S_writeLeft(data1);
  
              /* Write 16-bit right channel Data */
              USBSTK5505_I2S_writeRight(data2);
          }
      }
  }
  USBSTK5505_I2S_close();  // Disble I2S
  AIC3204_rset( 1, 1 );    // Reset codec
  
  return 0;
  </code></pre>
  
  <p>}</p>