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

📄 wav_adpdlg.cpp

📁 adcmp 数据编码解码原代码,处理语音数据的朋友可能需要这个,希望有帮助!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    vpdiff += step;
	}
	/* Step 3 - Update previous value */
	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;
	/* Step 4 - Clamp previous value to 16 bits */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;             //此数用于和下一个产生差距
	/* Step 5 - Assemble value, update index and step values */
	delta |= sign;	
	index += indexTable[delta];  //索引号
	if ( index < 0 ) index = 0;  //
	if ( index > 88 ) index = 88;

	outtemp[0] |= (delta & 0x0f);

    file2.Write(outtemp,sizeof(char)*1) ;





  }

  file1.Close()  ;
  }               //第一个if打开原文件
  file2.Close()  ;

}

void CWAV_ADPDlg::OnButton3() 
{
	// TODO: Add your control notification handler code here
  byte filehead[44] ;
  byte writetemp[4]  ;//写入数据
  byte intemp[1]    ;//读出数据

    int sign;			/* Current adpcm sign bit */
    int delta;			/* Current adpcm output value */
    int step;			/* Stepsize */
    signed short int valpred(0);		/* Predicted value */
    int vpdiff;			/* Current change to valpred */
    int index(0);		/* Current step change index */



  CFile file1                                                 ;//原来的文件
  CFile file2(m_edit2,CFile::modeCreate|CFile::modeWrite)     ;//目标文件文件
  if(file1.Open(m_edit1,CFile::modeRead))
  {
    file1.Read(filehead,sizeof(char)*44)   ;
    file2.Write(filehead,sizeof(char)*44)  ;//写头文件
 	while(file1.GetPosition()<file1.GetLength())
	  {
      file1.Read(intemp,sizeof(char)*1)   ;




	    delta = (intemp[0] >> 4) & 0xf;

    step = stepsizeTable[index]; //步长  	
	/* Step 1 - get the delta value */

	/* Step 2 - Find new index value (for later) */
	index += indexTable[delta];
	if ( index < 0 ) index = 0;
	if ( index > 88 ) index = 88;

	/* Step 3 - Separate sign and magnitude */
	sign = delta & 8;
	delta = delta & 7;
	/* Step 4 - Compute difference and new predicted value */
	/*
	** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
	** in adpcm_coder.
	*/
	vpdiff = step >> 3;
	if ( delta & 4 ) vpdiff += step;
	if ( delta & 2 ) vpdiff += step>>1;
	if ( delta & 1 ) vpdiff += step>>2;

	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;

	/* Step 5 - clamp output value */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;

	/* Step 6 - Update step value */
	step = stepsizeTable[index];

	/* Step 7 - Output value */
	writetemp[1]= (valpred>>8)   ;
	writetemp[0]= (valpred&0XFF) ;
////////////////////////////////////////////

	delta = intemp[0] & 0xf       ;//
    step = stepsizeTable[index]; //步长  	
	/* Step 1 - get the delta value */

	/* Step 2 - Find new index value (for later) */
	index += indexTable[delta];
	if ( index < 0 ) index = 0;
	if ( index > 88 ) index = 88;

	/* Step 3 - Separate sign and magnitude */
	sign = delta & 8;
	delta = delta & 7;
	/* Step 4 - Compute difference and new predicted value */
	/*
	** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
	** in adpcm_coder.
	*/
	vpdiff = step >> 3;
	if ( delta & 4 ) vpdiff += step;
	if ( delta & 2 ) vpdiff += step>>1;
	if ( delta & 1 ) vpdiff += step>>2;

	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;

	/* Step 5 - clamp output value */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;

	/* Step 6 - Update step value */
	step = stepsizeTable[index];

	/* Step 7 - Output value */
	writetemp[3]= (valpred>>8)   ;
	writetemp[2]= (valpred&0XFF) ;

   file2.Write(writetemp,sizeof(char)*4) ;



	  }

  file1.Close() ;
  }
  file2.Close() ;




}


   

void CWAV_ADPDlg::OnButton4() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
 // byte filehead[44] ;
  byte writetemp[4]  ;//写入数据
  byte intemp[1]    ;//读出数据

    int sign;			/* Current adpcm sign bit */
    int delta;			/* Current adpcm output value */
    int step;			/* Stepsize */
    signed short int valpred(0);		/* Predicted value */
    int vpdiff;			/* Current change to valpred */
    int index(0);		/* Current step change index */



  CFile file1                                                 ;//原来的文件
  CFile file2(m_edit2,CFile::modeCreate|CFile::modeWrite)     ;//目标文件文件
  if(file1.Open(m_edit1,CFile::modeRead))
  {
    //file1.Read(filehead,sizeof(char)*44)   ;
    //file2.Write(filehead,sizeof(char)*44)  ;//写头文件
 	while(file1.GetPosition()<file1.GetLength())
	  {
      file1.Read(intemp,sizeof(char)*1)   ;




	    delta = (intemp[0] >> 4) & 0xf;

    step = stepsizeTable[index]; //步长  	
	/* Step 1 - get the delta value */

	/* Step 2 - Find new index value (for later) */
	index += indexTable[delta];
	if ( index < 0 ) index = 0;
	if ( index > 88 ) index = 88;

	/* Step 3 - Separate sign and magnitude */
	sign = delta & 8;
	delta = delta & 7;
	/* Step 4 - Compute difference and new predicted value */
	/*
	** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
	** in adpcm_coder.
	*/
	vpdiff = step >> 3;
	if ( delta & 4 ) vpdiff += step;
	if ( delta & 2 ) vpdiff += step>>1;
	if ( delta & 1 ) vpdiff += step>>2;

	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;

	/* Step 5 - clamp output value */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;

	/* Step 6 - Update step value */
	step = stepsizeTable[index];

	/* Step 7 - Output value */
	writetemp[1]= (valpred>>8)   ;
	writetemp[0]= (valpred&0XFF) ;
////////////////////////////////////////////

	delta = intemp[0] & 0xf       ;//
    step = stepsizeTable[index]; //步长  	
	/* Step 1 - get the delta value */

	/* Step 2 - Find new index value (for later) */
	index += indexTable[delta];
	if ( index < 0 ) index = 0;
	if ( index > 88 ) index = 88;

	/* Step 3 - Separate sign and magnitude */
	sign = delta & 8;
	delta = delta & 7;
	/* Step 4 - Compute difference and new predicted value */
	/*
	** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
	** in adpcm_coder.
	*/
	vpdiff = step >> 3;
	if ( delta & 4 ) vpdiff += step;
	if ( delta & 2 ) vpdiff += step>>1;
	if ( delta & 1 ) vpdiff += step>>2;

	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;

	/* Step 5 - clamp output value */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;

	/* Step 6 - Update step value */
	step = stepsizeTable[index];

	/* Step 7 - Output value */
	writetemp[3]= (valpred>>8)   ;
	writetemp[2]= (valpred&0XFF) ;

   file2.Write(writetemp,sizeof(char)*4) ;



	  }

  file1.Close() ;
  }
  file2.Close() ;

	
}

void CWAV_ADPDlg::OnButton5() 
{
  BYTE  Temp[1] ; 
  CFile file1                                                 ;//原来的文件
  CFile file2("中段数据.bin",CFile::modeCreate|CFile::modeWrite)     ;//目标文件文件
  UpdateData(true) ;  
  SetDlgItemText(IDC_STATIC_R,"开始")      ;
  if(file1.Open(m_edit1,CFile::modeRead)) 
  {
   file1.Seek(m_33, CFile::begin)          ;
   while(file1.GetPosition()<m_44)
   {
   file1.Read(Temp,1) ;
   file2.Write(Temp,1) ;
   }  
   file1.Close() ;  
   
  }
  file2.Close() ;
  SetDlgItemText(IDC_STATIC_R,"完成")  ;
   
}

⌨️ 快捷键说明

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