OSDN Ticket Archive


Ticket #41903

macOS版 MIDIデバイスの識別方法を変更

登録: 2021-04-01 22:51 最終更新: 2021-04-02 23:12

報告者:
yknk
担当者:
yknk
チケットの種類:
機能リクエスト
状況:
完了
コンポーネント:
MIDITrail Ver.1.3.x for macOS
マイルストーン:
Version 1.3.2 for macOS (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

MIDIデバイスを一意に識別する方法を変更する。 同一メーカー、同一モデル、同一エンドポイント名のMIDIデバイスが複数存在する場合でも、 ユーザがMIDI IN,MIDI OUTで選択したデイバイスを一意に識別できるようにする。

次のチケットで報告された問題の対策。

  • #40982 MIDIポート二重選択(macOS)

iOS版では以下のチケットで対策済みのため、これをmacOS版にマージする。

  • #39805 iOS版 MIDIデバイスの識別方法を変更

チケットの履歴

2021-04-01 22:51 更新者: yknk
  • 新しいチケット "macOS版 MIDIデバイスの識別方法を変更" が作成されました
2021-04-01 22:52 更新者: yknk
コメント

対策方針

現状のMIDITrailは、ユーザが選択したMIDIデバイスの以下のプロパティを保存して、MIDIデバイスを選択するときのキーにしている。

  • メーカー名(kMIDIPropertyManufacturer)
  • モデル(kMIDIPropertyModel)
  • エンドポイント名(kMIDIPropertyName)

しかし、同一メーカー、同一モデル、同一エンドポイント名のMIDIデバイスが複数存在する場合、 MIDITrailは最初にプロパティが一致したデバイスを、ユーザが選択したデバイスとして識別することになる。

ユーザが選択したMIDIデバイスを確実に識別できるようにするため、デバイスの表示名も検索キーとする。

  • 表示名(kMIDIPropertyDisplayName)

ただしMIDITrailは、これまでのバージョンでユーザが選択したデバイスの表示名を保存していなかったため、 表示名が保存されていなかった場合は、従来と同じ方法で(表示名を利用せずに)MIDIデバイスを識別する。

2021-04-01 22:52 更新者: yknk
コメント

対策概要

MIDI入力/出力設定ダイアログの変更

MIDI OUT, MIDI INのデバイス選択時に、デバイス表示名を保存する。

シーケンサとモニタの変更

ポートに対応するMIDIデバイスを指定するメソッドで、表示名も指定できるようにI/Fを追加する。 表示名が指定された場合は、表示名も一致するMIDIデバイスを選択する。 表示名が指定されなかった場合は、表示名を利用せずにMIDIデバイスを選択する。

2021-04-01 22:52 更新者: yknk
コメント

対策1:MIDITrail アプリケーションクラス

MIDITrailApp::_SetPortDev

シーケンサに対して、ポートに対応するMIDIデバイスを指定する時、引数にデバイス表示名を追加。

MIDITrailApp::_SetMonitorPortDev

ライブモニタに対して、MIDIデバイスを指定する時、引数にデバイス表示名を追加。

2021-04-01 22:52 更新者: yknk
コメント

対策2:MIDI入力設定ダイアログクラス

MTMIDIINCfgDlg::initPopUpButton

選択中のデバイスを識別する処理において、表示名称の一致も判定するように修正。 ただし表示名称が保存されていない場合は、従来通りの判定とする。

MTMIDIINCfgDlg::savePortCfg

ポート設定保存時に表示名称を保存する処理を追加。

2021-04-01 22:53 更新者: yknk
コメント

対策3:MIDI出力設定ダイアログクラス

MTMIDIOUTCfgDlg::initPopUpButton

選択中のデバイスを識別する処理において、表示名称の一致も判定するように修正。 ただし表示名称が保存されていない場合は、従来通りの判定とする。

MTMIDIOUTCfgDlg::savePortCfg

ポート設定保存時に表示名称を保存する処理を追加。

2021-04-01 22:53 更新者: yknk
コメント

対策4:MIDIデバイス制御クラス

SMInDevCtrl::SetDevForPort

メソッドの引数にデバイス表示名称を追加。 デバイス検索処理で、指定された表示名の一致も判定するように修正。 ただし表示名称が未指定の場合は、従来通りの判定とする。

SMOutDevCtrl::SetDevForPort

メソッドの引数にデバイス表示名称を追加。 デバイス検索処理で、指定された表示名の一致も判定するように修正。 ただし表示名称が未指定の場合は、従来通りの判定とする。

SMOutDevCtrlEx::SetDevForPort

メソッドの引数にデバイス表示名称を追加。 出力ポートのデバイス設定で指定するパラメータに、デバイス表示名を追加。

2021-04-01 22:53 更新者: yknk
コメント

対策5:ライブモニタクラス

SMLiveMonitor

メンバにMIDI INデバイス表示名 m_pInPortDevDisplayName とMIDI OUTデバイス表示名 m_pOutPortDevDisplayName を追加。

SMLiveMonitor::SMLiveMonitor

追加したメンバの初期化処理を追加。(MIDI INデバイス表示名、MIDI OUTデバイス表示名)

SMLiveMonitor::SetInPortDev

メソッドの引数にデバイス表示名称を追加。 メンバに表示名称を保持する処理を追加。

SMLiveMonitor::SetOutPortDev

メソッドの引数にデバイス表示名称を追加。 メンバに表示名称を保持する処理を追加。

SMLiveMonitor::_ClearPortInfo

追加したメンバの破棄処理を追加。(MIDI INデバイス表示名、MIDI OUTデバイス表示名)

SMLiveMonitor::_OpenMIDIDev

出力ポートと入力ポートのデバイスを開くときに指定するパラメータに、デバイス表示名を追加。

2021-04-01 22:53 更新者: yknk
コメント

対策6:シーケンサクラス

SMSequencer

メンバにデバイス表示名称リスト m_PortDevDisplayNameList を追加。

SMSequencer::SMSequencer

デバイス表示名称リストの初期化処理を追加。

SMSequencer::SetPortDev

メソッドの引数にデバイス表示名称を追加。 メンバに表示名称を保持する処理を追加。

SMSequencer::_ClearPortInfo

デバイス表示名称リストの破棄処理を追加。

SMSequencer::_OpenMIDIOutDev

出力ポートのデバイスを開くときに指定するパラメータに、デバイス表示名を追加。

2021-04-02 23:12 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

添付ファイルはありません