문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top