Setting Up a Blueprint MIDI Manager with 4.14 version of MIDI Device Support Plugin

Can anybody help me with getting a functioning polyphonic synth working.

I naively assumed you just needed to have an NoteOff and NoteOn function hooked like the picture shows, and check the “Enable polyphony” in the Make Modular SynthPreset object to get it to work.

It works in the sense that If I break link to NoteOff then I get polyphony but the notes never shut off (except if I ‘hardcode’ the duration) …, but if I keep the NoteOff hooked no sound comes out.

What is the trick to getting polyphony working?

All the best.

For NoteOff to work, you must trigger a NoteOff event with the same Note value. So if you NoteOn 83, then you must NoteOff 83 for 83 to end.

This is why I use a SWITCH statement.

EDIT: I am confused by your implementation where you Note On and Note Off immediately afterward.

Your graph will execute fully each time you give it some MIDI event. You only want to NoteOn when you have a NoteOn event, you only want to NoteOff when you have a NoteOff event.

Beautiful… Now it works as intended :slight_smile: The Switch does the trick.

I’m very new to Blueprints , and slowly getting into things like how to discern order of execution and such

Thanks a bunch.

A quick question about the MIDIControlID output. When I play note 62 and print it out I get something like 62.000000 - but if I take (float note ) into my function and try to cast it as an int:

int32 IntNumb = (int32) note;

… then I get 0.000000 (no matter what note I play)

(also if i do an unqualified int)

I guess it is a floating point number to allow for pitch bending, but I am going to be gathering musical phrases in arrays and analyzing them and think it is unnecessary to work with the notes as floats, so I am wondering why it isn’t casting properly? Or do you recommend just skipping casting it and work with floating point numbers?

I think the original intention with the Synthesizer was to work with pitch as a float for pitch bending purposes–but in reality, pitch bend should just be done with pitch bend because a MIDI style voice manager necessarily must identify the voice ID by pitch (very keyboard oriented).

Thus, it really SHOULD be an Int, but at the moment it’s a Float.

Hi

There is a whole bunch of stuff where I would rather just work in straight code than work with blueprints, but I can’t find much documentation on how, for example, to get current NoteOn and NoteOff note or velocity in C++

I am going to be analyzing pressed note arrays compared to 600 scales and such, and I feel blueprints get overly convoluted very quickly if you are doing anything more complex than simple classes.

Is there any documentation I can take a look at?

Thanks.

Hi EidurArnason!

Check out MIDIDeviceManager.h and MIDIDeviceManager.cpp (located in Engine\Plugins\Runtime\MIDIDevice\Source\MIDIDevice)

It wraps portmidi and it does so fairly minimally, so you shouldn’t have any trouble figuring out what you want from it. At the very least, you should be able to access its public functions from code!

Thanks :slight_smile:

Yeah, that is pretty interesting)

I’ve got my BP working I get the following debug:

Loop MIDI is a virtual midi device to send data straight from ableton turning ableton into my “controller”

I want to have the data from ableton trigger an audio sample in unreal engine.

How do I tell my script to listen on port 1?
It seems the script is recognizing ports but not picking a certain one.

Sorry absolute noob coming from only ableton/C4D

Hi ! If you’ve copied my script, you’ll should see an area where you can indicate the MIDI Port by name via String input. So you’ll just enter the port name on your MIDI BP, so that it assigns delegates to input on that device.

Hey , What variable name exactly do I enter the string into? do i just enter a numerical value or the whole line of text? and do I input this information in the side bar when the Midi BP is selected?

This part of the Blueprint, from the beginning of the directions:

It compares the user entered MIDI Device Name with all of the MIDI Devices and when there’s a match, it says this, here, this one, that’s the MIDI Device I want you to accept input from.

After about 30-seconds- 1min (or around timestamp 60,000) Unreal just stops receiving midi from ableton every time? Ableton is sending I don’t seem to understand why

I suggest using something like MIDI Ox to help you analyze MIDI connectivity issues. Perhaps some app is taking control of your MIDI device.

Hey could you go into more detail about what you did to get the CSV File to play like a sequencer?

Hi !

Basically, every tick I would get the delta time, and then map that to MIDI ticks, and then read off the top of the Data Table until I’d reached a MIDI Event that was too far, I would stack all the other events I’d read into an Array of MIDI-style BP Structs, and then I would fire off all of the Events.

Great! What software did you use to go from midi -> CSV?

midi2csv :slight_smile:

Hi !! It’s pretty amazing what you do, but I have a big issue with the “Get All Actors with Interface” Interface I have to choose. I really don’t understand where the “MIDI Listener” Interface comes from. I’m a complete noob, by the way. Thanks for your answer !!