ページ 1 / 1
音楽関数について
Posted: 2008年2月27日(水) 12:34
by パソピ
おはようございます。この掲示板で、DXライブラリを用いたシューティングゲームプログラミングについて何度か質問させていただいている者です。
質問の内容ですが、少し謎の現象が起こってしまいました。
シューティングゲームのタイトル画面で音楽を流そうと考えています。
LoadSoundMemで音楽をメモリに読み込んだ後、PlaySoundMemで音楽を流そうとしたのですが、実行してもうまく流れませんでした。しかし、ウィンドウを非アクティブにすると何故か音楽が流れます。ウィンドウをアクティブにすると音楽が停止してしまいます。
音楽が流れるということは、読み込み出来ているはずなのですが、原因がよく分かりません…
お忙しいとは思いますが、このような現象の対処法を知っている方、回答お願いします。
Re:音楽関数について
Posted: 2008年2月27日(水) 23:02
by 管理人
VGAのドライバの問題か何かじゃないでしょうか。
恐らく間違ったコードを書いたとしても通常そのような状態にはならないのではないかと思います。
内部的な問題はよくわからないので、本家の掲示板で聞いてみて下さい。
http://homepage2.nifty.com/natupaji/DxLib/
一度、投稿する前に、VGAのドライバが正しく入っているか確認して下さい。
Re:音楽関数について
Posted: 2008年2月28日(木) 02:24
by 木霊
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode ( TRUE ); // ウインドウモードで起動
if ( DxLib_Init () == -1 ) { return -1; }
SetDrawScreen ( DX_SCREEN_BACK );
ClearDrawScreen ();
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS );// ストリーム再生の引数
int S_Handle = LoadSoundMem ( "Test_Music.ogg" );
while ( ProcessMessage () == 0 ) // ------------------ ループ開始
{
PlaySoundMem ( S_Handle, DX_PLAYTYPE_LOOP );// これだけだと問題
/*
PlaySoundMem ( S_Handle, DX_PLAYTYPE_NORMAL );// 解決策その1
// 音楽が鳴り終わるまでここでストップ
*/
/*
if ( CheckSoundMem ( S_Handle ) == 0 ) {
PlaySoundMem ( S_Handle, DX_PLAYTYPE_LOOP );// 解決策その2
}
// 音楽が鳴っていれば何もしないが、鳴っていなければ音楽を鳴らす
*/
ScreenFlip ();
ClearDrawScreen ();
if ( CheckHitKey ( KEY_INPUT_ESCAPE ) == 1 ) break;
}
DxLib_End();
return 0;
}
パソピさん、上のソースのようにループ内で「PlaySoundMem」関数だけを呼んでませんか?
この関数は呼ばれる度に、音楽が最初から演奏されます。
なので音楽が鳴っていないように見えます。(聞こえます)
解決策は2つありますが、ゲームに使うなら「その2」の方でしょう。/*と*/を外して、
実行してみてください。(例によって、音楽ファイルは御自分で用意して下さい)
Re:音楽関数について
Posted: 2008年2月28日(木) 02:30
by 木霊
ちなみに非アクティブになることでプログラムの進行が停止してるので、
ループが回らずに「PlaySoundMem」関数が呼ばれなくなることで、
音楽が聞こえ始めるのだと思います。
Re:音楽関数について
Posted: 2008年2月28日(木) 06:43
by 管理人
なるほど、再生しまくってるというわけですか^^;
確かにそうなりますね。思いつきませんでしたm(_ _)m
Re:音楽関数について
Posted: 2008年2月28日(木) 09:01
by パソピ
管理人さん、木霊さん、おはようございます。
なるほど。音楽が流れないのではなく、連続で再生しようとしていることで聞こえなかったということなんですね…
皆さんのアドバイスで直すことができました。
ありがとうございましたm(_ _)m