亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? control.cpp

?? 這是一個好東西,是關于傅立葉分析的代碼,希望大家能夠喜歡呀,
?? CPP
字號:
#include "control.h"
#include "resource.h"
#include "display.h"
#include "winex.h"
#include "params.h"
#include "views.h"
#include <string.h>

// Helper functions

bool Is16BitSampling (DWORD format);
bool Is11_025kHz (DWORD format);
bool Is22_05kHz (DWORD format);
bool Is44_1kHz (DWORD format);

// Main dialog handler

BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static Controller* pControl = 0;
    switch (message)
    {
    case WM_INITDIALOG:
        try
        {
            pControl = new Controller (hwnd);
        }
        catch (WinException e)
        {
            MessageBox (0, e.GetMessage (), "Exception", MB_ICONEXCLAMATION | MB_OK);
			return -1;
        }
        catch (...)
        {
            MessageBox (0, "Unknown", "Exception", MB_ICONEXCLAMATION | MB_OK);
            return -1;
        }
        return TRUE;        
    case WM_COMMAND:
        pControl->Command(hwnd, LOWORD (wParam), HIWORD (wParam));
        return TRUE;
    case WM_HSCROLL:
        pControl->Scroll (hwnd, LOWORD (wParam), HIWORD (wParam));
        return 0;
    case WM_CLOSE:
        delete pControl;
        DestroyWindow (hwnd);
        return TRUE;
    }
    return FALSE;
}

BOOL CALLBACK AboutDlgProc
   (HWND hwnd, UINT message, UINT wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        return TRUE;
    case WM_COMMAND:
        switch (LOWORD (wParam))
        {
        case IDOK:
        case IDCANCEL:
            EndDialog (hwnd, 0);
            return TRUE;
		case IDC_WWW:
			ShellExecute (hwnd, "open", "http://www.relisoft.com", 0, 0, SW_SHOWNORMAL);			
			return TRUE;
        }
        break;
    }
    return FALSE;
}

Controller::Controller (HWND hwnd) 
   :_isStopped (true),
    _bitsPerSample (16),
    _samplesPerSecond (SAMPLES_SEC),
    _fftPoints (FFT_POINTS * 4),
    _samplesPerBuf (FFT_POINTS * 2),
    _radio8 (hwnd, IDC_8_BITS),
    _radio16 (hwnd, IDC_16_BITS),
    _scroll (hwnd, IDC_SCROLLBAR),
    _edit (hwnd, IDC_EDIT),
    _comboFreq (hwnd, IDC_SAMPLING),
    _comboPoints (hwnd, IDC_POINTS),
    _viewWave (hwnd, IDS_WAVE_PANE, FFT_POINTS * 8),
    _viewFreq (hwnd, IDS_FREQ_PANE),
    _scaleFreq (hwnd, IDC_FREQ_SCALE),
    _display (hwnd, 
            _viewWave, 
            _viewFreq,
            _samplesPerBuf,
            _samplesPerSecond,
            _fftPoints)
{
    if (waveInGetNumDevs() == 0)
        throw WinException ("No sound card installed !");

    WAVEINCAPS waveInCaps;
    if (waveInGetDevCaps (0, &waveInCaps, sizeof(WAVEINCAPS)) != MMSYSERR_NOERROR)
        throw WinException ("Cannot determine sound card capabilities !");

    // Attach icon to main dialog
    HICON hIcon = LoadIcon (TheInstance, MAKEINTRESOURCE (ICO_FFT));
    SendMessage (hwnd, WM_SETICON, WPARAM (ICON_SMALL), LPARAM (hIcon));

    // Display RS icon over the button
    hIcon = LoadIcon (TheInstance, MAKEINTRESOURCE (ICO_RS));
    HWND hwndButton = GetDlgItem (hwnd, IDC_RELIBUTTON);
    SendMessage (hwndButton, BM_SETIMAGE, (WPARAM)IMAGE_ICON,
           (LPARAM)(HANDLE)hIcon);
 
    // Initialize radio buttons (bits per sample)
    if (Is16BitSampling (waveInCaps.dwFormats))
    {
        _radio16.Check();
    }
    else
    {
        _radio8.Check();
        _bitsPerSample = 8;
        _radio16.Disable();
    }

    // Initialize scroll bar (fft's per second)
    InitScrollPositions ();
    // Initialize the combo box with sampling frequencies
    if (Is11_025kHz (waveInCaps.dwFormats))
        _comboFreq.AddValue (SAMPLES_SEC);       
    if (Is22_05kHz (waveInCaps.dwFormats))
        _comboFreq.AddValue (2 * SAMPLES_SEC);  
    if (Is44_1kHz (waveInCaps.dwFormats))
        _comboFreq.AddValue (4 * SAMPLES_SEC); 
    Assert (_samplesPerSecond == SAMPLES_SEC);
    // Select lowest available sampling frequency
    _comboFreq.SelectPos (0); 
    _samplesPerSecond = _comboFreq.GetValue();

    // Initialize combo with FFT points
    _comboPoints.AddValue (FFT_POINTS);         // 0
    _comboPoints.AddValue (2 * FFT_POINTS);     // 1
    _comboPoints.AddValue (4 * FFT_POINTS);     // 2
    _comboPoints.AddValue (8 * FFT_POINTS);     // 3
    Assert (_fftPoints == 4 * FFT_POINTS);
    _comboPoints.SelectPos (2);  // 4 * FFT_POINTS

    PaintScale ();
    _display.Resume ();
    PostMessage (hwnd, WM_COMMAND, IDB_START, 0);
}

Controller::~Controller ()
{
    _display.Kill ();
    PostQuitMessage (0);
}

// called when _samplesPerSec, _fftPoints or _bitsPerSample changed
void Controller::ReInit (HWND hwnd)
{
    if (!_display.ReInit (
            _samplesPerBuf,
            _samplesPerSecond,
            _fftPoints,
            _bitsPerSample))
    {
        PostQuitMessage (1);
    }

    PaintScale ();
}

void Controller::InitScrollPositions ()
{
    // This scrollbar controls fft's per second
    // by storing and returning samples per buffer
    _scroll.Clear ();
    // We perform one fft per buffer
    // so start with fftPoints large buffer
    // and shrink it down to MIN_SAMP_BUF
    int sampPerBuf = _fftPoints;
    for (int i = 0; i < MAX_POS; i++)
    {
        _scroll.AddValue (sampPerBuf);
        sampPerBuf -= MIN_SAMP_BUF;
        if (sampPerBuf <= 0)
            break;
    }

    _scroll.Init (i + 1, 1);

    // let's start with one buffer per fft
    _samplesPerBuf = _fftPoints;
    _scroll.SetPos (0);
    // fft's per second
    _edit.SetNumber (_samplesPerSecond / _samplesPerBuf);
}

void Controller::Scroll (HWND hwnd, int code, int pos) 
{ 
    _scroll.Command (code, pos);
    _samplesPerBuf = _scroll.GetValue(); 
    Assert (_samplesPerBuf <= _fftPoints);
    Assert (_samplesPerBuf >= MIN_SAMP_BUF);
    if (!_display.ReInit (
            _samplesPerBuf,
            _samplesPerSecond,
            _fftPoints,
            _bitsPerSample))
    {
        PostQuitMessage (1);
    }
    _edit.SetNumber (_samplesPerSecond / _samplesPerBuf);
}

void Controller::Stop (HWND hwnd)
{
    _display.Stop ();
    EnableWindow (GetDlgItem(hwnd, IDB_STOP), FALSE);
    EnableWindow (GetDlgItem(hwnd, IDB_START), TRUE);
}

// Child control command processing

void Controller::Command ( HWND hwnd, int ctrlid, int code)
{
    int i = 0;
    switch (ctrlid)
    {
    case IDC_RELIBUTTON:
        DialogBox (TheInstance, MAKEINTRESOURCE (DLG_ABOUT), hwnd, DLGPROC(AboutDlgProc));
        break;
    case IDB_START:
        if (_isStopped)
        {
            _isStopped = !_display.Start();
            if (_isStopped)
            {
                SendMessage (GetDlgItem (hwnd, IDB_START), WM_SETTEXT, 
                             0, (LPARAM)"Start");
            }
            else
            {
                SendMessage (GetDlgItem (hwnd, IDB_START), WM_SETTEXT, 
                             0, (LPARAM)"Stop");
            }
        }
        else
        {
            Stop (hwnd);
            SendMessage (GetDlgItem (hwnd, IDB_START), WM_SETTEXT, 
                         0, (LPARAM)"Start");
            _isStopped = true;
        }
        break;
    case IDB_STOP:
        break;
    case IDC_8_BITS:
        if (_radio8.IsClicked (code))
        {
            _bitsPerSample = 8;
            ReInit (hwnd);
        }
        break;
    case IDC_16_BITS:
        if (_radio16.IsClicked (code))
        {
            _bitsPerSample = 16;
            ReInit (hwnd);
        }
        break;
    case IDC_SAMPLING:
        if (_comboFreq.IsChanged (code))
        {
            _samplesPerSecond = _comboFreq.GetValue ();
            InitScrollPositions ();
            ReInit (hwnd);
        }    
        break;
    case IDC_POINTS:
        if (_comboPoints.IsChanged(code))
        {
            _fftPoints = _comboPoints.GetValue ();
            InitScrollPositions ();
            ReInit (hwnd);
        }    
        break;
    }
}

void Controller::PaintScale ()
{
    // Get the rectangle (in pixels)
    RECT &rect = _scaleFreq.Rect ();
    // Get the reference canvas
    UpdateCanvas canvRef (_scaleFreq.Hwnd ());
    // Translate rectangle to hundredths of millimiters
    RectHmm rectHmm (canvRef, rect);
    // Create Enhanced Metafile control canvas
    CanvasEMFCtrl canvas (rectHmm, canvRef);

    canvas.ClearWhite (rect);
    int x0 = rect.right;
    int y0 = rect.bottom - 1;

    // draw a notch every 100 Hz
    int s1000 = _display.HzToPoint(1000);
    int s100 = s1000 / 10;
    int maxS = _display.Points() / 2;
    int count = 0;
    canvas.Line (x0, rect.top, x0, rect.bottom);
    int xx = x0;
    if ( s100 < 3)
    {
        for (int s = 0; s < maxS; s += s1000 )
        {
            int y = y0 - s;
            if (y <= 0)
                break;
            int c = 6;
            canvas.Line (x0 - c, y, x0, y);
            count++;
        }
    }
    else
    {
        for (int s = 0; s < maxS; s += s100)
        {
            int c = (count % 10) == 0? 6: 3;
            int y = y0 - s;
            if ( y <= 0 )
                break;
            canvas.Line (x0 - c, y, x0, y);
            count++;
        }
    }
    // Attach the Enhanced Metafile to the control
    _scaleFreq.Attach (canvas);
}

bool Is16BitSampling (DWORD format)
{
    return (format & WAVE_FORMAT_1M16) ||
           (format & WAVE_FORMAT_1S16) ||
           (format & WAVE_FORMAT_2M16) ||
           (format & WAVE_FORMAT_2S16) ||
           (format & WAVE_FORMAT_4M16) ||
           (format & WAVE_FORMAT_4S16);
}

bool Is11_025kHz (DWORD format)
{
    return (format & WAVE_FORMAT_1M08) ||
           (format & WAVE_FORMAT_1M16) ||
           (format & WAVE_FORMAT_1S08) ||
           (format & WAVE_FORMAT_1S16);
}

bool Is22_05kHz (DWORD format)
{
    return (format & WAVE_FORMAT_2M08) ||
           (format & WAVE_FORMAT_2M16) ||
           (format & WAVE_FORMAT_2S08) ||
           (format & WAVE_FORMAT_2S16);
}

bool Is44_1kHz (DWORD format)
{
    return (format & WAVE_FORMAT_4M08) ||
           (format & WAVE_FORMAT_4M16) ||
           (format & WAVE_FORMAT_4S08) ||
           (format & WAVE_FORMAT_4S16);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久九九影视网| 日韩精品一卡二卡三卡四卡无卡| 亚洲啪啪综合av一区二区三区| 性欧美大战久久久久久久久| 国产成人亚洲综合a∨婷婷| 欧美色精品天天在线观看视频| 久久久91精品国产一区二区精品 | 久久精品国产亚洲高清剧情介绍 | 欧美mv和日韩mv国产网站| 亚洲男人电影天堂| 成人高清视频免费观看| www国产精品av| 成人免费视频免费观看| 久久麻豆一区二区| 蜜臀av一区二区在线免费观看 | 亚洲午夜精品网| 99久久久无码国产精品| 国产欧美一区二区精品秋霞影院 | 久久伊人中文字幕| 蜜臀精品一区二区三区在线观看| 欧美性videosxxxxx| 亚洲人xxxx| 色偷偷久久一区二区三区| 国产精品福利av| 成人免费毛片a| 欧美极品另类videosde| 成人网男人的天堂| 国产精品日日摸夜夜摸av| 国产精品一区二区免费不卡| 久久亚洲精品小早川怜子| 国内精品国产成人| 26uuu成人网一区二区三区| 国产一区二区久久| 中文字幕av一区二区三区高| 国产成人亚洲精品狼色在线| 欧美激情自拍偷拍| 99久久精品费精品国产一区二区| 成人免费视频在线观看| 91麻豆精品视频| 一区二区三区在线观看欧美| 欧美在线观看禁18| 日本美女一区二区三区视频| 91麻豆精品国产91久久久使用方法 | 26uuu亚洲| 国产999精品久久久久久绿帽| 国产精品网站在线播放| 91丨porny丨中文| 性感美女久久精品| 精品国产sm最大网站免费看| 粉嫩嫩av羞羞动漫久久久| 最好看的中文字幕久久| 欧美日韩黄视频| 国产一区在线观看视频| 中文字幕在线不卡| 欧美色精品在线视频| 激情综合色综合久久| 国产精品久久久一本精品 | 亚洲一区二三区| 91精品久久久久久久99蜜桃| 韩国精品主播一区二区在线观看| 国产日韩精品一区二区三区 | 成人性生交大片免费看中文| 一区二区三区欧美日| 日韩一级完整毛片| 99久久精品一区二区| 午夜久久久久久电影| 国产女主播一区| 欧美精品一二三四| 丁香五精品蜜臀久久久久99网站| 亚洲一区二区高清| 国产欧美一区视频| 91精品国产91热久久久做人人| 国产1区2区3区精品美女| 五月婷婷综合网| 日本一区二区成人在线| 欧美一区二区三区四区五区| aaa欧美日韩| 欧美视频一区二| 国产成人精品一区二区三区四区 | 亚洲视频 欧洲视频| 精品乱码亚洲一区二区不卡| 91免费观看国产| 国产一区二区在线视频| 亚洲成人自拍网| 国产精品免费视频一区| 日韩欧美区一区二| 欧美日韩色一区| 暴力调教一区二区三区| 国内外成人在线视频| 石原莉奈一区二区三区在线观看| 亚洲欧洲成人自拍| 26uuu精品一区二区三区四区在线| 精品视频资源站| 色婷婷精品久久二区二区蜜臀av | 欧美剧情电影在线观看完整版免费励志电影| 极品少妇xxxx偷拍精品少妇| 天天影视涩香欲综合网| 亚洲激情男女视频| 国产精品福利av| 中文字幕中文字幕中文字幕亚洲无线| 精品噜噜噜噜久久久久久久久试看| 欧美日韩精品系列| 欧美日韩一区二区三区四区五区| 97精品超碰一区二区三区| 成人一级片在线观看| 国产91丝袜在线18| 国产成人在线影院 | 六月婷婷色综合| 日本成人在线电影网| 午夜精品久久久久久久99水蜜桃| 亚洲国产日韩a在线播放 | 中文字幕中文字幕一区| 国产精品五月天| 国产精品无人区| 中文字幕不卡在线观看| 国产精品网曝门| 中文字幕av一区 二区| 中国av一区二区三区| 亚洲欧洲性图库| 亚洲欧洲综合另类在线| 亚洲一区二区中文在线| 91色.com| 在线免费观看视频一区| 欧美性色欧美a在线播放| 欧美日韩专区在线| 日韩一级完整毛片| 久久精品一区二区三区av| 久久精品免视看| 国产精品久久网站| 亚洲黄网站在线观看| 亚洲www啪成人一区二区麻豆| 午夜亚洲福利老司机| 麻豆免费看一区二区三区| 久久福利资源站| av中文字幕不卡| 欧美日产在线观看| 精品国产伦一区二区三区免费| 国产亚洲欧洲一区高清在线观看| 亚洲国产高清不卡| 亚洲成a人v欧美综合天堂下载| 五月天亚洲精品| 国内成+人亚洲+欧美+综合在线| 成人午夜视频福利| 欧美日韩精品一区二区在线播放 | 337p亚洲精品色噜噜| 精品电影一区二区三区 | 99久久99久久免费精品蜜臀| 91久久一区二区| 精品国产一区二区三区忘忧草| 国产精品天干天干在线综合| 亚洲国产aⅴ成人精品无吗| 狠狠色狠狠色综合系列| 色国产综合视频| 亚洲精品一区二区三区在线观看| 亚洲欧洲精品天堂一级| 日本伊人精品一区二区三区观看方式| 国产成人av福利| 欧美福利一区二区| 国产精品欧美一区二区三区| 亚洲国产精品久久艾草纯爱| 粉嫩在线一区二区三区视频| 宅男在线国产精品| 又紧又大又爽精品一区二区| 精品一区二区免费在线观看| 91国产福利在线| 欧美国产日产图区| 精品一区免费av| 欧美日韩国产综合草草| 国产精品国产三级国产aⅴ入口 | 亚洲成人激情社区| 成人一区二区三区中文字幕| 国产激情视频一区二区三区欧美 | 欧美日韩在线播放一区| 久久一区二区三区四区| 五月天婷婷综合| 色狠狠色噜噜噜综合网| 国产精品丝袜一区| 另类小说图片综合网| 欧美日韩久久一区二区| 亚洲色图制服丝袜| 不卡av在线网| 久久精品亚洲乱码伦伦中文 | 亚洲资源中文字幕| 不卡一区二区在线| 国产欧美中文在线| 国产米奇在线777精品观看| 51午夜精品国产| 婷婷久久综合九色综合伊人色| 一本在线高清不卡dvd| 国产精品免费视频一区| 国产丶欧美丶日本不卡视频| 欧美成人综合网站| 黑人巨大精品欧美黑白配亚洲| 欧美一区二区三区在线电影| 亚洲国产精品自拍| 欧美日韩三级在线| 秋霞av亚洲一区二区三| 欧美一级淫片007| 秋霞午夜av一区二区三区| 日韩三级免费观看|