投稿
みらぼー Mirabeau
複数のMMLを順番に連続演奏したいです。 1つめのMMLが終わったかチェックして、つぎのMMLを演奏させるのですが、繋ぎめで一瞬間が空いてしまいます。途切れないようにするにはどんな方法がありますか?
1そうだね
プレイ済み
返信[1]
親投稿
曲の開始から終わりまでかかる時間(フレーム数)を事前に調べておき、終わる数フレーム前に別のトラックで演奏を始めるというのはどうでしょうか。演奏する前にBGNSETかBGMSETDで定義曲番号(128~255)を登録する必要があります。
0そうだね
プレイ済み
返信[2]
親投稿
ナツキ natukin1978
いっそ繋げて1つにするとか… でもテンポが違うと無理か…
0そうだね
プレイ済み
返信[3]
親投稿
チャンネル指定の「:0」を後ろのMMLから取りの除けば問題ないと思いますが、もし、最終目的がミュージックボックスのようなものだと、要求条件に合わないかと思います。 もし、次版で、MML変数の不具合が修正されれば、時間調整はもっと楽になると思われます。 みらぼーさんの問題の原因は、BGMPLAY"MML文字列"の演奏開始時間が2フレーム後になる仕様によるものなので、プログラムを作る(プチコンを利用する)側で何らかの対処が必要になります。
0そうだね
プレイ済み
返信[4]
親投稿
みらぼー Mirabeau
皆様、コメントありがとうございます。 >ナツキさん その発想はなかった。w でも同じパートは使いまわしたいので、1つは厳しいです。 >コータさん 2フレームの件は取説に書いてましたが、意味が理解できてませんでした。 プログラム上でフレームの管理ってできるのでしょうか。 wait1が1フレーム??う~む・・私には難しいです。笑
0そうだね
プレイ済み
返信[5]
親投稿
MAINCNTという、起動時から1フレーム毎に1増えるシステム変数があります。この値をBGMPLAY実行時と、BGMCHK(0)=0になったときに、読み取って、その差が再生時間になります。 この値を、本番でBGMPLAYしたときに読み取ったMAINCNT値に加算すると終わり時間がわかります。実際には、数フレーム引いた値が良いかもしれません。 パートの使い回しということでしたら、マクロ機能「{}」があります。そちらを使った方が良いように思います。
0そうだね
プレイ済み
返信[6]
親投稿
みらぼー Mirabeau
パート毎に数値を調整するのもかなり難しそうですね。 再生毎の再現性はあるのかな(^^; ファミリーベーシックの時はそんな苦労はなかったのに~(笑
0そうだね
プレイ済み
返信[7]
親投稿
MMLのマクロ機能の説明は、MMLと打ち込んでヘルプボタンを押すと7/7ページの一番下に出てきます。 他の方に教えて頂いたのですが、プログラムリストに、 REM MML とコメントを入れておくと、MML上にカーソルを移動して、ヘルプボタンを押すと見ることが出来て便利です。
0そうだね
プレイ済み
返信[8]
親投稿
時間再現性については、ポリゴン表示のようなよほど複雑な計算をさせなければ、誤差1フレームに押さえることが出来ると思いますが、1フレーム=約1/60秒なので、1つの曲のパート切り替えには、マクロ機能を使って一つのMML文字列にするのが望ましいと思います。
0そうだね
プレイ済み
返信[9]
親投稿
みらぼー Mirabeau
マクロ、便利ですね。入力量が節約できるし。 本体ヘルプのサンプルは途中から消えてて、意味が解らなかったけど、公式サイトの命令表にはちゃんと最後まで記載されていたので理解できました。 いろいろと教えていただいてありがとうございました。
0そうだね
プレイ済み
返信[10]
親投稿
一つ言い忘れていました。 MML文字列は、文字列なので、文字列変数に代入「=」したり、連結「+」、文字列操作関数が使えるので、それを使って加工することも出来ます。しかし、個人的な趣味としては、特別な事情が無ければ、一つの曲は、ひとまとまりとして扱うのが好きです。(良い悪いでは無く、あくまで好き嫌いなのでみらぼーさんの好きなようにするのが一番だと思います。) がんばってくっださい。
0そうだね
プレイ済み
返信[11]
親投稿
みらぼー Mirabeau
教えていただいた内容で作ってみました。 仰る通り、ひとつのMMLでまとめるのが一番ですね。 節ごとの区切りが解りづらく、編集が大変という面もありますが。。 曲をデコードした最後に最適化する感じで一つにまとめるのがいいですね。 せっかく作ったので努力の結晶を公開しておきます。 key:JD84V8AE
0そうだね
プレイ済み
返信[12]
親投稿
みらぼー Mirabeau
なぜか、「作品を見る」から実行すると、演奏が途中で止まる謎仕様?
0そうだね
プレイ済み
返信[13]
親投稿
BGMが終わるまで待つためには、最初のプログラムの4行目を最後に追加すれば良いと思います。使うトラックを変更している場合は、トラック番号を変更してください。 BGMを流しながら、他の操作をすることが出来るように、BGMPLAYは、待ち合わせをしない仕様になっています。待ち合わせが必要な場合は、プログラムで指定する必要があります。 たとえば、GBMを流している間、ボタン操作が出来ないとゲームにならないですよね。
0そうだね
プレイ済み
返信[14]
親投稿
良い曲ですね。
1そうだね
プレイ済み