MCPcopy Create free account
hub / github.com/DISTRHO/DPF / convert

Method convert

distrho/src/DistrhoPluginVST3.cpp:345–414  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

343 }
344
345 uint32_t convert(MidiEvent midiEvents[kMaxMidiEvents]) const noexcept
346 {
347 uint32_t count = 0;
348
349 for (const InputEvent* event = firstEvent; event != nullptr; event = event->next)
350 {
351 MidiEvent& midiEvent(midiEvents[count++]);
352 midiEvent.frame = event->sampleOffset;
353
354 const InputEventStorage& eventStorage(*event->storage);
355
356 switch (eventStorage.type)
357 {
358 case NoteOn:
359 midiEvent.size = 3;
360 midiEvent.data[0] = 0x90 | (eventStorage.noteOn.channel & 0xf);
361 midiEvent.data[1] = eventStorage.noteOn.pitch;
362 midiEvent.data[2] = std::max(0, std::min(127, d_roundToIntPositive(eventStorage.noteOn.velocity * 127)));
363 midiEvent.data[3] = 0;
364 break;
365 case NoteOff:
366 midiEvent.size = 3;
367 midiEvent.data[0] = 0x80 | (eventStorage.noteOff.channel & 0xf);
368 midiEvent.data[1] = eventStorage.noteOff.pitch;
369 midiEvent.data[2] = std::max(0, std::min(127, d_roundToIntPositive(eventStorage.noteOff.velocity * 127)));
370 midiEvent.data[3] = 0;
371 break;
372 /* TODO
373 case SysexData:
374 break;
375 */
376 case PolyPressure:
377 midiEvent.size = 3;
378 midiEvent.data[0] = 0xA0 | (eventStorage.polyPressure.channel & 0xf);
379 midiEvent.data[1] = eventStorage.polyPressure.pitch;
380 midiEvent.data[2] = std::max(0, std::min(127, d_roundToIntPositive(eventStorage.polyPressure.pressure * 127)));
381 midiEvent.data[3] = 0;
382 break;
383 case CC_Normal:
384 midiEvent.size = 3;
385 midiEvent.data[0] = 0xB0 | (eventStorage.midi[0] & 0xf);
386 midiEvent.data[1] = eventStorage.midi[1];
387 midiEvent.data[2] = eventStorage.midi[2];
388 break;
389 case CC_ChannelPressure:
390 midiEvent.size = 2;
391 midiEvent.data[0] = 0xD0 | (eventStorage.midi[0] & 0xf);
392 midiEvent.data[1] = eventStorage.midi[1];
393 midiEvent.data[2] = 0;
394 break;
395 case CC_Pitchbend:
396 midiEvent.size = 3;
397 midiEvent.data[0] = 0xE0 | (eventStorage.midi[0] & 0xf);
398 midiEvent.data[1] = eventStorage.midi[1];
399 midiEvent.data[2] = eventStorage.midi[2];
400 break;
401 case UI_MIDI:
402 midiEvent.size = 3;

Callers 2

png2rgbaFunction · 0.80
processFunction · 0.80

Calls 1

d_roundToIntPositiveFunction · 0.85

Tested by

no test coverage detected