рднрд╛рдЧ 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