Skip to content

Commit fd4117b

Browse files
committed
Filter by channel prop, not voice, in midiunpack
1 parent 3a1c505 commit fd4117b

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

runtime/elem/builtins/MIDI.h

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,20 @@ namespace elem
128128

129129
int setProperty(std::string const& key, js::Value const& val) override
130130
{
131-
// TODO: Filter by channel too?
132-
if (key == "voice") {
131+
if (key == "channel") {
133132
if (!val.isNumber())
134133
return ReturnCode::InvalidPropertyType();
135134

136-
auto v = static_cast<size_t>(std::max(0.0, (js::Number) val));
137-
targetVoiceIndex.store(v);
138-
filterByVoice.store(true);
135+
auto v = static_cast<int32_t>(std::max(0.0, (js::Number) val));
136+
channelFilter.store(v);
139137
}
140138

141139
return GraphNode<FloatType>::setProperty(key, val);
142140
}
143141

144142
void process (BlockContext<FloatType> const& ctx) override {
145143
size_t framesProcessed = 0;
146-
auto voiceFilter = filterByVoice.load();
147-
auto voiceIndex = targetVoiceIndex.load();
144+
int32_t const targetChannel = channelFilter.load();
148145

149146
ctx.inputEvents.template processEventsOfType<MidiEvent>([&](size_t time, MidiEvent const& event) {
150147
if (time >= ctx.numSamples)
@@ -153,7 +150,7 @@ namespace elem
153150
if (!event.message.isNoteOn() && !event.message.isNoteOff())
154151
return;
155152

156-
if (voiceFilter && (voiceIndex != event.message.getChannel0to15()))
153+
if ((targetChannel >= 0) && (targetChannel != static_cast<int32_t>(event.message.getChannel0to15())))
157154
return;
158155

159156
auto framesRemaining = ctx.numSamples - framesProcessed;
@@ -179,9 +176,7 @@ namespace elem
179176
}
180177
}
181178

182-
std::atomic<size_t> targetVoiceIndex = 0;
183-
std::atomic<bool> filterByVoice = false;
184-
179+
std::atomic<int32_t> channelFilter = -1;
185180
FloatType noteFreq = 0;
186181
FloatType noteVelocity = 0;
187182
};

0 commit comments

Comments
 (0)