www.pudn.com > ADPCM语音压缩算法C源码.rar > test.c


/***************************************************************************** 
****************************************************************************** 
****                 TMS320C54x用ADPCM编解码测试程序V0.1                  **** 
****                      All right reserved                              **** 
****                         版权所有                                     **** 
****                     程序设计:罗茂才                                  ****  
****                 E-mail: luomc@neusoft.com                            **** 
****                         luomao2000@163.net                           **** 
****                         luomao1977@sina.com                          **** 
****                                                                      **** 
****  本程序参照Stichting Mathematisch Centrum, Amsterdam,The Netherlands **** 
****  所写的C语言ADPCM编解码程序设计,作者不承担任何可能侵犯版权的后果。  **** 
****                                                                      **** 
****  允许自由使用、复制、修改、传播该程序,可免费用于商业用途,但不得以  **** 
****  该程序作为主体获得利益。无论在什么情况下使用,都请保留该版权信息。  ****                  
****  作者不保证该程序能完全正确按照你的要求运行,所有由于使用该程序      **** 
****  造成的损失,后果自负(呵呵,我可没有特意留下什么隐患啊)。          **** 
****  如果你利用了该程序,请告诉一声(我想知道有多少人会使用这个程序)。    **** 
****  如果你对该程序有任何建议、错误信息反馈等,敬请与作者联系            **** 
****                                                                      **** 
****            感谢我的老婆龙敬给予我的爱、关心以及支持。                ****  
****                                                  2003年7月31日       **** 
****************************************************************************** 
*****************************************************************************/ 
// CCS2.1下测试通过 
 
 
// 定义数据存储结构 
 
typedef struct 
{ 
	int  PrevValue;  // 前一次转换时的数据 
	int  PrevIndex;  // 前一此转换时使用的索引 
	int  Length;     // 转换数据长度 
	int* pBufferIn;  // 输入缓冲区地址 
	int* pBufferOut; // 输出缓冲区地址 
}ADPCM_STRUCT; 
 
ADPCM_STRUCT AdpcmState; 
// 编码函数申明 
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); 
 
int i,BufferIn[80],BufferOut[20]; 
 
 
#define TEST_VALUE 100 
 
void main(void) 
{ 
	asm(" STM #0,SWWSR"); 
	 
	for(i=0; i<40; i++) 
	{ 
		BufferIn[i] = i*TEST_VALUE; 
	} 
	for(i=40; i<80; i++) 
	{ 
		BufferIn[i] = (80-i)*TEST_VALUE; 
	} 
	for(i=0; i<20; i++) 
	{ 
		BufferOut[i] = 0;  
	} 
	 
	AdpcmState.PrevValue = 0; 
	AdpcmState.PrevIndex = 0; 
	AdpcmState.Length = 80; 
	AdpcmState.pBufferIn = BufferIn; 
	AdpcmState.pBufferOut = BufferOut; 
	AdpcmEncoder(AdpcmState.pBufferIn, AdpcmState.pBufferOut,  
				 &AdpcmState.PrevValue, &AdpcmState.PrevIndex, 
				 AdpcmState.Length); 
	AdpcmState.PrevValue = 0; 
	AdpcmState.PrevIndex = 0; 
	AdpcmState.Length = 20; 
	AdpcmState.pBufferIn = BufferOut; 
	AdpcmState.pBufferOut = BufferIn; 
	AdpcmDecoder(AdpcmState.pBufferIn, AdpcmState.pBufferOut,  
				&AdpcmState.PrevValue, &AdpcmState.PrevIndex, 
				AdpcmState.Length); 
}