Multi Output Tutorial
-
Some of us recently discussed how to add multi outputs in a plugin so I offered to make a tutorial.
Multi Output Plugin Tutorial
1. Building HISE Multi Output
In order to do it, you'll have to build a multi-output version of HISE.
A. In the projucer file, add these two preprocessor definitions:
NUM_MAX_CHANNELS = XX
HISE_NUM_PLUGIN_CHANNELS = XX
'XX' being the number of outputs you need in your plugin, and it must be a multiple of 2, obviously.
I'm using the latest develop build of HISE, but noticed that the
NUM_MAX_CHANNELS = XX
preprocessor didn't work properly. I don't know if it's a bug or a problem on my end - or I was really tired at that moment...
I changed the value directly in HISE's source code.
This can be changed in the file:{HISE_FOLDER}hi_tools\Marcos.h
line (49):/** Change this value if you need more than 8 stereo channels in HISE routing. Default: 16*/ #ifndef NUM_MAX_CHANNELS #define NUM_MAX_CHANNELS XX #endif
B. Build HISE
Build HISE as usual.
2. Setting the outputs in HISE
- In HISE, click on the Main channel meter to open the routing popup:
My build has 48 channels, that's why there're so many output here. Your setup will be different depending on how many outputs you've configured for your build)
Right-click somewhere in the popup, and change the channel amount (let's say we want 8 outputs) :
Now the routing appears like this:
Again, it will look a bit different on your version, but all the output of your plugin should be routed to each of HISE's output channels.
- Edit the project setting
Lastly, you'll have to add those extra definitions in your project's settings:
HISE_NUM_PLUGIN_CHANNELS=8 NUM_MAX_CHANNELS=8
You're all set now to do what you want with your outputs.
Here's a snippet:
HiseSnippet 3061.3oc6bstbaabEFTRHwjN0woSZm9ysZ5DQESQKdQR9RcCknjbzXIKNhRwsiFU2k.KI2HPrH.KzkwwyzN8knOF8EnS6iPeTxaP64rK.I.Ekht3jn3g7GVD6YOW2y4reKVK0vWXwBBD9FYxs6odLiLejYySckcq2kxcM1XUiL+JysBcjbx1gRuPIogSXGfxJm5QCBX1FYxL4ywolI6TFpOe2WrB0g5ZwFLjgwWI3VrM483xAi1n1K3NNqSsY6x6kX1UqsgkvstvQDBl0jlya3QsNj1g8RJNsILM9RZPWiLetIsRE61Kt3idrsU0EJ831zkrsZU4wKvrKWsB6wLa6kpX2pcaiLevZ1bovuojJYAFYlZEg8oM6JN1UqfuhGva4vvGJYzDzrd30EN1nKhiZTuK2wtQb7JvvHycZLH5MoN58olaws48GePT79JBjAbjL.lYhzl2joLuRIMu4SXdivjxjvjlRaRehYSKetmb.Ezdtq4FtRleaJrNkzTzy0Xh+w8Le3CI61kGPBb4ddLIA9ZKJLMhvkTuqOOPJ75NS.YFU9A3pttLGxtr.4LDOewWyrjEHzinbGJX7DtKQ1kQ.IxdsLD7VN0g3y7D4xUW.1hqrXO5gr08gG5aa4ez7yWfTc94m8oYykCrnmCFBJFeValOCxxBHh1DF0pKYFHqQBwal+LnxNEReHdprURdUNcAR.smmCyu.o+TKPXRqhEKNKJ70Nh4eJIPD5ZS5IrCAqFjB4XpKnTAwWDJYDlSvwcAcmCjQfjzw2qdrv1hJ84mPdFYek9J1gI2A3g61QSI+zMgoQdE8HF3H.CTHLTZ5YKjKq9yUfsxWO1pb8Xq5zydvSyE4xau2tM1a2W+x81Bb0G8T05x5PoLg5Rn99zSIGykcITXDboJ.VKYBhkNAI.FiJg4wFjafB3UrYf4GFv.5PlVT1hP2zoGyMLfXARrEzJH.m+FRPKNXFjLz2UyzSHHEapjpaVg9Ejf.qG6CYQkNn.Y+xEHUveVs.YA7mKVfrzACbsQvK5Y5gBVkAqyNA4mElO20ACSsCcsjbnhXTSK2axk0Q.lcTLndbH.rHPmYaK7yygGl+oDN42mHt9vxvHO3AylK6avEKsL.CRwI+yAm.9mGTBkQ1rokcQuvft4w4BVY12lKaT.J8rdZt2ddkSfQoqmvftdw53AqMwUAHS5hKnCPxJlfnH4QTer1PGR1Rs9A1dbkNjzUWzyS3BOjeZ3qsDqHNQUJPtfOWL6kuYrW4lwttDAWRUANHANs6OKASGPZECPA3J8EN0iRoyKbwIs1IvpjKMJQJZN35XLa4mN.pK2vsgOCdZ5BDoeHaV0p4vIjWfDyaEa9Ef0IGPBCxT4t1LrEVZiunZ3saOfSzp5mWh0nOSKp4JADxkExsTkj59AvWBwcNjXa.l0gDdaUFzlObmX162dfcBryRPw9UNgV31VXxC5qZO9fXcf4yczYiPZmKS45psDTcdXNvHfdS0ROL.50onubiMFDuflGnDS0KrH01tde4lmC6C.hx2BVAfvATEBCXCa3wco3DTiNKZZCUY2ubNaj6rO+.cLdn8N1WEmOXX8V3LMl1WG1N.DDtRniF6fIEXPNdy3ROnLlHZAaaiwDn+Ly2W3mKKuc9XKYdvRdFoM0Aly29sww68KMX3n1PmqOk8J3GbcWIU2m4tpeTsrVY6WtWymPPrB5VW5ELzsaAK4P4gM5yTxpK+pXbHjVPFlqPhD7TkNE.QEHfNaDag6LRRWb6Nr6FyVjRrLDSfD.nhy0QPsAI6xNNRLJKZYabPPERHMBjwLPl6gyjTJ.xCAgKwtnc3GosanfvWm31EAGiLBpFlGz+EL0DsQaIc2DjXTlIrBL5FQom1zyp2XttOC.UB1mtkwWRcsADPQR2K4XffWyEZnyJZo3YOv.SwT9gDY7t858HvMiOjw7T9jpUP+5vT6hCfmvUGspwNCXPkYGYQh39Ts4ch1lL4PEQt7OhkevdkQFUicVatM2d4U23kOmTe4M2bkkq+hbo7Or+I3O8a4FW4mWOqUgJLUePLGiAI6rTqzCrzBPcKs02ialKaJy1xgQUwugqhFpMqCysira+JqTxPswd54CU+XRvWglQ9Yw8AhiFa2b2KS3PDHOu3A.ngEGOpmrocDl5n3AlQRI171J.DwoTXRbzzwxvTyUWhFfm0INxoEYAkt.qKl0Y1TUHEUYg6l.F3Q.e1pNX+1z9COPcrAXyNcV6lfFyOK4y9rgJfRDwvVbkhZugXJu7NXAcufgV1iSHfVEXNRKvOg0cGNdNCzu.VkXhUxFLfvB8Na60KNw3MQscGJWHH1yRl3DuEwHlukZ6SaUhIhU7s5DH3SBXDuTHYa6pQyBMtICSpc6QRKBqgpuwHHim42+hXLuaXuVXfa.BEbhv4ZSeXYyy+vxIOKuktmYhIh6Wyka6wbOuS3aD0nENX8GFYUvTkpiUe+niUGC+yfaimptOTVCkYm70hXbEEQ4gEgQsqpHpLrHtyUVDUuDNx8hDQSGtMyWIfOz7EthVktILW9lv7Y7b3ydaf83w2RRz5JrV6w7kbLMJyprifsg0uyjrlqxBNTJ7fu1eGViLevkbo+jAp8OU6z9OTKrVOJPyLC9LWx5EfudlRyUNWk4plag4VL2Ry8HLq6JpwxIzXMwOFZrRRe7zeLzX0DZb9+1MSi2UF8x5zZbcnUN1JdWXGOkV+XyjCkb87+zIglMpVKJQRm07wl5MdVwWbLfRwnUm3Wh4GYVsT0JOdoxUVnrxDSPn7iVZwGWdoxkRPnrtmkJcch+0DluANW5zXqqlvdmqn1Nb5mnNITgXJqchG0M.O8yxAfPB6gyPAeu+TTuNS+QyN1IO3LxDZzpmdJRCFF58iGC8IjRy2mI.M7nUwNLWZuyw5WENol7bn0D1B0p6JT+y5PziD9PTCeewoHtdniSCpra7DBRQMxk1.BW1rUD9PPIE8WF1SGAQ1JoFR+7q31xt6fG0CHru5cELewJC8ovUbbX3CT5XS3buKCPq6GTizPgQ8i9bosrcDG2.NqEh6+RxW+n5J3YiQOceMgs..J5HzvTFj7MLk337Ynl6sFGiAs90L+kSp0kw6zcv8.7W+lZIqMm56cKkAUi+y+dxpw+vURNkOW47muRxox4ImZecsQzkKVN5HkRN22LM9zySfD+ZIe4O3aqWxNQhxD4N9MWXXb16.39lagu6C7M4l7JIvKtIh.z3H08.fPog5C4oI298c18TbYMwOwrAWZ0cz13DivFgM2+gvFitcmeg4Zvo.rjCLvoLW+O9CyU4jT82Sq96ZhuYd0asWo7es4ntNgK3p49uW1qly6Re0baaIA0uqOr2imHHIXs+cSVO9tP1ePRssW.ace12nZhlb75Bp+HI8cew5fSNRdZRkg9pzhk6AsbjoRCl7htwuRWya7apac232OCJ1ScojYiswlb7p3Vy8HlC.BWYi+R.0caZniLdzz4xaIbEdcEtbqjKz6vj97NcX9Is8Q5PKKkTqCGLxmVaG.0AMYR6uq1lPxF0GhSrqYrnzU9BZG450uwTatDr.j7y2lzS9dcS5TKm2o++AJTo1OOV82KZ.BNxE0d1v.fASSEndUJvSvoIGQC7MfpEeYCgC0e3v7juqRam5RmKftzs67UrMCDlusajpk9a2F48MaP+oZwN08zAm9GNzVS0UyEeE23aDXBDYg944wmUnFXt1pG9evmHhkvmyDQrTLweTzw0DlW4aIv7P2YLLuwv7tIv7JOFl2XXdueAyq7XXdig4MFl26wv7l3hzwjuqf4U41xay6KFCyaLLuaFLuJig4MFl26Wv7pLFl2XXdig48dLLuotHcX9tBlW0aKuMuZig4MFl2MClW0wv7FCy68KXdUGCyaLLuwv7FeosmiN9jQpi6bizQDwxIeWikGhXkjuqwJCQrZR3qUGh3BIgutvPDWDe9ChHt3PDWBe9CiHtT+HROpku30V5e8LT+wwPMBjI3p9q1QVysvmIkN6uWF8.DWu1xJsnNCikutLV45xX0qKiKbcYbwqKiKccY7Qe+Lh.hWNTJ5o6VXXrUi0T+hIjIyZt3e8FTMNL9+EcceIB
BONUS: I added a Preset Handler to be able to keep the routing setup when loading presets.
(Thanks to @d-healey for his help on this matter)I'll make a pull request to add this to the docs.
Edited: I completely forgot to add the Extra Definitions in the project's settings.
-
@Matt_SF you can export a multi output plugin without changing the number of outputs HISE is using.
-
@d-healey said in Multi Output Tutorial:
@Matt_SF you can export a multi output plugin without changing the number of outputs HISE is using.
Oh, I didn't know that was possible - I haven't even tried...!
-
@Matt_SF the outputs will be set dynamically in the daw when you load the plugin - most daws show a pop-up and ask how many outputs you want.
-
@d-healey said in Multi Output Tutorial:
@Matt_SF the outputs will be set dynamically in the daw when you load the plugin - most daws show a pop-up and ask how many outputs you want.
Indeed. OK noted!
... Now half of my post is useless -
@d-healey Although I think that building the multi-out version of HISE allows to see what you're doing and debug your code easily.
If you have your routing script already set up and working, you can take the dynamic way. -
@Matt_SF said in Multi Output Tutorial:
Although I think that building the multi-out version of HISE allows to see what you're doing and debug your code easily.
Yeah this is pretty much the only reason I ever built HISE as a plugin, but actually you get 99% of the way there in the standalone and you can test the output routing with a container.
-
@d-healey said in Multi Output Tutorial:
Yeah this is pretty much the only reason I ever built HISE as a plugin
You don't have to build the plugin version to 'access' the multi-out routing anymore.
The standalone version works just fine.@d-healey said in Multi Output Tutorial:
you can test the output routing with a container.
I'll have to try that in the 'stereo' build, thanks!
-
@Matt_SF said in Multi Output Tutorial:
I'll have to try that in the 'stereo' build, thanks!
It's the same as you're showing in your tutorial above, but you use another container instead of the master container.
-
@d-healey Oh ok, I get it. Nice tip!
-
@Matt_SF My man.