level 1
郭宛人吹吹嘘k
楼主
//
// WAVE.C
#include "windows.h"
#include "commctrl.h"
#include "mmsystem.h"
#include "math.h"
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"gdi32.lib")
#define MAX_INQUEUE 8
#define BUFSIZE 1024
HWAVEIN hwi;
WAVEHDR *pwhi,whis[MAX_INQUEUE];
char waveBufferRecord[MAX_INQUEUE][BUFSIZE];
DWORD currWavHdr=0,nextWavHdr;
HPEN hPen,hpenG,oldPen;
HDC hDC;
void DrawWave(WAVEHDR *whdr,HDC hdc)
{
static unsigned char prevBuf[BUFSIZE];
static DWORD prevBytes=0;
DWORD i;
oldPen = SelectObject(hdc, hPen);
MoveToEx(hdc,0,prevBuf[0],NULL);
for(i=1;i<512;i++)
LineTo(hdc,i,prevBuf[i]);
SelectObject(hdc, hpenG);
MoveToEx(hdc,0,(unsigned char)(whdr->lpData[0]),NULL);
for(i=1;i<512;i++)
LineTo(hdc,i,(unsigned char)(whdr->lpData[i]));
SelectObject(hdc, oldPen);
memcpy(prevBuf,whdr->lpData,whdr->dwBytesRecorded);
prevBytes=whdr->dwBytesRecorded;
}
void DrawFreq(WAVEHDR *whdr,HDC hdc)
{
static double prevFreqI[BUFSIZE];
static double currFreqI[BUFSIZE];
static double prevFreqR[BUFSIZE];
static double currFreqR[BUFSIZE];
double WaveR[BUFSIZE];
double WaveI[BUFSIZE];
DWORD i;
memset(WaveR,0,BUFSIZE*sizeof(double));
memset(WaveI,0,BUFSIZE*sizeof(double));
for(i=0;i<whdr->dwBytesRecorded;i++)
WaveR[i]=(unsigned char)whdr->lpData[i]-128;
oldPen = SelectObject(hdc, hPen);
MoveToEx(hdc,0,380,NULL);
for(i=0;i<BUFSIZE/2;i++)
LineTo(hdc,i,380-sqrt((prevFreqR[i]*prevFreqR[i]+prevFreqI[i]*prevFreqI[i])/BUFSIZE));
SelectObject(hdc, hpenG);
MoveToEx(hdc,0,380,NULL);
for(i=0;i<BUFSIZE/2;i++)
LineTo(hdc,i,380-sqrt((currFreqR[i]*currFreqR[i]+currFreqI[i]*currFreqI[i])/BUFSIZE));
2009年12月21日 15点12分
1
// WAVE.C
#include "windows.h"
#include "commctrl.h"
#include "mmsystem.h"
#include "math.h"
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"gdi32.lib")
#define MAX_INQUEUE 8
#define BUFSIZE 1024
HWAVEIN hwi;
WAVEHDR *pwhi,whis[MAX_INQUEUE];
char waveBufferRecord[MAX_INQUEUE][BUFSIZE];
DWORD currWavHdr=0,nextWavHdr;
HPEN hPen,hpenG,oldPen;
HDC hDC;
void DrawWave(WAVEHDR *whdr,HDC hdc)
{
static unsigned char prevBuf[BUFSIZE];
static DWORD prevBytes=0;
DWORD i;
oldPen = SelectObject(hdc, hPen);
MoveToEx(hdc,0,prevBuf[0],NULL);
for(i=1;i<512;i++)
LineTo(hdc,i,prevBuf[i]);
SelectObject(hdc, hpenG);
MoveToEx(hdc,0,(unsigned char)(whdr->lpData[0]),NULL);
for(i=1;i<512;i++)
LineTo(hdc,i,(unsigned char)(whdr->lpData[i]));
SelectObject(hdc, oldPen);
memcpy(prevBuf,whdr->lpData,whdr->dwBytesRecorded);
prevBytes=whdr->dwBytesRecorded;
}
void DrawFreq(WAVEHDR *whdr,HDC hdc)
{
static double prevFreqI[BUFSIZE];
static double currFreqI[BUFSIZE];
static double prevFreqR[BUFSIZE];
static double currFreqR[BUFSIZE];
double WaveR[BUFSIZE];
double WaveI[BUFSIZE];
DWORD i;
memset(WaveR,0,BUFSIZE*sizeof(double));
memset(WaveI,0,BUFSIZE*sizeof(double));
for(i=0;i<whdr->dwBytesRecorded;i++)
WaveR[i]=(unsigned char)whdr->lpData[i]-128;
oldPen = SelectObject(hdc, hPen);
MoveToEx(hdc,0,380,NULL);
for(i=0;i<BUFSIZE/2;i++)
LineTo(hdc,i,380-sqrt((prevFreqR[i]*prevFreqR[i]+prevFreqI[i]*prevFreqI[i])/BUFSIZE));
SelectObject(hdc, hpenG);
MoveToEx(hdc,0,380,NULL);
for(i=0;i<BUFSIZE/2;i++)
LineTo(hdc,i,380-sqrt((currFreqR[i]*currFreqR[i]+currFreqI[i]*currFreqI[i])/BUFSIZE));