fix: detect Midi/Bridge nodes using mode2 (port-derived direction)

Midi/Bridge nodes have media.class = "Midi/Bridge" with no Source/Sink/
Input/Output keyword, so mode stays PortMode::None. mode2 is derived from
actual port directions and correctly reflects Output for bridge nodes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
joren
2026-04-06 02:35:12 +02:00
parent 9231c10429
commit ac35c13630

View File

@@ -118,12 +118,16 @@ void MidiMapper::refresh() {
auto snap = m_engine.snapshot(); auto snap = m_engine.snapshot();
auto &pw = m_engine.pwData(); auto &pw = m_engine.pwData();
// Identify MIDI source nodes (Output or Duplex mode, Midi type) // Identify MIDI source nodes.
// Use mode2 (derived from actual port directions) rather than mode (from
// media.class string) because Midi/Bridge nodes have mode=None but still
// have real output ports and must be captured.
std::vector<std::pair<uint32_t, std::string>> midi_sources; std::vector<std::pair<uint32_t, std::string>> midi_sources;
for (auto &n : snap.nodes) { for (auto &n : snap.nodes) {
if (!n.ready) continue; if (!n.ready) continue;
bool is_midi = (n.node_type & NodeType::Midi) != NodeType::None; bool is_midi = (n.node_type & NodeType::Midi) != NodeType::None;
bool is_source = (n.mode & PortMode::Output) != PortMode::None; bool is_source = (n.mode & PortMode::Output) != PortMode::None ||
(n.mode2 & PortMode::Output) != PortMode::None;
if (is_midi && is_source) if (is_midi && is_source)
midi_sources.emplace_back(n.id, n.name); midi_sources.emplace_back(n.id, n.name);
} }