In this tutorial, I will write a new MetaSound node that performs a Doppler-Delay-based pitch shift on a real-time audio buffer.
https://dev.epicgames.com/community/learning/tutorials/KJWk/writing-a-pitch-shift-metasound-node
Thank you for this, very helpful! Iām trying to build the stub code included in that tutorial and Iāve come across two issues:
- In FVertexInterface it seems that TInputVertex has to be changed to TInputVertexModel, otherwise it throws a undefined error (Iām guessing this is an API change)
- Iām unable to compile this same stub as part of an empty custom plugin. I get these linker errors:
unresolved external symbol āclass FName const Metasound::StandardNodes::Namespaceā (?Namespace@StandardNodes@Metasound@@3VFName@@anonymous_user_31e84eb0)
unresolved external symbol āclass FName const Metasound::StandardNodes::AudioVariantā (?AudioVariant@StandardNodes@Metasound@@3VFName@@anonymous_user_31e84eb0)
These errors are shown as coming from line 1 of Intermediate\ProjectFiles\Module.MetaSoundsAmbi.cpp.obj.
MertaSoundsAmbi.cpp is the empty class that was created when I created an empty plugin with the same name, using the Plugins panel in the UE5 editor. I manually included the MetaSounds modules in the pluginās dependencies in the .Build.cs file.
It seems that I fixed the unresolved symbol errors by adding the following to my plugin module cpp file:
namespace Metasound
{
namespace StandardNodes
{
const FName Namespace = "UE";
const FName AudioVariant = "Audio";
}
...
After fixing those issues, I am still getting some unresolved externals, what is the solution?
Thanks! This fixed it for me.
Hello. Thanks for this tutorial.
I am new to the unreal engine and creating plugins, so your feedback is greatly appreciated. Building plugins with Visual Studio 2019, I am having trouble linking to many of the dependencies (i.e. cannot open source file āMetasoundExecutableOperator.hā).
To create my plugin I did the following:
- In a c++ project, I added a blank plugin.
- In the generated plugin files, I updated the .uplugin file as follows:
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"FriendlyName": "metanode",
"Description": "test node",
"Category": "Other",
"CreatedBy": "Brian",
"CreatedByURL": "",
"DocsURL": "",
"MarketplaceURL": "",
"SupportURL": "",
"CanContainContent": true,
"IsBetaVersion": false,
"IsExperimentalVersion": false,
"Installed": false,
"Modules": [
{
"Name": "metanode",
"Type": "Runtime",
"LoadingPhase": "Default"
}
],
"Plugins": [
{
"Name": "Metasound",
"Enabled": true
}
]
}
- I have also entered metasound modules in the Build.cs file:
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core",
"MetasoundGraphCore",
"MetasoundEngine",
"MetasoundFrontend",
// ... add other public dependencies that you statically link with here ...
}
);
PrivateDependencyModuleNames.AddRange(
new string[]
{
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
"MetasoundGraphCore",
"MetasoundEngine",
"MetasoundFrontend",
// ... add private dependencies that you statically link with here ...
}
);
- I copied the code presented in the tutorial into the .cpp file of my plugin. I also commented out the boiler plate class and implmentation code that appears when generating a blank plugin (i.e. class derived form IModuleInterface with virtual void methods StartupModule() and ShutdownModule() ā I am assuming this stuff is not needed for a metasound node implementation).
From my understanding, the required header files should be found based on my entries in the .uplugin and Build.cs file. But clearly I am missing somethingā¦
Did you manage to find the solution to this?
Answer for me was not using ānamespace Metasoundā incase that helps anyone else in the future.
This was a really nice tutorial and write up and video, thanks a lot.
Audio, as great as it is and important always seems to be the black sheep, wizard stuff that is hidden in the corner. (tutorials and updates as such)
Thanks again for your work on the Audio Engine, come a long way from years ago!