从扬声器获取实时音频输出

时间:2016-12-21 04:29:36

标签: c

我正在编辑示例代码以从扬声器获取输出声音。

输入来自麦克风。

预计该过程将实时完成。

有人可以帮忙更改此代码以提供预期的输出吗?

此代码最初用于输出给定的声音文件。

#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 <- MCLK, CODEC_CLKIN <-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 < 5 ; sec++ )
{
    for ( msec = 0 ; msec < 1000 ; msec++ )
    {
        for ( sample = 0 ; sample < 48 ; sample++ )
        {
            /* Read 16-bit left channel Data */
            USBSTK5505_I2S_readLeft(&data1);

            /* Read 16-bit right channel Data */
            USBSTK5505_I2S_readRight(&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;

}

0 个答案:

没有答案