WAVE显示
c语言吧
全部回复
仅看楼主
level 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));

2009年12月21日 15点12分 1
level 1
怎么贴的下面一半不见了呀
2009年12月21日 15点12分 4
level 0
反正是错的
2009年12月30日 02点12分 5
1