음악, 삶, 개발

VST3 플러그인의 기본적인 코드 구조 본문

개발 공부/Juce 공부방

VST3 플러그인의 기본적인 코드 구조

Lee_____ 2020. 9. 25. 21:24

Juce 는 굉장히 거대한 프레임워크이기때문에, 

바로 디테일로 들어가면 이해가 하나도 안된다. 

따라서 가장 기본이 되는 VST3 의 골격 구조를 코드로 정리해놓고, 머리속에 넣어두자.

Juce 에서 VST3 을 만들때 가장 필수 클래스는

juce::AudioProcessor 와 juce::AudioProcessorEditor 이다.

이 둘을 상속받아 클래스를 만들고, 그후 하위 클래스들을 객체로 배치해나가면서 플러그인을 만드는것이다.

나는 미디 플러그인을 기준으로, 필요한 클래스는 다음과 같다.

 

1. Main.cpp : createPluginFilter() 를 실행하며, Juce 에서는 main() 함수 역할을 한다.

2. 파생클래스 from juce::AudioProcessor (추상클래스) : ValueTree 를 보유해야하며, 실제 프로세싱은 4번에서 담당.

3. 파생클래스 from juce::AudioProcessorEditor (추상클래스) : 플러그인 창을 생성한것이고, 실제 GUI 는 5번 클래스에서 담당.

4. 미디 프로세싱 클래스 : 2번 클래스의 미디 buffer 를 프로세싱.

5. 파생클래스 from juce::Component, juce::ValueTree::Listener : GUI 디자인하며, valueTree 를 통해 다른 클래스와 송신.

6. 파생클래스 from juce::LookAndFeel_V4 : 다른 Component 파생 클래스를 꾸며주기위함. Gui 에 대한 일종의 Skin 또는 Theme


// Main.cpp : createPluginFilter() 를 실행하며, Juce 에서는 main() 함수 역할을 한다.
juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter() {

    return new MainProcessor();

}

// 2. 파생클래스 from juce::AudioProcessor (추상클래스) : ValueTree 를 보유해야하며, 실제 프로세싱은 4번에서 담당.
class MainProcessor : public juce::AudioProcessor {

    public  :

        juce::AudioProcessorValueTreeState apvts; // ValueTree


}

// 3. 파생클래스 from juce::AudioProcessorEditor (추상클래스) : 플러그인 창을 생성한것이고, 실제 GUI 는 5번 클래스에서 담당.
class MainEditor : public juce::AudioProcessorEditor {}


// 4. 미디 프로세싱 클래스 : 2번 클래스의 미디 buffer 를 프로세싱.
class MidiProcessor {}

// 5. 파생클래스 from juce::Component, juce::ValueTree::Listener : GUI 디자인하며, valueTree 를 통해 다른 클래스와 송신.
class LeeComponent : public juce::Component {}

// 6. 파생클래스 from juce::LookAndFeel_V4 : 다른 Component 파생 클래스를 꾸며주기위함. Gui 에 대한 일종의 Skin 또는 Theme
class OtherLookAndFeel : public juce::LookAndFeel_V4 {}

juce::AudioProcessor 가 가장 부모 클래스, 

그 다음이 juce::AudioProcessorEditor 라고 보면 된다.

 

물론 이제 실제 개발에 들어가면 디테일에서 머리가 아파지지만,

이렇게 큰 그림을 머리속에 넣어두는것이 중요할것이다.