OSDN Ticket Archive


Ticket #39805

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

登録: 2019-11-28 01:23 最終更新: 2019-12-01 01:33

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

詳細

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

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

  • #39271 MIDIポート二重選択

チケットの履歴

2019-11-28 01:23 更新者: yknk
  • 新しいチケット "iOS版 MIDIデバイスの識別方法を変更" が作成されました
2019-11-30 11:49 更新者: yknk
コメント

対策方針

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

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

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

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

  • 表示名(kMIDIPropertyDisplayName)

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

2019-11-30 11:49 更新者: yknk
コメント

対策概要

設定ビューの変更

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

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

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

2019-11-30 11:50 更新者: yknk
コメント

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

MIDITrailApp::setPortDev

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

MIDITrailApp::setMonitorPortDev:scene

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

2019-11-30 11:50 更新者: yknk
コメント

対策2:MIDI入力デバイス選択ビュークラス

MTSettingMIDIInDevViewCtrl

メンバにデバイス表示名称用キー文字列 m_PortDevDisplayNameKey を追加。

MTSettingMIDIInDevViewCtrl::setPortKey:portLabel

メンバのデバイス表示名称用キー文字列の初期化処理を追加。

MTSettingMIDIInDevViewCtrl::makeDevCellForIndexPath

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

MTSettingMIDIInDevViewCtrl::onSelectDevCellForIndexPath:tableView

デバイス選択時に表示名称を保存する処理を追加。

2019-11-30 11:50 更新者: yknk
コメント

対策3:MIDI出力デバイス選択ビュークラス

MTSettingMIDIOutDevViewCtrl

メンバにデバイス表示名称用キー文字列 m_PortDevDisplayNameKey を追加。

MTSettingMIDIOutDevViewCtrl::setPortKey:portLabel

メンバのデバイス表示名称用キー文字列の初期化処理を追加。

MTSettingMIDIOutDevViewCtrl::makeDevCellForIndexPath

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

MTSettingMIDIOutDevViewCtrl::onSelectDevCellForIndexPath:tableView

デバイス選択時に表示名称を保存する処理を追加。

2019-11-30 11:50 更新者: yknk
コメント

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

SMInDevCtrl::SetDevForPort

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

SMOutDevCtrl::SetDevForPort

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

SMOutDevCtrlEx::SetDevForPort

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

(編集済, 2019-11-30 11:51 更新者: yknk)
2019-11-30 11:52 更新者: 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

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

SMOutDevCtrlEx::SetDevForPort

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

2019-11-30 11:52 更新者: yknk
コメント

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

SMSequencer

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

SMSequencer::SMSequencer

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

SMSequencer::SetPortDev

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

SMSequencer::ClosePortDevAll

全ポートに対応するデバイスを閉じるメソッドを追加。

SMSequencer::_ClearPortInfo

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

SMSequencer::_OpenMIDIOutDev

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

2019-11-30 11:52 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました
2019-12-01 01:33 更新者: yknk
  • 詳細が更新されました

添付ファイルリスト

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