{"id":13072,"date":"2026-03-16T18:13:28","date_gmt":"2026-03-16T16:13:28","guid":{"rendered":"https:\/\/store.algosyntax.com\/?post_type=asx-lms-tutorial-cpt&#038;p=13072"},"modified":"2026-04-08T23:24:20","modified_gmt":"2026-04-08T21:24:20","slug":"vst-audio-controlling-vst-parameters-from-ue5-gameplay-code","status":"publish","type":"documentation","link":"https:\/\/store.algosyntax.com\/documentation\/vst-audio-controlling-vst-parameters-from-ue5-gameplay-code\/","title":{"rendered":"VST Audio | Controlling VST Parameters from UE5 Gameplay Code"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"13072\" class=\"elementor elementor-13072\" data-elementor-post-type=\"documentation\">\n\t\t\t\t<div class=\"elementor-element elementor-element-01f3723 e-flex e-con-boxed e-con e-parent\" data-id=\"01f3723\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-39a5a41 elementor-widget elementor-widget-heading\" data-id=\"39a5a41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">VST Audio | Controlling VST Parameters from UE5 Gameplay Code<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70fe1c7 elementor-widget elementor-widget-text-editor\" data-id=\"70fe1c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>In this tutorial we&#8217;ll cover meatasound driven VST audio plugins from gameplay code through Blueprints or C++ from the GameThread.<\/p><p data-start=\"1046\" data-end=\"1139\">A common requirement is <strong data-start=\"1070\" data-end=\"1125\">changing VST parameters dynamically during gameplay<\/strong>. For example:<\/p><ul data-start=\"1141\" data-end=\"1343\"><li data-section-id=\"15ungks\" data-start=\"1141\" data-end=\"1198\"><p data-start=\"1143\" data-end=\"1198\">Adjusting a filter cutoff when the player enters a cave<\/p><\/li><li data-section-id=\"997u5g\" data-start=\"1199\" data-end=\"1241\"><p data-start=\"1201\" data-end=\"1241\">Increasing distortion when health is low<\/p><\/li><li data-section-id=\"hopzo7\" data-start=\"1242\" data-end=\"1288\"><p data-start=\"1244\" data-end=\"1288\">Controlling reverb based on environment size<\/p><\/li><li data-section-id=\"1pxe8t\" data-start=\"1289\" data-end=\"1343\"><p data-start=\"1291\" data-end=\"1343\">Synchronizing effect parameters with gameplay events<\/p><\/li><\/ul><p data-start=\"1345\" data-end=\"1435\">This tutorial explains how to control <strong data-start=\"1383\" data-end=\"1434\">VST plugin parameters from Unreal gameplay code<\/strong>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d250bd elementor-widget elementor-widget-button\" data-id=\"5d250bd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/store.algosyntax.com\/marketplace\/unreal-engine\/vst-audio\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Download UE5 VST Audio  Plugin<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-40806d8 e-flex e-con-boxed e-con e-parent\" data-id=\"40806d8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5669cf9 elementor-widget elementor-widget-heading\" data-id=\"5669cf9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Example Asset: SingleVstEffectsMetasound<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5176ff8 elementor-widget elementor-widget-text-editor\" data-id=\"5176ff8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"618\" data-end=\"704\">As at Vst Audio v0.8 there is an example metasound you can find at the below path to get started.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e3bcaf elementor-widget elementor-widget-code-highlight\" data-id=\"5e3bcaf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>\/VstAudio\/VstEffectsDemos\/Metasounds\/MS_SingleVstEffectsMetasound<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27971a5 elementor-widget elementor-widget-image\" data-id=\"27971a5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1387\" height=\"879\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/marketplace\/unreal-engine\/vst-audio\/examplemetasoundvsteffects.jpg\" class=\"attachment-large size-large wp-image-13096\" alt=\"SingleVstEffectsMetasound\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da1e541 elementor-widget elementor-widget-text-editor\" data-id=\"da1e541\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"807\" data-end=\"868\">This MetaSound is configured with the following signal chain:<\/p><ul data-start=\"870\" data-end=\"996\"><li data-start=\"870\" data-end=\"887\"><p data-start=\"872\" data-end=\"887\">Stereo Output<\/p><\/li><li data-start=\"888\" data-end=\"918\"><p data-start=\"890\" data-end=\"918\">Wave Player (audio source)<\/p><\/li><li data-start=\"919\" data-end=\"944\"><p data-start=\"921\" data-end=\"944\">VST Audio Effect Node<\/p><\/li><li data-start=\"945\" data-end=\"996\"><p data-start=\"947\" data-end=\"996\">Output connected to the MetaSound Source Output<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c2e97bf e-flex e-con-boxed e-con e-parent\" data-id=\"c2e97bf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a215bd1 elementor-widget elementor-widget-heading\" data-id=\"a215bd1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Tagging VST Instances In The Metasound<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6a1e7b elementor-widget elementor-widget-text-editor\" data-id=\"c6a1e7b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1241\" data-end=\"1288\">In order to locate and identify VST Instances you wish to control from gameplay code, you need to tag the Vst Instance&#8217;s node with a unique &#8216;tag&#8217; or string. You can use whatever unique name\/label you wish but this first step is important. Click the Vst Node and in the details panel fill in the &#8220;Vst Instance Tag&#8221; field.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dd462d5 elementor-widget elementor-widget-image\" data-id=\"dd462d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1092\" height=\"826\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/marketplace\/unreal-engine\/vst-audio\/vst-instance-tag.jpg\" class=\"attachment-large size-large wp-image-13097\" alt=\"Tagging Vst Instances in metasounds UE5\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99a3a2d elementor-widget elementor-widget-text-editor\" data-id=\"99a3a2d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3 data-section-id=\"16uefym\" data-start=\"3114\" data-end=\"3131\">Tagging rules<\/h3><p data-start=\"3133\" data-end=\"3178\">The rules in the article are straightforward:<\/p><ul data-start=\"3180\" data-end=\"3543\"><li data-section-id=\"1cl1st1\" data-start=\"3180\" data-end=\"3259\"><p data-start=\"3182\" data-end=\"3259\">each VST MetaSound node should have a unique tag within that MetaSound asset,<\/p><\/li><li data-section-id=\"lq5pb2\" data-start=\"3260\" data-end=\"3340\"><p data-start=\"3262\" data-end=\"3340\">if two nodes use the same tag, the first one will be returned during requests,<\/p><\/li><li data-section-id=\"1jtd7wg\" data-start=\"3341\" data-end=\"3414\"><p data-start=\"3343\" data-end=\"3414\">if a node is not tagged, it cannot be retrieved from Blueprints or C++,<\/p><\/li><li data-section-id=\"1vekuv1\" data-start=\"3415\" data-end=\"3543\"><p data-start=\"3417\" data-end=\"3543\">tagging is only required when you intend to access that VST instance from gameplay code.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-28f2ada e-flex e-con-boxed e-con e-parent\" data-id=\"28f2ada\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dc8c5da elementor-widget elementor-widget-heading\" data-id=\"dc8c5da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Vst Instance Handles for the VST Instance from blueprints<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d03fb55 elementor-widget elementor-widget-text-editor\" data-id=\"d03fb55\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1241\" data-end=\"1288\">Assuming you have an audio component that has our metasound set as its sound , its now time to query it for the Vst Instances it uses from blueprints (or c++).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-31758b8 elementor-widget elementor-widget-image\" data-id=\"31758b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1729\" height=\"844\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/marketplace\/unreal-engine\/vst-audio\/getting-vst-instance-handle.jpg\" class=\"attachment-large size-large wp-image-13095\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a525f73 elementor-widget elementor-widget-text-editor\" data-id=\"a525f73\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1241\" data-end=\"1288\">The VstHandles Subsystem will create VST handles for Vst Instances in any metasounds. Vst Handles are simply weak pointer utility classes to the actual Vst Instance in the metasound. They won&#8217;t keep the instance alive or control its lifetime but they&#8217;ll help you control the instance while its alive. If the instance dies that&#8217;s still fine, handles account for this , you can dump them anytime or renew what they point to.<br \/>The function to call on the subsystem is &#8220;Request Handle for Vst Instance&#8221; , which will give you a &#8220;handle&#8221; to the instance. This function requires the &#8220;tag&#8221; you added to the VST node in step 1.<\/p><p data-start=\"1241\" data-end=\"1288\">With\u00a0 that handle you can issue Parameter commands to the Vst Instance (while its alive). Generally you you should assume an instance is alive if the metasound its sitting in is alive or playing&#8230;.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-423a947 e-flex e-con-boxed e-con e-parent\" data-id=\"423a947\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4b07665 elementor-widget elementor-widget-heading\" data-id=\"4b07665\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Issuing Parameter commands To VST in UE5<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db1f45c elementor-widget elementor-widget-text-editor\" data-id=\"db1f45c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1241\" data-end=\"1288\">Once you have a valid handle to a VST Instance, you can issue parameter commads, let get value or set value on the VST Instance.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37cfffb elementor-widget elementor-widget-image\" data-id=\"37cfffb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"997\" height=\"596\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/marketplace\/unreal-engine\/vst-audio\/vst-setting-parameters-through-handles.jpg\" class=\"attachment-large size-large wp-image-13094\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e1ee01 elementor-widget elementor-widget-text-editor\" data-id=\"4e1ee01\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1241\" data-end=\"1288\">If the instance is not valid, that&#8217;s still fine, nothing will happen and the program will not crash, if its valid the command will be applied. For sanity you can check for validity before issuing commands.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"featured_media":0,"template":"elementor_header_footer","categories":[129,130],"tags":[131],"class_list":["post-13072","documentation","type-documentation","status-publish","hentry","category-unreal-engine","category-vst-audio","tag-audio","entry"],"acf":[],"_links":{"self":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/documentation\/13072","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/documentation"}],"about":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/types\/documentation"}],"version-history":[{"count":2,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/documentation\/13072\/revisions"}],"predecessor-version":[{"id":13137,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/documentation\/13072\/revisions\/13137"}],"wp:attachment":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/media?parent=13072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/categories?post=13072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/tags?post=13072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}