midiの再生が思うようにできません
ファイルの文字列を1行ずつ読み込み、文字列の数字の範囲によって再生する音楽を変えるプログラムを作成していますが、読み込んだ文字列とは無関係に、ループの初めの範囲で指定してある音楽しか再生されません。読み込んだ文字列ごとに再生音楽を変えるにはどうすればいいのでしょうか?分かる方ご教授願います。
環境:WindowsXP, Visual C++ 2008 Express Edition
以下がプログラムのソースの一部です。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
FILE *fp;
errno_t err;
TCHAR buf[30];
TCHAR *temp;
int m=0, n=0;
switch(msg)
{
case WM_CREATE:
CreateWindow(TEXT("BUTTON"), TEXT("Play"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,120, 100, 70, 70, hWnd, NULL, hInst, NULL);
break;
case WM_COMMAND:
err = _tfopen_s(&fp, TEXT("C:\\Documents and Settings\\m22015\\My Documents\\Visual Studio 2008\\Projects\\process\\process\\Corner.txt"), TEXT("r+"));
if(err != 0)
break;
temp = (TCHAR*)malloc(_tcsclen(buf)+1);
if(temp == NULL){
MessageBox(hWnd, TEXT("Can't secure of memory"), TEXT("Error"), MB_OK);
break;
}
for(int i=0; i<2; i++){
_fgetts(buf, 10, fp);
_tcstok(buf, TEXT("\n"));
}
while(_fgetts(buf, 30, fp) != NULL){
_tcstok(buf, TEXT("\n"));
_tcscpy(temp, buf);
while(_stprintf(buf, _T("- { x:%d, y:%d }"), m, n)!=EOF){
if((m>=0 && m<110)&&(n>=0 && n<200)){
if(mciSendString(_T("play C+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play C+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=110 && m<220)&&(n>=0 && n<200)){
if(mciSendString(_T("play D+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play D+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=220 && m<330)&&(n>=0 && n<200)){
if(mciSendString(_T("play E+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play E+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=330 && m<440)&&(n>=0 && n<200)){
if(mciSendString(_T("play F+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play F+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=440 && m<550)&&(n>=0 && n<200)){
if(mciSendString(_T("play G+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play G+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=550 && m<660)&&(n>=0 && n<200)){
if(mciSendString(_T("play A+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play A+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=660 && m<770)&&(n>=0 && n<200)){
if(mciSendString(_T("play B+1.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play B+1.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if(mciSendString(_T("play C.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play C.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}else if((m>=110 && m<220)&&(n>=200 && n<400)){
if(mciSendString(_T("play D.mid"), NULL, 0, NULL) != 0)
{
MessageBox(hWnd, _T("Can't play D.mid"), _T("Error"), MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
以下省略
.
.
.
}else{
break;
}
}
}
free(temp);
fclose(fp);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
return 0;
}
お礼
今投稿したばかりなのに、なんて素早い!! 本当にありがとうございます。 実は、今はじめてこの教えてgooを使って、勝手がわからず、 急ぎなのに間違って、「返答は急がない」にチェックしてしまったので、削除・訂正できないかと困ってオロオロしてたところだったのです。 本当にありがとうございました!!! <m(__)m><m(__)m><m(__)m><m(__)m><m(__)m><m(__)m> でもDLの方法がわからなかったのですが、表示したページを保存、でDLもできました。 けど、DLして鳴らしたら、あら不思議、 webから直で聴くのと、全然違うサウンドで鳴るのです。 どうしてでしょうね。 DLしたものをクリックしたら、何か新しいソフトをアクセプトする表示が出て、それをクリックしたら、別のソフトをダウンロードしてたようなので、 webから聴く時と違うソフトシンセ(音源?)で鳴ってるのでしょうね。 ぺなぺなの音で鳴るようになってしまいました。 これは、再生プレーヤーが何かを調べて、それで再生する時は、どの音源を使うかを設定し直す事で、変更できるのでしょうね。 webからの方が、いい音で鳴ってたなぁ.... 今回は本当にありがとうございました。