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

📄 ppq.cpp

📁 实现了精简的FFT语音压缩 采取了一种新的算法有一定的参考价值
💻 CPP
字号:
// PPQ.cpp: implementation of the PPQ class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "PPQ.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

PPQ::PPQ()
{

}

PPQ::~PPQ()
{

}

bool PPQ::Serialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp)
{
	if(byClassLevels>1)
		return DSPACT::Serialize(byClassLevels-1,byAttrNo,dsp);
	else
	{
		switch(byAttrNo)
		{
			case 1:						//序列化第1个属性
				dsp.Write(this->m_bBOOL);
				return false;
			case 2:						//序列化第2个属性
				dsp.Write(this->m_bBool);
				return false;
			case 3:
				dsp.Write((int)this->m_dwValue);
				return false;
			case 4:
				dsp.Write(this->m_iValue);
				return false;
			case 5:
				dsp.Write(this->m_sValue);
				return false;
			case 6:
				dsp.Write(this->m_wValue);
				return false;
			case 7:
				dsp.Write(this->m_cValue);
				return false;
			case 8:
				dsp.Write(this->m_byValue);
				return false;
			case 9:
				dsp.Write(this->m_hgf);
				return false;
			case 10:
				dsp.Write(this->m_str);
				return false;
			case 11:						//序列化最后一个属性
				dsp.Write(this->m_chBuff,100,false);
		}
	}

	return true;
}

bool PPQ::UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
{
	//反序列化对象
	if(byClassLevels>1)
		return DSPACT::UnSerialize(byClassLevels-1,byAttrNo,dsp,dwLen);
	else
	{
		switch(byAttrNo)
		{
			case 1:						//得到第1个属性
				dsp.Read(this->m_bBOOL);
				return false;
			case 2:						//得到第2个属性
				dsp.Read(this->m_bBool);
				return false;
			case 3:
				dsp.Read(this->m_dwValue);
				return false;
			case 4:
				dsp.Read(this->m_iValue);
				return false;
			case 5:
				dsp.Read(this->m_sValue);
				return false;
			case 6:
				dsp.Read(this->m_wValue);
				return false;
			case 7:
				dsp.Read(this->m_cValue);
				return false;
			case 8:
				dsp.Read(this->m_byValue);
				return false;
			case 9:
				dsp.Read(this->m_hgf);
				return false;
			case 10:
				dsp.Read(this->m_str,dwLen);
				return false;
			case 11:						//序列化最后一个属性
				dsp.Read(this->m_chBuff,100);
		}
	}

	return true;
}

bool PPQ::AttrSectRecv(BYTE byClassLevels,BYTE byAttrNo,const char* const lpBuff,DWORD dwLen,bool bLast)
{
	//属性的一个段被接收到,只有当属性初始化时的缓冲区小于属性的总的长度时才会调用该函数
	//byClassLevels	--	类的深度
	//byAttrNo		--	当前接收的属性的序号
	//wLen			--	表示当前缓冲区已接收的有效的字节数
	//bLast			--	表示是否是接收到的最后一个段
	//如果函数返回true,则表示正常;
	//如果函数返回false,则表示失败,反序列化对象结束。
	if(byClassLevels>1)
		return DSPACT::AttrSectRecv(byClassLevels,byAttrNo,lpBuff,dwLen,bLast);
	else
	{
		switch(byAttrNo)
		{
			case 11:
				if(ofs.is_open()==0)
				{
					//如果文件没有被打开,则打开文件
					ofs.open("ip2.txt",ios::out|ios::binary);
				}
				ofs.write(lpBuff,dwLen);
				if(bLast)
				{
					ofs.flush();
					ofs.close();
				}
				break;
		}
	}

	return true;
}

bool PPQ::AttrSectSend(BYTE byClassLevels,BYTE byAttrNo,char** const lpBuff,DWORD& dwLen,bool& bContinue)
{
	//属性的一个段需要被传送,只有当属性的类型为缓冲区时才会调用该函数
	//byClassLevels	--	类的深度
	//byAttrNo		--	当前接收的属性的序号
	//lpBuff		--	保存接收缓冲区的地址的变量
	//dwLen			--	表示当前缓冲区的有效的字节数
	//lpBuff		--	保存缓冲区首地址的变量,可通过这个变量重新设定缓冲区的首址;
	//					如果不设定,缓冲区首址与Write()函数中设置的相同
	//bContinue		--	是否是最后一个段,如果是最后一个段,则设置bContinue=false;否则不用设置
	//如果函数返回true,则表示正常;
	//如果函数返回false,则表示失败,反序列化对象结束。
	if(byClassLevels>1)
		return DSPACT::AttrSectSend(byClassLevels,byAttrNo,lpBuff,dwLen,bContinue);
	else
	{
		switch(byAttrNo)
		{
			case 11:
				if(ifs.is_open()==0)
				{
					//如果文件没有被打开,则打开文件
					ifs.open("ip1.txt",ios::in|ios::binary);

					//保存接收的长度
					dwLen	=100;

					//保存接收的缓冲区首址
					*lpBuff	=this->m_chBuff;
				}
				ifs.read(*lpBuff,dwLen);
				if(ifs.eof())
				{
					//如果文件已经结束
					//得到文件的大小
					int size	=ifs.tellg();

					//得到最后读取的文件尺寸,设定最后接收的字节数
					dwLen		=size%dwLen;

					//设定不需要再继续接收
					bContinue	=false;

					//关闭文件
					ifs.close();
				}
				break;
		}
	}

	return true;
}

⌨️ 快捷键说明

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