「サクラ」質問掲示板

サクラの質問掲示板です。
[一覧へ] > (@4) [低] [未処理]
@4■ (#8) 2周目?が変になる - あき (2010-08-11 23:52) /低 未処理
自分の作った曲をRPGツクールとかのゲームに使用したいのですが、1トラックで音色を何度か変えているせいか、曲が2周目に入ると最後の音色や音の高さのままメロディーが流れてしまいます。メディアプレイヤーでリピートした場合は問題ないのですが。
何か命令とかいれないといけないのでしょうか?
初心者すぎてどうすればいいのかがわからず、困っています。
わかる方がいましたら教えてください。よろしくお願いします。

(#12) 音源初期化 - TyokuNal (2010-08-16 00:29) /低 ---

こんばんわ。

物を見ていないので何とも言えませんが、
状況を見る限り、そちらの曲のファイルに「音源初期化」が無いためだと思われます。


Midiを再生するツールは、
再生を始める際、特に初期化を行うことが「必須ではない」ため、
ファイルの内容通りに再生を行うようになっています。
(WindowsMediaPlayer等の高機能プレイヤーは、「初期化があっても無くても事前に初期化する」ようになっています)


ただ・・・ここで「音源初期化」をサクラで書き入れれば解決かと言うと、
そうでもありません。
理由は、あきさんがおっしゃっている、「RPGツクールとかのゲームに使用したい」があるためです。

「音源初期化」を入れても良いのですが、
これによって、以下の弊害がおきる可能性があります。
・ループ時に「初期化処理のためのラグがある」
・ループ時に、場面の切り替わり等が起こった時、切り替わり先のBGMに影響を及ぼす可能性がある

1つ目は、
「音源初期化」に「少し処理時間が必要」である点が挙げられます。
「音源初期化」を入れたからと言って、即座にリセットがかかるわけではありません。

2つ目は、
この「音源初期化」のせいで、切り替わった後のBGMを再生しようとする時、「中途半端な状態を作る可能性」が出る為です。


では、「音源初期化」無しでの対応策です。
「音源初期化」が無くとも、きちんとループ再生をさせたいのであれば、

必ず最初の状態の設定を指定しておくことです。(例:最初オクターブ4で始めてるのであれば、最初にちゃんとオクターブ4の指定をする等)


少し長々となって申し訳ありませんが、
ご不明な点がありましたら、またお越しくださいませ。

(#14) 回答くださり、ありがとうございます! - あき (2010-08-16 22:32) /低 未処理
TyokuNalさま、丁寧かつ詳しい回答ありがとうございます。
私の記入している曲はいきなりトラック1から始まって、音色とか音符しか書いてないような状態で終了しております。何の設定もされていません。根本的に何もかも足りないのだと思います。

音源の初期化について、雛型の中にあったので試しに入力してみたのですが、TyokuNalさまがおっしゃる通りループ時に間が空いてしまい、ループ再生するものに向いていないこともわかりました。

そこで教えていただきたいのですが、「最初の状態を指定する」というのはどのような入力をすると良いのでしょうか?
雛型等を使えばできるものですか?
もしも記入例などがありましたら、教えていただけるとありがたいです。
よろしくお願いします。

(#15) 音源初期化は不要です - 北神陽太 (2010-08-18 00:04) /低 未処理
RPGツクールの起動時に1回だけリセットを行っているので
曲データにGMリセットは不要です。

●初期化のデータ構造について
http://homepage1.nifty.com/kitagami/page03a02_vx.htm

ここに、簡略ではありますが、曲データの先頭にある自前の初期化に
ついて説明しています(マニュアルにもあったような・・・)

サクラのソースもありますが、こちらは私独自の考えで
作成していますので、解読するには時間がかかるかも?

FineTuneを使うトラックは固定しているため、
初期化していない場合があります。
なお、このサンプルは1トラックのみで、実際には使用するトラック
すべてを設定します。

プログラマさんと打ち合わせた結果、最短で演奏できつつ、
安定した動作となるタイミングに調整しています。



//自前の初期設定
Str X={r64}
Str X1={y64,0}  //サスティンペダル Off
Str Z__={TR(0) X X X X X X X}
//_■ミキサー部(全曲共通の初期化)
//                     音色    Vol     Pan     Rev    Cho    Vel
Str A__={TR( 1);CH( 1);X1;X;@(030)X;V(110)X;P( 60)X;REV(10)X;CHO(30);X;v120;X;EP(100)}
//---------------------------------------------------
// 拡張初期化(ループ後と、この曲専用の初期化)
Str TP={M(0) PitchBend(0) BR(12)}
M.Delay=!2
Str A_1={TP q96 o6 l16 M(100)} 
//---------------------------------------------------

//_■トラックデータ
Time(1:1:0);
 PLAY(Z__,A__);//初期化
Time(1:1:479)
 PLAY(Z_1,A_1);//拡張初期化
TrackSync
// PLAY(Z00,A00);//イントロが無い場合は不要
//**************************
y111,0//ループ
//**************************
 PLAY(Z_1,A_1);//拡張初期化

//以下、イントロ後、ループ後に演奏される内容

(#8)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を平仮名で記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能