急に音楽が再生されません

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

急に音楽が再生されません

#1

投稿記事 by s-rush » 16年前

連続投稿になってしまいすいません。

音楽をメモリに読み込んでから、音楽を再生するという方法をとっているのですが、
マップデータを大きくしたとたんに、音楽が再生されなくなりました。

マップデータは(要領悪いですが)エクセルからデータを読み取って、配列に格納するという方法をとっています。

添付したファイルには以下の物を入れてあります。
main.cpp                   -メイン
load_kanto.cpp             -ロード
load_map_info.cpp          -エクセルからマップデータのロード
sound.cpp                  -音楽再生
GH.h  
エクセルでのマップデータ
ちなみにマップデータは
 1:あたり判定用
 2:フィールドマップ描画用
 3:建物描画用
 4:その他オブジェクト描画用
 5:エリア判定用
です。
音楽再生に使っているマップデータは5のエリア判定用です。

マップデータを変更する前はちゃんと音楽が再生されていたのですが、
添付しておいたデータに変えたとたん、音楽が再生されません。

そこで、ちょっと調べてみたのですが、どうやらメモリに音楽データがロードされていないようなんです。
ですが、マップデータ変更前はメモリに入っていました。
プログラム自体は何も触っていません。

mainの方で、
case 0:
	load();
	load_kanto();
         ch.x=512;
	ch.y=480;
	ch.walking_flag=0;
	ch.muki=3;
         music[0] = LoadSoundMem("../data/sound/kanto_music/masara_town.mp3");
	music[1]  = LoadSoundMem("../data/sound/kanto_music/1_road.mp3");  
	func_state=100;
         break;
と変更したところ、メモリにロードされていました。
なので、パスが間違っていることはなさそうです。

なにが問題なのか分からないので、皆さんの知恵を貸してください。
開発環境はVC++2008 EE  OS:Vistaです。

s-rush

Re:急に音楽が再生されません

#2

投稿記事 by s-rush » 16年前

一応変更前のマップデータも添付しておきます。

ちなみに、プロジェクトごとアップした方がよかったですか?

yu

Re:急に音楽が再生されません

#3

投稿記事 by yu » 16年前

あくまで予想ですが・・・

配列の要素数を超えたアクセスをしていませんか?


自分が経験したことですがw

s-rush

Re:急に音楽が再生されません

#4

投稿記事 by s-rush » 16年前

>>yuさん
早速の回答ありがとうございます。
私もそう思って、配列の要素数を少し大きめに変更したんですが、
それでも駄目でした。

musicには何も入っていなくて、戦闘用の音楽battle_musicには入っていたので、
原因が全く分からない状態です・・・

yu

Re:急に音楽が再生されません

#5

投稿記事 by yu » 16年前

すみません;予想が外れて・・・
それで、ソース見てみました。

void stop_sound()
{
	int i;
	for(i=0; i<30; i++)
	{
		StopSoundMem(music);
	}
}

ですが

i<10 じゃないですか?


直しても解決しないかもしれませんが・・・;

Mist

Re:急に音楽が再生されません

#6

投稿記事 by Mist » 16年前

load_kanto関数内でLoadSoundMemを実行した直後のmusicの値はなんですか?
-1が入っているのであれば、DXライブラリのログ(Log.txt)に何か出力されているかも。

あと、最初の添付いくつかヘッダファイル足りないですね。(私がDLLミスっているだけ?)

s-rush

Re:急に音楽が再生されません

#7

投稿記事 by s-rush » 16年前

それでも駄目でした・・・

ロードの際、メモリ自体にデータが入っていないみたいなんです。
main関数内で読み込むようにすれば、メモリに入ってはいたんですが、
それだと、拡張性がなくなってしまうので^^;

s-rush

Re:急に音楽が再生されません

#8

投稿記事 by s-rush » 16年前

>>Mistさん
load_kanto関数内でLoadSoundMemを実行した直後のmusicの値も0でした。

>最初の添付いくつかヘッダファイル足りないですね
確認してみたんですけど、ちゃんとありましたけど^^;
何が足らなかったんでしょうか?

Mist

Re:急に音楽が再生されません

#9

投稿記事 by Mist » 16年前

私がDLLしたものではGV.hしかありませんでした。

fanction.h //関数定義
struct.h //構造体定
define.h //マクロ定義

の3つが少なくとも足りないようです。
あと、GV.hにはexternしかないけど変数の実体はどこで定義しているのでしょうか?
もしかしてソースも足りないのがあるのかな?
DLLされたファイルのサイズは正しかったんですけど。


> load_kanto関数内でLoadSoundMemを実行した直後のmusicの値も0でした。

0も1も0ですか?変ですね。
例えば、load_kanto関数内で音楽のロードとマップデータのロードの順番を入れ替えるとどうなりますか?

SCI

Re:急に音楽が再生されません

#10

投稿記事 by SCI » 16年前

>Mistさん
このプログラムは何か特別なDLLを使っているのですか?

Mist

Re:急に音楽が再生されません

#11

投稿記事 by Mist » 16年前

ああ、すいません。
DLL=ダウンロードのことです。
私の仕事場だとそう呼ぶので無意識にそう書き込んでいました。
最後のLがなんなのかよくわかんないですけどね。
アップロードの場合はUPLと略すのでそれに合わせて3文字にしてるのかなぁ?

SCI

Re:急に音楽が再生されません

#12

投稿記事 by SCI » 16年前

命名規則にも依りますが、アップロードはULでもUPLでもUPでも一応「略語」ですね。
ダウンロード「DownLoad」はどのように略してもLが2つにはならないので、一応確認してみました。
DLLというと「Dynamic Link(ed) Library」をイメージしてしまうので・・・

それはともかく、プロジェクトが断片的で、まずコンパイル・確認ができないのでさっぱりです。。

s-rush

Re:急に音楽が再生されません

#13

投稿記事 by s-rush » 16年前

もう一度アップしてみます。
といっても、中身はMistさんが足りないとおっしゃっていた
fanction.h //関数定義
struct.h //構造体定
define.h //マクロ定義
です。

あと変数の実態はdeclaration.cppで定義してあります。
これは入れるの忘れていたんで、私のミスです^^;

musicの値はどうやっても0なんです・・・
エクセルのデータを変える前まではきちんと入っていたんで、
どこに原因があるのかさっぱりわからないです。
>例えば、load_kanto関数内で音楽のロードとマップデータのロードの順番を入れ替えるとどうなりますか?
順番を入れ替えても駄目でした。
ついでにmainでload_kantoを呼び出す順番を変えても変化はありませんでした。

>>SCIさん
コンパイルは通っています。
プロジェクトごとアップした方がいいでしょうか?

SCI

Re:急に音楽が再生されません

#14

投稿記事 by SCI » 16年前

s-rushさん
こっちでまず実行ファイルが作れないと、「実行して症状を確認する」という最低限の作業ができません。
「音楽が再生できない」のなら、使用している音楽ファイルが必要です。

それか、必要な部分がテスト可能な最小限のプログラムを別に作るという方法もあります。
どちらにしろ、「症状を再現」するためのコードが小出しの状態だと、周囲の人はデバッグできませんよ。

s-rush

Re:急に音楽が再生されません

#15

投稿記事 by s-rush » 16年前

プロジェクトごとアップしました。

アップローダ様
http://down11.ddo.jp//uploader/download ... ip/attatch

pass
[poke]

よろしくお願いします。

SCI

Re:急に音楽が再生されません

#16

投稿記事 by SCI » 16年前

実行確認ができましたので、変更後のマップデータを使ってテストしてみます。

Justy

Re:急に音楽が再生されません

#17

投稿記事 by Justy » 16年前

 load_map_info関数の field_mapXへのアクセスで、jや kの値が
MAP_SIZE_X や MAP_SIZE_Yを超えてますよ。

 これで直接関係のなかった musicなどの別のメモリを壊していますね。

SCI

Re:急に音楽が再生されません

#18

投稿記事 by SCI » 16年前

・・・と思ったら、タイムスタンプを見る限りこれは「変更後」のデータですか?
上手く動いているようですよ。
画面中ほどに表示されている音楽のハンドルは、3つとも0ではなかったのですが・・・

BCC 5.5.1
WindowsXP
Core2Duo 1.98GB
2GB RAM

SCI

Re:急に音楽が再生されません

#19

投稿記事 by SCI » 16年前

追記
Justyさんの言うとおり、ループカウンタの値とか、ツメが甘い部分があるようです。
たまたま、私の環境では上手くいっただけです。

s-rush

Re:急に音楽が再生されません

#20

投稿記事 by s-rush » 16年前

Justyさん、SCIさんありがとうございました。
おかげで解決することができました。
おっしゃるようにループカウンタの爪が甘かったです。

以下のように改良したら、ちゃんとメモリ内にロードされていました。
if(j>=MAP_SIZE_Y || i>=MAP_SIZE_X)		//もしマップサイズよりも大きければEXFILEへ
	goto EXFILE;
switch (map_kind){
	case 1: field_map1[j][k] = atoi(inputc); k++; break;
	case 2: field_map2[j][k] = atoi(inputc); k++; break;
	case 3: field_map3[j][k] = atoi(inputc); k++; break;
	case 4: field_map4[j][k] = atoi(inputc); k++; break;
		case 5: field_map5[j][k] = atoi(inputc); k++; break;
		}
念のために聞いておきたいのですが、こんな感じでよろしいでしょうか?
メモリ破壊のバグ?にはなかなか気付かずに作業を進めてしまいそうなので^^;

Justy

Re:急に音楽が再生されません

#21

投稿記事 by Justy » 16年前


>念のために聞いておきたいのですが、こんな感じでよろしいでしょうか?

 kはチェックしなくていいのですか?

 あと、MAP_SIZE_X以上だった場合、EXFILEへ飛ばすのではなく、
強制改行という扱いでもいいのかもしれません。


 ちなみに csv内に '/'があった場合以降をコメントとして処理しているようですが、
ケースによってはバグります。

0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // コメント

 とすると、次の行の処理で、field_mapXのおかしなところに書き込みにいってしまうようです。

SCI

Re:急に音楽が再生されません

#22

投稿記事 by SCI » 16年前

あと、念のために書いておきますが、BCCでコンパイルすると以下のような警告が出ます。

Warning: パブリックシンボル _now がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている
Warning: パブリックシンボル _data がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている
Warning: パブリックシンボル _hour がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている
Warning: パブリックシンボル _minute がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている
Warning: パブリックシンボル _second がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている
Warning: パブリックシンボル _wday がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている
Warning: パブリックシンボル _time_zone がモジュール OTHER_FANCTION.OBJ と GET_TIME.OBJ の両方に定義されている

VCでも似たようなのが出ていますか?
精読していないので誤認識かも知れませんが、定義位置とかも気をつけるに越したことはないですね。
グローバル変数が増えてくると、衝突とかどうしても気づきにくいので・・・

s-rush

Re:急に音楽が再生されません

#23

投稿記事 by s-rush » 16年前

>Justyさん
>>kはチェックしなくていいのですか?
イベント用のマップを入れてから、この処理を考えます。

>>MAP_SIZE_X以上だった場合、EXFILEへ飛ばすのではなく、強制改行という扱いでもいいのかもしれません。
そうですね^^
強制改行にするか、エラー処理として扱うか、少し考えてみます。

>csv内に '/'があった場合以降をコメントとして処理しているようですが、ケースによってはバグります。
コメントは入れないつもりなので、この部分を削除しておきます。

まだまだつめが甘かったようですね^^;

>SCIさん
BCCは使ったことがないので、警告の意味が分かんないです。
VCでも警告は出ていますが、SCIさんのおっしゃるような類とは異なるかと思います。
 floatとint間での代入等で、データが失われる可能性があります
という警告がほとんどでした。
(計算の都合上、これは意図的にしています)

グローバル変数ばかりを扱っているので、定義位置にも気をつけます。

s-rush

Re:急に音楽が再生されません

#24

投稿記事 by s-rush » 16年前

解決ボタンを押し忘れました^^;

すいません。

Justy

Re:急に音楽が再生されません

#25

投稿記事 by Justy » 16年前


>VCでも似たようなのが出ていますか?

 試してみました。
 どうやら、other_fanction.cppは pokemon1.vcprojに登録されていないので
ビルド対象になっていないようで、特にそういう警告は出ませんでした。


# ちなみに関数の英語は functionです。

s-rush

Re:急に音楽が再生されません

#26

投稿記事 by s-rush » 16年前

本当ですね。

今気づきました^^;

閉鎖

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