{"id":3043,"date":"2020-09-06T21:38:39","date_gmt":"2020-09-06T12:38:39","guid":{"rendered":"https:\/\/www.utsbox.com\/?p=3043"},"modified":"2022-05-25T23:17:26","modified_gmt":"2022-05-25T14:17:26","slug":"vst3%e3%83%9b%e3%82%b9%e3%83%88%e9%96%8b%e7%99%ba03-%e9%9f%b3%e5%a3%b0%e5%87%a6%e7%90%86%e3%82%af%e3%83%a9%e3%82%b9%e3%81%ae%e4%bd%9c%e6%88%90%e3%81%a8%e5%88%9d%e6%9c%9f%e5%8c%96","status":"publish","type":"post","link":"https:\/\/www.utsbox.com\/?p=3043","title":{"rendered":"VST3\u30db\u30b9\u30c8\u958b\u767a03 &#8211; \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u521d\u671f\u5316"},"content":{"rendered":"<h1 id=\"\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u521d\u671f\u5316\">\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u521d\u671f\u5316<\/h1>\n<p><a href=\"https:\/\/www.utsbox.com\/?p=3006\" title=\"VST3\u30db\u30b9\u30c8\u958b\u767a02 \u2013 VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8aad\u307f\u8fbc\u307f\u3068\u60c5\u5831\u8868\u793a\">\u524d\u56de<\/a>\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\u7c21\u5358\u306aVST3\u30db\u30b9\u30c8\u306e\u4f5c\u6210\u306b\u3064\u3044\u3066\u8a18\u8f09\u3044\u305f\u3057\u307e\u3057\u305f\u3002<br \/>\n\u4eca\u56de\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u8aac\u660e\u3092\u5b9f\u65bd\u3057\u307e\u3059\u3002<\/p>\n<p>\u4eca\u56de\u4f5c\u6210\u3059\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u4e0b\u8a18\u306e\u3068\u304a\u308a\u3067\u3059\u3002<\/p>\n<ul>\n<li>VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u8aad\u307f\u8fbc\u3080<\/li>\n<li>VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b(<strong>new<\/strong>)<\/li>\n<\/ul>\n<p>\u5b9f\u969b\u306b\u97f3\u58f0\u51e6\u7406\u3092\u884c\u3046\u307e\u3067\u306f\u3082\u3046\u5c11\u3057\u624b\u9806\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u307e\u305a\u306f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3068\u3053\u308d\u307e\u3067\u5b9f\u65bd\u3044\u305f\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306eVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u3053\u3061\u3089\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u2192<a href=\"https:\/\/www.utsbox.com\/wp-content\/uploads\/2021\/04\/vst3host_20210410.zip\">vst3host_20210410<\/a><br \/>\nZIP\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u306e\u300cvst3host02_\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u521d\u671f\u5316\u300d\u30d5\u30a9\u30eb\u30c0\u304c\u4eca\u56de\u306e\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u306a\u304a\u3001Visual Studio\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u300c\u30b3\u30f3\u30bd\u30fc\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u300d\u3067\u4f5c\u6210\u3057\u3066\u304a\u308a\u307e\u3059\u3002<br \/>\n\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306a\u3069\u306f\u300c<a href=\"https:\/\/www.utsbox.com\/?p=2988#Visual Studio\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\">Visual Studio\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a<\/a>\u300d\u3082\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<\/p>\n<h1 id=\"\u4eca\u56de\u306e\u8aac\u660e\u5185\u5bb9\">\u4eca\u56de\u306e\u8aac\u660e\u5185\u5bb9<\/h1>\n<p>\u672c\u30da\u30fc\u30b8\u3067\u306f\u3001<a href=\"https:\/\/www.utsbox.com\/?p=3006\" title=\"VST3\u30db\u30b9\u30c8\u958b\u767a02 \u2013 VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8aad\u307f\u8fbc\u307f\u3068\u60c5\u5831\u8868\u793a\">\u524d\u56de\u8aac\u660e\u3057\u305fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u5229\u7528\u306e\u6d41\u308c<\/a>(\u4e0b\u8a18)\u306e\u3046\u3061\u3001<strong>3.<\/strong>\u306b\u3064\u3044\u3066\u306e\u5185\u5bb9\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<br \/>\n\u306a\u304a\u3001<a href=\"https:\/\/www.utsbox.com\/?p=3006\" title=\"VST3\u30db\u30b9\u30c8\u958b\u767a02 \u2013 VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8aad\u307f\u8fbc\u307f\u3068\u60c5\u5831\u8868\u793a\">\u524d\u56de\u8aac\u660e\u3057\u305f\u5185\u5bb9<\/a>\u306b\u3064\u3044\u3066\u306f\u3001\u8aac\u660e\u3092\u7701\u7565\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3059\u3002<\/p>\n<p><!--more--><\/p>\n<ol>\n<li>VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb(.vst3\u30d5\u30a1\u30a4\u30eb)\u3092\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u7d44\u307f\u8fbc\u3080(\u8aad\u307f\u8fbc\u3080)<\/li>\n<li>VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3042\u308b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u4e00\u89a7\u3092\u53d6\u5f97<\/li>\n<li><strong>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u4e00\u89a7\u304b\u3089\u5fc5\u8981\u306a\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210<\/strong><\/li>\n<li>\u4f5c\u6210\u3057\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u521d\u671f\u5316<\/li>\n<\/ol>\n<h1 id=\"\u4f5c\u6210\u3059\u308b\">VST3\u30db\u30b9\u30c8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h1>\n<p>\u307e\u305a\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u4e0b\u8a18\u3068\u306a\u308a\u307e\u3059\u3002\u4eca\u56de\u8aac\u660e\u3059\u308b\u70b9\u306b\u3064\u3044\u3066\u306f\u3001\u30cf\u30a4\u30e9\u30a4\u30c8\u3057\u3066\u304a\u308a\u307e\u3059\u3002\u8aac\u660e\u306f\u5f8c\u8ff0\u3057\u307e\u3059\u3002<\/p>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon mark=&#8221;9-14,19-24,40-45,66-86,88-103,106-119,130-131&#8243;]<br \/>\n\/\/ \u3053\u3053\u304b\u3089VST\u30db\u30b9\u30c8\u306b\u5fc5\u8981\u306a\u30d8\u30c3\u30c0<\/p>\n<p>\/\/ VST3\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u8fbc\u306b\u5fc5\u8981<br \/>\n\/\/ module_win32.cpp\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068<br \/>\n\/\/ \u203b module_win32.cpp\u306fWindows\u7528\u306a\u306e\u3067\u3001Linux\u306e\u5834\u5408\u306fmodule_linux.cpp\u3001<br \/>\n\/\/ \u3000 macOS\u306e\u5834\u5408\u306fmodule_mac.mm\u3092\u304b\u308f\u308a\u306b\u8ffd\u52a0\u3059\u308b\u3002(\u305f\u3076\u3093)<br \/>\n#include &#8220;public.sdk\/source\/vst\/hosting\/module.h&#8221;<\/p>\n<p>\/\/ \u8aad\u307f\u8fbc\u3093\u3060VST3\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u5404\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u5fc5\u8981<br \/>\n\/\/ plugprovider.cpp\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068<br \/>\n#include &#8220;public.sdk\/source\/vst\/hosting\/plugprovider.h&#8221;<\/p>\n<p>\/\/ plugprovider\u3067\u5fc5\u8981\u306aPluginContext\u7528\u306e\u30d8\u30c3\u30c0<br \/>\n#include &#8220;public.sdk\/source\/vst\/hosting\/hostclasses.h&#8221;<\/p>\n<p>\/\/ \u30db\u30b9\u30c8\u7528\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3068\u304d\u306b\u5fc5\u8981\u306a\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9<br \/>\nusing namespace VST3::Hosting;<\/p>\n<p>\/\/ \u3053\u3053\u304b\u3089VST\u30d7\u30e9\u30b0\u30a4\u30f3\u95a2\u4fc2(\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9)\u306e\u30d8\u30c3\u30c0<br \/>\n#include &#8220;pluginterfaces\/base\/funknown.h&#8221;<br \/>\n#include &#8220;pluginterfaces\/base\/ftypes.h&#8221;<br \/>\n#include &#8220;pluginterfaces\/vst\/vsttypes.h&#8221;<br \/>\n#include &#8220;pluginterfaces\/vst\/ivstaudioprocessor.h&#8221;<br \/>\n#include &#8220;pluginterfaces\/vst\/ivsteditcontroller.h&#8221;<\/p>\n<p>\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u4f7f\u7528\u6642\u306b\u5fc5\u8981\u306a\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9<br \/>\nusing namespace Steinberg;<br \/>\nusing namespace Steinberg::Vst;<\/p>\n<p>\/\/ \u3053\u3053\u304b\u3089\u305d\u308c\u4ee5\u5916\u306e\u30d8\u30c3\u30c0<br \/>\n#include <stdio.h><br \/>\nusing namespace std;<\/p>\n<p>\/\/ \u30e1\u30a4\u30f3\u95a2\u6570\u306f\u3053\u3053\u304b\u3089<br \/>\nint main()<br \/>\n{<br \/>\n\tstring path = u8&#8243;.\\\\vst_file_name.vst3&#8243;; \/\/ VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30d1\u30b9<br \/>\n\tstring error; \/\/ VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u305f\u3068\u304d\u306e\u30a8\u30e9\u30fc\u7528<\/p>\n<p>\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PluginContext\u3092\u4f5c\u6210\u30fb\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b<br \/>\n\t\/\/ PluginContext\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\u540d\u3084\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u306e\u5bfe\u5fdc\u72b6\u6cc1\u3092\u53d6\u5f97\u3057\u305f\u308a\u3001<br \/>\n\t\/\/ allocateMessage()\u3067IMessage\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3002(\u8a73\u7d30\u306f\u5272\u611b)<br \/>\n\tHostApplication pluginContext;<br \/>\n\tPluginContextFactory::instance().setPluginContext(&#038;pluginContext);<\/p>\n<p>\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ Module\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080<br \/>\n\tshared_ptr<Module> module = Module::create(path, error);<br \/>\n\tif (!module)<br \/>\n\t{<br \/>\n\t\t\/\/ \u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u305f\u3089\u7d42\u4e86<br \/>\n\t\tprintf(&#8220;Error : VST3\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u8fbc\u306b\u5931\u6557\\n&#8221;);<br \/>\n\t\tprintf(&#8221;      :   path = %s\\n&#8221;, path.c_str());<br \/>\n\t\tprintf(&#8221;      :   error = %s\\n&#8221;, error.c_str());<br \/>\n\t\treturn 1;<br \/>\n\t}<\/p>\n<p>\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PluginFactory\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b<br \/>\n\t\/\/ PluginFactory\u30af\u30e9\u30b9\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3042\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u60c5\u5831\u53d6\u5f97\u3084\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3068<br \/>\n\t\/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u3092\u5217\u6319\u30fb\u4f5c\u6210\u3059\u308b\u30af\u30e9\u30b9<br \/>\n\tPluginFactory factory = module->getFactory();<\/p>\n<p>\t\/\/ PluginFactory\u30af\u30e9\u30b9\u3067VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3042\u308b\u30af\u30e9\u30b9\u3092\u5217\u6319\u3057\u306a\u304c\u3089<br \/>\n\t\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u307f\u3092audioClassInfo\u306b\u30b3\u30d4\u30fc\u3059\u308b<br \/>\n\t\/\/ VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u306f\u8907\u6570\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u4e00\u5ea6\u5217\u6319\u3059\u308b<br \/>\n\tvector<ClassInfo> audioClassInfo;<br \/>\n\tfor (ClassInfo classInfo : factory.classInfos())<br \/>\n\t{<br \/>\n\t\t\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306f\u30ab\u30c6\u30b4\u30ea\u30fc\u304ckVstAudioEffectClass\u3068\u306a\u3063\u3066\u3044\u308b\u3082\u306e\u3068\u306a\u308b<br \/>\n\t\t\/\/ (\u3061\u306a\u307f\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306fkVstComponentControllerClass )<br \/>\n\t\tif (classInfo.category() == kVstAudioEffectClass)<br \/>\n\t\t{<br \/>\n\t\t\taudioClassInfo.push_back(classInfo);<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\t\/\/ VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u7d42\u4e86\u3059\u308b\u3002<br \/>\n\tif (audioClassInfo.size() == 0)<br \/>\n\t{<br \/>\n\t\tprintf(&#8220;Error : VST3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002\\n&#8221;);<br \/>\n\t\treturn 1;<br \/>\n\t}<\/p>\n<p>\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u306fPluginFactory\u30af\u30e9\u30b9\u3068ClassInfo\u30af\u30e9\u30b9\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092<br \/>\n\t\/\/ \u4f5c\u6210\u30fb\u521d\u671f\u5316\u3059\u308b\u30af\u30e9\u30b9<br \/>\n\tshared_ptr<PlugProvider> plugProvider;<br \/>\n\tplugProvider = make_shared<PlugProvider>(factory, audioClassInfo[0], true);<\/p>\n<p>\t\/\/ PlugProvider\u30af\u30e9\u30b9\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3067\u304d\u305f\u304b\u30c1\u30a7\u30c3\u30af<br \/>\n\tif (!plugProvider)<br \/>\n\t{<br \/>\n\t\t\/\/ \u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u305f\u3089\u7d42\u4e86<br \/>\n\t\tprintf(&#8220;Error : PlugProvider\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u306b\u5931\u6557\\n&#8221;);<br \/>\n\t\treturn 1;<br \/>\n\t}<\/p>\n<p>\tprintf(&#8220;\u6700\u521d\u306b\u898b\u3064\u304b\u3063\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u300c%s\u300d\u3092\u4f5c\u6210\u30fb\u521d\u671f\u5316\u3057\u307e\u3057\u305f\u3002\\n&#8221;, audioClassInfo[0].name().c_str());<\/p>\n<p>\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b\u3002(\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306f\u521d\u671f\u5316\u6e08\u307f)<br \/>\n\tIComponent* component = plugProvider->getComponent();<\/p>\n<p>\t\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306fIComponent\u30af\u30e9\u30b9\u3068IAudioProcessor\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u3044\u308b<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u304b\u3089\u53d6\u5f97\u3067\u304d\u308b\u306e\u306fIComponent\u30af\u30e9\u30b9\u306e\u307f\u306a\u306e\u3067\u3001<br \/>\n\t\/\/ IComponent\u30af\u30e9\u30b9\u53d6\u5f97\u5f8c\u3001queryInterface\u3067IAudioProcessor\u30af\u30e9\u30b9\u3082\u53d6\u5f97\u3059\u308b<br \/>\n\tIAudioProcessor* processor;<br \/>\n\tcomponent->queryInterface(IAudioProcessor::iid, (void**)&#038;processor);<br \/>\n\tif (processor == nullptr)<br \/>\n\t{<br \/>\n\t\tprintf(&#8220;Error : \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\u304c\u4e0d\u5341\u5206\u306a\u305f\u3081\u5931\u6557\\n&#8221;);<br \/>\n\t\treturn 1;<br \/>\n\t}<\/p>\n<p>\t\/\/ \uff5e\uff5e\uff5e\uff5e<br \/>\n\t\/\/ \u672c\u6765\u306f\u3053\u3053\u3067component\u3092\u4f7f\u7528\u3057\u3066\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3001\u97f3\u58f0\u51e6\u7406\u306a\u3069\u3092\u884c\u3046\u3002<br \/>\n\t\/\/ \uff5e\uff5e\uff5e\uff5e<\/p>\n<p>\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ \u7d42\u4e86\u51e6\u7406<\/p>\n<p>\t\/\/ IAudioProcessor\u306frelease()\u3092\u547c\u3073\u51fa\u3057\u3066\u89e3\u653e\u3059\u308b\u3002<br \/>\n\tprocessor->release();<\/p>\n<p>\t\/\/ IComponent\u30af\u30e9\u30b9\u306fPlugProvider\u30af\u30e9\u30b9\u3067\u89e3\u653e\u3059\u308b\u3002<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u81ea\u4f53\u306fmake_shared\u3067\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u89e3\u653e\u306f\u4e0d\u8981\u3002<br \/>\n\tplugProvider->releasePlugIn(component, nullptr);<\/p>\n<p>\t\/\/ Module\u30af\u30e9\u30b9\u306fmake_shared\u3067\u4f5c\u6210\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u89e3\u653e\u306f\u4e0d\u8981\u3002<br \/>\n\t\/\/ PluginFactory\u30af\u30e9\u30b9\u306f\u89e3\u653e\u306e\u5fc5\u8981\u306f\u7279\u306b\u306a\u3044\u3002<br \/>\n\tprintf(&#8220;\u7d42\u4e86\u3057\u307e\u3059\\n&#8221;);<br \/>\n\treturn 0;<\/p>\n<p>}<br \/>\n[\/crayon]<\/p>\n<h1 id=\"\u5fc5\u8981\u306a\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3068\u5b9a\u7fa9\">\u5fc5\u8981\u306a\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3068\u5b9a\u7fa9<\/h1>\n<p>\u4eca\u56de\u306f\u65b0\u305f\u306b\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u300cplugprovider.h\u300d\u3068\u300chostclasses.h\u300d\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002<br \/>\n\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u300cplugprovider.h\u300d\u306b\u306f\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306a\u3069\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306ePlugProvider\u30af\u30e9\u30b9(\u5f8c\u8ff0)\u306e\u5b9a\u7fa9\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305f\u3001\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u300chostclasses.h\u300d\u306fPlugProvider\u30af\u30e9\u30b9(\u5f8c\u8ff0)\u306e\u5185\u90e8\u3067\u4f7f\u7528\u3055\u308c\u308b\u3001HostApplication\u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\u304c\u8a18\u8ff0\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u306a\u304a\u3001\u300cplugprovider.h\u300d\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fVisual Studio\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bPlugProvider\u30af\u30e9\u30b9\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb(\u4e0b\u8a18)\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>C:\\VST_SDK\\VST3_SDK\\public.sdk\\source\\vst\\hosting\\plugprovider.cpp<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.utsbox.com\/wp-content\/uploads\/2021\/03\/20210330-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.utsbox.com\/wp-content\/uploads\/2021\/03\/20210330-2.png\" alt=\"\" width=\"334\" height=\"285\" class=\"alignnone size-full wp-image-3364\" srcset=\"https:\/\/www.utsbox.com\/wp-content\/uploads\/2021\/03\/20210330-2.png 334w, https:\/\/www.utsbox.com\/wp-content\/uploads\/2021\/03\/20210330-2-300x256.png 300w\" sizes=\"auto, (max-width: 334px) 100vw, 334px\" \/><\/a><\/p>\n<p>\u6b21\u306b\u3001\u8aad\u307f\u8fbc\u3093\u3060VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u30d7\u30e9\u30b0\u30a4\u30f3\u95a2\u9023\u306e\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<br \/>\n\u305d\u308c\u305e\u308c\u306e\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<table>\n<tr>\n<th>\u30d8\u30c3\u30c0<\/th>\n<th>\u7528\u9014<\/th>\n<\/tr>\n<tr>\n<td>funknown.h<\/td>\n<td>VST SDK\u306e\u591a\u304f\u306e\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143\u3068\u306a\u308bFUnknown\u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\u3055\u308c\u305f\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb(\u3068\u308a\u3042\u3048\u305a\u8aad\u307f\u8fbc\u3093\u3067\u304a\u304f)<\/td>\n<\/tr>\n<tr>\n<td>ftypes.h<\/td>\n<td>VST SDK\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u57fa\u672c\u7684\u306a\u578b(int32\u3084char16\u306a\u3069)\u304c\u5b9a\u7fa9\u3055\u308c\u305f\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb<\/td>\n<\/tr>\n<tr>\n<td>vsttypes.h<\/td>\n<td>VST SDK\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u578b(Sample32\u3084ParamID\u306a\u3069)\u304c\u5b9a\u7fa9\u3055\u308c\u305f\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb<\/td>\n<\/tr>\n<tr>\n<td>ivstaudioprocessor.h<\/td>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143\u3068\u306a\u308bIComponent\u30af\u30e9\u30b9\u3084IAudioProcessor\u30af\u30e9\u30b9\u3001\u305d\u306e\u4ed6 \u69cb\u9020\u4f53\u306a\u3069\u304c\u5b9a\u7fa9\u3055\u308c\u305f\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb<br \/>(IComponent\u30af\u30e9\u30b9\u81ea\u4f53\u306fivstcomponent.h\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001ivstaudioprocessor.h\u3067\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b)<\/td>\n<\/tr>\n<tr>\n<td>ivsteditcontroller.h<\/td>\n<td>\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143\u3068\u306a\u308bIEditController\u30af\u30e9\u30b9\u3084\u305d\u306e\u4ed6 \u69cb\u9020\u4f53\u306a\u3069\u304c\u5b9a\u7fa9\u3055\u308c\u305f\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb<\/td>\n<\/tr>\n<\/table>\n<p>\u4ed6\u306e\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u306b\u3064\u3044\u3066\u306f<a href=\"https:\/\/www.utsbox.com\/?p=3006#\u5fc5\u8981\u306a\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3068\u5b9a\u7fa9\">\u524d\u56de<\/a>\u306e\u5185\u5bb9\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044<\/p>\n<h1 id=\"PluginContext\u306e\u4f5c\u6210\u30fb\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\">PluginContext\u306e\u4f5c\u6210\u30fb\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h1>\n<p>\u6700\u521d\u306bPlugProvider\u30af\u30e9\u30b9(\u5f8c\u8ff0)\u306e\u5185\u90e8\u3067\u4f7f\u7528\u3055\u308c\u308bHostApplication\u30af\u30e9\u30b9\u3092\u6e96\u5099\u30fb\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002<\/p>\n<p>HostApplication\u30af\u30e9\u30b9\u306f\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\u306e\u540d\u79f0\u3084\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u5bfe\u5fdc\u72b6\u6cc1\u3092VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306b\u77e5\u3089\u305b\u305f\u308a\u3001VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306eallocateMessage()\u306e\u969b\u306bIMessage\u3092\u4f5c\u6210\u3057\u3066\u6e21\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\nVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u5074\u304b\u3089\u306f\u3001\u3053\u308c\u3089\u306e\u60c5\u5831\u306fPluginContext\u3068\u547c\u3070\u308c\u307e\u3059\u3002<\/p>\n<p>PluginContext\u306e\u4f5c\u6210\u30fb\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u306f\u3001\u4e0b\u8a18\u306e\u901a\u308aHostApplication\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3057\u3066\u3001PluginContextFactory::setPluginContext()\u3067\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon start-line=&#8221;40&#8243; mark=&#8221;5-6&#8243;]<br \/>\n\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PluginContext\u3092\u4f5c\u6210\u30fb\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b<br \/>\n\t\/\/ PluginContext\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\u540d\u3084\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u306e\u5bfe\u5fdc\u72b6\u6cc1\u3092\u53d6\u5f97\u3057\u305f\u308a\u3001<br \/>\n\t\/\/ allocateMessage()\u3067IMessage\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3002(\u8a73\u7d30\u306f\u5272\u611b)<br \/>\n\tHostApplication pluginContext;<br \/>\n\tPluginContextFactory::instance().setPluginContext(&#038;pluginContext);<br \/>\n[\/crayon]<\/p>\n<p>HostApplication\u30af\u30e9\u30b9\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u5272\u611b\u3044\u305f\u3057\u307e\u3059\u304c\u3001\u4e0a\u8a18\u306e\u8a2d\u5b9a\u3060\u3051\u3059\u308c\u3070\u6a5f\u80fd\u7684\u306a\u90e8\u5206\u3067\u306f\u554f\u984c\u306f\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u3002<br \/>\n\u6c17\u306b\u306a\u308b\u306e\u3067\u3042\u308c\u3070VST SDK\u306e\u4e0b\u8a18\u30d5\u30a1\u30a4\u30eb\u3092\u3054\u78ba\u8a8d\u3044\u305f\u3060\u3051\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>public.sdk\/source\/vst\/hosting\/hostclasses.cpp<\/li>\n<li>public.sdk\/source\/vst\/hosting\/pluginterfacesupport.cpp<\/li>\n<\/ul>\n<p>\u306a\u304a\u3001HostApplication\u30af\u30e9\u30b9\u306egetName()\u95a2\u6570\u306e\u5b9f\u88c5\u304c\u60aa\u304f\u3001\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\u306e\u540d\u79f0\u304c\u300cMy VST3 HostApplication\u300d\u3068\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u30db\u30b9\u30c8\u540d\u3092\u5909\u3048\u305f\u3051\u308c\u3070\u3001HostApplication\u30af\u30e9\u30b9\u3092\u3082\u3068\u306b\u3057\u3066\u4f3c\u305f\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h1 id=\"\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u53d6\u5f97\">\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u53d6\u5f97<\/h1>\n<p>\u30e1\u30a4\u30f3\u95a2\u6570\u3067\u306f\u3001<a href=\"https:\/\/www.utsbox.com\/?p=3006\" title=\"VST3\u30db\u30b9\u30c8\u958b\u767a02 \u2013 VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8aad\u307f\u8fbc\u307f\u3068\u60c5\u5831\u8868\u793a\">\u524d\u56de<\/a>\u3068\u540c\u69d8\u306b\u3001\u307e\u305aVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3068\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9(PluginFactory\u30af\u30e9\u30b9)\u306e\u53d6\u5f97\u306e\u5b8c\u4e86\u3092\u5b9f\u65bd\u3057\u307e\u3059\u3002<br \/>\n(VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3068\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9\u306e\u53d6\u5f97\u306b\u3064\u3044\u3066\u306e\u8aac\u660e\u306f<a href=\"https:\/\/www.utsbox.com\/?p=3006\" title=\"VST3\u30db\u30b9\u30c8\u958b\u767a02 \u2013 VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8aad\u307f\u8fbc\u307f\u3068\u60c5\u5831\u8868\u793a\">\u524d\u56de\u306e\u5185\u5bb9<\/a>\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002)<\/p>\n<p>\u305d\u306e\u5f8c\u3001\u53d6\u5f97\u3057\u305fPluginFactory\u30af\u30e9\u30b9\u3067VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3042\u308b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u60c5\u5831\u306e\u307f\u3092\u5909\u6570audioClassInfo\u306b\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u3053\u308c\u306f\u300cVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9(\u30a8\u30d5\u30a7\u30af\u30bf\u30fc\u3084\u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc)\u306f\u8907\u6570\u5b58\u5728\u3057\u3066\u3082\u3088\u3044\u300d\u3068\u3044\u3046\u4ed5\u69d8\u304c\u3042\u308b\u305f\u3081\u3067\u3001\u3044\u3063\u305f\u3093\u300c\u3069\u3093\u306a\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u3042\u308b\u304b\u300d\u3092\u914d\u5217\u7b49\u306b\u5217\u6319\u30fb\u53d6\u5f97\u3057\u3066\u304a\u304d\u3001\u5f8c\u304b\u3089\u300c\u3069\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9(\u30a8\u30d5\u30a7\u30af\u30bf\u30fc\u3084\u30b7\u30f3\u30bb\u30b5\u30a4\u30b6\u30fc)\u3092\u8aad\u307f\u8fbc\u3080\u304b\u300d\u3092\u9078\u3076\u305f\u3081\u3067\u3059\u3002<\/p>\n<p>\u3061\u306a\u307f\u306b\u3001VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u8907\u6570\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u3042\u308b\u30b5\u30f3\u30d7\u30eb\u3068\u3057\u3066\u3001VST SDK\u4ed8\u5c5e\u306eagain\u30b5\u30f3\u30d7\u30eb\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\nagain\u30b5\u30f3\u30d7\u30eb\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u300cAGain VST3\u300d\u3068\u300cAGain SideChain VST3\u300d\u306e2\u3064\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9(\u30a8\u30d5\u30a7\u30af\u30bf\u30fc)\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon start-line=&#8221;66&#8243; mark=&#8221;11&#8243;]<br \/>\n\t\/\/ PluginFactory\u30af\u30e9\u30b9\u3067VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3042\u308b\u30af\u30e9\u30b9\u3092\u5217\u6319\u3057\u306a\u304c\u3089<br \/>\n\t\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u307f\u3092audioClassInfo\u306b\u30b3\u30d4\u30fc\u3059\u308b<br \/>\n\t\/\/ VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u306f\u8907\u6570\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u4e00\u5ea6\u5217\u6319\u3059\u308b<br \/>\n\tvector<ClassInfo> audioClassInfo;<br \/>\n\tfor (ClassInfo classInfo : factory.classInfos())<br \/>\n\t{<br \/>\n\t\t\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306f\u30ab\u30c6\u30b4\u30ea\u30fc\u304ckVstAudioEffectClass\u3068\u306a\u3063\u3066\u3044\u308b\u3082\u306e\u3068\u306a\u308b<br \/>\n\t\t\/\/ (\u3061\u306a\u307f\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306fkVstComponentControllerClass )<br \/>\n\t\tif (classInfo.category() == kVstAudioEffectClass)<br \/>\n\t\t{<br \/>\n\t\t\taudioClassInfo.push_back(classInfo);<br \/>\n\t\t}<br \/>\n\t}<br \/>\n[\/crayon]<\/p>\n<p>\u306a\u304a\u3001VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u60c5\u5831\u304c1\u3064\u3082\u5834\u5408\u3001\u97f3\u58f0\u51e6\u7406\u3067\u304d\u306a\u3044\u306e\u3067\u7d42\u4e86\u3057\u307e\u3059\u3002<\/p>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon start-line=&#8221;80&#8243;]<br \/>\n\t\/\/ VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u7d42\u4e86\u3059\u308b\u3002<br \/>\n\tif (audioClassInfo.size() == 0)<br \/>\n\t{<br \/>\n\t\tprintf(&#8220;Error : VST3\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002\\n&#8221;);<br \/>\n\t\treturn 1;<br \/>\n\t}<br \/>\n[\/crayon]<\/p>\n<h1 id=\"\u30d7\u30e9\u30b0\u30a4\u30f3\u30d7\u30ed\u30d0\u30a4\u30c0\u30af\u30e9\u30b9\u306e\u4f5c\u6210\">\u30d7\u30e9\u30b0\u30a4\u30f3\u30d7\u30ed\u30d0\u30a4\u30c0\u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/h1>\n<p>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u60c5\u5831\u306e\u5217\u6319\u3068\u53d6\u5f97\u304c\u7d42\u308f\u308c\u3070\u3001\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9\u3068\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u60c5\u5831(audioClassInfo[0])\u3092\u3082\u3068\u306b\u30d7\u30e9\u30b0\u30a4\u30f3\u30d7\u30ed\u30d0\u30a4\u30c0\u30af\u30e9\u30b9(PlugProvider\u30af\u30e9\u30b9)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\nPlugProvider\u30af\u30e9\u30b9\u306f\u540d\u524d\u306e\u901a\u308a\u3001\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u3092\u6e96\u5099(\u4f5c\u6210\u3068\u521d\u671f\u5316)\u3057\u3066\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u63d0\u4f9b\u3057\u3066\u304f\u308c\u308b\u30af\u30e9\u30b9\u3067\u3059\u3002<\/p>\n<p>PlugProvider\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u969b\u306fmake_shared\u3092\u4f7f\u7528\u3057\u3066\u4f5c\u6210\u3057\u307e\u3059\u3002\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u6e21\u3059\u5f15\u6570\u306a\u3069\u306f\u4e0b\u8a18\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\nPlugProvider\u30af\u30e9\u30b9\u306e\u4ed6\u306e\u4e3b\u306a\u30e1\u30f3\u30d0\u30fc\u95a2\u6570\u306b\u3064\u3044\u3066\u306f\u3001\u9806\u756a\u306b\u7d39\u4ecb\u30fb\u8aac\u660e\u3044\u305f\u3057\u307e\u3059\u306e\u3067\u3053\u3053\u3067\u306f\u7701\u7565\u3057\u307e\u3059\u3002<\/p>\n<ul>\n<li>PlugProvider\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf<\/li>\n<table>\n<tr>\n<th>\u6982\u8981<\/th>\n<td colspan=\"3\">PlugProvider\u30af\u30e9\u30b9\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3002\u3053\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u5185\u3067\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3084\u521d\u671f\u5316\u304c\u884c\u308f\u308c\u308b\u3002<\/td>\n<\/tr>\n<tr>\n<th rowspan=\"4\">\u5f15\u6570<\/th>\n<th>\u578b<\/th>\n<th>\u5909\u6570\u540d<\/th>\n<th>\u6982\u8981<\/th>\n<\/tr>\n<tr>\n<td>PluginFactory&#038;<\/td>\n<td>factory<\/td>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u60c5\u5831\u3092\u5217\u6319\u3057\u305f\u969b\u306b\u4f7f\u7528\u3057\u305f\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9\u3078\u306e\u53c2\u7167\u3067\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>ClassInfo<\/td>\n<td>info<\/td>\n<td>\u4f5c\u6210\u30fb\u521d\u671f\u5316\u3059\u308b\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u60c5\u5831\u3067\u3059\u3002<br \/>(\u3053\u306e\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3084\u521d\u671f\u5316\u3082\u884c\u308f\u308c\u307e\u3059\u3002)<\/td>\n<\/tr>\n<tr>\n<td>bool<\/td>\n<td>plugIsGlobal<\/td>\n<td>\u30db\u30b9\u30c8\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3067\u3042\u308bgStandardPluginContext(\u4eca\u56de\u8aac\u660e\u306f\u7701\u7565)\u3092\u4f7f\u7528\u3059\u308b\u304b\u3069\u3046\u304b\u306e\u30d5\u30e9\u30b0\u3067\u3059\u3002<br \/>PlugProvider\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\u3092\u898b\u308b\u9650\u308a\u3067\u306f\u57fa\u672c\u7684\u306btrue\u4ee5\u5916\u306e\u9078\u629e\u80a2\u306f\u3042\u308a\u307e\u305b\u3093\u306e\u3067\u3001true\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<br \/>\u306a\u304a\u3001\u7701\u7565\u53ef\u80fd\u3067\u7701\u7565\u3059\u308b\u3068true\u3068\u306a\u308a\u307e\u3059\u3002<\/td>\n<\/tr>\n<\/table>\n<\/ul>\n<p>\u4eca\u56de\u306e\u30b5\u30f3\u30d7\u30eb\u3067\u306f\u3001\u3068\u308a\u3042\u3048\u305a\u6700\u521d\u306b\u898b\u3064\u304b\u3063\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u3082\u3068\u306bPlugProvider\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n(\u5148\u307b\u3069\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u5217\u6319\u30fb\u53d6\u5f97\u3057\u307e\u3057\u305f\u304c\u3001\u3053\u3053\u3067\u306f\u8aac\u660e\u306e\u305f\u3081\u3001\u3042\u3048\u3066\u7c21\u7d20\u5316\u3057\u3066\u3044\u307e\u3059\u3002\u5b9f\u7528\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u3059\u308b\u306b\u306f\u3001\u5229\u7528\u8005\u306b\u300c\u5217\u6319\u3057\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9(\u30a8\u30d5\u30a7\u30af\u30bf\u306a\u3069)\u304b\u3089\u3069\u306e\u30af\u30e9\u30b9\u3092\u8aad\u307f\u8fbc\u3080\u304b\u300d\u3092\u9078\u629e\u3055\u305b\u308b\u7b49\u306e\u5bfe\u5fdc\u3092\u884c\u3044\u307e\u3059\u3002)<\/p>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon start-line=&#8221;88&#8243; mark=&#8221;5-6&#8243;]<br \/>\n\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u306fPluginFactory\u30af\u30e9\u30b9\u3068ClassInfo\u30af\u30e9\u30b9\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092<br \/>\n\t\/\/ \u4f5c\u6210\u30fb\u521d\u671f\u5316\u3059\u308b\u30af\u30e9\u30b9<br \/>\n\tshared_ptr<PlugProvider> plugProvider;<br \/>\n\tplugProvider = make_shared<PlugProvider>(factory, audioClassInfo[0], true);<\/p>\n<p>\t\/\/ PlugProvider\u30af\u30e9\u30b9\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3067\u304d\u305f\u304b\u30c1\u30a7\u30c3\u30af<br \/>\n\tif (!plugProvider)<br \/>\n\t{<br \/>\n\t\t\/\/ \u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u305f\u3089\u7d42\u4e86<br \/>\n\t\tprintf(&#8220;Error : PlugProvider\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u306b\u5931\u6557\\n&#8221;);<br \/>\n\t\treturn 1;<br \/>\n\t}<\/p>\n<p>\tprintf(&#8220;\u6700\u521d\u306b\u898b\u3064\u304b\u3063\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u300c%s\u300d\u3092\u4f5c\u6210\u30fb\u521d\u671f\u5316\u3057\u307e\u3057\u305f\u3002\\n&#8221;, audioClassInfo[0].name().c_str());<\/p>\n<p>[\/crayon]<\/p>\n<p>PlugProvider\u30af\u30e9\u30b9\u306e\u88dc\u8db3\u3067\u3059\u304c\u3001PlugProvider\u30af\u30e9\u30b9\u304c\u4f5c\u6210\u3055\u308c\u305f\u969b\u306b\u306f\u4e0b\u8a183\u3064\u304c\u5185\u90e8\u3067\u5b9f\u65bd\u3055\u308c\u307e\u3059\u3002<\/p>\n<table>\n<tr>\n<th>\u5b9f\u65bd\u6982\u8981<\/th>\n<th>\u5b9f\u65bd\u5185\u5bb9<\/th>\n<\/tr>\n<tr>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u3068\u521d\u671f\u5316<\/td>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306ecreateInstance()\u95a2\u6570\u3092\u4f7f\u3063\u3066\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3068\u3068\u3082\u306b\u3001\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306einitialize()\u95a2\u6570\u304c\u547c\u3073\u51fa\u3057\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u5bfe\u306b\u306a\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u3068\u521d\u671f\u5316<\/td>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3067getControllerClassId()\u95a2\u6570\u3092\u547c\u3073\u51fa\u3057\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306eFUID\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<br \/>\u305d\u306e\u5f8c\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306ecreateInstance()\u95a2\u6570\u3092\u4f7f\u3063\u3066\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3068\u3068\u3082\u306b\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306einitialize()\u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u63a5\u7d9a<\/td>\n<td>\u5404\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u30fb\u521d\u671f\u5316\u5f8c\u306b\u3001\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9\u306econnect()\u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u3001\u4e21\u30af\u30e9\u30b9\u306e\u63a5\u7d9a\u304c\u884c\u308f\u308c\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u8a73\u7d30\u3092\u5272\u611b\u3057\u307e\u3059\u304c\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u60c5\u5831\u306e\u3084\u308a\u53d6\u308a\u306e\u305f\u3081\u306e\u63a5\u7d9a\u3067\u306f\u306a\u304f\u3001sendMessage()\u95a2\u6570\u3084notify()\u95a2\u6570\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u63a5\u7d9a\u3068\u306a\u308a\u307e\u3059\u3002<\/td>\n<\/tr>\n<\/table>\n<h1 id=\"\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u53d6\u5f97\">\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u53d6\u5f97<\/h1>\n<p>PlugProvider\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u304c\u7d42\u308f\u308c\u3070\u3001\u3044\u3088\u3044\u3088\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n<p>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306f\u57fa\u672c\u7684\u306bAudioEffect\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u4f5c\u3089\u308c\u308b\u306e\u3067\u3059\u304c\u3001\u30db\u30b9\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u969b\u306f\u3001\u3053\u306eAudioEffect\u30af\u30e9\u30b9\u3092\u76f4\u63a5\u53d6\u5f97\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<br \/>\n(AudioEffect\u30af\u30e9\u30b9\u3092\u76f4\u63a5\u53d6\u5f97\u3057\u306a\u3044\u306e\u306f\u3001VST Module Architecture(VST-MA)\u3068\u547c\u3070\u308c\u308b\u8a2d\u8a08\u601d\u60f3\u306b\u57fa\u3065\u3044\u3066\u3044\u308b\u305f\u3081\u3067\u3059\u3002VST-MA\u306b\u3064\u3044\u3066\u306f\u8a73\u7d30\u3092\u5272\u611b\u3057\u307e\u3059\u3002)<br \/>\n\u4ee3\u308f\u308a\u306b\u3001AudioEffect\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143\u3067\u3042\u308b3\u3064\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9(\u4e0b\u8a18)\u3092\u4f7f\u7528\u3057\u3066\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3084\u97f3\u58f0\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>IComponent\u30af\u30e9\u30b9<\/li>\n<li>IAudioProcessor\u30af\u30e9\u30b9<\/li>\n<li>IConnectionPoint\u30af\u30e9\u30b9<\/li>\n<\/ul>\n<p>\u4e0a\u8a18\u306e\u30013\u3064\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u306e\u3046\u3061\u3001\u97f3\u58f0\u51e6\u7406\u3067\u4e3b\u306b\u4f7f\u7528\u3059\u308b\u306e\u306fIComponent\u30af\u30e9\u30b9\u30fbIAudioProcessor\u30af\u30e9\u30b9\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\nPlugProvider\u30af\u30e9\u30b9\u304b\u3089\u306fgetComponent()\u95a2\u6570\u3067IComponent\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<ul>\n<li>getComponent()\u95a2\u6570<\/li>\n<table>\n<tr>\n<th>\u6982\u8981<\/th>\n<td colspan=\"3\">PlugProvider\u30af\u30e9\u30b9\u304b\u3089\u521d\u671f\u5316\u6e08\u307f\u306eIComponent\u30af\u30e9\u30b9(\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143)\u3092\u53d6\u5f97\u3059\u308b\u95a2\u6570<\/td>\n<\/tr>\n<tr>\n<th rowspan=\"2\">\u623b\u308a\u5024<\/th>\n<th>\u578b<\/th>\n<th colspan=\"2\">\u6982\u8981<\/th>\n<\/tr>\n<tr>\n<td>IComponent*<\/td>\n<td colspan=\"2\">\u521d\u671f\u5316\u6e08\u307f\u306eIComponent\u30af\u30e9\u30b9(\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143)\u306e\u30dd\u30a4\u30f3\u30bf\u3067\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<th rowspan=\"2\">\u5f15\u6570<\/th>\n<th>\u578b<\/th>\n<th>\u5909\u6570\u540d<\/th>\n<th>\u6982\u8981<\/th>\n<\/tr>\n<tr>\n<td colspan=\"3\">\u5f15\u6570\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/td>\n<\/tr>\n<\/table>\n<\/ul>\n<p>IAudioProcessor\u30af\u30e9\u30b9\u306e\u53d6\u5f97\u306f\u3001IComponent\u30af\u30e9\u30b9\u306equeryInterface()\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u3067\u53d6\u5f97\u3057\u307e\u3059\u3002<br \/>\ndynamic_cast\u3067\u306f\u306a\u304f\u3001queryInterface()\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b\u306e\u3082VST-MA\u306e\u8a2d\u8a08\u601d\u60f3\u306b\u57fa\u3065\u3044\u3066\u3044\u308b\u305f\u3081\u3067\u3059\u3002<\/p>\n<ul>\n<li>queryInterface()\u95a2\u6570<\/li>\n<table>\n<tr>\n<th>\u6982\u8981<\/th>\n<td colspan=\"3\">\u7d99\u627f\u5148\u306e\u30af\u30e9\u30b9\u304c\u3001\u5f15\u65701\u306eFUID\u3067\u793a\u3055\u308c\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u3044\u308b\u304b\u554f\u3044\u5408\u308f\u305b\u3001\u7d99\u627f\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<br \/>\u4f8b\u3048\u3070\u3001IComponent\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5148\u30af\u30e9\u30b9(\u3053\u3053\u3067\u306fAudioEffect\u30af\u30e9\u30b9)\u304cIAudioProcessor\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u3044\u308b\u304b\u3092FUID\u3067\u554f\u3044\u5408\u308f\u305b\u3001\u7d99\u627f\u3057\u3066\u3044\u308b\u5834\u5408\u3001IAudioProcessor\u30af\u30e9\u30b9\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<th rowspan=\"2\">\u623b\u308a\u5024<\/th>\n<th>\u578b<\/th>\n<th colspan=\"2\">\u6982\u8981<\/th>\n<\/tr>\n<tr>\n<td>tresult<\/td>\n<td colspan=\"2\">\u554f\u3044\u5408\u308f\u305b\u306e\u7d50\u679c\u3001\u7d99\u627f\u3057\u3066\u3044\u308b\u5834\u5408\u306fkResultOk(0x00000000)\u304c\u3001\u7d99\u627f\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306fkNoInterface(0x80004002)\u304c\u8fd4\u308a\u307e\u3059\u3002<br \/>(tresult\u306fint\u306e\u518d\u5b9a\u7fa9)<\/td>\n<\/tr>\n<tr>\n<th rowspan=\"3\">\u5f15\u6570<\/th>\n<th>\u578b<\/th>\n<th>\u5909\u6570\u540d<\/th>\n<th>\u6982\u8981<\/th>\n<\/tr>\n<tr>\n<td>const TUID<\/td>\n<td>_iid<\/td>\n<td>\u8a72\u5f53\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3059\u308b\u304b\u554f\u3044\u5408\u308f\u305b\u308b\u305f\u3081\u306eFUID\u3067\u3059\u3002<br \/>FUID\u306f\u5404\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u30af\u30e9\u30b9\u306e\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb(ivstaudioprocessor.h\u3084ivsteditcontroller.h\u7b49)\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5b9a\u6570\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\u300c\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u540d::iid\u300d\u306e\u5f62\u5f0f\u3067\u8a18\u8f09\u3059\u308c\u3070\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>void**<\/td>\n<td>obj<\/td>\n<td>\u554f\u3044\u5408\u308f\u305b\u7d50\u679c\u3067\u3042\u308b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u5909\u6570\u306b\u306a\u308a\u307e\u3059\u3002<\/td>\n<\/tr>\n<\/table>\n<\/ul>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon start-line=&#8221;106&#8243; mark=&#8221;3,8-9&#8243;]<br \/>\n\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b\u3002(\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306f\u521d\u671f\u5316\u6e08\u307f)<br \/>\n\tIComponent* component = plugProvider->getComponent();<\/p>\n<p>\t\/\/ \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306fIComponent\u30af\u30e9\u30b9\u3068IAudioProcessor\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u3044\u308b<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u304b\u3089\u53d6\u5f97\u3067\u304d\u308b\u306e\u306fIComponent\u30af\u30e9\u30b9\u306e\u307f\u306a\u306e\u3067\u3001<br \/>\n\t\/\/ IComponent\u30af\u30e9\u30b9\u53d6\u5f97\u5f8c\u3001queryInterface\u3067IAudioProcessor\u30af\u30e9\u30b9\u3082\u53d6\u5f97\u3059\u308b<br \/>\n\tIAudioProcessor* processor;<br \/>\n\tcomponent->queryInterface(IAudioProcessor::iid, (void**)&#038;processor);<br \/>\n\tif (processor == nullptr)<br \/>\n\t{<br \/>\n\t\tprintf(&#8220;Error : \u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\u304c\u4e0d\u5341\u5206\u306a\u305f\u3081\u5931\u6557\\n&#8221;);<br \/>\n\t\treturn 1;<br \/>\n\t}<\/p>\n<p>\t\/\/ \uff5e\uff5e\uff5e\uff5e<br \/>\n\t\/\/ \u672c\u6765\u306f\u3053\u3053\u3067component\u3092\u4f7f\u7528\u3057\u3066\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3001\u97f3\u58f0\u51e6\u7406\u306a\u3069\u3092\u884c\u3046\u3002<br \/>\n\t\/\/ \uff5e\uff5e\uff5e\uff5e<\/p>\n<p>[\/crayon]<\/p>\n<p>IComponent\u30af\u30e9\u30b9\u3068IAudioProcessor\u30af\u30e9\u30b9\u306e\u53d6\u5f97\u5f8c\u306f\u3001\u4e21\u65b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3001\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3092\u884c\u3044\u307e\u3059\u3002<br \/>\n\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u3064\u3044\u3066\u306f\u3001\u4eca\u56de \u8aac\u660e\u304c\u591a\u304f\u306a\u308a\u904e\u304e\u308b\u305f\u3081\u3001\u6b21\u56de \u8aac\u660e\u3044\u305f\u3057\u307e\u3059\u3002<\/p>\n<h1 id=\"\u7d42\u4e86\u51e6\u7406\">\u7d42\u4e86\u51e6\u7406<\/h1>\n<p>\u6700\u5f8c\u306b\u7d42\u4e86\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002\u7d42\u4e86\u51e6\u7406\u3067\u306f\u4e0b\u8a18\u3092\u5b9f\u65bd\u3057\u307e\u3059\u3002<\/p>\n<ul>\n<li>queryInterface\u3067\u53d6\u5f97\u3057\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066release()\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059<\/li>\n<li>plugProvider\u30af\u30e9\u30b9\u3067releasePlugIn()\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u3002<\/li>\n<\/ul>\n<p>\u4eca\u56dequeryInterface\u3067\u53d6\u5f97\u3057\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u306fIAudioProcessor\u30af\u30e9\u30b9\u306b\u306a\u308b\u306e\u3067\u3001IAudioProcessor\u30af\u30e9\u30b9\u306erelease()\u95a2\u6570\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002<br \/>\ndelete\u3092\u5b9f\u65bd\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002release()\u95a2\u6570\u306e\u8a73\u7d30\u306f\u5272\u611b\u3044\u305f\u3057\u307e\u3059\u3002<\/p>\n<p>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u30af\u30e9\u30b9\u306e\u89e3\u653e\u5f8c\u306f\u3001plugProvider\u30af\u30e9\u30b9\u3067\u306ereleasePlugIn()\u95a2\u6570\u306e\u547c\u3073\u51fa\u3057\u307e\u3059\u3002<br \/>\n\u5f15\u6570\u306fplugProvider\u30af\u30e9\u30b9\u304b\u3089\u53d6\u5f97\u3057\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143\u30af\u30e9\u30b9(IComponent\u30af\u30e9\u30b9)\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u64cd\u4f5c\u30af\u30e9\u30b9\u306e\u7d99\u627f\u5143\u30af\u30e9\u30b9(IEditController\u30af\u30e9\u30b9)\u306e\u30dd\u30a4\u30f3\u30bf\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u4eca\u56de\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u64cd\u4f5c\u30af\u30e9\u30b9\u306f\u53d6\u5f97\u3057\u3066\u3044\u306a\u3044\u306e\u3067nullptr\u3068\u3057\u3066\u3044\u307e\u3059\u3002releasePlugIn()\u95a2\u6570\u306e\u8a73\u7d30\u306f\u5272\u611b\u3044\u305f\u3057\u307e\u3059\u3002<\/p>\n<p>\u3010main.cpp\u3011<br \/>\n[crayon start-line=&#8221;127&#8243; mark=&#8221;5,9&#8243;]<br \/>\n\t\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\t\/\/ \u7d42\u4e86\u51e6\u7406<\/p>\n<p>\t\/\/ IAudioProcessor\u306frelease()\u3092\u547c\u3073\u51fa\u3057\u3066\u89e3\u653e\u3059\u308b\u3002<br \/>\n\tprocessor->release();<\/p>\n<p>\t\/\/ IComponent\u30af\u30e9\u30b9\u306fPlugProvider\u30af\u30e9\u30b9\u3067\u89e3\u653e\u3059\u308b\u3002<br \/>\n\t\/\/ PlugProvider\u30af\u30e9\u30b9\u81ea\u4f53\u306fmake_shared\u3067\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u89e3\u653e\u306f\u4e0d\u8981\u3002<br \/>\n\tplugProvider->releasePlugIn(component, nullptr);<\/p>\n<p>\t\/\/ Module\u30af\u30e9\u30b9\u306fmake_shared\u3067\u4f5c\u6210\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u89e3\u653e\u306f\u4e0d\u8981\u3002<br \/>\n\t\/\/ PluginFactory\u30af\u30e9\u30b9\u306f\u89e3\u653e\u306e\u5fc5\u8981\u306f\u7279\u306b\u306a\u3044\u3002<br \/>\n\tprintf(&#8220;\u7d42\u4e86\u3057\u307e\u3059\\n&#8221;);<br \/>\n\treturn 0;<br \/>\n[\/crayon]<\/p>\n<h1 id=\"\u6700\u5f8c\u306b\">\u6700\u5f8c\u306b<\/h1>\n<p>\u5b9f\u884c\u7d50\u679c\u306e\u30b5\u30f3\u30d7\u30eb\u306b\u3064\u3044\u3066\u306f\u7279\u306b\u9762\u767d\u5473\u3082\u306a\u3044\u305f\u3081\u5272\u611b\u3057\u307e\u3057\u305f\u304c\u3001\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u521d\u671f\u5316\u306f\u4ee5\u4e0a\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\n\u3053\u306e\u5f8c\u3001\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308c\u3070\u5b9f\u969b\u306b\u97f3\u58f0\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u6b21\u56de\u306f\u3001\u4f5c\u6210\u3057\u305f\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u3068\u3053\u308d\u307e\u3067\u3092\u8aac\u660e\u3044\u305f\u3057\u307e\u3059\u3002<\/p>\n<p>\u3000\u3000\u6b21\u56de\u2192<a href=\"https:\/\/www.utsbox.com\/?p=3368\">\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3067\u306e\u97f3\u58f0\u51e6\u7406\u6e96\u5099<\/a><\/p>\n<p><a href=\"https:\/\/www.utsbox.com\/?page_id=1316\">VST3\u30d7\u30e9\u30b0\u30a4\u30f3\u4f5c\u308a<\/a>\u306e\u60c5\u5831\u306f\u3053\u3061\u3089\u306b\u3082\u3054\u3056\u3044\u307e\u3059\u3000\u2192\u3000<a href=\"https:\/\/www.utsbox.com\/?page_id=1316\">\u306f\u3058\u3081\u3066\u306eVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u4f5c\u308a<\/a><\/p>\n<p>\u3054\u6307\u6458\u3084\u3054\u8cea\u554f\u306a\u3069\u304c\u3054\u3056\u3044\u307e\u3057\u305f\u3089\u3001\u30b3\u30e1\u30f3\u30c8\u6b04\u304b<a href=\"https:\/\/jbbs.shitaraba.net\/computer\/42917\/\" title=\"\u63b2\u793a\u677f\" target=\"_blank\" rel=\"noopener noreferrer\">\u63b2\u793a\u677f<\/a>\u3001<a href=\"https:\/\/twitter.com\/vstcpp\">Twitter<\/a>\u3067\u3054\u9023\u7d61\u3044\u305f\u3060\u3051\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u25a0<a href=\"https:\/\/jbbs.shitaraba.net\/computer\/42917\/\" title=\"\u63b2\u793a\u677f\" target=\"_blank\" rel=\"noopener noreferrer\">\u63b2\u793a\u677f<\/a><br \/>\n\u25a0Twitter\u30a2\u30ab\u30a6\u30f3\u30c8\uff1a@vstcpp\u3000\u3000\u3000URL\uff1a<a href=\"https:\/\/twitter.com\/vstcpp\">https:\/\/twitter.com\/vstcpp<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u521d\u671f\u5316 \u524d\u56de\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\u7c21\u5358\u306aVST3\u30db\u30b9\u30c8\u306e\u4f5c\u6210\u306b\u3064\u3044\u3066\u8a18\u8f09\u3044\u305f\u3057\u307e\u3057\u305f\u3002 \u4eca\u56de\u306fVST3\u30d7\u30e9\u30b0\u30a4\u30f3\u304b\u3089\u97f3\u58f0\u51e6\u7406\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u8aac\u660e\u3092\u5b9f\u65bd\u3057\u307e\u3059\u3002 \u4eca\u56de\u4f5c\u6210\u3059\u308b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[17],"tags":[],"class_list":["post-3043","post","type-post","status-publish","format-standard","hentry","category-vst3"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p5fXUX-N5","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.utsbox.com\/index.php?rest_route=\/wp\/v2\/posts\/3043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.utsbox.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.utsbox.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.utsbox.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.utsbox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3043"}],"version-history":[{"count":48,"href":"https:\/\/www.utsbox.com\/index.php?rest_route=\/wp\/v2\/posts\/3043\/revisions"}],"predecessor-version":[{"id":3749,"href":"https:\/\/www.utsbox.com\/index.php?rest_route=\/wp\/v2\/posts\/3043\/revisions\/3749"}],"wp:attachment":[{"href":"https:\/\/www.utsbox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.utsbox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.utsbox.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}