关于waveInStart录音例子有杂音问题的解决

本文详细介绍了如何通过将音频参数从8位调整至16位来显著减少录音过程中的杂音,从而提升音频质量。具体操作包括修改缓冲区内存分配、音频输入格式设置以及波形头数据的调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下为例子的代码,录音有杂音.现在将红色字体的值都改为16 则录音效果很好,杂音很小!

 //allocate   buffer   memory  
  m_pBuffer1   =   (PBYTE)malloc(INP_BUFFER_SIZE);  
  m_pBuffer2   =   (PBYTE)malloc(INP_BUFFER_SIZE);  
   
  if   (!m_pBuffer1   ||   !m_pBuffer2)    
  {  
  if   (m_pBuffer1)   free(m_pBuffer1);  
  if   (m_pBuffer2)   free(m_pBuffer2);  
  MessageBeep(MB_ICONEXCLAMATION);  
  AfxMessageBox("Memory   erro!");  
  return;  
  }  
   
  //open   m_waveform   audo   for   input  
  m_waveform.wFormatTag =   WAVE_FORMAT_PCM;  
  m_waveform.nChannels =   1;  
  m_waveform.nSamplesPerSec =   11025;  
  m_waveform.nAvgBytesPerSec =   11025;  
  m_waveform.nBlockAlign =   1;   //改为16
  m_waveform.wBitsPerSample =   8;    //改为16

  m_waveform.cbSize =   0;  
   
  if   (waveInOpen(  
  &m_hWaveIn,  
  WAVE_MAPPER,  
  &m_waveform,  
  (DWORD)this->m_hWnd,  
  NULL,  
  CALLBACK_WINDOW  
  )  
  )    
  {  
  free(m_pBuffer1);  
  free(m_pBuffer2);  
  MessageBeep(MB_ICONEXCLAMATION);  
  AfxMessageBox("Audio   can   not   be   open!");  
  }  
   
  m_pWaveHdr1->lpData =   (LPTSTR)m_pBuffer1;  
  m_pWaveHdr1->dwBufferLength =   INP_BUFFER_SIZE;  
  m_pWaveHdr1->dwBytesRecorded =   0;  
  m_pWaveHdr1->dwUser =   0;  
  m_pWaveHdr1->dwFlags =   0;  
  m_pWaveHdr1->dwLoops =   1;  
  m_pWaveHdr1->lpNext =   NULL;  
  m_pWaveHdr1->reserved =   0;  
  waveInPrepareHeader(m_hWaveIn,m_pWaveHdr1,sizeof(WAVEHDR));  
   
  m_pWaveHdr2->lpData =   (LPTSTR)m_pBuffer2;  
  m_pWaveHdr2->dwBufferLength =   INP_BUFFER_SIZE;  
  m_pWaveHdr2->dwBytesRecorded =   0;  
  m_pWaveHdr2->dwUser =   0;  
  m_pWaveHdr2->dwFlags =   0;  
  m_pWaveHdr2->dwLoops =   1;  
  m_pWaveHdr2->lpNext =   NULL;  
  m_pWaveHdr2->reserved =   0;  
  waveInPrepareHeader(m_hWaveIn,m_pWaveHdr2,sizeof(WAVEHDR));  
   
  m_pSaveBuffer   =   (PBYTE)realloc(m_pSaveBuffer,1);  
   
  //   Add   the   buffers  
  waveInAddBuffer(m_hWaveIn,   m_pWaveHdr1,   sizeof(WAVEHDR));  
  waveInAddBuffer(m_hWaveIn,   m_pWaveHdr2,   sizeof(WAVEHDR));  
   
  //   Begin   sampling  
  m_bRecording   =   TRUE   ;  
  m_bEnding   =   FALSE   ;  
  m_dwDataLength   =   0;  
  waveInStart(m_hWaveIn);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值