前提・実現したいこと
使用言語はCで、コンパイラはGCCです。
リアルタイム処理を使用したマイクから入った音を変調してスピーカーから出力するプログラムを作ろうとしています。
現在は、起動すると開始、終了のボタンと周波数を表示するトラックバーがついたウィンドウが表示される状態で、開始を押すとラグはありますが入出力をすることができます。終了のボタンは現在は起動するか確かめるための小さなウィンドウを表示するだけのボタンです。
発生している問題・エラーメッセージ
・エラーメッセージは出ないのですが、開始ボタンを押して入出力を開始すると応答なしになってしまい、GCCのウィンドウでエンターキーを押すと終了する。という状態になってしまい、原因が分からず困っています。
・現在いろいろ調べている途中ですが、トラックバーの値(HWND)を周波数の設定に使いたいと思い、doubleの変数に入力出来れば使えると考えています。現在はatof関数を使用しようと考えていてHWND型をConst char型に変換する方法を探しています。もしHWNDをdoubleに変換する方法、またconst charに変換する方法を知っている方がいらっしゃればぜひ教えていただきたいです。
該当のソースコード
#include <string.h> #include <math.h> #include <windows.h> #include <mmsystem.h> #include <conio.h> #include <commctrl.h> #define BUTTON_ID1 0 #define BUTTON_ID2 1 #define ID_TRACK 100 #define ID_STATIC 101 HWND hTrack,hStatic; static HWND hButton1; static HWND hButton2; char i[128]; int *a = 0; int b = 0; int plus1(int *m); double fm; LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { char buffer[100]; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: hStatic=CreateControlWindow(hwnd,10,10,250,45,0, 0 ,"","STATIC",(HMENU)ID_STATIC,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE)); hTrack=CreateControlWindow(hwnd,10,60,280,55,0 , TBS_AUTOTICKS,"",TRACKBAR_CLASS,(HMENU)ID_TRACK,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE)); //トラックバーの範囲を設定(0-300) SendMessage(hTrack,TBM_SETRANGE,TRUE,MAKELONG(300, 1000)); //ページサイズの設定(10)--->マウスでクリックしたときの移動量 SendMessage(hTrack,TBM_SETPAGESIZE,0,10); //ラインサイズの設定 (1)--->矢印キーを押したときの移動量 SendMessage(hTrack,TBM_SETLINESIZE,0,1); //ポジションの設定(100) SendMessage(hTrack,TBM_SETPOS,TRUE,100); //目盛りのサイズを設定 (30) SendMessage(hTrack,TBM_SETTICFREQ ,30,0); SetFocus(hTrack); break; case WM_HSCROLL: if ((HWND)(lp)==hTrack) { //現在の位置を表示 wsprintf(buffer,"現在の周波数は%d[Hz]です。",SendMessage(hTrack,TBM_GETPOS,0,0)); SendMessage(hStatic,WM_SETTEXT,0,(LPARAM)buffer); } break; case WM_COMMAND: switch(LOWORD(wp)) { case BUTTON_ID1: a = &b; plus1(a); MessageBox(NULL , "BUTTON_ID1" , "ボイスチェンジャー" , MB_OK); EnableWindow(hButton1,FALSE); EnableWindow(hButton2,TRUE); return FALSE; case BUTTON_ID2: MessageBox(NULL , "BUTTON_ID2" , "Vois" , MB_OK); EnableWindow(hButton1,TRUE); EnableWindow(hButton2,FALSE); return FALSE; } return 0; } return DefWindowProc(hwnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("VOIS"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("VOIS") , TEXT("Vois on your lap") , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); hButton1=CreateWindow( TEXT("BUTTON") , TEXT("開始") , WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON , 300 , 10 , 200 , 200, hwnd , (HMENU)BUTTON_ID1 , hInstance , NULL ); hButton2=CreateWindow( TEXT("BUTTON") , TEXT("終了") , WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON , 300, 300 , 200, 200 , hwnd , (HMENU)BUTTON_ID2 , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg); return msg.wParam; } コード
試したこと
元々EnableWindow関数を使用していなくてそれが原因かと考え組み込みましたが依然応答なしのままです。
補足情報(FW/ツールのバージョンなど)
GCC→正確にはMINGWです。
後半の変調などの部分のプログラムは文字数制限のため省略しています。
回答2件
あなたの回答
tips
プレビュー