トップページ > 記事閲覧
音楽再生について
名前:あお 日時: 2015/08/30 09:47

音楽を再生しようと思ったのですが、想定してたところでは鳴らずに、別のところでなり始めました。 プログラムは以下のとおりです(一部抜粋) int count12 = 0 int yy = 70; int mHandle = LoadSoundMem("MUSIC/ボス2.mp3"); if (count12 % 120 == 0){ yy += 30; } count12++; if (yy < 370){ PlaySoundMem(mHandle,DX_PLAYTYPE_LOOP,TRUE); } if (yy == 370){ DrawGraph(0, -100, Handle36, TRUE); } 私としてはyy<370の時に鳴ると思っていたのですが、 実際は、最初に一瞬だけ鳴っただけで止まり、 yy = 370になったときになりだしました。 いろいろと調べてみたのですがわかりませんでした。 よろしくお願いします。
メンテ

Page: 1 |

Re: 音楽再生について ( No.1 )
名前:管理人 日時:2015/08/30 11:48

載せていただいたプログラムを実行しますと yy が 370 以下の間、毎フレーム PlaySoundMem(mHandle,DX_PLAYTYPE_LOOP,TRUE); が実行さることになると思うのですが、 PlaySoundMem は実行されるとサウンドハンドルの先頭から再生を開始しますので、 1フレーム( 大体の場合0.017秒 )時間が経過する度に音楽が先頭から再生され直される ということになってしまっているのだと思います [ 1ループ目 ] yy は 30 で 370 以下なので PlaySoundMem が実行され、音楽の再生が開始される [ 2ループ目 ] yy は 60 で 370 以下なので PlaySoundMem が実行され、音楽が最初から再生され直される [ 3ループ目 ] yy は 90 で 370 以下なので PlaySoundMem が実行され、再び音楽が最初から再生され直される [ 4ループ目 ] yy は 120 で 370 以下なので PlaySoundMem が実行され、再び音楽が最初から再生され直される [ 5ループ目 ] yy は 150 で 370 以下なので PlaySoundMem が実行され、再び音楽が最初から再生され直される . . . そして yy が 370 に達すると「0.017秒経過するたびに先頭から再生され直す」という処理が 行われなくなるので、最後に実行した PlaySoundMem(mHandle,DX_PLAYTYPE_LOOP,TRUE); に従って音楽が普通に再生されるのだと思います
メンテ
Re: 音楽再生について ( No.2 )
名前:あお 日時:2015/08/30 12:04

おっしゃられたとおりで、フラグを作って、フラグが立ってないときだけ再生する、という形にしたらできました。 調べ不足だった気がしますが、本当に助かりました。 ありがとうございます。
メンテ
Re: 音楽再生について ( No.3 )
名前:あお(解決) 日時:2015/08/30 12:06

ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存