Hey man, this is awesome! We have some nodes which might help -- use the Midi To Frequency node to convert midi note values (as floats) directly into frequency values. That way you don't have to manually type in frequency values in the generators. Then just have midi notes as the input into the MetaSound that you feed directly into the sound from BP. It would significantly reduce the complexity and improve the CPU performance of your MetaSound. I'd also highly recommend thinking more systematically with the BP -- make functions, do some math on reusable code vs copy-pasting. We don't support polyphony inside a single MetaSound yet (thinking of ways we could do that) but it should be doable today with a *LOT* less nodes and complexity. I'd also highly encourage you to think in terms of midi note values (e.g. 0 to 127) vs enumerated note values (e.g. 'C4') as it will help you simplify a ton of stuff. You can get the MIDI value directly from the MIDI input and feed it to your MetaSound. If you want to do chords (poly), you can do the same thing but with a pool of audio components, each playing one MetaSound note. When the note finishes or if you need to voice steal, just push a playing audio component back to the pool of unused audio components. This is effectively how any poly system would work. I'll see if I can make a demo video showing this sometime. Oh and one more thing, the "Sound Utilities" plugin has some useful BP nodes to help with working with MIDI and music.
Great video, one tip to deal with this kind of wire problem situation, I noticed that they mostly do the same thing, from what I could see they change only the name in most cases. Try to create a pattern for the names you use (what I believe you already do), this way you could use a function that receives only the Midi ID and internally would use this ID to create the name you need to pass to the parameter. Then you would be able to simply call the function with the Id, maybe you would be able to even discard the switch you're using.
Its easier to use shapekeys that move the notes on your model just name that like the Midi Note Number. Then its just triggering the note with the same shapekeyname. No Rotator, no tree of tousend nodes. Only for the Soundgeneration you can add maybe a value to the shapekey name that setting up the pitch of the node. Setup will be like this: Shapekeyname: 051_C1 Look what key is pressed and compare it with the first 3 numbers. Make sure to convert the first 3 Numbers in to an Int Value so the 0 on the first one gets removed. On 88 Keys the maximum Midi Number is 108 so you dont need more then that. On top you have the benefit to use the Velocity as the amount of value change from the shapekey. For the soundpitch just take the everything after the 3 Numbers to set it up. Easy 😏 I hope this helps some people and makes it way easier. 😊
That would be 100% easier. Admittedly I was still very new to playing around with MetaSounds when I made this so it’s in no way shape or form optimized.
I am pretty new to using Unreal Engine, and am curious as to why you would want to use a MIDI controller in Unreal. What kind of benefits/functionality would the MIDI controller be used for? Is using a MIDI controller just like a cool feature, or does it have useful application? Awesome videos by the way, I've been learning a lot from them!
In your typical "video game" probably no real application. But as Unreal Engine advances and is used for other application, it allows developers to harness it's technology for other media outlets. For example, you could create a learning tool for teaching someone to play the piano or drums or any other instrument that there are now midi devices for.
@@TheSoundFXGuy was going to say the same thing - there is an awesome function for semitones! it's amazing : an A [440Hz] is 440*2^(0/12), an A# is 440*2^(1/12), a B is 440*2^(2/12), etc... an A an octave higher (880Hz) is 440*2^(12/12). adammonroemusic.com/blog/intervalchart.png
Hello~ I am very happy to see your video. I have successfully made my keyboard allow players to jump, but it will fail soon. What problems may occur? ( My "event Beginplay" is shared with Add Input Mapping), but in the video you seem to be using "event Beginplay" to directly connect to the midi device, thank you!
"Find all midi device info" just doesn't work anymore for some reason. I have the exact same setup using UE5.01 and nothing is printing to the screen :/ However if I use "Find MIDIDevices" it works just fine. Do you know anything about this?
Same problem, tried your method and it seems to work but half a minute after it stops receiving and I can't figure out why, I'm not disabling inputs or something. In 5EA it all worked fine
Hey man, this is awesome! We have some nodes which might help -- use the Midi To Frequency node to convert midi note values (as floats) directly into frequency values. That way you don't have to manually type in frequency values in the generators. Then just have midi notes as the input into the MetaSound that you feed directly into the sound from BP. It would significantly reduce the complexity and improve the CPU performance of your MetaSound. I'd also highly recommend thinking more systematically with the BP -- make functions, do some math on reusable code vs copy-pasting. We don't support polyphony inside a single MetaSound yet (thinking of ways we could do that) but it should be doable today with a *LOT* less nodes and complexity. I'd also highly encourage you to think in terms of midi note values (e.g. 0 to 127) vs enumerated note values (e.g. 'C4') as it will help you simplify a ton of stuff. You can get the MIDI value directly from the MIDI input and feed it to your MetaSound. If you want to do chords (poly), you can do the same thing but with a pool of audio components, each playing one MetaSound note. When the note finishes or if you need to voice steal, just push a playing audio component back to the pool of unused audio components. This is effectively how any poly system would work. I'll see if I can make a demo video showing this sometime. Oh and one more thing, the "Sound Utilities" plugin has some useful BP nodes to help with working with MIDI and music.
Thanks man. I really appreciate the in-depth insight. Such an honor to have you stop by. Really looking forward to more from your team.
You legend! Thank you :)
Great video, one tip to deal with this kind of wire problem situation, I noticed that they mostly do the same thing, from what I could see they change only the name in most cases.
Try to create a pattern for the names you use (what I believe you already do), this way you could use a function that receives only the Midi ID and internally would use this ID to create the name you need to pass to the parameter.
Then you would be able to simply call the function with the Id, maybe you would be able to even discard the switch you're using.
Great job and crazy at the end but I know sometimes is dificult not get those spaghetti jeje.
Just amazing, thanks for sharing.
Its easier to use shapekeys that move the notes on your model just name that like the Midi Note Number. Then its just triggering the note with the same shapekeyname. No Rotator, no tree of tousend nodes. Only for the Soundgeneration you can add maybe a value to the shapekey name that setting up the pitch of the node.
Setup will be like this:
Shapekeyname: 051_C1
Look what key is pressed and compare it with the first 3 numbers. Make sure to convert the first 3 Numbers in to an Int Value so the 0 on the first one gets removed. On 88 Keys the maximum Midi Number is 108 so you dont need more then that.
On top you have the benefit to use the Velocity as the amount of value change from the shapekey.
For the soundpitch just take the everything after the 3 Numbers to set it up. Easy 😏
I hope this helps some people and makes it way easier. 😊
That would be 100% easier. Admittedly I was still very new to playing around with MetaSounds when I made this so it’s in no way shape or form optimized.
I am pretty new to using Unreal Engine, and am curious as to why you would want to use a MIDI controller in Unreal. What kind of benefits/functionality would the MIDI controller be used for? Is using a MIDI controller just like a cool feature, or does it have useful application?
Awesome videos by the way, I've been learning a lot from them!
In your typical "video game" probably no real application. But as Unreal Engine advances and is used for other application, it allows developers to harness it's technology for other media outlets. For example, you could create a learning tool for teaching someone to play the piano or drums or any other instrument that there are now midi devices for.
im currently making a rougelike where to use the abilities you have to play certain chords at certain times
You don't need to switch on note, pass it to a function as a parameter.
Good to know. Thank you
@@TheSoundFXGuy was going to say the same thing - there is an awesome function for semitones! it's amazing : an A [440Hz] is 440*2^(0/12), an A# is 440*2^(1/12), a B is 440*2^(2/12), etc... an A an octave higher (880Hz) is 440*2^(12/12). adammonroemusic.com/blog/intervalchart.png
...music, with base two, is almost binary... wouldn't you say? ;-)
cool ue5 vids bro!
Thank you!
Hello~ I am very happy to see your video. I have successfully made my keyboard allow players to jump, but it will fail soon. What problems may occur? (
My "event Beginplay" is shared with Add Input Mapping), but in the video you seem to be using "event Beginplay" to directly connect to the midi device, thank you!
dang... and I thought I built the worlds largest metasound patch :D
Yours are massive and functional. I think I over complicated mine.
"Find all midi device info" just doesn't work anymore for some reason. I have the exact same setup using UE5.01 and nothing is printing to the screen :/
However if I use "Find MIDIDevices" it works just fine. Do you know anything about this?
Same problem, tried your method and it seems to work but half a minute after it stops receiving and I can't figure out why, I'm not disabling inputs or something. In 5EA it all worked fine
@@francescoulian8827 You might need to promote to variable (cache) the result, otherwise in roughly 30 seconds some things get garbage collected.
Been lookin for this loooong time.
I will subscribe your channel now