рдЧреЛ рдкрд░ рдзреНрд╡рдирд┐ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ

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

рдзрд╛рдиреАрдореВрд╖


рдзреНрд╡рдирд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП phono рдПрдХ рдПрдкреНрд▓реАрдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рд╕реЗ рдПрдХ рдХрдиреНрд╡реЗрдпрд░ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдзреНрд╡рдирд┐ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдЧрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рдЬрд░реВрд░рдд рд╣реИред


рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдиреНрд╡реЗрдпрд░ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдПрдХ рдФрд░ рдврд╛рдВрдЪрд╛ рдХреНрдпреЛрдВ? рдЕрдм рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред


рдЖрд╡рд╛рдЬ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИ?


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


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


рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп


рдпрджрд┐ рдЖрдкрдХреЛ рдзреНрд╡рдирд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдерд╛, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:


  • рдСрдбрд┐рдпреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓, рдбрд┐рд╡рд╛рдЗрд╕, рдиреЗрдЯрд╡рд░реНрдХ, рдЖрджрд┐ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдСрдбрд┐рдпреЛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреНрд░рднрд╛рд╡, рдЯреНрд░рд╛рдВрд╕рдХреЛрдб, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрджрд┐ рдЬреЛрдбрд╝реЗрдВред
  • рдСрдбрд┐рдпреЛ рдХреЛ рдлрд╝рд╛рдЗрд▓, рдбрд┐рд╡рд╛рдЗрд╕, рдиреЗрдЯрд╡рд░реНрдХ рдЖрджрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдбреЗрдЯрд╛ рдЫреЛрдЯреЗ рдмрдлрд╝рд░реНрд╕ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рдХрд▓рд╛ - рдПрдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╣реИ рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрдИ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред


рд╕рдорд╛рдзрд╛рди


рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рд╕реЗ рдПрдХ рдХрд╛рд░реНрдп рд▓реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЖрд╡рд╛рдЬ рдХреЛ рдкрд╛рда рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  • рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ
  • рд╢реЛрд░ рдХреЛ рджреВрд░ рдХрд░реЗрдВ
  • Ekvaliziruem
  • рд╡рд╛рдХреН рдкрд╣рдЪрд╛рди API рдХреЗ рд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓ рдкрд╛рд╕ рдХрд░реЗрдВ

рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдп рдХреА рддрд░рд╣, рдЗрд╕ рдПрдХ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред


рдорд╛рдерд╛


рдХрдЯреНрдЯрд░ рд╣реА рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд╛рд▓рдХреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ред рд╣рдо рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдзреНрд╡рдирд┐ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдорд╛рд░реНрдЯ рд╢реЛрд░ рдореЗрдВ рдХрдореА рдФрд░ рдорд▓реНрдЯреА-рдмреИрдВрдб рдЗрдХреНрд╡рд▓рд╛рдЗрдЬрд╝рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рдореВрд▓ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдорд╣реАрдиреЛрдВ рддрдХ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред


рд▓рдВрдмрд╛ рдФрд░ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ред


рд╕рд╛рдорд╛рдиреНрдп рдореЗрдВ


рдПрдХ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЖрдк ASIO, CoreAudio, PortAudio, ALSA рдФрд░ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рднреА рд╣реИрдВ: AAX, VST2, VST3, AUред


рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:


  1. рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕рднреА рдПрдкреАрдЖрдИ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AU рдореВрд▓ OS X рддрдХрдиреАрдХ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╡рд╣реАрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
  2. рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдбрд┐рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА C рдпрд╛ C ++ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред 1996 рдореЗрдВ, рд╕реНрдЯрд╛рдЗрдирдмрд░реНрдЧ рдиреЗ рд╡реАрдПрд╕рдЯреА рдПрд╕рдбреАрдХреЗ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдЕрднреА рднреА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓рдЧрдЗрди рдорд╛рдирдХ рд╣реИред 20 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж, C / C ++ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ: VST рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди, C #, рд░рд╕реНрдЯ рдореЗрдВ рд░реИрдкрд░ рд╣реИрдВ, рдФрд░ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдФрд░ рдХреНрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рднрд╛рд╖рд╛ рдПрдХ рд╕реАрдорд╛ рдмрдиреА рд╣реБрдИ рд╣реИ, рдЕрдм рдзреНрд╡рдирд┐ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ред рдпрджрд┐ рдХрд╛рд░реНрдп рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╡рд╣реА FFmpeg рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдЯрд┐рд▓рддрд╛ рдЖрдкрдХреА рдкрд╕рдВрдж рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рд╕рд╛рд░ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВред


рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ?


рдЖрдкрдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рдЬрдЯрд┐рд▓ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


  • рдпрд╛ рддреЛ рдЕрдкрдиреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдирд┐рдкрдЯреЗрдВ
  • рдпрд╛ рддреЛ рдХрдИ рдПрдкреАрдЖрдИ рд╕реЗ рдирд┐рдкрдЯреЗрдВ рдФрд░ рдЙрдирд╕реЗ рджреЛрд╕реНрддреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ

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


рд▓реЗрдХрд┐рди рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИред


phono


phono


phono рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ phono - рдзреНрд╡рдирд┐ рдХреЛ " рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд " рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рд╕рдмрд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧреЛ рдмреНрд▓реЙрдЧ рдкрд░ рдПрдХ рд▓реЗрдЦ рд╣реИ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдХрдИ рдЪрд░рдг рд╣реИрдВ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪреИрдирд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП


рдХреНрдпреЛрдВ рдЬрд╛рдирд╛ рд╣реИ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдбрд┐рдпреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдЧреЛ рдХреЛ рдЕрдХреНрд╕рд░ рдЗрд╕рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореМрдЬреВрджрд╛ рдСрдбрд┐рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдХреЙрдЧреЛ рдФрд░ рдХрд╛рдлреА рдХреБрдЫ рдмрд╛рдЗрдВрдбрд░реНрд╕ рд╣реИрдВред рдЖрдк рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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


рдХрдкреЛрд▓-рдХрд▓реНрдкрдирд╛


phono рдХрд╛ рджрд┐рд▓ pipe.Pipe ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рдмреНрд▓реЙрдЧ рд╕реЗ рдирдореВрдиреЗ рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:


  1. pipe.Pump (рдЕрдВрдЧреНрд░реЗрдЬреА рдкрдВрдк) - рдзреНрд╡рдирд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ , рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓
  2. pipe.Processor (рдЕрдВрдЧреНрд░реЗрдЬреА рдкреНрд░реЛрд╕реЗрд╕рд░) - рдзреНрд╡рдирд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг , рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓
  3. pipe.Sink рд╕рд┐рдВрдХ (рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рд┐рдВрдХ) - рдХреЗрд╡рд▓ рдзреНрд╡рдирд┐ рд╕рдВрдЪрд░рдг , рдЗрдирдкреБрдЯ рдЪреИрдирд▓

рдЗрдирд╕рд╛рдЗрдб pipe.Pipe рдбреЗрдЯрд╛ рдмрдлрд╝рд░реНрд╕ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо:


pipe_diagram


  1. рдПрдХ pipe.Pump
  2. рдХрдИ pipe.Processor рдиреЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд░рдЦрд╛
  3. рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ pipe.Sink ред рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛
  4. рд╕рднреА pipe.Pipe рдШрдЯрдХ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
    • рдмрдлрд░ рдЖрдХрд╛рд░ (рд╕рдВрджреЗрд╢)
    • рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреА рджрд░
    • рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛

рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрдВрдк рдФрд░ рдПрдХ рд╕рд┐рдВрдХ рд╣реИ, рдмрд╛рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред


рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред


рд╕рд░рд▓


рдХрд╛рд░реНрдп: wav рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБред


рдЖрдЗрдП рдЗрд╕реЗ " рдкреНрд░рд╛рдкреНрдд, рдкреНрд░рдХреНрд░рд┐рдпрд╛, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг " рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рдПрдВ :


  1. рдПрдХ wav рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. рдкреЛрд░реНрдЯрд╛рдбрд┐рдпреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ


рдСрдбрд┐рдпреЛ рдкрдврд╝рд╛ рдФрд░ рддреБрд░рдВрдд рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдХреЛрдб
 package example import ( "github.com/dudk/phono" "github.com/dudk/phono/pipe" "github.com/dudk/phono/portaudio" "github.com/dudk/phono/wav" ) // Example: // Read .wav file // Play it with portaudio func easy() { wavPath := "_testdata/sample1.wav" bufferSize := phono.BufferSize(512) // wav pump wavPump, err := wav.NewPump( wavPath, bufferSize, ) check(err) // portaudio sink paSink := portaudio.NewSink( bufferSize, wavPump.WavSampleRate(), wavPump.WavNumChannels(), ) // build pipe p := pipe.New( pipe.WithPump(wavPump), pipe.WithSinks(paSink), ) defer p.Close() // run pipe err = p.Do(pipe.Run) check(err) } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ: wav.Pump рдФрд░ portaudio.Sink рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рдЗрдк рдХреЗ рдкрд╛рд╕ рдХрд░реЗрдВред pipe.New рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред p.Do(pipe.actionFn) error рдлрд╝рдВрдХреНрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред


рдХрдард┐рди


рдХрд╛рд░реНрдп: рдирдореВрдиреЛрдВ рдореЗрдВ wav рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ, рдЙрдирд╕реЗ рдПрдХ рдЯреНрд░реИрдХ рд▓рд┐рдЦреЗрдВ, рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред


рдПрдХ рдЯреНрд░реИрдХ рдирдореВрдиреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдФрд░ рдПрдХ рдирдореВрдирд╛ рдСрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЦрдВрдб рд╣реИред рдСрдбрд┐рдпреЛ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, phono/asset рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред phono/asset рдкреИрдХреЗрдЬ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░реЗрдВред рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдорд╛рдирдХ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:


  1. рдПрдХ wav рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. рдСрдбрд┐рдпреЛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдирдореВрдиреЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдкрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ:


  1. рдПрдХ рдЯреНрд░реИрдХ рд╕реЗ рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. рдСрдбрд┐рдпреЛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
    • wav рдлрд╝рд╛рдЗрд▓
    • portaudio рдбрд┐рд╡рд╛рдЗрд╕

example_normal


рдлрд┐рд░, рдПрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд░рдг рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рджреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди!


рдХреЛрдб
 package example import ( "github.com/dudk/phono" "github.com/dudk/phono/asset" "github.com/dudk/phono/pipe" "github.com/dudk/phono/portaudio" "github.com/dudk/phono/track" "github.com/dudk/phono/wav" ) // Example: // Read .wav file // Split it to samples // Put samples to track // Save track into .wav and play it with portaudio func normal() { bufferSize := phono.BufferSize(512) inPath := "_testdata/sample1.wav" outPath := "_testdata/example4_out.wav" // wav pump wavPump, err := wav.NewPump(inPath, bufferSize) check(err) // asset sink asset := &asset.Asset{ SampleRate: wavPump.WavSampleRate(), } // import pipe importAsset := pipe.New( pipe.WithPump(wavPump), pipe.WithSinks(asset), ) defer importAsset.Close() err = importAsset.Do(pipe.Run) check(err) // track pump track := track.New(bufferSize, asset.NumChannels()) // add samples to track track.AddFrame(198450, asset.Frame(0, 44100)) track.AddFrame(66150, asset.Frame(44100, 44100)) track.AddFrame(132300, asset.Frame(0, 44100)) // wav sink wavSink, err := wav.NewSink( outPath, wavPump.WavSampleRate(), wavPump.WavNumChannels(), wavPump.WavBitDepth(), wavPump.WavAudioFormat(), ) // portaudio sink paSink := portaudio.NewSink( bufferSize, wavPump.WavSampleRate(), wavPump.WavNumChannels(), ) // final pipe p := pipe.New( pipe.WithPump(track), pipe.WithSinks(wavSink, paSink), ) err = p.Do(pipe.Run) } 

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рджреЛ pipe.Pipe ред рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдирдореВрдиреЛрдВ рдХреЛ рдХрд╛рдЯ рд╕рдХреЗрдВред рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ: wav.Sink рдФрд░ portaudio.Sink ред рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде, рдзреНрд╡рдирд┐ рдПрдХ рд╕рд╛рде рдПрдХ wav рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЦреЗрд▓реА рдЬрд╛рддреА рд╣реИред


рдФрд░ рднреА рдореБрд╢реНрдХрд┐рд▓


рдХрд╛рд░реНрдп: рджреЛ wav рдлрд╝рд╛рдЗрд▓реЗрдВ, рдорд┐рд╢реНрд░рдг, рдкреНрд░рдХреНрд░рд┐рдпрд╛ vst2 рдкреНрд▓рдЧрдЗрди рдкрдврд╝реЗрдВ рдФрд░ рдПрдХ рдирдИ wav рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред


phono/mixer mixer.Mixer рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг phono/mixer mixer.Mixer ред phono/mixer ред рдпрд╣ рдХрдИ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╕рд╛рде pipe.Pump рд▓рд╛рдЧреВ pipe.Sink ред pipe.Pump рдФрд░ pipe.Sink ред pipe.Sink ред


рдлрд┐рд░, рдХрд╛рд░реНрдп рдореЗрдВ рджреЛ рдЙрдк-рдореБрдЦреМрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


  1. рдСрдбрд┐рдпреЛ wav рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. рдСрдбрд┐рдпреЛ рдХреЛ рдорд┐рдХреНрд╕рд░ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ

рджреВрд╕рд░рд╛:


  1. рдорд┐рдХреНрд╕рд░ рд╕реЗ рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ред
  2. рдСрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
  3. рдСрдбрд┐рдпреЛ рдХреЛ wav рдлрд╛рдЗрд▓ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ

example_hard


рдХреЛрдб
 package example import ( "github.com/dudk/phono" "github.com/dudk/phono/mixer" "github.com/dudk/phono/pipe" "github.com/dudk/phono/vst2" "github.com/dudk/phono/wav" vst2sdk "github.com/dudk/vst2" ) // Example: // Read two .wav files // Mix them // Process with vst2 // Save result into new .wav file // // NOTE: For example both wav files have same characteristics ie: sample rate, bit depth and number of channels. // In real life implicit conversion will be needed. func hard() { bs := phono.BufferSize(512) inPath1 := "../_testdata/sample1.wav" inPath2 := "../_testdata/sample2.wav" outPath := "../_testdata/out/example5.wav" // wav pump 1 wavPump1, err := wav.NewPump(inPath1, bs) check(err) // wav pump 2 wavPump2, err := wav.NewPump(inPath2, bs) check(err) // mixer mixer := mixer.New(bs, wavPump1.WavNumChannels()) // track 1 track1 := pipe.New( pipe.WithPump(wavPump1), pipe.WithSinks(mixer), ) defer track1.Close() // track 2 track2 := pipe.New( pipe.WithPump(wavPump2), pipe.WithSinks(mixer), ) defer track2.Close() // vst2 processor vst2path := "../_testdata/Krush.vst" vst2lib, err := vst2sdk.Open(vst2path) check(err) defer vst2lib.Close() vst2plugin, err := vst2lib.Open() check(err) defer vst2plugin.Close() vst2processor := vst2.NewProcessor( vst2plugin, bs, wavPump1.WavSampleRate(), wavPump1.WavNumChannels(), ) // wav sink wavSink, err := wav.NewSink( outPath, wavPump1.WavSampleRate(), wavPump1.WavNumChannels(), wavPump1.WavBitDepth(), wavPump1.WavAudioFormat(), ) check(err) // out pipe out := pipe.New( pipe.WithPump(mixer), pipe.WithProcessors(vst2processor), pipe.WithSinks(wavSink), ) defer out.Close() // run all track1Done, err := track1.Begin(pipe.Run) check(err) track2Done, err := track2.Begin(pipe.Run) check(err) outDone, err := out.Begin(pipe.Run) check(err) // wait results err = track1.Wait(track1Done) check(err) err = track2.Wait(track2Done) check(err) err = out.Wait(outDone) check(err) } 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреАрди pipe.Pipe ред рд╕рднреА рдПрдХ рдорд┐рдХреНрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, p.Begin(pipe.actionFn) (pipe.State, error) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред p.Do(pipe.actionFn) error рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдХреЙрд▓ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рд╕реНрдерд┐рддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдм p.Wait(pipe.State) error рд╕рд╛рде рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?


рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ phono рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреНрд▓реАрдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдиреЗред рдпрджрд┐ рдЖрдкрдХреЛ рдзреНрд╡рдирд┐ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ API рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрдкрдпреБрдХреНрдд рддрддреНрд╡реЛрдВ рд╕реЗ рдПрдХ рдХрдиреНрд╡реЗрдпрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред


рдЖрдзреЗ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬ рдлрд┐рд▓реНрдорд╛рдП рдЧрдП:


  • phono/wav - рд╡реЗрд╡ рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝реЗрдВ / рд▓рд┐рдЦреЗрдВ
  • phono/vst2 - VST2 рдПрд╕рдбреАрдХреЗ рдХреЗ рдЕрдзреВрд░реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ, рдЬрдмрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд▓рдЧрдЗрди рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдирд╣реАрдВ
  • phono/mixer - рдорд┐рдХреНрд╕рд░, рдмрд┐рдирд╛ рд╕рдВрддреБрд▓рди рдФрд░ рд╡реЙрд▓реНрдпреВрдо рдХреЗ, рдПрди рд╕рд┐рдЧреНрдирд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
  • phono/asset - рдмрдлрд░ рд╕реИрдВрдкрд▓рд┐рдВрдЧ
  • phono/track - рдирдореВрдиреЛрдВ рдХреА рдХреНрд░рдорд┐рдХ рд░реАрдбрд┐рдВрдЧ (рдЯреВрдЯреА рд╣реБрдИ рдкрд░рдд)
  • phono/portaudio - рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рд┐рдЧреНрдирд▓ рдкреНрд▓реЗрдмреИрдХ

рдЗрд╕ рд╕реВрдЪреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • рдЙрд▓рдЯреА рдЧрд┐рдирддреА
  • рдлреНрд▓рд╛рдИ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░ рдЪрд░
  • HTTP рдкрдВрдк / рд╕рд┐рдВрдХ
  • рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рди
  • рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░
  • рдорд┐рдХреНрд╕рд░ рд╕рдВрддреБрд▓рди рдФрд░ рдорд╛рддреНрд░рд╛
  • рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкрдВрдк
  • рдХрдИ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдкрдВрдк
  • рдкреВрд░реНрдг vst2

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдореИрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛:


  • pipe.Pipe рдЬреАрд╡рди рдЪрдХреНрд░ - рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕рдХрд╛ рд░рд╛рдЬреНрдп рдЕрдВрддрд┐рдо рдкрд░рдорд╛рдгреБ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ
  • рдХреИрд╕реЗ рдЕрдкрдиреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░рдгреЛрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП

рдпрд╣ рдореЗрд░реА рдкрд╣рд▓реА рдУрдкрди-рд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рдорджрдж рдФрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред


рд╕рдВрджрд░реНрдн


Source: https://habr.com/ru/post/hi424623/


All Articles