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

📄 g723.cpp

📁 这是G.723和G.729的音频编解码的源代码
💻 CPP
字号:


#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "typedef2.h"
#include "cst2.h"
#include "tab2.h"
#include "G723.h"
#include "coder2.h"
#include "decod2.h"
#include "exc2.h"
#include "util2.h"
#include "codcng2.h"
#include "deccng2.h"
#include "vad2.h"
#include "G723.h"

/* Global variables */

enum  Crate   WrkRate = Rate53;
Flag  UseHp = False;
Flag  UsePf = False;
Flag  UseVx = True;
int   ReinitSize = 0;



int CG723::naFrameType[4]={24,20,4,1};

CG723::CG723()
{
	nFrameCount=0;
}

void CG723Encoder::Initialize(void)
{
	//Init coder and the decoder     
	Init_Coder();
	//Init Comfort Noise Functions
    if (UseVx)
	{
        Init_Vad();
        Init_Cod_Cng();
    }	
}

void CG723Decoder::Initialize()
{
	Init_Decod();
	Init_Dec_Cng();
}

int CG723Encoder::Encode(char* pcInputData,int nInputLength,
											char* pcOutputData)
{
	if (WrkRate == Rate53)
		reset_max_time();
   
	WordToFloat(pcInputData,nInputLength);
    Coder(m_afFloatFrame, pcOutputData);
	int nLength=GetEncodedFrameLength(pcOutputData);

	nFrameCount ++;
    if (ReinitSize > 0 && (nFrameCount%ReinitSize) == 0)	
        Initialize();
	
	return nLength;
}

void CG723Encoder::WordToFloat(char* pcInputData,int nInputLength)
{	
    int i;
	Word16 * pwIn=(Word16*)pcInputData;
	int n=nInputLength/sizeof(Word16);
	n=(n<Frame)? n : Frame; 

    for(i=0; i<n; i++)
        m_afFloatFrame[i]=(FLOAT)pwIn[i];
    for(i=n;i<Frame;i++)
        m_afFloatFrame[i]=(FLOAT)0.0;
}

int CG723Decoder::Decode(char* pcInputData,int nInputLength,
											char* pcOutputData)
{
	 Decod(m_afFloatFrame, pcInputData, (Word16) 0);
	 FloatToWord(pcOutputData);
	 if (ReinitSize > 0 && (nFrameCount%ReinitSize) == 0)
		 Initialize();
	 return Frame*sizeof(Word16);
}

void CG723Decoder::FloatToWord(char* pcOutputData)
{
    //Word16 Obuf[Frame];
	Word16 * pwOut=(Word16*)pcOutputData;
    int    i;
    for (i=0; i<Frame; i++)
    {
        if (m_afFloatFrame[i] < (FLOAT)-32767.5)
            pwOut[i] = -32768L;
        else if (m_afFloatFrame[i] > (FLOAT)32766.5)
            pwOut[i] = 32767;
        else
        {
            if (m_afFloatFrame[i] < 0)
                pwOut[i] = (Word16) (m_afFloatFrame[i]-(FLOAT)0.5);
            else
                pwOut[i] = (Word16) (m_afFloatFrame[i]+(FLOAT)0.5);
        }
    }    
}

⌨️ 快捷键说明

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