任务单 #45971

macOS版 一時停止時と停止時にノートオフを送信、再開時にノートオンを送信

开放日期: 2022-10-25 23:23 最后更新: 2022-10-27 00:17

报告人:
属主:
状态:
关闭
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
Fixed
文件:

Details

演奏の一時停止または停止が指示されたとき、音を止めるため、次のメッセージをすべてのチャンネルに送信している。

  • オールノートオフ (CC# 123)
  • オールサウンドオフ (CC# 120)

しかし、これらのメッセージに対応していないMIDI音源がありうるため、一時停止または停止が指示されたとき、 ノートオンを送信した後でノートオフをまだ送信していな状態のノートは、個別にノートオフを送信する。

また演奏を再開するとき、ノートオフを送信したノートについて、再びノートオンを送信することで、 一時停止したときの状態をより正確に再現する。

補足

  • GMシステム・レベル1:オールノートオフは必要条件とされているが、オールサウンドオフは必要条件に含まれていない。
  • GMシステム・レベル2:オールノートオフとオールサウンドオフはどちらも必須とされている。

任务单历史 (3/4 Histories)

2022-10-25 23:23 Updated by: yknk
  • New Ticket "macOS版 一時停止時と停止時にノートオフを送信、再開時にノートオンを送信" created
2022-10-25 23:26 Updated by: yknk
评论

対策方針

シーケンサクラスにて、ポート(0-5)とチャンネル(0-15)ごとに、すべてのノート(0-127)について、 オン/オフの状態(ベロシティ)を保持する。 演奏の一時停止または停止が指示されたときは、オン状態のすべてのノートについて、ノートオフを送信する。 演奏の再開が指示されたときは、ノートオフを送信したすべてのノートについて、ノートオンを送信する。 このとき、元々ノートオンしたときのベロシティを指定する。

スキップ処理においても、スキップ開始時にノートオフを送信、スキップ完了時にノートオンを送信する。

2022-10-25 23:26 Updated by: yknk
评论

対策

SMSequencer

  • メンバにノートベロシティ配列m_NoteVelocityを追加。

SMSequencer::SMSequencer

  • ノートベロシティ配列の初期化処理を追加。

SMSequencer::Play

  • 演奏再開時にノートONを送信する処理を追加。

SMSequencer::_SendMIDIEvent

  • MIDIイベント送信時に、ノートのON/OFFをノートベロシティ配列に反映する処理を追加。

SMSequencer::ProcUserRequest

  • 一時停止、停止、スキップを指示されたときに、ノートOFFを送信する処理を追加。

SMSequencer::_SendNoteOffForActiveNotes

  • アクティブノートにノートOFFを送信するメソッドを追加。

SMSequencer::_SendNoteOnForActiveNotes

  • アクティブノートにノートONを送信するメソッドを追加。

MSequencer::_InitializeParamsOnPlayStart

  • ノートベロシティ配列の初期化処理を追加。

SMSequencer::_ProcSkip

  • スキップ完了時にノートONを送信する処理を追加。
2022-10-27 00:17 Updated by: yknk
  • 状态 Update from 开启 to 关闭
  • 处理结果 Update from to Fixed

Attachment File List

No attachments

编辑

Please login to add comment to this ticket » 登录名