国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

�������gӭ�M�������зf���¿Ƽ����޹�˾�ٷ��Wվ��

���F�ڵ�λ�ã���� ��„�YӍ >> ��„�^�l >> ISD9160�W���Pӛ04_ISD9160���l���a���a����

ISD9160�W���Pӛ04_ISD9160���l���a���a����

�l(f��)���r�g��2019-05-22

ǰ��

��������漰������Ͳ��Ńɴ�K��������ƪ�Pӛ�f�˲������@ƪ�́��f�f����@�K��Ҳ�������l���a�@���ֹ�����

��ƪ�Pӛ�е��@��Ԓ̫�b�������қQ���ُ��������ٺ���

“�ҵ��N�ӱ㺞�����ς���ӛ�µ�һ��Ԓ��“˹�ٷ�·ƽ���f������֮�y�����ڰѾW��˼�����Ø��Y�����w�F�ھ���չ�_���Z������”�@ƪ���a����Ҳ����Ƶ����y�����a�ľW��Y��������������@�N�����d�w���w�F��”

����ƪ�Pӛ������һ����߀�����������������v���Լ����������������������������һ��ģ�K�ؓ�D�����������

��������twowinter���D�dՈע����http://blog.csdn.net/iotisan/

�鿴���a��߉݋����Ҫ��App_StartRec��App_ProcessRec�@�ɂ�����������ͷքe�M�з�����

��һ���� App_StartRec

App_StartRec���ɰ��I�|�l(f��)����Ҳ���ǰ��I����ȥ���_ʼ�����

BOOL App_StartRec(void)
{
    S_AUDIOCHUNK_HEADER sAudioChunkHeader;

    // �@�ؾͲ���Decode��������Encode��
    // Initiate NuLiteEx audio encode lib with temp buffer provided for lib.
    NuLiteExApp_EncodeInitiate(&g_sApp.sNuLiteExAppEncode, (UINT8 *)&g_sApp.uTempBuf);

    // Start to encode NuLiteEx data with sample rate, bit per frame and saved data information into audio chunk header.
    if (NuLiteExApp_EncodeStart(&g_sApp.sNuLiteExAppEncode, &sAudioChunkHeader, ADC_SAMPLE_RATE, E_NULITEEX_ENCODE_BPS_10) == FALSE)
        return FALSE;

    // SPIFlash utility function provide encode data write into SPIFlash.
    // detail info please refer "SPIFlashUtil.h"
    SPIFlahUtil_StartWriteEncodeData(&sAudioChunkHeader, AUDIOROM_STORAGE_START_ADDR, NULL);

    // Light record led for display status.
    OUT5(0);

    // Start to record PCM data into buffer for produc NuLiteEx encode data.
    Record_StartRec();

    return TRUE;    
}

���Կ���App_StartRec��Ҫ������NuLiteExApp_EncodeStart��Record�ɲ����Ӻ�����

����֮��NuLiteExApp_EncodeStart

NuLiteExApp_EncodeStart(&g_sApp.sNuLiteExAppEncode, &sAudioChunkHeader, ADC_SAMPLE_RATE, E_NULITEEX_ENCODE_BPS_10)�����������a��������ע�ⷽ��������

g_sApp.sNuLiteExAppEncode��ȫ��׃�����漰���a��IJ�����sAudioChunkHeader��һ���R�r׃�����Á������l�K�^����Ϣ��

 

BOOL NuLiteExApp_EncodeStart( S_NULITEEX_APP_ENCODE *psNuLiteExAppEncode, S_AUDIOCHUNK_HEADER *psAudioChunkHeader, 
                              UINT16 u16SampleRate, enum eNuLiteExEncodeBPS eBitPerSample)
{
    if ( (eBitPerSample > NULITEEXAPP_ENCODE_MAX_BITRATE) || (u16SampleRate == 0) )
        return FALSE;
    else
    {
        psAudioChunkHeader->u16SmplRate = u16SampleRate;
        psAudioChunkHeader->u32BitPerFrame = eBitPerSample;
    }

    // ��ȫ��׃����Ո�ăȴ�?zh��n)���o���a���������乤����(zh��)���������l�K�^�����������a������ݔ���Y�����w�F���@�����IJɘ�����Ϣ��ݔ��׃�����o�������������l�K��
    // NuLiteEx encoder initiates work buffer.
    // Set bit rate and sample rate information for audio chunk header.
    NuLiteEx_EncodeInitiate((UINT8 *)psNuLiteExAppEncode->au32WorkBuf, psNuLiteExAppEncode->pau8TempBuf, 
        psAudioChunkHeader, (enum eNuLiteExEncodeBPS)psAudioChunkHeader->u32BitPerFrame, psAudioChunkHeader->u16SmplRate);

    // Reset encode buffer read index and write index
    psNuLiteExAppEncode->sEncodeBufCtrl.u16BufWriteIdx = 0;
    psNuLiteExAppEncode->sEncodeBufCtrl.u16BufReadIdx = 0;

    // Set Encoded frame size, Storage Utility will refer to this size to write data.
    psNuLiteExAppEncode->sEncodeBufCtrl.u16FrameSize =  (psAudioChunkHeader->u32BitPerFrame)>>3;
    psNuLiteExAppEncode->sEncodeBufCtrl.u16BufCount = (psNuLiteExAppEncode->sEncodeBufCtrl.u16FrameSize)*NULITEEXAPP_ENCODE_BUF_COUNT;

    // �@һ�����P�I���O�����ģ�K���ֵľ�����
    // Set input buffer size, PCM buffer pointer, frame size and sample rate.
    Record_SetInBufRecord(  &psNuLiteExAppEncode->sInBufCtrl, 
                            NULITEEXAPP_IN_BUF_SIZE,
                            psNuLiteExAppEncode->i16InBuf,
                            NULITEEX_ENCODE_SAMPLE_PER_FRAME,
                            psAudioChunkHeader->u16SmplRate);

    // ��Ҫ���@һ�����������ģ�K�IJ����������@�ӣ�SetInBufRecord ->Add -> StartRec��
    // Set application input buffer to record(ADC) output buffer.
    Record_Add(&psNuLiteExAppEncode->sInBufCtrl, psAudioChunkHeader->u16SmplRate);

    return TRUE;
}

Ҳ����Ҫ��Record_StartRec

�����f���ģ�K�IJ����������@�ӣ�SetInBufRecord ->Add -> StartRec���@�́����� 
Ӳ��PDMA�@���^�漰һ���P�I������PDMA����ADC����ֱ�ӷŵ�s_pi16AdcBuf���^��

void Record_StartRec(void)
{

    g_u8AppCtrl |= APPCTRL_RECORD;

    #if (ADC_FILTER_ENABLE == 1)
    NoiseFilter_ResetIIR2();
    s_pi16AdcBuf = g_ai16ADCSamples;
    #else
    // ��Ҫ�Ǿ��_�^(q��)��̎��
    if ( BUF_CTRL_ISNOT_CALLBACK(g_psAdcBufCtrl))   
        s_pi16AdcBuf = &g_psAdcBufCtrl->pi16Buf[g_psAdcBufCtrl->u16BufWriteIdx];
    else
        s_pi16AdcBuf = g_ai16ADCSamples;
    #endif

    // ������Ӳ��PDMA�ķ�ʽ
    #if (ADC_PDMA_ENABLE == 1)  
    PdmaCtrl_Start(ADC_PDMA_CH, (uint32_t *)&ADC->DAT, (uint32_t *)s_pi16AdcBuf, 8);
    #endif

    MIC_Start();
}

�ڶ����� App_ProcessRec

�@�������{�����@���P�I������SPIFlashUtil_WriteEncodeData�������̕��ڴ󲿷֕r�g��(zh��)��SPIFlashUtil_4KPagePartialWriting�������_�𲽌��뵽SPI FLASH����

��һ���P�I������NuLiteExApp_EncodeProcess���@��NuLiteEx���һ�����a̎�푪����

// Keep encode PCM buffer data to NuLiteEx lib.
NuLiteExApp_EncodeProcess(&g_sApp.sNuLiteExAppEncode);

���ڃȲ��{����NuLiteEx_EncodeProcess���@��NuLiteEx���API��

���Y

Դ�a�ؓ�Y��

 

“ϵ��ʽ0755-82591179

���棺0755-82591176

�]�䣺vicky@yingtexin.net

��ַ�����������A�^(q��)���νֵ����δ��973�f�����S��(chu��ng)�I(y��)�@A��2��A08