📄 sound.txt
字号:
#include <cvirte.h>
#include <userint.h>
#include "sound.h"
#include<analysis.h>
#include<windows.h>
#include<Mmsystem.h>
#include <ansi_c.h>
static int panelHandle;
double DataT;
double x[20000];
double y[20000];
UINT Time;
static int typenn;
int num,status;
IIRFilterPtr filter_information;
HWAVEIN hwi;
WAVEFORMATEX wfx;
PWAVEHDR pwhr1;
double *pDataBuffer1;
UINT len=1024;
double *pData;
UINT DevNum;
MMRESULT rult;
char szText[100];
WAVEINCAPS wavecap;
UINT Time;
void CALLBACK WaveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2); //声明波形中断函数
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "sound.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
void CALLBACK WaveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2)
{ //波形输入回调函数
switch(uMsg)
{
case WIM_OPEN:
break;
case WIM_DATA:
pData=pDataBuffer1;
PlotStripChart(panelHandle,PANEL_STRIPCHART,pData,127,0,7,VAL_UNSIGNED_CHAR);
rult=waveInPrepareHeader(hwi,pwhr1,sizeof(WAVEHDR));
rult=waveInAddBuffer(hwi,pwhr1,sizeof(WAVEHDR));
Time++;
break;
case WIM_CLOSE:
break;
}
SetCtrlVal(panelHandle,PANEL_TIME,Time*0.1);
}
int CVICALLBACK pancall (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
break;
case EVENT_LOST_FOCUS:
break;
case EVENT_CLOSE:
break;
}
return 0;
}
int CVICALLBACK start (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{ int i=0;
switch (event)
{
case EVENT_COMMIT:
/*************声卡初始化***********/
//rult=waveInGetDevCaps(WAVE_MAPPER,&wavecap,sizeof(wavecap));
//查看声卡支持的格式
/***********波形格式设置**********/
wfx.wFormatTag=WAVE_FORMAT_1M08;
wfx.nChannels=1;
wfx.wBitsPerSample=8;
wfx.nSamplesPerSec=11025; //采样频率
wfx.nAvgBytesPerSec=11025; //每秒吞吐量(字节)
wfx.nBlockAlign=1; //对齐格式(字节)
wfx.cbSize=0;
//DevNum=waveInGetNumDevs();
rult=waveInOpen(&hwi,WAVE_MAPPER,&wfx,(DWORD)(&WaveInProc),(DWORD)
(&DataT),CALLBACK_FUNCTION); //打开波形输入设备
if(rult>0)
{//打开波形输入设备有错误
rult=waveInGetErrorText(rult,(LPSTR)(&szText),100); //获得错误代码
MessagePopup("打开波形输入设备错误!",szText); //提示错误
return -1; //返回
}
pwhr1=GlobalAlloc(GPTR,sizeof(WAVEHDR)); //开辟缓冲区头
pDataBuffer1=GlobalAlloc(GHND,len); //开辟缓冲区
pDataBuffer1=GlobalLock(pDataBuffer1); //锁定缓冲区
pwhr1->lpData=(LPSTR)(pDataBuffer1); //缓冲区指针
pwhr1->dwBufferLength=len; //缓冲区长度
pwhr1->dwFlags=0; //标志
pwhr1->dwBytesRecorded=0; //记录长度
rult=waveInPrepareHeader(hwi,pwhr1,sizeof(WAVEHDR)); //准备缓冲区
rult=waveInAddBuffer(hwi,pwhr1,sizeof(WAVEHDR)); //使用缓冲区
rult=waveInStart(hwi); //开始进行采集
break;
}
return 0;
}
int CVICALLBACK stop (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
rult=waveInStop(hwi); // 停止波形输入
rult=waveInClose(hwi); //关闭波形输入设备
GlobalUnlock(pDataBuffer1); //解除缓冲区锁定
GlobalFree(pDataBuffer1); //释放缓冲区
GlobalFree(pwhr1); //释放缓冲区头
break;
}
return 0;
}
int CVICALLBACK Filtertype (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
//选择滤波器类型
GetCtrlVal (panelHandle, PANEL_RING, &status);
switch (status)
{
case 0:
typenn=0;
//巴特沃斯滤波器
break;
case 1:
typenn=1;
//切比雪 滤波器
break;
case 2:
typenn=2;
//椭圆滤波器
break;
}
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK AcquireData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int order=5 ;
double ripple,attenuation,samplefrequency,cutofffrequency ;
int n=127 ;
ripple=5,attenuation=10;
// 定义数组,x表示滤波前数组,y表示滤波后数组 (前面定义)
pData=pDataBuffer1;
switch (event)
{
case EVENT_COMMIT:
//获取滤波器截止频率
GetCtrlVal (PANEL, PANEL_NUMERIC, &cutofffrequency);
//获取采样频率
GetCtrlVal (PANEL, PANEL_NUMERIC_2, &samplefrequency);
if (typenn==0)
{
//巴特沃斯低通滤波
Bw_LPF(pData,0,samplefrequency,cutofffrequency,order,y);
}
if(typenn==1)
//切比雪夫低通滤波器
{
Ch_LPF(pData,1,samplefrequency,cutofffrequency,ripple,order,y);
}
if (typenn==2)
{
Elp_LPF(pData,2,samplefrequency,cutofffrequency,ripple,attenuation,order,y);
}
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_DELAYED_DRAW);
PlotY(panelHandle,PANEL_GRAPH,y,n,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_BLACK);
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK quit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -