📄 ywavproc_t.h
字号:
i_iTmp=(int)(c_pWaveData[i_I]);
i_SvFile.write((char*)&i_iTmp,4);
}
break;
default:
cout<<"err find, unknown type for save."<<endl;
}
i_SvFile.close();
/*
*/
}
template <class xType> void yWavProc_T< xType >::
c_SaveWav(vector<pair<int,int> > & i_nPosVect, //position vector for save
string i_sFName) //name of save file
{
ofstream i_SvFile(i_sFName.c_str(),ios::out|ios::binary);
if(! i_SvFile)
{
cerr<<"cant open "<<endl;
exit(-1);
}
//write wave head infomation.
i_SvFile.write("RIFF",4);
int i_nFlag=c_pWaveHead->pWAVEF->wBitsPerSample/8;
vector<pair<int,int> >::iterator i_cIter = i_nPosVect.begin();
vector<pair<int,int> >::iterator i_cIterEnd = i_nPosVect.end();
int i_nWaveSize = 0;
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
i_nWaveSize += ((*i_cIter).second-(*i_cIter).first);//computer the wave data number;
}
i_cIter = i_nPosVect.begin();
i_nWaveSize *= i_nFlag;
int i_nChunkSize = c_pWaveHead->nFmtSize+(i_nWaveSize)+20;
i_SvFile.write((char*)&i_nChunkSize,4);
i_SvFile.write("WAVE",4);
i_SvFile.write("fmt ",4);
i_SvFile.write((char*)&(c_pWaveHead->nFmtSize),4);
i_SvFile.write((char*)c_pWaveHead->pWAVEF,c_pWaveHead->nFmtSize);
i_SvFile.write("data",4);
//write wave data.
int i_I;
unsigned char i_ucTmp;
short i_sTmp;
int i_iTmp;
switch(i_nFlag)
{
case 1:
i_SvFile.write((char*)&i_nWaveSize,4);
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
for(i_I=(*i_cIter).first;i_I<(*i_cIter).second;i_I++)
{
i_ucTmp=(unsigned char)(c_pWaveData[i_I])+128;
i_SvFile.write((char*)&(i_ucTmp),1);
}
}
break;
case 2:
i_SvFile.write((char*)&i_nWaveSize,4);
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
for(i_I=(*i_cIter).first;i_I<(*i_cIter).second;i_I++)
{
i_sTmp=(short)(c_pWaveData[i_I]);
i_SvFile.write((char*)&i_sTmp,2);
}
}
break;
case 4:
i_SvFile.write((char*)&i_nWaveSize,4);
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
for(i_I=(*i_cIter).first;i_I<(*i_cIter).second;i_I++)
{
i_iTmp=(int)(c_pWaveData[i_I]);
i_SvFile.write((char*)&i_iTmp,4);
}
}
break;
default:
cout<<"err find, unknown type for save."<<endl;
}
i_SvFile.close();
}
template <class xType> void yWavProc_T< xType >::
c_SaveWav(vector<xType> i_vDataVect, //data vector for save
string i_sFName) //name of save file
{
ofstream i_SvFile(i_sFName.c_str(),ios::out|ios::binary);
if(! i_SvFile)
{
cerr<<"cant open "<<endl;
exit(-1);
}
//write wave head infomation.
i_SvFile.write("RIFF",4);
int i_nFlag=c_pWaveHead->pWAVEF->wBitsPerSample/8;//how much bytes
//will be use to save a sample.
vector<xType>::iterator i_cIter = i_vDataVect.begin();
vector<xType>::iterator i_cIterEnd = i_vDataVect.end();
int i_nWaveSize = i_vDataVect.size();//count the wave data;
i_nWaveSize *= i_nFlag; //count the total bytes;
//now, below write the wave head information:
int i_nChunkSize = c_pWaveHead->nFmtSize+(i_nWaveSize)+20;
i_SvFile.write((char*)&i_nChunkSize,4);
i_SvFile.write("WAVE",4);
i_SvFile.write("fmt ",4);
i_SvFile.write((char*)&(c_pWaveHead->nFmtSize),4);
i_SvFile.write((char*)c_pWaveHead->pWAVEF,c_pWaveHead->nFmtSize);
i_SvFile.write("data",4);
//write wave data.
//different tmp for different save format.
// 8 bits ,16 bits, 32 bits;
unsigned char i_ucTmp;
short i_sTmp;
int i_iTmp;
// xType i_xMax = 0;//for norm
// xType i_xTmp; //for data tmp;
// i_nWaveSize += 4;//datasize itself occupy 4bytes. but seems error,
switch(i_nFlag)
{
case 1:
i_SvFile.write((char*)&i_nWaveSize,4);
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
i_ucTmp=(unsigned char) ( (*i_cIter + 128.0) );
i_SvFile.write((char*)&(i_ucTmp),1);
}
break;
case 2:
i_SvFile.write((char*)&i_nWaveSize,4);
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
i_sTmp=(short)( *i_cIter );
i_SvFile.write((char*)&i_sTmp,2);
}
break;
case 4:
i_SvFile.write((char*)&i_nWaveSize,4);
for( ;i_cIter< i_cIterEnd;i_cIter++)
{
i_iTmp=(int)( *i_cIter );
i_SvFile.write((char*)&i_iTmp,4);
}
break;
default:
cout<<"err find, unknown type for save."<<endl;
}
i_SvFile.close();
}
template <class xType> void yWavProc_T< xType >::
c_SaveWav(xType*& f_pDataVect, //data vector for save
int f_nSize, //data size
string f_sFName) //name of save file
{
ofstream i_SvFile(f_sFName.c_str(),ios::out|ios::binary);
if(! i_SvFile)
{
cerr<<"cant open "<<endl;
exit(-1);
}
//write wave head infomation.
i_SvFile.write("RIFF",4);
int i_nFlag=c_pWaveHead->pWAVEF->wBitsPerSample/8;//how much bytes
//will be use to save a sample.
int i_nWaveSize = f_nSize;//count the wave data;;
i_nWaveSize *= i_nFlag; //count the total bytes;
//now, below write the wave head information:
int i_nChunkSize = c_pWaveHead->nFmtSize+(i_nWaveSize)+20;
i_SvFile.write((char*)&i_nChunkSize,4);
i_SvFile.write("WAVE",4);
i_SvFile.write("fmt ",4);
i_SvFile.write((char*)&(c_pWaveHead->nFmtSize),4);
i_SvFile.write((char*)c_pWaveHead->pWAVEF,c_pWaveHead->nFmtSize);
i_SvFile.write("data",4);
//write wave data.
//different tmp for different save format.
// 8 bits ,16 bits, 32 bits;
unsigned char i_ucTmp;
short i_sTmp;
int i_iTmp, i_nX;
// xType i_xMax = 0;//for norm
// xType i_xTmp; //for data tmp;
// i_nWaveSize += 4;//datasize itself occupy 4bytes. but seems error,
switch(i_nFlag)
{
case 1:
i_SvFile.write((char*)&i_nWaveSize,4);
for( i_nX=0; i_nX<f_nSize; i_nX++ )
{
i_ucTmp=(unsigned char) ( f_pDataVect[i_nX] + 128.0 );
i_SvFile.write((char*)&(i_ucTmp),1);
}
break;
case 2:
i_SvFile.write((char*)&i_nWaveSize,4);
for( i_nX=0; i_nX<f_nSize; i_nX++ )
{
i_sTmp=(short)( f_pDataVect[i_nX] );
i_SvFile.write((char*)&i_sTmp,2);
}
break;
case 4:
i_SvFile.write((char*)&i_nWaveSize,4);
for( i_nX=0; i_nX<f_nSize; i_nX++ )
{
i_iTmp=(int)( f_pDataVect[i_nX] );
i_SvFile.write((char*)&i_iTmp,4);
}
break;
default:
cout<<"err find, unknown type for save."<<endl;
}
i_SvFile.close();
}
template <class xType>
bool yWavProc_T< xType >::c_GetHeadInfo(WAVEHEAD_T* &i_cWvInfo)
{
i_cWvInfo->nChunkSize = c_pWaveHead->nChunkSize;
i_cWvInfo->nFmtSize = c_pWaveHead->nFmtSize;
i_cWvInfo->nWaveSize = c_pWaveHead->nWaveSize;
i_cWvInfo->pWAVEF->wFormatTag
= c_pWaveHead->pWAVEF->wFormatTag;
//WAVE_FROMAT_PCM(=1) WORD
i_cWvInfo->pWAVEF->nChannels
= c_pWaveHead->pWAVEF->nChannels;
// 1 OR 2 WORD
i_cWvInfo->pWAVEF->nSamplesPerSec
= c_pWaveHead->pWAVEF->nSamplesPerSec;
// 采样率(单位-赫兹)DWORD
i_cWvInfo->pWAVEF->nAvgBytesPerSec
= c_pWaveHead->pWAVEF->nAvgBytesPerSec;
//平均传输率(=nSamplesPerSec*nBlockAlign) DWORD
i_cWvInfo->pWAVEF->nBlockAlign
= c_pWaveHead->pWAVEF->nBlockAlign;
//每个采样点字节数(nChannels*nBitsPerSample/8) DWORD
i_cWvInfo->pWAVEF->wBitsPerSample
= c_pWaveHead->pWAVEF->wBitsPerSample;
//每个采样点位数 WORD
i_cWvInfo->pWAVEF->cbSize
= c_pWaveHead->pWAVEF->cbSize;
//附加信息字节数(通常为零)WORD
return true;
}
template <class xType>
bool yWavProc_T<xType>::c_Get_wave_format(WAVEFORMATEX_T& i_WvFormatInfo)
{
i_WvFormatInfo.wFormatTag
= c_pWaveHead->pWAVEF->wFormatTag;
//WAVE_FROMAT_PCM(=1) WORD
i_WvFormatInfo.nChannels
= c_pWaveHead->pWAVEF->nChannels;
// 1 OR 2 WORD
i_WvFormatInfo.nSamplesPerSec
= c_pWaveHead->pWAVEF->nSamplesPerSec;
// 采样率(单位-赫兹)DWORD
i_WvFormatInfo.nAvgBytesPerSec
= c_pWaveHead->pWAVEF->nAvgBytesPerSec;
//平均传输率(=nSamplesPerSec*nBlockAlign) DWORD
i_WvFormatInfo.nBlockAlign
= c_pWaveHead->pWAVEF->nBlockAlign;
//每个采样点字节数(nChannels*nBitsPerSample/8) DWORD
i_WvFormatInfo.wBitsPerSample
= c_pWaveHead->pWAVEF->wBitsPerSample;
//每个采样点位数 WORD
i_WvFormatInfo.cbSize
= c_pWaveHead->pWAVEF->cbSize;
//附加信息字节数(通常为零)WORD
return true;
}
//#endif // !defined(AFX_YWAVPROC_T_H__18BD0ECD_C155_44DA_B3E7_59318EFB969D__INCLUDED_)
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -