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

📄 rint0.c

📁 该代码采用c5400dsp的汇编语言和c语言实现语音adpcm压缩与解压的程序
💻 C
字号:
#include <math.h>
/*-------------------------------------*/
int ser0inrdcnt,ser0outwrcnt;							/*Bsp0 Receive Buffer Read Pointer,Transmit Buffer Writer Pointer */
int ser0inwrcnt,ser0outrdcnt;							/*Bsp0 Receive Buffer Writer Pointer,Transmit Buffer Read Pointer */
int ser0inbuf[40],ser0outbuf[40];						/*Bsp0 Receive Buffer And Transmit Buffer */
int ser0flag,int0flag,timeflag,hpirecflag;              /*Define Some Global Variable */
extern int ad_samp_freq;	

ioport unsigned port0400;
ioport unsigned port1400;
//ADPCM 编码用
typedef struct
{
	int  PrevValue;  // 前一次转换时的数据
	int  PrevIndex;  // 前一此转换时使用的索引
	int  Length;     // 转换数据长度
	int* pBufferIn;  // 输入缓冲区地址
	int* pBufferOut; // 输出缓冲区地址
}ADPCM_STRUCT;

ADPCM_STRUCT AdpcmStateEnc,AdpcmStateDec;
// 编码函数申明
extern void AdpcmEncoder(int* pBufferIn,  int* pBufferOut, 
					     int* pPrevValue, int* pPrevIndex, int Length);
// 解码函数申明					    					     
extern void AdpcmDecoder(int* pBufferIn,  int* pBufferOut, 
					     int* pPrevValue, int* pPrevIndex, int Length);

//
/*-------------------------------------*/
void main()
{ 
int i;
int EncBufferIn[4],EncBufferOut[1];
int DecBufferIn[1],DecBufferOut[4];
	ad_samp_freq = 1026; 
	c54_init(); 
	ser0inwrcnt = 1 ;
	ser0outrdcnt = 5 ;
	ser0inrdcnt = 5 ;
	ser0outwrcnt = 1;
	ser0flag = 0;
	AdpcmStateEnc.PrevValue = 0;
	AdpcmStateEnc.PrevIndex = 0;
	AdpcmStateEnc.Length = 4;
	AdpcmStateEnc.pBufferIn = EncBufferIn;
	AdpcmStateEnc.pBufferOut = EncBufferOut;
	
	AdpcmStateDec.PrevValue = 0;
	AdpcmStateDec.PrevIndex = 0;
	AdpcmStateDec.Length = 1;
	AdpcmStateDec.pBufferIn = DecBufferIn;
	AdpcmStateDec.pBufferOut = DecBufferOut;
	
	for (;;){ 
   			if (ser0flag >= 4){    
				for (i=0;i<4;i++){
 					ser0inrdcnt = (ser0inrdcnt+1)%40;
 					EncBufferIn[i]= ser0inbuf[ser0inrdcnt] ;
 				}
				AdpcmEncoder(AdpcmStateEnc.pBufferIn, AdpcmStateEnc.pBufferOut, 
				 &AdpcmStateEnc.PrevValue, &AdpcmStateEnc.PrevIndex,
				 AdpcmStateEnc.Length);
				
				//
				for (i=0;i<1;i++){
					DecBufferIn[i] =  EncBufferOut[i];
				}
				//
				AdpcmDecoder(AdpcmStateDec.pBufferIn, AdpcmStateDec.pBufferOut, 
				&AdpcmStateDec.PrevValue, &AdpcmStateDec.PrevIndex,
				AdpcmStateDec.Length);
				
				for (i=0;i<4;i++){
 					ser0outwrcnt = (ser0outwrcnt+1)%40;
 					ser0outbuf[ser0outwrcnt] = DecBufferOut[i];
 				}
 			ser0flag = ser0flag -4 ;
 			if (ser0flag>100)
 				ser0flag = 0;
			}
	}  
}

⌨️ 快捷键说明

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