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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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






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



рдбрд┐рдЬрд┐рдЯрд▓ рд╡рд┐рд░реВрдкрдг





рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдЧреНрдирд▓ рдорд╛рди рд╕реАрдорд┐рдд рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдкрд╛рд░ рди рдЬрд╛рдПрдВ:







"рдЕрдзрд┐рдХ" рдХрд╣рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ "рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реАрдорд╛ рд╕реЗ рдиреАрдЪреЗ рдЧрд┐рд░рдирд╛"ред



рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА duplicate



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдирдпрд╛ рдирд╛рдо рджреЗрдХрд░ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдореЗрдВ рдЙрди рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдП рдереЗред

рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ, рдЗрд╕рдореЗрдВ IPlugExamples рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рджрд░реНрдЬ рдХрд░реЗрдВ:



./duplicate.py MyFirstPlugin/ DigitalDistortion YourName







рдпрджрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдкрдврд╝реА рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдПрдХ рдореИрдХ рдкрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ Xcode рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рд╣реМрд╕рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ DigitalDistortion рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ DigitalDistortion.xcodeproj рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдПрдкреАрдкреА рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╕реНрдХреАрдорд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛ рдерд╛ рддрд╛рдХрд┐ REAPER VST рдФрд░ AU рдХреЗ рд▓рд┐рдП рдЪрд▓рддрд╛ рд░рд╣реЗред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд▓реЙрдиреНрдЪ рдкрд░ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рд╡рд╛рдВрдЫрд┐рдд .rpp рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред



рдЕрдм REAPER рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ MyFirstPlugin рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди DigitalDistomy ред рдЪрдорддреНрдХрд╛рд░ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ REAPER рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЗрдВ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрд┐рдд рдкрд╛рда рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ duplicate



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рднреА "MyFirstPlugin" рдХреЛ "DigitalDistortion" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдкрд╣рд▓реЗ mGain



рдХреЗ mGain



рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред DigitalDistortion.h рдЦреЛрд▓реЗрдВ рдФрд░ private



рдЪрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ:



 private: double mThreshold;
      
      







рдЕрдм DigitalDistortion.cpp рдореЗрдВ, Threshold



рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ (Cmd + Alt + F) рдмрджрд▓реЗрдВред рдЬрдм рдХреЛрдбрд╛рдВрддрд░рдг, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкреЙрдк рдЕрдк рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд▓рд╛рдЗрди рдореЗрдВ, рдиреНрдпреВрдирддрдо рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ 0.01



рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ 100.0



рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:



 GetParam(kThreshold)->InitDouble("Threshold", 100.0, 0.01, 100.0, 0.01, "%");
      
      







рдЕрдм рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд╕реАрдзреЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 void DigitalDistortion::ProcessDoubleReplacing( double** inputs, double** outputs, int nFrames) { // Mutex is already locked for us. int const channelCount = 2; for (int i = 0; i < channelCount; i++) { double* input = inputs[i]; double* output = outputs[i]; for (int s = 0; s < nFrames; ++s, ++input, ++output) { if(*input >= 0) { // Make sure positive values can't go above the threshold: *output = fmin(*input, mThreshold); } else { // Make sure negative values can't go below the threshold: *output = fmax(*input, -mThreshold); } } } }
      
      







рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ fmin



рдХрд┐ fmin



рдФрд░ fmax



рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ fmax



, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ min



рдФрд░ max



рдХрд░рдиреЗ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ DigitalDistortion.cpp рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:



 #include <math.h>
      
      







рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд┐рдЫрд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрдЬрд╛рдп рдЬреЛрдбрд╝реЗрдВ:



 #include <algorithm>
      
      







рдФрд░ fmin



рдХреЛ std::min



рд╕рд╛рде рдмрджрд▓реЗрдВ, рдФрд░ fmax



рдХреЛ std::max



рд╕рд╛рде рдмрджрд▓реЗрдВред



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ channelCount



рдорд╛рди рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рд╣реИ, рд╣рдордиреЗ рдЪреИрдирд▓реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░реЗрдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдпрд╣реА рд╣реИ, рдкрд╣рд▓реЗ рдкреНрд▓рдЧрдЗрди рдПрдХ рдЪреИрдирд▓ рд╕реЗ рдХрдИ рдирдореВрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рдХреЗ рдирдореВрдиреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИред

if



рд╕рд╛рде рд╕рд╢рд░реНрдд рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИред рдЖрдпрд╛рдо рдХреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдореЗрдВ рд╕реЗ рдЫреЛрдЯреЗ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ: рдпрд╛ рддреЛ рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдпрд╛ рд╕реАрдорд╛ред рдирдХрд╛рд░рд╛рддреНрдордХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдмрдбрд╝реЗ рдХреЛ рдЪреБрдирддреЗ рд╣реИрдВ: рдпрд╛ рддреЛ *input



рдпрд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реАрдорд╛ рдореВрд▓реНрдпред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рдЙрд╕ рдореВрд▓реНрдп рдХреЛ рдЪреБрдирддреЗ рд╣реИрдВ рдЬреЛ рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд╣реИред

REAPER рдореЗрдВ рдкреНрд▓рдЧрдЗрди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЯреЗрд╕реНрдЯ рд╕рд╛рдЙрдВрдб рдкрд░ рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдВред рдЬрдм рдШреБрдВрдбреА рдХреЛ рджрд╛рдИрдВ рдУрд░ рдореЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдзреНрд╡рдирд┐ рд╕реБрдирд╛рдИ рджреЗрдЧреАред рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдиреЙрдм рд╡рд╛рдорд╛рд╡рд░реНрдд рд░реВрдк рд╕реЗ рдореБрдбрд╝рддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рд╡рд┐рдХреГрдд рд╕рдВрдХреЗрдд рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕реЗ рд╣реА рд╡рд┐рдХреГрддрд┐ рдмрдврд╝рддреА рд╣реИ, рд╕рд┐рдЧреНрдирд▓ рд╢рд╛рдВрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдереНрд░реЗрд╢реЛрд▓реНрдб рд╡реИрд▓реНрдпреВ рдХреЛ рдХрд░реАрдм рдФрд░ рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдХрднреА рд╢рд╛рдВрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдпрд╛рдо рдХреЛ рдХрд╛рдЯ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреА рднрд░рдкрд╛рдИ рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдХреЛ рдПрдХ рд╕реАрдорд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ:



 if(*input >= 0) { *output = fmin(*input, mThreshold); } else { *output = fmax(*input, -mThreshold); } *output /= mThreshold;
      
      







рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИ, рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдорд╛рди 0.01



рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХрднреА рднреА рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рднрд▓реЗ рд╣реА рд╣рдо рдШреБрдВрдбреА рдХреЛ рдмрд╛рдИрдВ рдУрд░ рдореЛрдбрд╝ рджреЗрдВред

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



рдЕрдм рддрдХ, рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд░реНрдл рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ







рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдзреНрд╡рдирд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдкреНрд░реАрд╕реЗрдЯ рдФрд░ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред



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

martin-finke.de/blog/articles/audio-plugins-005-digital-distortion



All Articles