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

📄 mrecord.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
            gChannel  = 2;  // stereo
            thePresentCodec = 1;
            break;
#endif
#ifdef ADPCM_ENC_INCLUDE
        case ADPCM_REC_SETTING_32:
            gBitrate  = 32;
            gSamplingFreq = 8000; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 1;  // mono
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_45:
            gBitrate  = 45;
            gSamplingFreq = 11025; // 32KHz
            gMpegMode  = 1;  //
            gChannel  = 1;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_67:
            gBitrate  = 67;
            gSamplingFreq = 8000; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 2;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_89:
            gBitrate  = 89;
            gSamplingFreq = 22050; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 1;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_92:
            gBitrate  = 92;
            gSamplingFreq = 11025; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 2;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_128:
            gBitrate  = 128;
            gSamplingFreq = 32000; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 1;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_177:
            gBitrate  = 177;
            gSamplingFreq = 44100; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 1;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_180:
            gBitrate  = 180;
            gSamplingFreq = 22050; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 2;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_259:
            gBitrate  = 259;
            gSamplingFreq = 32000; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 2;  // stereo
            thePresentCodec = 2;
            break;

        case ADPCM_REC_SETTING_356:
            gBitrate  = 356;
            gSamplingFreq = 44100; // 44.1KHz
            gMpegMode  = 1;  //
            gChannel  = 2;  // stereo
            thePresentCodec = 2;
            break;
#if ROCK_CAMERA
        case ADPCM_DVREC_SETTING_65:
            gBitrate		= 45;
            gSamplingFreq	= 11025;
            gMpegMode		= 1;
            gChannel		= 1;
            thePresentCodec = 2;
            break;
#endif

#endif

#ifdef MP3_ENC_INCLUDE
        case MP3_REC_SETTING_16:
            gBitrate  = 16;
            gSamplingFreq = 16000; // 16KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 1;  // mono
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_24:
            gBitrate = 24;
            gSamplingFreq = 16000; // 16KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 1;  // mono
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_32:
            gBitrate = 32;
            gSamplingFreq = 16000; // 16KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 1;  // mono
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_40:
            gBitrate = 40;
            gSamplingFreq = 16000; // 16KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_48:
            gBitrate = 48;
            gSamplingFreq = 22050; // 22.05KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_56:
            gBitrate = 56;
            gSamplingFreq = 22050; // 22.05KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_64:
            gBitrate = 64;
            gSamplingFreq = 22050; // 22.05KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_80:
            gBitrate = 80;
            gSamplingFreq = 22050; // 22.05KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_96:
            gBitrate = 96;
            gSamplingFreq = 22050; // 22.05KHz
            gMpegMode  = 0;  // Mpeg2
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_112:
            gBitrate = 112;
            gSamplingFreq = 32000; // 32KHz
            gMpegMode  = 1;  // Mpeg1
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_128:
            gBitrate = 128;
            gSamplingFreq = 44100; // 32KHz
            gMpegMode  = 1;  // Mpeg1
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_160:
            gBitrate = 160;
            gSamplingFreq = 44100; // 44.1KHz
            gMpegMode  = 1;  // Mpeg1
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_192:
            gBitrate = 192;
            gSamplingFreq = 44100; // 44.1KHz
            gMpegMode  = 1;  // Mpeg1
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;

        case MP3_REC_SETTING_256:
            gBitrate = 256;
            gSamplingFreq = 44100; // 44.1KHz
            gMpegMode  = 1;  // Mpeg1
            gChannel  = 2;  // stereo
            thePresentCodec = 3;
            break;
#endif

    }
}

/*****************************************************
Name:   RecHighTaskMsgCallBack(void)
Desc:   录音回调,消息流程处理
Param:
Return:
Global:
Note:
Author: fsh 2007-9-13
Log:
******************************************************/
BOOLEAN RecUpDataMsgCallBack(ROCK_MSG_ID id, void *msg)
{
#ifdef  BOARD
    int ret = 1;
    //RecHighTaskMsg(id,msg);

    switch (id)
    {

        case AS_GUAU_RecUpData:
            WindowInvalidateWindow(NULL); //WIN_MAIN
            break;
        case AS_GUAU_RecErro:
            if (WIN_MAIN)
            {
                WindowSendMessage(WIN_MAIN, WM_COMMAND, (INT32)msg, NULL);
            }
            break;


        default:
            ret = 0;
            break;
    }
    return ret;

#endif


}
unsigned char SaveLast_Data(void)
{
    if (RecordWriteIndex <= REC_WRITE_BUF_LEN)
#ifdef PCM_ENC_INCLUDE
        FS_fwrite(&RecordWriteBuf[0], 1, RecordWriteIndex*2 , (FS_FILE *)TRACK_GetFileHandleOfRecord());
#endif
#if  defined(MP3_ENC_INCLUDE)||defined(ADPCM_ENC_INCLUDE)
    FS_fwrite(&RecordWriteBuf[0], 1, RecordWriteIndex , (FS_FILE *)TRACK_GetFileHandleOfRecord());
#endif
    else if (RecordWriteIndex > REC_WRITE_BUF_LEN)
#ifdef PCM_ENC_INCLUDE
        FS_fwrite(&RecordWriteBuf[REC_WRITE_BUF_LEN], 1, (RecordWriteIndex - REC_WRITE_BUF_LEN)*2 , (FS_FILE *)TRACK_GetFileHandleOfRecord());
#endif
#if  defined(MP3_ENC_INCLUDE)||defined(ADPCM_ENC_INCLUDE)
    FS_fwrite(&RecordWriteBuf[REC_WRITE_BUF_LEN], 1, (RecordWriteIndex - REC_WRITE_BUF_LEN) , (FS_FILE *)TRACK_GetFileHandleOfRecord());
#endif
    return 1;
}
/*****************************************************
Name:   RecHighTaskMsgCallBack(void)
Desc:   录音回调,消息流程处理
Param:
Return:
Global:
Note:
Author: fsh 2007-9-13
Log:
******************************************************/
UINT16   RecFisrtNoWrite = 0;
int RecHighTaskMsgCallBack(ROCK_MSG_ID id, void *msg)
{
#ifdef  BOARD
    int ret = 1;
    switch (id)
    {

        case AS_GUAU_RecPrepare:
            if ((REC_Flag == RECORD_PREPARE) || (REC_Flag == RECORD_ERROR))
            {
                if (REC_Prepare() == FALSE)
                {
                    REC_Flag = RECORD_ERROR;
                    return FALSE;
                }
                if ((void *)msg)
                {
                    RockOSSendMsg(MBAUDIO, AS_GUAU_TSStartRecReq, NULL);
                }
                else
                {
                    REC_Flag = RECORD_PREPARE;
                }
            }
            break;
        case AS_GUAU_TSStartRecReq://录音硬件初始化,启动录音DMA和CODEC,并创建音轨
            if (REC_Flag == RECORD_PREPARE)
            {
                RecFisrtNoWrite =  1;
                if (REC_StartRecord() == FALSE)
                {
                    REC_Flag = RECORD_ERROR;
                    return FALSE;
                }
                REC_Flag = RECORD_BEING;
            }
            break;
        case AS_ISRAU_TSRecDMAIntInd://DMA切换数据,帧编码处理
            if (REC_Flag == RECORD_BEING)
            {
                EncodeProcess();    // decode err ??
            }
            break;

        case AS_GUAU_RecPause://录音占停
            if (REC_Flag == RECORD_BEING)
            {
                REC_Flag = RECORD_PAUSE;
                Audio_RecordPause();
            }
            break;
        case AS_GUAU_RecResume://继续录音
            if (REC_Flag == RECORD_PAUSE)
            {
                REC_Flag = RECORD_BEING;
                Audio_RecordResume();
            }
            break;
        case AS_GUAU_TSStopRecReq://停止录音,关闭文件,等待新录音
            //     REC_Flag =RECORD_PREPARE;
            //暂停的状态 下 等待 DMA 是否 会死?
            if (RecordWriteIndex <= REC_WRITE_BUF_LEN)
            {
                if (RecordWriteIndex > 2*1024)
                {
                    memset(&RecordWriteBuf[RecordWriteIndex - 2*1024], 0, 2*1024);
                }
                else
                {
                    memset(&RecordWriteBuf[0], 0, RecordWriteIndex);
                }
            }
            else if (RecordWriteIndex > REC_WRITE_BUF_LEN)
            {
                if (RecordWriteIndex > (2*1024 + REC_WRITE_BUF_LEN))
                {
                    memset(&RecordWriteBuf[RecordWriteIndex - 2*1024], 0, 2*1024);
                }
                else
                {
                    memset(&RecordWriteBuf[REC_WRITE_BUF_LEN], 0, (RecordWriteIndex - REC_WRITE_BUF_LEN));
                }
            }
            if ((REC_Flag == RECORD_BEING) || (REC_Flag == RECORD_PAUSE) || (REC_Flag == RECORD_ERROR))
            {
                if ((REC_Flag == RECORD_BEING) || (REC_Flag == RECORD_ERROR))  // RECORD_PAUSE
                {
                    REC_Flag = RECORD_ERROR; // FOR STOP DMA ISR.
                    while (!DMABufferEmpty);
                    I2sStop();
                }
                REC_Flag = RECORD_SAVE;
                HDMA_Stop(0);

                if (REC_GetCurrRecInput() != FM_REC)//判断是否从Fm进入录音
                {
                    Codec_SetMode(Codec_DACout);
                }
                //RockOSSendMsg( MBDISP, AS_GUAU_RECORDCLOSE, NULL);
                //RockOSSendMsg( MBGUI, AS_GUAU_RECORDCLOSE, NULL);
                RockOSSendMsg(MBDISP, AS_GUAU_RECORDCLOSE, NULL);
            }
            break;
        case AS_GUAU_CancleSave:
            FSFileDelete(RecFileNameLong);
            break;
        case AS_GUAU_RecQuailtySwitch:
            CodecOpen(0, CODEC_OPEN_ENCODE);
            break;
        default:
            ret = 0;
            break;
    }
    return ret;

#endif


}

int RecHighTaskMsg(ROCK_MSG_ID id, void *msg)
{

    switch (id)
    {
        case AS_GUAU_RECORDWRITE:
            if ((REC_Flag != RECORD_PREPARE))
            {
#ifdef PCM_ENC_INCLUDE
#if ROCK_CAMERA && CAM_FUN_DV
                if (0x8000 != FS_fwrite(msg, 1, 0x8000,
                                        (FS_FILE *)TRACK_GetFileHandleOfRecord()))
#else
                if (REC_WRITE_BUF_LEN != FS_fwrite(msg, 1, REC_WRITE_BUF_LEN,
                                                   (FS_FILE *)TRACK_GetFileHandleOfRecord()))//不能用立即数,DV录音要改这个长度
#endif
                {
                    // RockOSSendMsg(MBGUI,AS_GUAU_RecErro,(void*)RECORD_FILEWRITE_ERRO);      /* 写文件失败  */
                }
#endif
#if  defined(MP3_ENC_INCLUDE)||defined(ADPCM_ENC_INCLUDE)
#if ROCK_CAMERA && CAM_FUN_DV
                if (0x8000 != FS_fwrite(msg, 1, 0x8000,
                                        (FS_FILE *)TRACK_GetFileHandleOfRecord()))
#else
                if (REC_WRITE_BUF_LEN != FS_fwrite(msg, 1, REC_WRITE_BUF_LEN, //不能用立即数,DV录音要改这个长度
                                                   (FS_FILE *)TRACK_GetFileHandleOfRecord()))
#endif

                {
                    //RockOSSendMsg(MBAUDIO,AS_GUAU_RecPause,NULL);
                    //RockOSSendMsg(MBGUI,AS_GUAU_RecErro,(void*)RECORD_FILEWRITE_ERRO);      /* 写文件失败  */
                }
#endif
            }
            break;
        case AS_GUAU_RECORDCLOSE:
            if (REC_Flag == RECORD_SAVE)
            {
                SaveLast_Data();
                CloseTrack();
                PMU_ExitModule(PMU_RECORDADPCM);
                //  PMU_ExitModule(PMU_RECORDMP3);
                REC_Flag = RECORD_PREPARE;
            }

            break;

        default:
            break;
    }
    return 0;
}

⌨️ 快捷键说明

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