ゲームの途中に流れる音楽について

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

ゲームの途中に流れる音楽について

#1

投稿記事 by ティガ » 13年前

僕は今、ゲームの途中に流れる音楽が、WAvを使った音楽ファイルからMp3を使った音楽ファイルに変更しようとしているのですが、うまくいきません。どうやったら、変えられますか?プログラムも一応変えました。

とっち
記事: 56
登録日時: 13年前
住所: 岡山

Re: ゲームの途中に流れる音楽について

#2

投稿記事 by とっち » 13年前

プログラムを変えましたと言われましても・・・

そのプログラムを見なければお答えしようがありません。
質問に答えてもらうために必要だと思うコードを
のせてみてください。

ティガ

Re: ゲームの途中に流れる音楽について

#3

投稿記事 by ティガ » 13年前

すいません。これから載せます。

コード:

#include "spgame.h"

//グローバル変数
struct CharaData jikidata;
struct CharaData jitama[3];
int trigger = 0;
struct CharaData tekidata[50];
int gstate = GAME_TITLE;
int gametitlejpg;
unsigned int starttime;
float idouryou[20];
unsigned int animcounter = 0;
int backjpg;

int openmusic, backmusic;		//バックで再生する音楽
int clip1,clip2,clip3,clip4;	//効果音
int clip5,clip6;

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
	ChangeWindowMode(TRUE);				//ウィンドウモードで起動
	if(DxLib_Init() == -1) return(-1);	//DXライブラリ初期化

	gametitlejpg = LoadGraph("media\\gametitle.jpg");
	JicharaLoad();
	TekiLoad();
	backjpg = LoadGraph("media\\back01.jpg");
			
	//音声読み込み
	openmusic = LoadSoundMem("media\\music16.wav");
	backmusic = LoadSoundMem("media\\04_RayCyclone.mp3");
	clip1 =  LoadSoundMem("media\\bom35.wav");
	clip2 =  LoadSoundMem("media\\don18_c.wav");
	clip3 =  LoadSoundMem("media\\shoot22.wav");
	clip4 =  LoadSoundMem("media\\power33.wav");
	clip5 =  LoadSoundMem("media\\hit_p07.wav");
	clip6 =  LoadSoundMem("media\\gun11_r.wav");
	
	SetFrameRate();	
	SetDrawScreen(DX_SCREEN_BACK);
	PlaySoundMem(openmusic, DX_PLAYTYPE_LOOP);
	while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
		ClsDrawScreen();
		switch(gstate){
		case GAME_TITLE:
			DrawGameTitle();
			break;
		case GAME_MAIN:
			DrawGameMain();
			break;
		case GAME_OVER:
			DrawGameOver();
			break;
		case GAME_CLEAR:
			DrawGameClear();
			break;
		}
		ScreenFlip();
		animcounter = animcounter + 1;
	}

	DxLib_End();						//DXライブラリ終了処理
	return(0);							//終了 
}

ティガ

Re: ゲームの途中に流れる音楽について

#4

投稿記事 by ティガ » 13年前

問題の音楽ファイルの部分は、31行目のところです。

nil
記事: 428
登録日時: 13年前

Re: ゲームの途中に流れる音楽について

#5

投稿記事 by nil » 13年前

うまくいきませんと言われましても『何』が『どのように』うまくいかないのかを書いていただきませんと答えようがありません

一応見た感じでは再生されているのはopenmusic、つまりmedia/music16.wavの様ですが…………

とっち
記事: 56
登録日時: 13年前
住所: 岡山

Re: ゲームの途中に流れる音楽について

#6

投稿記事 by とっち » 13年前

このコードだとbackmusicの再生に関する所がありませんが、再生に関するところも
見せてくれると助かります。

ティ

Re: ゲームの途中に流れる音楽について

#7

投稿記事 by ティ » 13年前

何度もすいません。問題なのは、「backmusic = LoadSoundMem("media\\music04.wav");」から、「backmusic = LoadSoundMem("media\\04_RayCyclone.mp3");」に変えた部分です。

nil
記事: 428
登録日時: 13年前

Re: ゲームの途中に流れる音楽について

#8

投稿記事 by nil » 13年前

どのような問題が発生したのですか?

ティガ

Re: ゲームの途中に流れる音楽について

#9

投稿記事 by ティガ » 13年前

問題なのは、新しい曲が流れるようにするプログラムとその曲のデータも入れたのに前からある、「music04」が流れることです。

nil
記事: 428
登録日時: 13年前

Re: ゲームの途中に流れる音楽について

#10

投稿記事 by nil » 13年前

考えられる可能性としては

1. 04_RayCyclone.mp3 と music04.wavが同じ音源である
2. どこかで backmusic が上書きされた
3. ソースファイルが保存されていない

ぐらいですか……

とりあえずこのソースコードだけでは判断しかねます

VC++をお使いならば
backmusic か music04.wav で検索をかけてみてはどうですか?

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: ゲームの途中に流れる音楽について

#11

投稿記事 by beatle » 13年前

No.5で涼雅さんが、No.6でとっちさんが指摘していますように、backmusicが「再生」されている箇所が見つかりません。ファイルから音データをメモリに読み込む処理は確かに記述されていますが、そのデータを再生している命令が見当たらないということです。
その部分を提示して下さい。

ティ

Re: ゲームの途中に流れる音楽について

#12

投稿記事 by ティ » 13年前

すいません。長らく作ってかなり年月がたっていたので、再生を命令しているところと思われるところのソースコードをすべて投稿します。

コード:

//●ゲームタイトル画面の表示
void DrawGameTitle(){
	DrawGraph(0,60,gametitlejpg,FALSE);
	int col = GetColor(255,0,255);
	SetFontSize(32);
	SetFontThickness(9);
	int x = 320 - GetDrawStringWidth("PUSH Z KEY",12)/2;
	DrawString(x,300,"PUSH Z KEY", col);
	ScreenFlip();
	WaitKey();
	
	gstate = GAME_MAIN;
	JicharaInit();
	TekiInit();
	StopSoundMem(openmusic);
	PlaySoundMem(clip4, DX_PLAYTYPE_BACK);
	PlaySoundMem(backmusic, DX_PLAYTYPE_LOOP);
}

//●ゲーム本体の実行
void DrawGameMain(){
	DrawGraph(0,0,backjpg,FALSE);
	JicharaMove(TRUE);
	JitamaMove();
	TekiMove(TRUE);
	TekitamaMove();
	DrawBakuen();
	if(AtariHantei() == 1) {
		gstate = GAME_OVER;
		starttime = GetNowCount();
		StopSoundMem(backmusic);
		PlaySoundMem(clip1,DX_PLAYTYPE_BACK);
	}
	if(IsGameClear() == 1) {
		gstate = GAME_CLEAR;
		starttime = GetNowCount();
		StopSoundMem(backmusic);
	}
}

//●ゲームオーバー画面の表示
void DrawGameOver(){
	DrawGraph(0,0,backjpg,FALSE);
	JicharaMove(FALSE);
	TekiMove(FALSE);
	//爆炎表示
	if(jbakuendata.life==0){
		jbakuendata.life=16;
		jbakuendata.x = jikidata.x + (GetRand(64)-32);
		jbakuendata.y = jikidata.y + (GetRand(64)-32);
	}
	if(jbakuendata.life>0){
		int a = animcounter/4 % jbakuendata.animpat;
		DrawGraph (jbakuendata.x, jbakuendata.y, jbakuendata.ghandle[a], TRUE);
		jbakuendata.life = jbakuendata.life - 1;
	}
	int col = GetColor(255,0,0);
	SetFontSize(100);
	SetFontThickness(9);
	ChangeFontType(DX_FONTTYPE_EDGE);
	int x = 320 - GetDrawStringWidth("GAMEOVER",8)/2;
	DrawString(x,160,"GAMEOVER", col);
	
	if(GetNowCount() - starttime > 5000){
		gstate = GAME_TITLE;
		PlaySoundMem(openmusic, DX_PLAYTYPE_LOOP);
	}
}

//●ゲームクリアー画面の表示
void DrawGameClear(){
	DrawGraph(0,0,backjpg,FALSE);
	JicharaMove(FALSE);
	TekiVanish();
	int col = GetColor(0,255,255);
	SetFontSize(100);
	SetFontThickness(9);
	ChangeFontType(DX_FONTTYPE_EDGE);
	int x = 320 - GetDrawStringWidth("GAMECLEAR",9)/2;
	DrawString(x,160,"GAMECLEAR", col);

	if(GetNowCount() - starttime > 5000){
		gstate = GAME_TITLE;
		PlaySoundMem(openmusic, DX_PLAYTYPE_LOOP);
	}
}

void SetFrameRate(){
	float frametime = 0 ;
	unsigned int s = GetNowCount();		//計測開始時間をsに代入
	for(int i = 0 ; i < 30 ; i ++ )
	{
		ScreenFlip();
		unsigned int e = GetNowCount();	//計測終了時間をeに代入
		frametime = frametime + e - s ;	
		s = e ;
	}
	frametime = frametime/30 ;	//30回採取した経過時間の平均を取る
	for(int i=1; i<20; i=i+1){
		idouryou[i] = i / frametime * 16.67;
	}
}
これです。

Loki

Re: ゲームの途中に流れる音楽について

#13

投稿記事 by Loki » 13年前

media/music04.wavを一時的に、別の場所へ移動することは可能ですか。
可能であれば、別の場所へ移動させてから、コンパイル→実行してみてください。
それでも
ティガ さんが書きました: 新しい曲が流れるようにするプログラムとその曲のデータも入れたのに前からある、「music04」が流れること
が起きるようであれば、ソースの変更が適用されていないと思います。
コンパイラは何を使用していますか。

nil
記事: 428
登録日時: 13年前

Re: ゲームの途中に流れる音楽について

#14

投稿記事 by nil » 13年前

BGMについては皆目検討もつきませんが
それよりもまずコードを整理する必要がありますね……


まず一つ目はWaitKeyが使われていることです詳しくはこちらを参考にしてください。

二つ目は計算部分と描画部分が分離されていないことですね。
細かいと思うかもしれませんが意外と重要なことです

三つ目は似たような処理(中央揃えで文字を表示する部分など)を関数に纏めることです。
頻繁に使う処理はサブルーチン化してしまいましょう

ティガ

Re: ゲームの途中に流れる音楽について

#15

投稿記事 by ティガ » 13年前

おそらく、Borland C++コンパイラだと思われます。

閉鎖

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