这个音频采集和回放程序那里出错了?
#include "stdafx.h"
#include "test.h"
#include "mmsystem.h"
#include "mmreg.h"
#include "msacm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
BYTE SampleBuf[8000*1];
HWAVEIN m_hWaveIn;
HWAVEOUT m_hWaveOut;
WAVEFORMATEX waveFormat;
WAVEHDR SampleHead;
void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
if(uMsg == WIM_DATA&&SampleHead.dwBytesRecorded==8000*1)
{
waveInReset(m_hWaveIn);
waveInClose(m_hWaveIn);
cout<<"Recording complete!";
}
}
void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
if(uMsg == WOM_DONE)
{
waveOutReset(m_hWaveOut);
waveOutClose(m_hWaveOut);
}
}
void GetSample()
{
char start;
cout<<"Press s button to start recording.";
do
{cin>>start;
}while(start!='s');
waveInOpen(&m_hWaveIn, WAVE_MAPPER, &waveFormat, (DWORD)(waveInProc), 0, CALLBACK_FUNCTION);
waveInPrepareHeader(m_hWaveIn, &SampleHead, sizeof(WAVEHDR));
waveInAddBuffer(m_hWaveIn, &SampleHead, sizeof(WAVEHDR));
waveInStart(m_hWaveIn);
}
void PlaySample()
{
char p;
cout<<"Press p button to start playing.";
do
{cin>>p;
}while(p!='p');
waveOutOpen(&m_hWaveOut, WAVE_MAPPER, &waveFormat, (DWORD)(waveOutProc), 0, CALLBACK_FUNCTION);
waveOutPrepareHeader(m_hWaveOut, &SampleHead, sizeof(WAVEHDR));
waveOutWrite(m_hWaveOut, &SampleHead, sizeof(WAVEHDR));
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
}
waveFormat.wFormatTag = WAVE_FORMAT_PCM;
waveFormat.nChannels = 1;
waveFormat.nSamplesPerSec = 8000;
waveFormat.nAvgBytesPerSec = 8000;
waveFormat.nBlockAlign = 1;
waveFormat.wBitsPerSample = 8;
waveFormat.cbSize = 0;
SampleHead.lpData = (PCHAR)SampleBuf;
SampleHead.dwBufferLength = 8000*1;
SampleHead.dwBytesRecorded = 0;
SampleHead.dwUser = 0L;
SampleHead.dwFlags = 0L;
SampleHead.dwLoops = 0L;
SampleHead.lpNext = NULL;
GetSample();
PlaySample();
return nRetCode;
}
程序运行后没有录放音。
问题点数:80、回复次数:1Top
1 楼xyzlxw(宇文)回复于 2003-05-09 15:39:46 得分 80
http://voiceangel.myetang.com/fister.zip
研究此程序Top




