�������gӭ�M�������зf���¿Ƽ�����˾�ٷ��Wվ��
��������漰������Ͳ��Ńɴ�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���ɰ��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(&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; }
�����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(); }
�@�������{�����@���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��
Դ�a�ؓ�Y��
��һƪ��SDRAM������Ӌ�㷽��
��һƪ��λ���cλ�\��
�ߴa�Pע�҂�
���棺0755-82591176
�]�䣺vicky@yingtexin.net
��ַ�����������A�^(q��)���νֵ����δ��973�f�����S��(chu��ng)�I(y��)�@A��2��A08