HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0205
フワット・ベベBGMループでゲームが一瞬止まる15解決


フワット・ベベ

リンク

2013/2/5(Tue) 22:38:32|NO.52192

 mmload命令でゲーム中のBGMをループさせると、BGMが最初に戻るときに、
ゲーム中の動作が約1秒止まってしまいます。
 ゲーム中の動作を止めずに、BGMがループする命令文はないのでしょうか?

 それともBGMの時間をあらかじめ計り、その時間を変数として数えさせる様なプログラム
面で処理するしかないのでしょうか。



この記事に返信する


OK

リンク

2013/2/6(Wed) 01:16:09|NO.52197

そのBGMは何秒間のサウンドですか。
→1秒ならば、すでにサウンドが再生されている状態で、再生していませんか?
→違うならばmmloadがループのなかに入ってませんか?
→どちらでもないならばmmloadのモードの指定を確認してみて下さい。



_hamyuu

リンク

2013/2/6(Wed) 18:17:01|NO.52211

それかBGMに使用しているファイルがmp3だとそうなりますね。
自分はogg形式に変換してHSPOGGを使用して再生させてます。
参考になれば幸いです!



フワット・ベベ

リンク

2013/2/7(Thu) 20:30:03|NO.52230

◆BGMなので1秒ではありません。
 mmload命令は、プログラムループの外にあります。プログラムループの中に
あると、ゲームとして致命的な遅さになりました。
 mmload命令でBGMループさせるモードは1です。”指定したファイルは無限ループ
で再生を行う”モードです。

◆使用してるBGMファイルは、MIDI形式です。
MP3形式だと、以前使用したときに他の効果音やBGMがうまく再生されない不具合が
あったため、MP3形式は以後使用していません。
ogg形式やHSPOGGというものが、いまいち、どんな物か理解できなくて……。調べてみ
ます。


□質問する前に、一度HSP掲示板で「BGMループでゲームが一瞬だけ止まる」現象と、
その回答がないか検索してみたのですが、不思議と1件も見当たりませんでした。これが
初?。
 



mirage17

リンク

2013/2/7(Thu) 20:44:10|NO.52231

mci "play data\\sample.mid" ;音楽演奏

mci "stop data\\sample.mid";音楽停止

mmload "data\\shot.wav" ; 効果音0
mmload "data\\defeat.wav",1 ; 効果音1
mmload "data\\damage.wav",2 ; 効果音2
mmplay 0;効果音0演奏
mmplay 1;効果音1演奏
mmplay 2;効果音2演奏

こんな感じに記述すると、ゲーム音楽と効果音がうまく動きましたが、どうでしょうか?
曲はmidiファイルで、効果音はwavファイルです。



@key

リンク

2013/2/7(Thu) 21:29:24|NO.52232

mciを使うとHSPの外で処理が行われるのでいまいち合わないかもしれません
wavをbufferに取り込み直接再生できる奴があったはずなので(無限ループも可)それを使うといいと思います



ZAP

リンク

2013/2/7(Thu) 21:52:43|NO.52233

MIDIファイルをmmload でループ再生させた場合、
ループ時の処理に時間を食われるのできれいにはループしないと
思われます。

MIDI以外のファイル形式の音源を試してみてはいかがでしょうか?
(他の方も書いていますがOGGがお勧めです)



OK

リンク

2013/2/8(Fri) 00:46:49|NO.52234

なかなか難しいですね。すいません。
>それともBGMの時間をあらかじめ計り、その 時間を変数として数えさせる様なプログラム 面で処理するしかないのでしょうか。
シューティングやアクションならば時間で区切る長いサウンドを準備しても良いでしょうが、RPGだと妥協できないですね。



晩御飯

リンク

2013/2/8(Fri) 01:46:02|NO.52236

MP3は権利的な問題もあるので再生云々関係なく避けておいたほうが良いと思う
そう引っかかることはないとは思うけど

それとMIDIとMP3を比較するのは何か間違えていると思う



a-okada

リンク

2013/2/8(Fri) 22:43:58|NO.52246

midiにこだわるのであれば
DLL使わないと止まります
GuruguruSMFなど使ってみては


このスレで長年の疑問が一つ解けた



ちまめ

リンク

2013/2/12(Tue) 23:31:52|NO.52341

ちょうどhelp眺めてたんですけど、試してはいないんですが、[マルチメディア再生]
の項目の通りでしょうか



フワット・ベベ

リンク

2013/2/15(Fri) 17:36:52|NO.52408

分かった点を報告みたいな形で3項目でコメントです。
BGMループでゲームが止まらない方法がわかりました。解決しました。
みなさんのコメント内容の単語を、色々検索してみました。

【(1)できない点】
●他の方の言われている『ogg形式やHSPOGG』がなんなのか調べている途中、
「mmload命令、mmplay命令は、ゲーム用の命令として作られていない」
という内容を発見してショックでした。
「12歳からはじめるHSP〜〜」という本ではゲームの作り方を紹介され
ているのに、一部分の命令がゲーム向きじゃなかったなんて…。

●ともあれ、
>MIDIファイルをmmloadでループ再生させた場合、ループ時の処理に時間を食われる。
HSPの基礎命令文の単体だけできれいなBGMループができない
事は、避けられないみたいですね。



フワット・ベベ

リンク

2013/2/15(Fri) 17:37:30|NO.52409

【(2)分かった点】
●『ogg形式やHSPOGG』が音楽ファイルの拡張子名という事を知りました。
そして、普段【ヘルプ】を見ないので存在を知らなかったのですが、
マルチメディアを検索してみました。
なるほど、HSPの拡張版にmmload系とは違う命令文があったんですね。

●dmmload系の命令を使う必要がある。そのためには、音楽ファイルの拡張子
がwavとoggを使う必要がある。または、拡張子をそれに変換する必要がある。
 以前、私自身の別の質問をした時の回答返信に、『フリーソフトの拡張子
変換ソフトを使う』があったのですが何をするソフトなのかイマイチわから
ず、ダウンロードを避けていました。
 しかし今回は、HSPの拡張版のdmmload系命令を使うためと、その用途が
わかったので『えこでこツール』を使いました。



フワット・ベベ

リンク

2013/2/15(Fri) 17:38:21|NO.52410

【(3)dmmload系を使う】
●『えこでこツール』の使い方をニコニコ動画で調べました。そして、HSPの
【ヘルプ】でmmload系の説明を見て使いました。ただ、説明不足な点が少々
あり最初はさっぱりでした。
私の知りたかった説明不足な点は、
・dmmini命令を書く位置。……(screen命令よりも下?)
・dmmload命令のパラメータp2がなくてもBGMループができる場合。……(ogg形式は省略できるみたい)
・ogg形式でもdmmloop命令なしで、BGMループできた場合。……(なぜできたか不明)
・dmmloop命令を使わずに、dmmplay命令でBGMループができた場合。……(なぜできたか不明)
・dmmplay命令のパラメータp2、開始ポイントの調べ方。……(不明)
・dmmloop命令のパラメータp2、ループポイントの調べ方。……(不明)
でした。

●今回は、BGMループ用にはogg形式だけを使う事にしたので、不明な点は問題なかったのですが、
いつかどこかでつまずくかも?

不明な点が浮上しましたが、今回の質問については解決したので締め切ります。
みなさん、ありがとうございました(ぺこり)。



フワット・ベベ

リンク

2013/2/15(Fri) 17:39:48|NO.52411

解決チェック入り



にゃんちゃん

リンク

2013/2/15(Fri) 22:53:48|NO.52418

すみません、解決してますがちょっと報告させてください。
私の使用しているPC2台(winXPとwin7)では、dmm関連の命令でoggファイルを鳴らすと、音切れが発生しています。
個人的にはovplayという拡張プラグインを使うことをお勧めいたします。
あと、サンプルの調べ方ですが、ループさせたい位置が音声の戦闘から何秒あるかを調べて、それにサンプリングレート数(だいたいは44100)をかければいいです。



ONION software Copyright 1997-2023(c) All rights reserved.