DXライブラリPortableの音楽再生について。

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

DXライブラリPortableの音楽再生について。

#1

投稿記事 by ぷにおさん » 12年前

こんばんは。
はじめて投稿させていただきます。
ぷにおさんと申します。

早速質問なのですが、
DxライブラリPortableを使って、PSPで音楽を再生する様にプログラムを作成したいのです。
(実験段階なので、小さなプログラムです。)
が、試しに組んでみたところ、再生されません。

コード:

#include <pspkernel.h>
#include <dxlibp.h>
PSP_MODULE_INFO("TEST", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER|THREAD_ATTR_VFPU);

int title[1];
int sound;

int main()
{
	
	DxLib_Init();
	
	InitSoundMem();
	SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE);

	LoadDivGraph("mydat/dat/title/th07logo_HD.png",1,1,1,480,272,title);
	sound  = LoadSoundMem("mydat/dat/music/th07_01.mp3");

	while(ProcessMessage() != -1)
	{
		ClearDrawScreen();

		if(CheckSoundMem(sound) == 0){
			PlaySoundMem(sound,DX_PLAYTYPE_LOOP,TRUE);
		}

		
		if(CheckHitKey(KEY_INPUT_UP)>=1){        //試験的に、プログラムが起動していることを示すために書きました。
			DrawRotaGraph(240,136,1.0,0.0,title[0],TRUE);
		}
		
		

		ScreenFlip();
	}
	DxLib_End();
	return 0;
}

ファイル名などは気にしないでください(・・;)

このように書いたのですが、DrawRotaGraph関数で表示される画像は、きちんと表示されますが、
音楽はいつまでたっても再生されません。

どなたか、わかる方、ご教授願います。


※こちらの都合上、PSPが今、手元になく、Jpcspで動作を確認しています。
   PSPでは普通に流れたということがありましたら、ご報告頂けると嬉しいです。

トントン
記事: 100
登録日時: 15年前

Re: DXライブラリPortableの音楽再生について。

#2

投稿記事 by トントン » 12年前

DxライブラリPortableは使用したことがないので
詳細はわかりませんが。

sound は正常な値が返って来ているのでしょうか?
また、音楽ファイルは正常に音がでるのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: DXライブラリPortableの音楽再生について。

#3

投稿記事 by softya(ソフト屋) » 12年前

mp3の形式次第で再生できない可能性があるので色んなmp3で試してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ぷにおさん

Re: DXライブラリPortableの音楽再生について。

#4

投稿記事 by ぷにおさん » 12年前

試しに、このようにコードを書き換えてみたのですが、

コード:


#include <pspkernel.h>
#include <dxlibp.h>
PSP_MODULE_INFO("TEST", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER|THREAD_ATTR_VFPU);

int title[1];
int sound;

int main()
{
	
	DxLib_Init();
	
	InitSoundMem();
	SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE);

	LoadDivGraph("mydat/dat/title/th07logo_HD.png",1,1,1,480,272,title);
	sound  = LoadSoundMem("mydat/dat/music/th07_01.mp3");

	while(ProcessMessage() != -1)
	{
		ClearDrawScreen();
		

		if(sound==-1){
			printfDx("Error!");
			ScreenFlip();
		}
		else if(sound !=0){
			printfDx("Cleared!");
			ScreenFlip();
		}


		if(CheckSoundMem(sound) == 0){
			PlaySoundMem(sound,DX_PLAYTYPE_LOOP,TRUE);
		}

		
		if(CheckHitKey(KEY_INPUT_UP)>=1){
			DrawRotaGraph(240,136,1.0,0.0,title[0],TRUE);
		}
		
		

		ScreenFlip();
	}

EXIT:
	DxLib_End();
	return 0;
}

たくさんの”Cleared!”が表示されたので、ロードはできているはずなのですが、再生ができていないようです
↑while文中に書くべきではなかったですね・・・
>softya様より
>mp3の形式次第で再生できない可能性があるので色んなmp3で試してみてください。
mp3の形式とは、どういうことでしょうか?
詳しく教えていただけると嬉しいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: DXライブラリPortableの音楽再生について。

#5

投稿記事 by softya(ソフト屋) » 12年前

mp3とは以下の形式を満たしていればmp3と呼ばれますが、必ずしも全部の形式を再生できるとは限らないと言うことです。
「MP3 - Wikipedia」
http://ja.wikipedia.org/wiki/MP3#.E4.BB.95.E6.A7.98

この中の(MPEG-1 Audio Layer-3)の形式のものに限ると思いますので確認してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ぷにおさん

Re: DXライブラリPortableの音楽再生について。

#6

投稿記事 by ぷにおさん » 12年前

返信がおくれて申し訳ありません。

試しに、以下の手順で、
・固定ビットレート128kbps
・周波数44.1kHz

としてみたのですが、

どうもうまくいきません・・・

ちなみに、コードは現状こんな感じです。

コード:


#include <pspkernel.h>
#include <dxlibp.h>
PSP_MODULE_INFO("TEST", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER|THREAD_ATTR_VFPU);

int title[1];
int sound;


//-------------------------------------------------------------------
//fps監視
//-------------------------------------------------------------------


class Fps{
	int mStartTime;         //測定開始時刻
	int mCount;             //カウンタ
	float mFps;             //fps
	static const int N = 60;//平均を取るサンプル数
	static const int FPS = 30;	//設定したFPS

public:
	Fps(){
		mStartTime = 0;
		mCount = 0;
		mFps = 0;
	}

	bool Update(){
		if( mCount == 0 ){ //1フレーム目なら時刻を記憶
			mStartTime = GetNowCount();
		}
		if( mCount == N ){ //60フレーム目なら平均を計算する
			int t = GetNowCount();
			mFps = 1000.f/((t-mStartTime)/(float)N);
			mCount = 0;
			mStartTime = t;
		}
		mCount++;
		return true;
	}

	void Draw(){
		DrawFormatString(0, 0, GetColor(255,255,255), "%.1f", mFps);
	}

	void Wait(){
		int tookTime = GetNowCount() - mStartTime;	//かかった時間
		int waitTime = mCount*1000/FPS - tookTime;	//待つべき時間
		if( waitTime > 0 ){
			Sleep(waitTime);	//待機
		}
	}
};


Fps fps;



int main()
{
	
	DxLib_Init();
	
	InitSoundMem();
	SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE);

	LoadDivGraph("mydat/dat/title/th07logo_HD.png",1,1,1,480,272,title);
	sound  = LoadSoundMem("mydat/dat/music/th_07_01.mp3");

	if(sound==-1){
		printfDx("Error!\n");
		ScreenFlip();
	}
	else if(sound !=-1){
		printfDx("Cleared!\n");
		ScreenFlip();
	}

	while(ProcessMessage() ==0){
		
		if(CheckSoundMem(sound)==0){
			PlaySoundMem(sound,DX_PLAYTYPE_BACK,TRUE);
			printfDx("Music start!\n");
		}
		
		fps.Update();	//更新
		fps.Draw();		//描画
		ScreenFlip();
		fps.Wait();		//待機

		if(CheckHitKey(KEY_INPUT_F)==1){
			break;
		}
	}

	DxLib_End();

	return 0;
}


実行結果は、
Cleared!
Music start!

一定時間すると、またMusic startが表示されます。
fps表示はされません・・・。
2回Music startが表示されたということは、曲は再生されているようなんですが・・・

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: DXライブラリPortableの音楽再生について。

#7

投稿記事 by ISLe » 12年前

ぷにおさん さんが書きました:一定時間すると、またMusic startが表示されます。
fps表示はされません・・・。
2回Music startが表示されたということは、曲は再生されているようなんですが・・・
DXライブラリPortableのソースコードを見ると、音量が0で初期化されているようです。
ChangeVolumeSoundMemで音量を上げたら聞こえるようになるのではないでしょうか。

http://sourceforge.jp/projects/dxlibp/s ... nd/sound.c
dxpSoundInit関数でdxpSoundArray構造体配列に対して、音量以外もあらゆるパラメータをmemsetを使った内部表現0で一括初期化してます。

ぷにおさん

Re: DXライブラリPortableの音楽再生について。

#8

投稿記事 by ぷにおさん » 12年前

ISLe さんが書きました:DXライブラリPortableのソースコードを見ると、音量が0で初期化されているようです。
ChangeVolumeSoundMemで音量を上げたら聞こえるようになるのではないでしょうか。

http://sourceforge.jp/projects/dxlibp/s ... nd/sound.c
dxpSoundInit関数でdxpSoundArray構造体配列に対して、音量以外もあらゆるパラメータをmemsetを使った内部表現0で一括初期化してます。
ISLe様、わざわざ調べてくださってありがとうございます!
なるほど、一度初期化されていたのですね・・・

試しに、PlaySoundMem関数の前にChangeVolumeSoundMem関数を設置しましたが、相変わらずですorz
明日、一時的にPSPが帰ってくるので、一回試してみようと思います。
もしかしたら、Jpcspが悪いかもしれませんし。

ぷにおさん

Re: DXライブラリPortableの音楽再生について。

#9

投稿記事 by ぷにおさん » 12年前

返信おくれて申し訳ありません。
本当は昨日のうちにPSPでチェックしたかったのですが、風邪をこじらせまして・・・
そして、本日、PSPで動作確認したところ、きちんと音がなりました!

いままで協力してくださった、
トントン様、softya様、ISLe様、
ご協力ありがとうございました!

また、なにかあったら、質問することがあるでしょうが、その時はまた、よろしくお願いします!

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: DXライブラリPortableの音楽再生について。

#10

投稿記事 by ISLe » 12年前

報告からは読み取れないので確認させてください。

JPCSPだけの問題だったのでしょうか。
DXライブラリPortableのボリューム初期値の問題は無かったのでしょうか。

ぷにおさん

Re: DXライブラリPortableの音楽再生について。

#11

投稿記事 by ぷにおさん » 12年前

返信がおくれてすみません。

申し訳ないのですが、
ボリュームの件は、ChangeVolumeSoundMem有り無し両方では検証していません。
PSPでチェックしたものは、ChangeVolumeSoundMem関数を組み込んだものしか動作確認していないのです。
しかし、0に初期化されることを考えると、やはり必要なのでは・・・
今度検証する機会があったら、また書き込みます。

また、Jpcsp上では、再生されなかったので、Jpcspの問題であったのではないかと疑っています。

結論として、
ChangeVolumeSoundMem関数は必要かどうかはわからない。
しかし、Jpcsp上はあっても無くても再生されなかったので、Jpcspには問題がある。
というような感じです。

わかりづらくてすみません(´Д`;)

閉鎖

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