Re: 太鼓の達人のように・・・ ( No.1 ) |
- 名前:Will 日時:2012/12/17 18:18
ファイル名を変数にすれば可能です。
char SoundFile[MAX_PATH];
// 音楽ファイル名を入力してもらう、もしくはファイルから読み込む
PlaySoundFile(SoundFile);
|
Re: 太鼓の達人のように・・・ ( No.2 ) |
- 名前:aaaaaaaaa 日時:2012/12/18 11:23
「このフォルダ内に入っている音楽を流す」といった指定は不可能でしょうか?
音楽ファイル名を入力してもらう
という方法が具体的にピンときません・・・
|
Re: 太鼓の達人のように・・・ ( No.3 ) |
- 名前:Will 日時:2012/12/18 12:44
フォルダ内のファイル検索はWinAPIのFindFirstFileを利用すれば実現します。
ttp://msdn.microsoft.com/ja-jp/library/cc429233.aspx
使用方法はググってください。
> 音楽ファイル名を入力してもらう
> という方法が具体的にピンときません・・・
別段難しい話ではなくWinAPIのGetOpenFileNameを利用してファイル選択してもらうか(フルスクリーンの場合はダメ)、
DXLibのKeyInputSingleCharStringでファイル名を入力してもらえばよいだけのことです。
|
Re: 太鼓の達人のように・・・ ( No.4 ) |
- 名前:aaaaaaaaa 日時:2012/12/19 12:01
FindFirstFileを使用してみたのですがやはりうまくいきません。
↓これが私の書いたコードです。
#include "DxLib.h"
HANDLE hFind;
WIN32_FIND_DATA fd;
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
SetGraphMode(600,800,32);
SetMainWindowText("ファイル走査");
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1 ; // エラーが起きたら直ちに終了
}
FindFirstFile("gamumusic\\%03d.mp3", &fd);
ClearDrawScreen();
while( ProcessMessage() == 0 ){
while(1){
/* 結果の表示 */
DrawFormatString(400,200,GetColor(255,255,255),"%s",fd);
while(FindNextFile(hFind, &fd));
ScreenFlip();
}
FindClose(hFind);
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
↑これを実行すると
『test.exe の 0x77a76b90 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000020 に書き込み中にアクセス違反が発生しました。』
と表示されてしまいます。
どこがいけないのでしょうか?
|
Re: 太鼓の達人のように・・・ ( No.5 ) |
- 名前:Will 日時:2012/12/19 14:15
沢山間違いがあります。
1.ファイル名の指定方法
"%03d.mp3"は間違いです。
printfでは無いのでこのような指定はできません。
「windows ワイルドカード」で検索して、検索する時のファイル名の指定方法を勉強してください。
2.FindFirstFileの戻り値を受け取っていません
そのため「hFind」は不定値のままです。(グローバル変数なので多分0でしょうが)
正しい値でないhFindに対してFindNextFile、FindCloseしているのでアクセス違反になります。
また、以下のようにhFindから検索結果をチェックしてください。
検索が失敗している時にはfdの中身は不定です。
/* 検索失敗? */
if(hFind == INVALID_HANDLE_VALUE) {
printf("検索失敗\n");
return; /******** エラー終了 ********/
}
3.whileが多い
while( ProcessMessage() == 0 ){
while(1){
↑★このループから抜ける条件がない、その間ProcessMessage()が実行されないので正常に動作しない
/* 結果の表示 */
DrawFormatString(400,200,GetColor(255,255,255),"%s",fd);
while(FindNextFile(hFind, &fd));
↑★このループは意味不明
ScreenFlip();
}
↓★外側のwhileがあるので何回でもクローズしてしまう→アクセス違反
FindClose(hFind);
}
|
Re: 太鼓の達人のように・・・ ( No.6 ) |
- 名前:Will 日時:2012/12/19 14:19
見落としてた。
4.DrawFormatString(400,200,GetColor(255,255,255),"%s",fd);
これもアクセス違反です。
ファイル名を取り出す場合は「fd.cFileName」です。
|
Re: 太鼓の達人のように・・・ ( No.7 ) |
- 名前:Will 日時:2012/12/19 14:20
こちらのページのCサンプルとよく見比べてください。
ttp://nienie.com/~masapico/api_FindFirstFile.html
|
Re: 太鼓の達人のように・・・ ( No.8 ) |
- 名前:aaaaaaaaa 日時:2012/12/19 19:25
とりあえず、先ほどのエラーはきえました。
ただ、改行して表示されないのでついでに教えていただけますか?
|
Re: 太鼓の達人のように・・・ ( No.9 ) |
- 名前:Will 日時:2012/12/20 08:15
DrawFormatStringには改行機能はありません。
表示する度にY座標を文字の高さ分+すればよいだけです。
|
Re: 太鼓の達人のように・・・ ( No.10 ) |
- 名前:aaaaaaaaa(解決) 日時:2012/12/20 17:41
いろいろとアドバイスありがとうございました。
頑張って作ります
|