如下为例子的代码,录音有杂音.现在将红色字体的值都改为16 则录音效果很好,杂音很小!
//allocate buffer memorym_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);