рдСрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдмрдирд╛рдирд╛, рднрд╛рдЧ 2

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдкреЛрд╕реНрдЯ:

рднрд╛рдЧ 1. рдкрд░рд┐рдЪрдп рдФрд░ рд╕реЗрдЯрдЕрдк

рднрд╛рдЧ 2. рдХреЛрдб рд╕реАрдЦрдирд╛

рднрд╛рдЧ 3. рд╡реАрдПрд╕рдЯреА рдФрд░ рдПрдпреВ

рднрд╛рдЧ 4. рдбрд┐рдЬрд┐рдЯрд▓ рд╡рд┐рд░реВрдкрдг

рднрд╛рдЧ 5. рдкреНрд░реАрд╕реЗрдЯ рдФрд░ рдЬреАрдпреВрдЖрдИ

рднрд╛рдЧ 6. рд╕рд┐рдЧреНрдирд▓ рд╕рдВрд╢реНрд▓реЗрд╖рдг

рднрд╛рдЧ 7. рдорд┐рдбреА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рднрд╛рдЧ 8. рдЖрднрд╛рд╕реА рдХреАрдмреЛрд░реНрдб

рднрд╛рдЧ 9. рд▓рд┐рдлрд╛рдлреЗ

рднрд╛рдЧ 10. рдЬреАрдпреВрдЖрдИ рдореЗрдВ рд╕реБрдзрд╛рд░

рднрд╛рдЧ 11. рдлрд╝рд┐рд▓реНрдЯрд░

рднрд╛рдЧ 12. рдХрдо рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓рд╛ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛

рднрд╛рдЧ 13. рдирдпрд╛ рд╕реНрд╡рд░реВрдк

рднрд╛рдЧ 14. рдкреЙрд▓реАрдлреЛрдиреА 1

рднрд╛рдЧ 15. рдкреЙрд▓реАрдлреЛрдиреА 2

рднрд╛рдЧ 16. рдПрдВрдЯреАрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ






рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рд╕рдВрд╕рд╛рдзрди редh , MyFirstPlugin.h рдФрд░ MyFirstPlugin.cpp ред рдлрд┐рд▓рд╣рд╛рд▓, рдкреНрд▓рдЧрдЗрди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЙрд▓реНрдпреВрдо рдирд┐рдпрдВрддреНрд░рдг рд╣реИред





рд╕реАрдЦрдиреЗ рдХрд╛ рдХреЛрдб





рд▓рдЧрд╛рддрд╛рд░, рдЭрдВрдбреЗ, рдФрд░ рдЫрд╡рд┐ рд╕реНрд░реЛрдд





рдирд╛рд╡рд┐рдХ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдЦреЛрд▓реЗрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдирд╛рдо, рдЗрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рдФрд░ GUI рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЬреИрд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред 23-26 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



// 4 chars, single quotes. At least one capital letter #define PLUG_UNIQUE_ID 'Ipef' // make sure this is not the same as BUNDLE_MFR #define PLUG_MFR_ID 'Acme'
      
      







рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдХреИрдЯрд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд▓рд╛рдЗрдиреЗрдВ 56 рдФрд░ рдЖрдЧреЗ рд╡реЙрд▓реНрдпреВрдо рдШреБрдВрдбреА рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдФрд░ рдкрде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд▓рдЧрдЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрддреЗ рд╣реИрдВ:



 // Unique IDs for each image resource. #define KNOB_ID 101 // Image resource locations for this plug. #define KNOB_FN "resources/img/knob.png"
      
      







рдирд╛рд╡рд┐рдХ рдФрд░ рдЦреБрд▓реЗ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдЦреЛрдЬреЗрдВ тЖТ img тЖТ knob.png рдпрд╣ рд╕рд╛рда рд╡рд┐рднрд┐рдиреНрди рдХрд▓рдо рдкрджреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЗрдд рд╣реИ, рдЖрдХрд╛рд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ 48 рд╕реЗ 48 рдкрд┐рдХреНрд╕реЗрд▓ред рдЬрдм рдЖрдк рдкреНрд▓рдЧрдЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдШреБрдВрдбреА рдХреЛ рдШреБрдорд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣реИрдВрдбрд▓ рдХреА рдЫрд╡рд┐ рдШреВрдорддреА рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡рд▓ рдЗрд╕ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХрд╛ рд╕рдВрдЧрдд рд╣рд┐рд╕реНрд╕рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдкрд┐рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдХрд▓рдо рдореЗрдВ рдХреБрдЫ рдирд┐рд╢рд╛рди рд╣реИрдВ рдФрд░ рдПрдХ рдЫрд╛рдпрд╛ рдбрд╛рд▓реА рд╣реИред рдлрд┐рд░, рд░реЛрдЯреЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдЫрд╛рдпрд╛ рднреА рд╕реНрдкрд┐рди рд╣реЛрдЧреАред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ) рдЬрд╛рдирддреЗ рд╣реИрдВред



рдиреАрдЪреЗ рд╕рдВрд╕рд╛рдзрди рдореЗрдВред рдЖрдк рдкреНрд▓рдЧрдЗрди рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 #define GUI_WIDTH 300 #define GUI_HEIGHT 300
      
      







рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд▓рдЧрдЗрди рдЪрд▓рд╛рддреЗ рд╣реИрдВред



рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕





MyFirstPlugin.h рдЦреЛрд▓реЗрдВред рдЗрд╕рдореЗрдВ рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред public



рднрд╛рдЧ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛, рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдФрд░ рд╡рд░реНрдЧ рдХреЗ рддреАрди рд╕рджрд╕реНрдп рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:







private



рднрд╛рдЧ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ double



рдЪрд░ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╡реЙрд▓реНрдпреВрдо рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред



рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди





рд╣рдо рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ! MyFirstPlugin.cpp рдЦреЛрд▓реЗрдВред рддреБрд░рдВрдд рд╣рдореЗрдВ enum



рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд░рд┐рд╕реАрд╡рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:



 enum EParams { kGain = 0, kNumParams };
      
      







kGain = 0



рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ kNumParams



рдмрд╛рдж kNumParams



рдбрд╛рд▓рдХрд░, kNumParams



рдкреНрд▓рдЧ-рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 1) рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд enum



рд░рд┐рд╕реЛрд░реНрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╣реИрдВрдбрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:



 enum ELayout { kWidth = GUI_WIDTH, kHeight = GUI_HEIGHT, kGainX = 100, kGainY = 100, kKnobFrames = 60 };
      
      







рдпрд╣ knob.png рдореЗрдВ рдлрд╝реНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ 60 рддрдХ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:



 //arguments are: name, defaultVal, minVal, maxVal, step, label GetParam(kGain)->InitDouble("Gain", 50., 0., 100.0, 0.01, "%");
      
      







рдЬреАрдпреВрдЖрдИ рдореЗрдВ рдЕрдм рддрдХ, рди рддреЛ рдХреЛрдИ рдорд╛рди рдФрд░ рди рд╣реА рдкреНрд░рддрд┐рд╢рдд рдЪрд┐рд╣реНрди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рди 0



рд╕реЗ 100



рддрдХ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 50



ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдиреНрдирдпрди рд╡реГрддреНрдд рдкрд░ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣ SetShape(2.)



рдХрд╛рд░рдг рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ SetShape(1.)



рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг рд░реИрдЦрд┐рдХ рд╣реЛрдЧрд╛ред рдпрд╣ SetShape



рдЬреЛ SetShape



рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдбрд┐рдЬрд╛рдЗрдирд░ рд╡рд╛рдВрдЫрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд▓рд╛рд▓ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:



 IGraphics* pGraphics = MakeGraphics(this, kWidth, kHeight); pGraphics->AttachPanelBackground(&COLOR_RED);
      
      







рдЙрд╕рдХреЗ рдмрд╛рдж, knob.png рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ IKnobMultiControl рдмрдирд╛рдпрд╛ рдФрд░ GUI рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред IKnobMultiControl



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ kKnobFrames рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдореЗрдВ рдлреНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



 IBitmap knob = pGraphics->LoadIBitmap(KNOB_ID, KNOB_FN, kKnobFrames); pGraphics->AttachControl(new IKnobMultiControl(this, kGainX, kGainY, kGain, &knob));
      
      







рдЕрдВрдд рдореЗрдВ, рдбрд┐рдЬрд╛рдЗрдирд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реАрд╕реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ:



 MakeDefaultPreset((char *) "-", kNumPrograms);
      
      







OnParamChange



(рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ) рдкрд░ OnParamChange



рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред IMutexLock



рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ:



 case kGain: mGain = GetParam(kGain)->Value() / 100.; break;
      
      







рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, kGain



0 рд╕реЗ 100 рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдорд╛рди рдХреЛ 100 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо mGain



рд╡рд░реНрдЧ private



рд╕рджрд╕реНрдп private



0 рд╕реЗ 1 private



рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред



рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ GUI рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреИрд╕реЗ mGain



рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди mGain



ред рдЖрдЗрдП рдЕрдм рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдЖрдиреЗ рд╡рд╛рд▓реЗ рдСрдбрд┐рдпреЛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдПрдХ double



рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рдирдореВрдиреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рд╕рдВрдХреЗрдд рдЖрдпрд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

ProcessDoubleReplacing



рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ double** inputs



ред double



рдХрд╛ рдПрдХ рдХреНрд░рдо double*



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд▓рдЧрдЗрди рджреЛ рдЪреИрдирд▓реЛрдВ (рд╕реНрдЯреАрд░рд┐рдпреЛ) рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдирдореВрдиреЛрдВ рдХреЗ рдХрдИ рджреГрд╢реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ double**



рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдпрд╣ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ:



 double* in1 = inputs[0]; double* in2 = inputs[1];
      
      







in1



рдирдореВрдиреЛрдВ (рдмрд╛рдПрдВ рдЪреИрдирд▓) рдХреЗ рдкрд╣рд▓реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, in2



рд╕рд╣реА рдЪреИрдирд▓ рдХреЗ рдирдореВрдиреЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 for (int s = 0; s < nFrames; ++s, ++in1, ++in2, ++out1, ++out2) { *out1 = *in1 * mGain; *out2 = *in2 * mGain; }
      
      







рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ mGain



рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдкрд░ рд▓рд┐рдЦреЗрдВред nFrames



рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐ рдЪреИрдирд▓ рдХрд┐рддрдиреЗ рдирдореВрдиреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдмрдлрд╝рд░реНрд╕ рдХреА рд▓рдВрдмрд╛рдИ рдЬрд╛рди рд╕рдХреЗрдВред

рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рдЖрдк рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрдкреАрдХрд░ рд╕реЗ рдЦреБрдж рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдкреБрдЯ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдХреБрдЫ рдФрд░), рд╡рд░реАрдпрддрд╛рдУрдВ рдкрд░ рдЬрд╛рдПрдВ :











Reset



рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ Reset



ред рджрд╛рдИрдВ рдУрд░ рдирдореВрдирд╛ рджрд░ рдмрджрд▓реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдбреАрдмрдЧрд░ Reset



рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдиреАрдЪреЗ рджрд╛рдИрдВ рдУрд░, рдЬрд╣рд╛рдВ lldb



рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЯрд╛рдЗрдк рдХрд░реЗрдВ print GetSampleRate()



ред







рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдбрд┐рдмрдЧрд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реА рдорд╛рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдКрдкрд░реА рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╕реНрдЯреЙрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВред

рдЕрдм рдХреЛрдб рд╕реЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рд╣реЛрд╕реНрдЯ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣ рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛрдЧрд╛ред

рдЗрд╕ рдмреАрдЪ,



рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдврд╝рдиреЗ





рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓реЛрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрди рд╕реНрд▓рд╛рдЗрдбреЛрдВ рдХреЛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░рд╢реАрд▓ рд╢реНрд░реА рдУрд▓реА рд▓рд╛рд░реНрдХрд┐рди рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЙрдирдореЗрдВ WDL-OL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИрдВред



рдореВрд▓ рд▓реЗрдЦ:

martin-finke.de/blog/articles/audio-plugins-003-examining-the-code



All Articles