ねこしんさん、純正培養データをありがとうございました! こちらでも、確実な再現を得ました。 そして、素晴らしい純正培養データだったので、すぐに原因が判りました。 本当に感謝しています。
・・・ただし、どう対処すべきか少々悩んでおります。
MIDI発音のしくみは、「音を出す」という命令と「音を止める」という命令で成立しています。 そして現在のMuseは、メンバー情報やフォーカス機構において、 ミュート指定したメンバーやフィンガーであっても「音を止める」側の命令はすべて音源に送っています。 試してもらうと分かると思うのですが、 今のMuseは、演奏中にミュート指定をした場合、その瞬間に該当のメンバーが鳴らなくなるのではなく、 ミュート指定後、音長を越える段になって、初めて音が消えることにお気づきになると思います。
どうしてこの様な仕様にしているのかと言うと、 演奏中にミュートするメンバーやフィンガーを切り替えた際、逆の問題が起こるからです。 もし「音を出す」という命令の直後で、まだ「音を止める」の命令が送信されていない状態で、 そのメンバーやフィンガーにミュートを掛けると、今度は音が鳴り続けてしまうという事態になるからです。
これを真正面から理想的な制御とするためには、各々のメンバーやフィンガーが、今どの音程でどれだけの数、 「音を出し」ているかをMuseが常に記憶管理しておき、ミュートを掛けた瞬間に整合を持って「音を止める」 ということをしなければなりません。これが、結構大仕事なんです(苦笑)。 なんせ1つのフィンガーでも複数音(和音)があり、しかも音を止めるには音程も把握しておかなければなりませんので。
というわけで、少々手抜きかもしれませんが、利用上ダメージの少ない「音止め」を優先する形で、 現在のMuseは「なんちゃってミュート機能」となっています。ゴメンナサイ。m__m ・・・本件に関しては、現時点では「仕様」とさせて下さい。 そうなるようにプログラムしてあり、期待通りに動作しているのでバグではありません。
ただ、「なんちゃって」ではない「本格的な」ミュート機構に関しては、 これを機に検討リストに追加しておこうと思います。
> なぜ一つ目が消えないのかは謎ですが… まず、#A0 #A1 の両フィンガーとも通常に演奏させた場合を図解すると以下の様になります。
#A0 音出(1)------------音止(1) 音出(2)--------------音止(2)
#A1 音出(3)------------音止(3) 音出(4)------音止(4)
ここで、#A0だけフォーカスして #A1を「なんちゃってミュート」しますと、
#A0 音出(1)------------音止(1) 音出(2)--------------音止(2)
#A1 音止(3) 音止(4)
となります。
この時、音止(3)が、音出(2)の音を止めてしまうのです。 この状況はMIDI用語で「多重ノートON」という現象であり、音源によって処理の仕方が異なるのですが、 出ている音の数を「音止」が1つずつ減らしていく、という制御が一般的の様です。 音出(2)の相手は音止(2)であって、音止(3)じゃないだろうが! と叫びたくなる所ですが、MIDIデータのフォーマットは、 残念ながら音出と音止の対を管理できない仕様になっています。 また、フィンガーという概念もありません。あるのはメンバーだけです。 という訳で、音止(3)が、音出(2)の音を止めてしまうのです。
むろん音出と音止の音程が違えば、それは明らかに対では無いことがMIDI音源にも判るので、 その時は、こういったことは起きません。 それが証拠に、以下の様な場合は症状は出ないと思います。
*FING"x1 " @A P72 #A1 p^i10cc #A2 dd
なお、Museは同時刻の音出と音止があった場合、先に全ての音止を送信してから、 間髪入れず音出を送るように工夫しています。 よって、pコマンドを使わないと、音止(1)→音止(3)→音出(2)という順序になり、 音止(3)は止めるべき相手がいないため、症状が出ないことになります。
また、MIDIエクスポートでは、ミュート指定されているメンバーやフィンガーは、 音出も音止も出力しないようにしてあります。
|