⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 .#recorder.c.1.2

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 2
字号:
//#ifdef __RECORD_
#include "Recorder.h"
#include "device.h"
#include "my_os_q.h"
#include "task_cfg.h"
#include "Recorder_api.h"

void         __Recorder_Exceptions(recorder_t *g_recorder_vars, int errtype);
int         Recorder_CheckFileName(recorder_t *g_recorder_vars);
void         Recorder_InitContrlParm(recorder_t *g_recorder_vars);
bool         RecorderDetect();

void RecorderEngine()
{
    int                result;
    INT8U            err;
    
    recorder_t        g_recorder_vars;

    msg_t            QStart_In[10];
    msg_t            QStart_Out[10];

    char            recDataBuffer[513];
    char            recADBuffer[1728];    //144*3*2*2

    msg_t            msg;
    msg_t            msg_send;

    memset(&g_recorder_vars, 0x00, sizeof(recorder_t));
    Recorder_InitContrlParm( &g_recorder_vars );
    
    g_recorder_vars.rec_bitstream.bit_stream = recDataBuffer;
    g_recorder_vars.rec_bitstream.pcm_stream = recADBuffer;

    Recorder_In = MYOSQCreate(QStart_In, 10);
    if( Recorder_Out == 0 )
    {
        Recorder_Out = MYOSQCreate(QStart_Out, 10);
    }

    OSSetTaskOwnPtr( (unsigned int *)&g_recorder_vars, RECORDER_ENGINE_ID);
    output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);


    Music_Recode_Open(&g_recorder_vars.rec_bitstream, Recorder_In);

    do
    {
        MYOSQPend(Recorder_In,&msg, 0);

        switch(msg.type)
        {
//        case MS_SetLocation:
//            if( (result = Recorder_CheckFileName(&g_recorder_vars)) != MS_Recorder_NoErr)
//            {
//                __Recorder_Exceptions(&g_recorder_vars,result);
//                break;
//            }
//            FS_FWrite(g_recorder_vars.rec_bitstream.bit_stream, 512, g_recorder_vars.fp);
//            g_recorder_vars.recorder_info.status = record_wait;  
//            break;

        // 开始录音或继续录音 
        case MS_Play:
            if(g_recorder_vars.recorder_info.status <= record_stop)
            {
                if( (result = Recorder_CheckFileName(&g_recorder_vars)) != MS_Recorder_NoErr)
                {
                    __Recorder_Exceptions(&g_recorder_vars,result);
                    break;
                }
//                FS_FWrite(g_recorder_vars.rec_bitstream.bit_stream, 512, g_recorder_vars.fp);
                if( Music_Recode_Play(&g_recorder_vars.rec_control_info) != TRUE)
                {
                    result = MS_Recorder_DSPErr;
                    __Recorder_Exceptions(&g_recorder_vars,result);
                }
                g_recorder_vars.recorder_info.status = record_recording;
            }
/*
            else if(g_recorder_vars.recorder_info.status == record_wait)
            {   //开始录音
                if( Music_Recode_Play(&g_recorder_vars.rec_control_info) != TRUE)
                {
                    result = MS_Recorder_DSPErr;
                    __Recorder_Exceptions(&g_recorder_vars,result);
                }
                g_recorder_vars.recorder_info.status = record_recording;
            }
*/
            else if(g_recorder_vars.recorder_info.status == record_pause)// 继续录音 
            {   
                g_recorder_vars.recorder_info.status = record_recording;
                Music_Recode_Continue();
            }
            else if(g_recorder_vars.recorder_info.status == record_recording)  //暂停录音
            {
                g_recorder_vars.recorder_info.status = record_pause;
                Music_Recode_Pause();
            }
            else
            {
                __Recorder_Exceptions(&g_recorder_vars,MS_Recorder_StatusErr);
            }
            break;

        case MS_Stop:   
            g_recorder_vars.recorder_info.status = record_unvalid;
            Music_Recode_stopplay();
            break;
        
        case MS_Write:
            FS_FWrite((FS_u32)g_recorder_vars.rec_bitstream.bit_stream, 512, g_recorder_vars.fp);
            break;
            
        case MS_DSPExit:
            g_recorder_vars.recorder_info.status = record_stop;
            if(g_recorder_vars.fp != NULL)
            {
                FS_FClose(g_recorder_vars.fp);
                g_recorder_vars.fp = NULL;
            }
            break;

        case MS_DSP_Err:
            g_recorder_vars.recorder_info.status = record_err;
            if(g_recorder_vars.fp != NULL)
            {
                FS_FClose(g_recorder_vars.fp);
                g_recorder_vars.fp = NULL;
            }
            break;
            
        case MS_GetTime:
            Get_CurrentTime(&g_recorder_vars.recorder_info.current_time);
            msg_send.type = MS_RECORDER;
            msg_send.msg.data[0] = MS_RedrawInfo;
            MYOSQPost(Recorder_Out,&msg_send);
            break;
/*
        case MS_SETGAIN:// 设置  输入音量的增益    
        case MS_SETVOR:// 设置  分曲模式 
        case MS_RECODEMODE:// 设置录音模式
        case MS_SETSOURCE:// 设置  resource_t        
        case MS_SETAUDIOFMT: // 设置  audio_format_t 
        case MS_GETAUDIOFMT: // 获取  audio_format_t 
             break;
*/
        case MS_END:
            if(g_recorder_vars.recorder_info.status >= record_pause)
            {                  
                Music_Recode_stopplay();   
            }
            else if(g_recorder_vars.recorder_info.status >= record_wait)
            {   
                if(g_recorder_vars.fp != NULL)
                {
                    FS_FClose(g_recorder_vars.fp);
                    g_recorder_vars.fp = NULL;
                }
            }
            g_recorder_vars.recorder_info.status = record_exit;
            break;

        default:
            __Recorder_Exceptions(&g_recorder_vars,MS_Recorder_UndefineErr);
        }
    }while(g_recorder_vars.recorder_info.status != record_exit);
    
    if( !Music_Recode_Close())
        __Recorder_Exceptions(&g_recorder_vars,MS_Recorder_ReleaseErr);

    OS_ENTER_CRITICAL(); 
    Recorder_In = MYOSQDel(Recorder_In, OS_DEL_ALWAYS, &err);    
    Recorder_Out = MYOSQDel(Recorder_Out, OS_DEL_ALWAYS, &err); 
    Recorder_In = 0; 
    Recorder_Out = 0; 
    OS_EXIT_CRITICAL();

    while(1)
    {
        output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
        OSTaskDel(OS_PRIO_SELF);
    }
}



void __Recorder_Exceptions(recorder_t *g_recorder_vars, int errtype)
{
    msg_t msg_send;
    msg_send.type = MS_RECORDER;
    msg_send.msg.data[0] = errtype;
    MYOSQPost(Recorder_Out,&msg_send);
}
void Recorder_InitContrlParm(recorder_t *g_recorder_vars)
{     
    g_recorder_vars->rec_control_info.source = source_phone;
    g_recorder_vars->rec_control_info.rec_type = REC_AG8;
    g_recorder_vars->rec_control_info.FsIndex =_FS_8K;
    g_recorder_vars->rec_control_info.BTIndex = 32;      
    g_recorder_vars->rec_control_info.EncodeMode = STEREO;
    g_recorder_vars->rec_control_info.ChannelNum = DUAL_CH; 
    
    g_recorder_vars->rec_control_info.gain = DB_0P0;
    
    g_recorder_vars->recorder_info.status = record_stop; 
    
    g_recorder_vars->recorder_dir[0] = '\\';
}
      
/*******************************************************************************
* Function:       Recorder_CheckFileName
* Description:    检查文件是否存在,不存在,创建该文件.
* Input:         
* Output:        
* Other:         对应 MS_LOAD 
*******************************************************************************/

int Recorder_CheckFileName(recorder_t *g_recorder_vars)
{
    char filename[78];
    if(g_recorder_vars->fp != NULL)
    {
        FS_FClose(g_recorder_vars->fp);
    }
    strcpy(filename,g_recorder_vars->recorder_dir);
    strcat(filename,g_recorder_vars->recorder_filename);
    
    g_recorder_vars->fp = FS_FOpen(filename, "rb");
    if((g_recorder_vars->fp != NULL) && (g_recorder_vars->recorder_info.status != record_wait))
    {
         return MS_Recorder_FileExistErr;
    } 
    g_recorder_vars->fp = FS_FOpen(filename, "wb");
    if(g_recorder_vars->fp == NULL)
    {     
         return MS_Recorder_FSErr;
    }
    return MS_Recorder_NoErr;
}   
//#endif /*__RECORD_*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -