문제
VST 효과를 호스팅하는 작은 프로그램을 구축하려고 노력하고 있으며 플러그인 DLLS 용 폴더를 스캔하고 싶습니다.
모든 DLL을 찾는 방법을 알고 있지만 이제 다음 질문이 있습니다.
- 주어진 DLL이 VST 플러그인인지 확인하는 가장 좋은 방법은 무엇입니까?
DDL이 적절한 기능을 내보내는 지 확인하려고 노력했으며 VST SDK의 최신 버전으로 만든 플러그인에는 "vstpluginmain"이라는 메소드를 내보내지 만 구형 버전은 다소 일반적인 "메인"기능을 내보내기 때문에 잘 작동합니다. - 플러그인이 효과인지 악기인지 어떻게 결정합니까?
- VST 쉘 플러그인을 어떻게 스캔합니까?
쉘 플러그인은 기본적으로 여러 효과가 포함 된 DLL입니다. 이것의 예는 Waves Audio의 플러그인입니다. http://www.waves.com/
추신 :이 모든 일을 할 수있는 도서관이 있다면 저에게 알려주십시오.
해결책
VST 플러그인을 결정하는 방법?
Main/VSTPLUGINMAIN을 찾은 후에 ... 전화하십시오! 반환 된 것이 Null이면 VST가 아닙니다. 반환 된 것이 바이트 "VSTP"에 대한 포인터 인 경우 VstInt32 magic; ///< must be #kEffectMagic ('VstP')
Aeffect.h)에는 VST가 있습니다.
VSTPLUGINMAIN은 AEFFECT 구조에 대한 포인터를 반환합니다. 이 구조를 봐야합니다.
효과 또는 기기? AEffect::flags | (effFlagsIsSynth = 1 << 8)
쉘 VST는 더 복잡합니다.
카테고리는 kplugcateingshell입니다
"Shellcategory"Cando를 지원하십시오.
EffShellGetNextPlugin을 사용하여 열거하십시오.
예를 들어, 원하는 ID로 콜백에서 AudiomasterCurrentID에 응답하십시오.
다른 팁
@Dave Gamble은 그것을 못 박았지만 VST 쉘 플러그인에 몇 가지 사항을 추가하고 싶었습니다.
VST가 쉘 플러그인인지 확인하려면 effGetPlugCategory
플러그인 디스패처에 대한 opcode. 그것이 돌아 오면 kPlugCategShell
, 그러면 쉘 플러그인입니다. 쉘에서 하위 플러그 인 목록을 얻으려면 기본적으로 effShellGetNextPlugin
0이 반환 될 때까지 코드 snippit 예제 ( 작동하는 VST 호스트):
// All this stuff should probably be set up far earlier in your code...
// This assumes that you have already opened the plugin and called VSTPluginMain()
typedef VstIntPtr (*Vst2xPluginDispatcherFunc)(AEffect *effect, VstInt32 opCode, VstInt32 index, VstIntPtr value, void *ptr, float opt);
Vst2xPluginDispatcherFunc dispatcher;
AEffect* plugin;
char nameBuffer[40];
while(true) {
memset(nameBuffer, 0, 40);
VstInt32 shellPluginId = dispatcher(pluginHandle, effShellGetNextPlugin, 0, 0, nameBuffer, 0.0f);
if(shellPluginId == 0 || nameBuffer[0] == '\0') {
break;
}
else {
// Do something with the name and ID
}
}
실제로 VST 쉘에 플러그인을로드하려면 약간 까다 롭습니다. 먼저, 호스트는 처리해야합니다 audioMasterCurrentId
호스트 콜백의 OPCODE. VST를 호출 할 때 VSTPluginMain()
메소드 플러그인을 인스턴스화하면이 OPCode로 호스트 콜백을 호출하고로드해야 할 고유 ID를 요청합니다.
이 콜백이 만들어 졌기 때문입니다 ~ 전에 기본 함수는 반환됩니다 (따라서 전달하기 전에 AEffect*
호스트에게), 즉, 의미있는 데이터에 대한 포인터를 저장할 수 없으므로 전역 변수에로드하려면 쉘 플러그인 ID를 저장해야 할 것입니다. void* user
의장 AEffect
호스트 콜백에서 당신에게 다시 전달 될 때까지 구조하십시오.
.NET에서 VST 호스트 애플리케이션을 개발하려면 vst.net