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

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

?? control.cpp

?? 頻譜分析儀Frequency Analyzer
?? 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一区二区三区免费野_久草精品视频
亚洲欧美日韩国产综合在线| 国产精品第一页第二页第三页| 韩国三级在线一区| 婷婷综合五月天| 日一区二区三区| 久久精品99久久久| 亚洲一区二区三区四区在线观看| 欧美mv日韩mv亚洲| 久久久激情视频| 国产精品蜜臀av| 中文字幕av一区二区三区高| 精品欧美久久久| 精品福利一区二区三区| 欧美一区二区三区色| 欧美日本一区二区| 日韩色在线观看| 欧美老女人第四色| 欧美做爰猛烈大尺度电影无法无天| 9l国产精品久久久久麻豆| 99麻豆久久久国产精品免费| 成人激情文学综合网| 国产精品1024| 不卡大黄网站免费看| 99视频精品免费视频| 91国产视频在线观看| 欧美日韩精品欧美日韩精品一| 欧美性猛片xxxx免费看久爱| 91高清视频在线| 91猫先生在线| 日本va欧美va精品| 日韩高清不卡一区二区三区| 国产剧情一区二区三区| 91视频一区二区| 色综合久久久久综合体桃花网| 色美美综合视频| 欧美日韩aaaaaa| 26uuu国产电影一区二区| 国产日韩欧美精品综合| 自拍偷拍欧美精品| 国产精品久久久久影院老司| 亚洲高清视频的网址| 国产成人午夜99999| 7777女厕盗摄久久久| 亚洲天堂免费看| 国产一区二区电影| 日韩欧美中文字幕制服| 一区二区三区日韩欧美精品| 国产乱码精品1区2区3区| 欧美日产国产精品| 亚洲女人小视频在线观看| 国产麻豆91精品| 欧美一区二区视频网站| 欧美美女喷水视频| 国产精品妹子av| 国产日产欧美精品一区二区三区| a在线播放不卡| 精品久久人人做人人爱| 91精品国产综合久久国产大片| 欧美体内she精高潮| 51精品国自产在线| 中文字幕精品一区二区精品绿巨人 | 欧美人牲a欧美精品| 2023国产精品自拍| 亚洲免费av在线| 精品一区二区三区免费| 99久久久国产精品| 欧美一级专区免费大片| 国产欧美va欧美不卡在线 | 日本韩国精品在线| 欧美一区二区啪啪| 国产精品久久久久久久久免费桃花| 一区二区三区精品| 国产美女精品一区二区三区| 欧美xxxxx牲另类人与| 综合久久久久久久| 一本色道久久综合亚洲91| 中文字幕精品一区二区精品绿巨人 | 中文一区在线播放| 亚洲午夜影视影院在线观看| 国产剧情一区在线| 538prom精品视频线放| 欧美国产一区二区| 日本不卡免费在线视频| 精品国产免费久久| 欧洲中文字幕精品| 日韩欧美色综合| 欧美另类高清zo欧美| 一本一道波多野结衣一区二区| 国产乱子轮精品视频| 免费高清在线一区| 亚洲福利一区二区| 亚洲精品伦理在线| 日韩理论片中文av| 国产精品视频免费看| 久久精品日产第一区二区三区高清版| 日韩一区二区三区观看| 欧美日韩国产123区| 日本电影欧美片| 在线观看中文字幕不卡| 色哟哟日韩精品| 91啦中文在线观看| 色综合久久综合中文综合网| 91玉足脚交白嫩脚丫在线播放| 成人精品一区二区三区四区| 粉嫩av一区二区三区在线播放 | 亚洲欧美一区二区三区国产精品| 国产精品久久久久久久久免费相片| 久久久久久免费网| 国产夜色精品一区二区av| 久久九九国产精品| 欧美激情综合在线| 欧美国产一区视频在线观看| 日本一区二区免费在线| 国产喷白浆一区二区三区| 久久久国产综合精品女国产盗摄| 久久久久久久综合日本| 欧美国产日韩亚洲一区| 欧美精品一区二区三区在线播放| 久久婷婷成人综合色| 久久精品日产第一区二区三区高清版| 国产欧美日韩在线视频| 中文字幕在线一区| 亚洲免费观看在线观看| 亚洲一卡二卡三卡四卡| 婷婷夜色潮精品综合在线| 蜜臀久久99精品久久久久宅男| 久久99精品久久久久久久久久久久| 国内精品国产三级国产a久久| 国产精华液一区二区三区| 99久久久精品免费观看国产蜜| 色综合久久66| 91精品国产综合久久蜜臀| 欧美成人激情免费网| 国产视频一区在线观看| 国产精品久久毛片av大全日韩| |精品福利一区二区三区| 亚洲一区二区精品久久av| 日韩精品亚洲一区| 精品在线免费视频| 成人动漫一区二区三区| 在线看不卡av| 日韩免费观看高清完整版| 国产调教视频一区| 亚洲欧美电影一区二区| 亚洲va国产天堂va久久en| 久久国产麻豆精品| 成人免费va视频| 欧亚洲嫩模精品一区三区| 日韩片之四级片| 久久这里都是精品| 1024精品合集| 日韩黄色在线观看| 国产一区二区主播在线| 成人黄动漫网站免费app| 美国十次综合导航| 成人avav在线| 91麻豆精品国产| 精品国产123| 一区二区在线观看视频在线观看| 免费成人结看片| 99天天综合性| 欧美一区二区视频在线观看| 国产欧美视频一区二区| 亚洲图片欧美视频| 国产成人精品一区二| 欧美三级在线播放| 欧美国产一区二区| 日韩在线一区二区三区| 成人福利视频网站| 日韩一区二区电影| 亚洲欧美激情在线| 韩国理伦片一区二区三区在线播放 | 99re这里只有精品视频首页| 欧美一区二区三区公司| 一区在线播放视频| 极品销魂美女一区二区三区| 色综合久久中文综合久久牛| 精品国产欧美一区二区| 亚洲一区二区在线视频| 日韩欧美一区电影| 亚洲女同一区二区| 黑人巨大精品欧美一区| 欧美日韩亚洲综合| 国产精品盗摄一区二区三区| 久久成人麻豆午夜电影| 欧美性做爰猛烈叫床潮| 中文一区一区三区高中清不卡| 三级久久三级久久久| 91看片淫黄大片一级在线观看| 久久久久久久综合日本| 五月激情综合婷婷| 91小视频在线免费看| 亚洲精品一区二区三区99| 亚洲成人激情社区| 成人黄色一级视频| 久久夜色精品一区| 亚洲已满18点击进入久久| 经典一区二区三区| 欧美日韩高清一区二区三区| 亚洲国产精品精华液ab|