MIDIポート二重選択
midimittrを利用しているデバイス(iPhone, iPad, iPod touch)について、 機種が全く同じものが複数存在すると、ご指摘の事象が発生します。
現状のMIDITrailではこの問題を回避できません。異なる機種を利用してください。 例えばiPhone6を2台利用すると発生します。iPhone6とiPhone7であれば発生しません。
MIDITrail側の修正は検討してみます。
運用で回避する事に致します。
iOS版とmacOS版のMIDITrailは、CoreMIDIデバイスを一意に識別するため、 デバイスの3つのプロパティ(Manufacturer, Model, Name)を参照している。
midimittrの仮想デバイスは、これら3つのプロパティを次のように返している。
kMIDIPropertyManufacturer = "Apple Inc." kMIDIPropertyModel = "iPhone11,8" <- iPhoneの内部名(製品番号)と思われる(*1) kMIDIPropertyName = "Bluetooth"(*1)#iPhone XRの内部名(製品番号)は"iPhone11,8"。
このためiPhoneの内部名(製品番号)が同じだと、midimittrが作成する仮想デバイスを MIDITrailは一意に識別できなくなる。
midimittrで、kMIDIPropertyNameの値をユーザが編集できるなら問題を回避できるが、midimittrにそのような機能はない模様。 macOSのAudio MIDI設定(MIDIスタジオ)は、kMIDIPropertyNameを編集できる。 midimittrは、kMIDIPropertyDisplayNameの値をユーザが編集できるので、これをデバイス識別に利用するしかなさそう。
なお、同じ機種でも内部名が異なる場合もあり、このときは問題が起きないと思われる。
内部名についての参考ページ
iPhone iPad 端末での 一般名と内部名の対応表 https://qiita.com/YumaInaura/items/31838a72678fa09d7e19
解説ありがとうございます。
対応されるか不明ですが、midimittrに対応依頼を出してみました。
なんらかのアクションがあった場合、共有させていただきます。
midimittrから回答を貰えました。
残念ながら、kMIDIPropertyName含めapple由来の値はmidimittr側ではコントロール出来ない。
表示名で識別しないとアプリは混乱する事になるだろう。
との事で同じ見解のようです。
いずれにしてもA・Bポートには違う機材を割り当てて回避したいと思います。
ありがとうございました。
ーーーー
midimittr追伸を追記
本来、機器は名前ではなくIDで識別されるべきなのは間違いない。
以下のゆるいドキュメントがもしかしたら役立つかもしれない。
https://developer.apple.com/documentation/coremidi/1495191-midiobjectfindbyuniqueid
tsasさん、連絡ありがとうございます。 次バージョン以降で対応を考えてみます。
以下のチケッットにて対策し、MIDITrail Ver.1.3.1 for iOS に適用済み。
midimittrを利用しているデバイス(iPhone, iPad, iPod touch)について、 機種が全く同じものが複数存在している場合でも、デバイスごとに異なる名前が設定(*1)されていれば、 MIDITrailから間違えずにデバイスを識別できるようにしました。(Ver.1.3.1)
MIDITrailの設定画面で、MIDI OUTのデバイスを選択しなおしてください。
(*1) midimittr の Advertise / Periperal Settings / Name
iPhone5sのMIDITrailからiPod touch 6gen同一機種2台をBLE-MIDI経由(midimittr)でそれぞれAポートBに割り当てようとすると、ひとつのPortに2台のiPodが同時にアサインされてしまう。
一方のiPod touch 6genを別の機材(例えばiPhone7)にすると正常に1デバイスのみアサインされます。(完全に同じモデルだと再現する?)