Bug #81

Redmine Adminほぼ11年前に更新

h1. 状況(2013.07.03)

V6.52にて対応済み。

(原因)
演奏を停止/再生させたり、シークさせたり、繰返し演奏させたりした場合、
以下の様な演奏停止から演奏再開までの処理がほぼ共通して実行される。

①演奏の停止
②音源のクローズ
③音源のオープン
④初期コマンドおよびシーク位置までのコマンドを音源へ送信
⑤演奏の再開



上記一連のシーケンスで、繰返し演奏が他の操作と異なる点は④と⑤の間のインターバルにある。



繰返し演奏では、曲が終了してから曲の演奏を再開するまで一瞬で移行すると、プレーヤーとして落ち着きの無いリピート演奏になるため、
④と⑤の間にあえて2秒程度のインターバルを与えていた。
このインターバルは待ち時間の間でもキーやマウスの入力を受け付けるよう、Sleep()処理ではなくタイマイベントを使ったカウンタ方式を使っていた。

この方式のインターバルを取り払うと症状が改善したため、本インターバル処理に問題があると推測される。
※問題の箇所は絞られたが、真因として合理的説明が付かないため、本件に関しては断続的に追跡を試みる。
<追記>Elekenさんの分析により、真因が明確となった(下記、掲示板からの転載を参照のこと)



(対処)
リピート処理において、④と⑤の間のインターバルを除去した。
なお、タイマイベントを使ったカウンタ方式は、マークコマンド刻みに位置決めする逆方向のシーク操作でも利用しているが、
こちらに関しては現時点で支障が生じていないため、現状維持とした。

プレーヤーとしては即応型の繰返し演奏となり少々バタツキ感があるが、Museデータの曲頭、曲尾に休符を配しているデータも多くそちらに委ねる事とした。
また、エンドレスタイプの演奏に関しては逆に有利に働くと判断している。

<真因分析>
<pre>
[9051] Re[11]: 「繰り返し演奏」機能にて…
投稿者:Eleken 投稿日:2013/07/03(Wed) 21:11:58

私も同じ音源を使っています。
MuseWiki にて
> 本件に関しては断続的に追跡を試みる。
となっているので、おせっかいかもしれませんが、少し問題解決のヒントを書いてみます。

結論から言うと、この問題は本質的には「繰り返し演奏」に固有の問題ではなく、
「GS リセット下で XG Sys. Ex の付加されたデータ」という、GS 準拠でも XG 準拠でもない、
いわば想定外の MIDI 信号を受信したときの音源の挙動に関わる、音源固有の問題です。

「繰り返し演奏」固有の問題でないことは、以下のデータを最初から再生したときと
途中から再生したときの挙動の違いから明らかです。
(本問題はソフトウェア音源では生じません)
*ROOM"Q2(,,,,,,) " ; Set Chorus (GS) [*1]
_1%
*POOL"43,10,4C,02,01" ; Set Variation (XG) [*2]
*DATA"5B,09" ;Variation PART: #Z
*DATA"40,41,00" ;Variation TYPE: CHORUS 1
*DATA"4E,00,34" ;PARAM. 7W: EQ Low Gain (-12dB)
#Z1 o2 {|d4/r dr|}4 _1
#Z2 o2[f+]0 |<d+4/>{,8/}6| {|{,8/}8|}3 _1

具体的に言うと、[*1] と [*2] の受信するタイミングに関わっているようです。
[*1] を [*2] より前に受信したとき、音源 (MU1000) は 以降の XG バリエーションエフェクトのコーラス
[*2] を無効化するようです。
逆に [*2] が [*1] と同時かより以前に受信されると、[*2] は有効化されるようです。
おそらく、GS 音源をエミュレートする際の XG 音源の仕様だと思われます。
</pre>
<pre>
[9052] Re[12]: 「繰り返し演奏」機能にて…
投稿者:開発者 投稿日:2013/07/03(Wed) 22:12:55  [ 返信 ]

Elekenさん
>「繰り返し演奏」固有の問題でないことは、以下のデータを最初から再生したときと
> 途中から再生したときの挙動の違いから明らかです。
> ・・・
> 具体的に言うと、[*1] と [*2] の受信するタイミングに関わっているようです。
> [*1] を [*2] より前に受信したとき、音源 (MU1000) は 以降の XG バリエーションエフェクトのコーラス
> [*2] を無効化するようです。
> 逆に [*2] が [*1] と同時かより以前に受信されると、[*2] は有効化されるようです。
> おそらく、GS 音源をエミュレートする際の XG 音源の仕様だと思われます。
素晴らしい解析力!!

現在のMuseの「繰返し演奏」は、
初期化関係のエクスクルーシブ(この場合はROOM[*1]が含まれます)を送信した後、
人工的に2秒ほどのインターバル挿入して、そこから徐に演奏を開始していました(以降の[*2]の発行となります)。
つまりElekenさんが例示してくれたデータの _1% が必ず存在するといった状況ですね。

・・・実は、昨晩から今に至るまで、MIZさんにトライアル版を何度も送りつけては状況を確認してもらっていました。
MIZさんとの実験の結果、このインターバルを取り払うと症状が改善する事実がわかりました。
よくある音源の問題として、インターバルの無いメッセージで欠落が起きるというのがあるため、
インターバルが無い方が症状が改善するという事態に、私もMIZさんも戸惑っていたのです。
まったく合理的説明を付けられずにいました。

Elekenさんの今回の見解で、一気に霧が晴れた気分です。
本当にありがとうございます!
> おせっかいかもしれませんが、
全然おせっかいじゃありません!救世主です!!

つまり、こういうことだったんですね。
--------------------------------------------------
①従前の繰返し演奏モードでは、[*1] → インターバル → [*2] としている。
②そのインターバルを取り払うことで、[*1]と[*2]がほぼ同時に発行されるようになった。
この①と②では、音源側のメッセージの扱いが異なる。
現在のMuseは、繰返し演奏は①となり、それ以外の停止/再生では②となる。
したがって、現象は繰返し演奏でのみ出現した。
--------------------------------------------------

そう言えば追跡の最中、MIZさんが「ROOMコマンドの有無で症状が変化するのが気になる」と言ってました。
MIZさん、良い勘してますっ!

そして、どうもこの「ほぼ同時」という部分がかなり微妙みたいですね。
実はMIZさんの実験によると、インターバルが挿入されているMuse(V6.51)にて、
1回目の演奏:データ部のエックスクルーシブが効いている。
2回目の演奏:データ部のエックスクルーシブが効いていない。
3回目の演奏:データ部のエックスクルーシブが効いていない。
4回目の演奏:データ部のエックスクルーシブが効いている。



といった感じで、なんと4回目に効いている状態に戻っていました(苦笑)。

なんにしても、音源仕様ということで納得です。
なお、Elekenさんのご記帳を、そのままMuseWikiに掲載させて頂きました。
だって、感動しちゃったんだもん(笑)。お許し下さい。
</pre>

h1. 概要(2013.07.01)

以下のデータを「繰返し演奏」させると、1回目と2回目で音色が変化してしまう。
<pre>
*ROOM" R2(,1,115,30,,40) Q2(,,,,,,) " ;1(UM-3G(1))
*DATA"43,10,4C, 02,01,5B,09";メンバーZ
*DATA"43,10,4C, 02,01,40,41,00";CHORUS 1
*DATA"43,10,4C, 02,01,52,00,34";EQ High Gain
#Z1 o2 {|d4r dr|}4
</pre>

・繰返し演奏ではなく、通常の停止/再生操作では再現しない
・ROOMコマンドを取り去るなど、これ以上簡素化すると再現しない
・muse.iniのVGSフラグは1(すなわち、停止時にGS音源初期化を発行している)
・使用している音源は YAMAHA MU1000

戻る