ビルドエラーにはならないのですが、処理が重くパソコンからカリカリ音がなりフリーズ一歩手前位の状態になり、音が鳴らなくて困っています。
何故で音が出ないのか
どうすれば指定した時間に効果音を鳴らせられるかを教えて下さい
test.wavは30.5 MBあります
Cはポインタ以外の基礎は一通り新C言語入門スーパービギナー編で学び、C言語ゲームプログラミングの館の3.1までやりました
使っている開発環境はMicrosoft Visual Studio Express 2013です
Windows7 32ビット Core i3 CPU 530 @ 2.93GHz メモリ4.00GB
宜しくお願いします
#pragma warning(disable : 4819)
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
//int SetAlwaysRunFlag(TRUE);//ウインドウが非アクティブの状態でも処理し続ける
int StartTime; //起動時の時間を格納する変数
int hour, minute, second; //表示する時間
int set_hour, set_minute, set_second; //セットする時間
SetOutApplicationLogValidFlag(FALSE); //ログ出力をするか否か
ChangeWindowMode(FALSE); // ウインドウモードかフルスクリーンか
SetGraphMode(640, 480, 16); //画面サイズを設定します
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
SetBackgroundColor(0x00, 0x00, 0x00); //背景の色を設定します
set_hour = KeyInputNumber(50, 50, 99, 0, TRUE); //セットする時間数を入力
set_minute = KeyInputNumber(70, 50, 59, 0, TRUE); //セットする分数を入力
set_second = KeyInputNumber(90, 50, 59, 0, TRUE); //セットする秒数を入力
set_hour %= 100; //ESCが押されたときに0にする
set_minute %= 60;
set_second %= 60;
if (set_second == 0 && set_minute == 0 && set_hour == 0)
set_minute = 3; //0時間0分0秒なら3分に合わせる
DATEDATA Date;
int A = 640; //最大の値
int B = 0; //最小の値
int C = 0;
int D = 0; //カウントダウン
int E = 0; //表示用
int X1 = 0;
int X2 = 640;
int Y1 = 50;
int Y2 = 50;
int g_Lagefont = CreateFontToHandle("メイリオ", 50, -1, DX_FONTTYPE_ANTIALIASING);
int jikann;
int gogo;
int Handle;//データハンドル格納用変数
A = set_hour * 360 + set_minute * 60 + set_second;
B = 0;
D = set_minute;
E = set_minute;
StartTime = GetNowCount(); //起動時の時間を取得
while (1){
if (ProcessMessage() == -1)break; //ウインドウのメッセージを処理する
GetDateTime(&Date);
second = (GetNowCount() - StartTime) / 1000; //秒に変換
minute = second / 60; //分に変換
second %= 60;
hour = minute / 6; //時間に変換
minute %= 6;
SetDrawScreen(DX_SCREEN_BACK); //描画する画面を設定します
ClearDrawScreen(); //画面に描画されている内容を消します
//時間に合わせてメッセージが変わる
const char* messages[18] = {
"",
" ",
" ",
" ",
" ",
" ", // 5
" ",
" ",
"おはようございます",
"おはようございます",
"今日も一日頑張りましょう!", // 10
"もうすぐお昼休みだ!",
"休憩時間です!",
"午後も頑張りましょう",
"こんにちは",
"こんにちは", // 15
"もうすぐで終わりです",
"お疲れ様でした"
};
if (Date.Hour >= 13){
jikann = Date.Hour - 12;
gogo = 1;
}else{
jikann = Date.Hour;
gogo = 0;
}
//壁紙
Handle = LoadGraph("sora.jpg"); // 画像をロード
DrawGraph(0, 0, Handle, TRUE); // データハンドルを使って画像を描画
DrawFormatStringToHandle(40, 180, GetColor(255, 174, 201), g_Lagefont, "経過時間"); //説明
DrawFormatStringToHandle(350, 180, GetColor(11, 166, 50), g_Lagefont, "残り時間"); //説明
DrawFormatStringToHandle(70, 250, GetColor(255,174, 201),g_Lagefont, "%d分", minute); //経過時間を描画します
DrawFormatStringToHandle(230, 250, GetColor(255, 255, 255), g_Lagefont, "/%d分/", E); //全体の時間を描画します
DrawFormatStringToHandle(450, 250, GetColor(11, 166, 50),g_Lagefont, "%d分", D); //残り時間
DrawFormatStringToHandle(0, 300, GetColor(255, 0, 0), g_Lagefont, "デバッグ用⇒%d:%d", Date.Hour, Date.Min);
if (Date.Hour == 10 && Date.Min == 0){
//10時の時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 10 && Date.Min == 5){
//10時5分に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 11 && Date.Min == 0){
//11時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 11 && Date.Min == 5){
//11時5分に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 12 && Date.Min == 0){
//12時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 13 && Date.Min == 0){
//13時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 14 && Date.Min == 0){
//14時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 14 && Date.Min == 5){
//14時5分に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 15 && Date.Min == 0){
//15時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 15 && Date.Min == 5){
//15時5分に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (Date.Hour == 16 && Date.Min == 0){
//16時に音を鳴らす
PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
}
if (gogo = 0){
DrawFormatStringToHandle(150, 400, GetColor(255, 255, 255), g_Lagefont, "午前%d時%d分", jikann, Date.Min);
}
else{
DrawFormatStringToHandle(150, 400, GetColor(255, 255, 255), g_Lagefont, "午後%d時%d分", jikann, Date.Min);
}
if (1 <= Date.Hour && Date.Hour <= 17) {
DrawFormatStringToHandle(0, 0, GetColor(255, 255, 255), g_Lagefont, messages[Date.Hour], D); //メッセージを表示
}
//ゲージの描画
DrawBox(0, 50, 640, 150, GetColor(255, 174, 201), TRUE);
C = A - (hour * 360 + minute * 60 + second);
if (C < B) C = B;
DrawBox(X1, Y1, X1 + (X2 - X1)*(C - B) / (A - B), 150, GetColor(11, 166, 50), TRUE);
//Dに残り時間[分]を設定
D = C / 60 + 1;
ScreenFlip(); //DX_SCREEN_BACKに描画した画像を表示します
if (set_hour * 360 + set_minute * 60 + set_second <= hour * 360 + minute * 60 + second){
//DrawFormatString(200, 350, GetColor(255, 255, 255), "時間になりました"); //時間になったら表示する
// test.wavのノーマル再生
PlaySoundFile("test.wav", DX_PLAYTYPE_NORMAL);
//音を鳴らす処理
}
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}