mp3が再生されません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
スクエア

mp3が再生されません

#1

投稿記事 by スクエア » 13年前

VC++2008で、DXライブラリとC言語を使ってプログラミングをしています。PCはWindowsXPです。
ゲームプログラミングの館は全て理解し、龍神録プログラミングの館は6章まで見ました。
用意したmp3ファイルは普通に再生できるので、プログラムのほうが問題だと思うのですが、何が問題なのか全くわかりません。パスもちゃんと見直したりしてるのですが・・・ご指摘お願いします。
フォルダ構成
画像

コード:

//main.cpp
#define GLOBAL_INSTANCE
#include "../include/GV.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ){
	Window_Init();

	int Test = LoadSoundMem("test.mp3");

	while( !ProcessLoop() && !CheckStateKey( KEY_INPUT_ESCAPE ) ){

		if( CheckSoundMem( Test ) == 0 )
				PlaySoundMem( Test, DX_PLAYTYPE_BACK );

		DrawFPS( 2, 460 );
	}

	DxLib_End();
	return 0;
}

//GV.h
#include "./DxLib/DxLib.h"
#include "Define.h"

#ifdef GLOBAL_INSTANCE
#define GLOBAL 
#else
#define	GLOBAL	extern
#endif

#include "Function.h"

//Define.h
#pragma warning(disable:4996)
#pragma warning(disable:4244)

#define		PI							3.141592f
#define		PI2							PI*2

#define		FRAME						60
#define		FPS_COLOR					GetColor( 255,255,255 )

#define		ALL_RUN						TRUE
#define		WINDOWSIZE_CHANGE			TRUE
#define		MB_MESSAGE					"フルスクリーンで起動しますか?"
#define		MB_TITLE					"スクリーン設定"

#include "Struct.h"

//struct.h
typedef struct{
	int Count, Count_0;
	int Frame[FRAME];
	double Ave;
}FPS_t;

//Function.h
GLOBAL void   swap( int *a, int *b );
GLOBAL double rad ( double angle );

GLOBAL int    Message_Box();

GLOBAL void   NoOverlapRand( int min, int max, int *val );
GLOBAL int    BetWeenRand  ( int min, int max );

GLOBAL void	  KeepSpeedManagement();
GLOBAL void   DrawFPS( int x, int y, int flag=TRUE );

GLOBAL void   GetHitKeyStateAll_2();
GLOBAL int    CheckStateKey( unsigned char Handle );
GLOBAL int    CheckHitKeyAll_2();

GLOBAL int    Window_Init();
GLOBAL int    ProcessLoop();

//Init.cpp
int Window_Init(){
	if( Message_Box() == -1 )			
						return -1;

	if( SetAlwaysRunFlag( ALL_RUN ) == - 1 )
						return -1;

	if( SetWindowSizeChangeEnableFlag( WINDOWSIZE_CHANGE ) == -1 )
						return -1;
	
	if( DxLib_Init() == -1 )
						return -1;

	if( SetDrawScreen( DX_SCREEN_BACK ) == -1 )
						return -1;

	return 0;
}

int ProcessLoop(){

	KeepSpeedManagement();
	GetHitKeyStateAll_2();

	if( ScreenFlip() == -1 )
						return -1;

	if( ProcessMessage() == -1 )
						return -1;

	if( ClearDrawScreen() == -1 )
						return -1;

	return 0;
}

//Key.cpp
#include "../../include/GV.h"

unsigned int StateKey[256];
unsigned int StateKey2;

void GetHitKeyStateAll_2(){
	char StateKeyBuf[256];

	GetHitKeyStateAll( StateKeyBuf );

	for( int i=0; i<256; i++ ){
			if( StateKeyBuf[i] == 1 )	StateKey[i]++;
			else						StateKey[i]=0;
	}
}

int CheckStateKey( unsigned char Handle ){
	return StateKey[ Handle ];
}

int CheckStateKeyAll_2(){

	if( CheckHitKeyAll() == 1 )			StateKey2++;
	else								StateKey2=0;

	return StateKey2;
}

//FPS.cpp
#include "../../include/GV.h"

FPS_t FPS;

void KeepSpeedManagement(){

	int term, gnt;
	static  int t = 0;

	if( !FPS.Count ){
		if( !t )	term = 0;
		else		term = FPS.Count_0 + 1000 - GetNowCount();
	}
	else
		term = (int)( FPS.Count_0 + FPS.Count*( 1000.0/FRAME )) - GetNowCount();

	if( term > 0 )
		Sleep( term );

	gnt = GetNowCount();

	if( !FPS.Count )
		FPS.Count_0 = gnt;

	FPS.Frame[FPS.Count] = gnt-t;
	t = gnt;

	if( FPS.Count == FRAME -1 ){
		FPS.Ave = 0;
		for( int i = 0; i < FRAME; i++ )	FPS.Ave += FPS.Frame[i];
		FPS.Ave /= FRAME;
	}

	FPS.Count = ( ++FPS.Count ) % FRAME;
}

void DrawFPS( int x, int y, int flag ){
	if( flag == TRUE )
		if( FPS.Ave )
			DrawFormatString( x, y, FPS_COLOR, "FPS[%.1f]", 1000/FPS.Ave );

	return;
}

//Other.cpp
#include "../../include/GV.h"

int Message_Box(){
	int Flag = MessageBox( NULL, 
						   TEXT( MB_MESSAGE ),
						   TEXT( MB_TITLE ),
						   MB_YESNO | MB_ICONQUESTION
						  );
	if( Flag == IDNO )
			if( ChangeWindowMode( TRUE ) != 0 )
					return -1;

	return 0;
}

double rad( double angle ){
	if( angle )
		return PI2/(360/angle);

	return 0;
}

void swap( int *a, int *b ){
	int  r = *a;
	    *a = *b;
		*b =  r;
}

void NoOverlapRand( int min, int max, int *val ){
	int i = 0;

	for( int t = min; t <= max; t++ ){
			val[i] = t;
			i++;
	}

	for( int n = max - min; n >= 0; i-- )
			swap( &val[GetRand(n)], &val[n] );

}

int BetWeenRand( int min, int max ){
		return GetRand( max - min ) + min;
}
龍神録プログラミングの館を参考にさせていただいてます、何もせずに実行したらエラーなく普通に実行できるのですが・・・
ソースコード全部貼ってしまい申し訳ありません、疑問に思ったことがあれば聞いてください、ちゃんと答えますので。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: mp3が再生されません

#2

投稿記事 by Dixq (管理人) » 13年前

プロジェクトのあるフォルダがカレントになりますから、その場合
dat/Source/test.mp3
になります。
(つまり int Test = LoadSoundMem("dat/Source/test.mp3"); )
しかし、普通ソースコードがあるフォルダには音楽ファイルを入れません。
せっかくMusicフォルダやSEフォルダがあるのですから、そちらに入れてはいかがでしょう?

スクエア

Re: mp3が再生されません

#3

投稿記事 by スクエア » 13年前

Dixq (管理人) さんが書きました:プロジェクトのあるフォルダがカレントになりますから、その場合
dat/Source/test.mp3
になります。
(つまり int Test = LoadSoundMem("dat/Source/test.mp3"); )
しかし、普通ソースコードがあるフォルダには音楽ファイルを入れません。
せっかくMusicフォルダやSEフォルダがあるのですから、そちらに入れてはいかがでしょう?
出来ました!!てっきりmain.cppの場所から指定するのかと思っていたのですが、プロジェクトの場所からだったんですねorz

>>しかし、普通ソースコードがあるフォルダには音楽ファイルを入れません。
>>せっかくMusicフォルダやSEフォルダがあるのですから、そちらに入れてはいかがでしょう?

一応MusicフォルダにはBGM用の音声ファイル、SEフォルダには効果音用の音声ファイルを入れる予定ではあったのですが、どうしても再生できないので一度main.cppと同じ場所に居れたらどうだろうと思ってたのです
ご指摘ありがとうございます

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: mp3が再生されません

#4

投稿記事 by h2so5 » 13年前

本題とは関係ないですが、ソースがやや見づらいです。

if文やfor文の字下げを多用していますが、字下げの基準が不統一で分かりにくいです。
バグの素になる可能性が高いので止めたほうがいいと思います。

Window_Init() の中身も1つのif文にまとめたほうがすっきりします。

閉鎖

“C言語何でも質問掲示板” へ戻る