
AudioKit рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ iOS рдФрд░ OSX рдХреЗ рд▓рд┐рдП рдСрдбрд┐рдпреЛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рд╕рдВрдЧреАрддрдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдСрдбрд┐рдпреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдпрд╣ рдзреНрд╡рдирд┐ рдХреЗ
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░
рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣реБрдб рдХреЗ рддрд╣рдд рд╕реНрд╡рд┐рдлреНрдЯ, рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА, рд╕реА ++ рдФрд░ рд╕реА рдФрд░ рдРрдкреНрдкрд▓ рдХреА рдСрдбрд┐рдпреЛ рдпреВрдирд┐рдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ (рдмрд▓реНрдХрд┐ рдкрд░рд┐рд╖реНрдХреГрдд) рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдБ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдиреБрдХреВрд▓ рд╕реНрд╡рд┐рдлреНрдЯ рдПрдкреАрдЖрдИ рдореЗрдВ рд▓рд┐рдкрдЯреА рд╣реБрдИ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕реАрдзреЗ Xcode Playgrounds рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо AudioKit рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдпрд╛рддреНрд░рд╛ рдкрд░ рдЬрд╛рдПрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдзреНрд╡рдирд┐ рд╕рдВрд╢реНрд▓реЗрд╖рдг
рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рднреА ред рдЖрдк рдзреНрд╡рдирд┐ рднреМрддрд┐рдХреА рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рд╣рд╛рдореЛрдВрдб рдСрд░реНрдЧрди рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдиреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рд╛рде рд╣реА, рдЖрдзреБрдирд┐рдХ рддрдХрдиреАрдХреЛрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдореВрдирд╛рдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рдкреЗрдп рдмрдирд╛рдУ, рд╡рд╛рдкрд╕ рдмреИрдареЛ рдФрд░ рдЬрд╛рдУ!
рдкрд╣рд▓рд╛ рдХрджрдо
AudioKit 3.6 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░
рдпрд╣рд╛рдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рдЕрдирдЬрд╝рд┐рдк
рдХрд░реЗрдВ ред
рдпрд╛рддреНрд░рд╛ AudioKit рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рдиреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
Xcode рдореЗрдВ
AudioKitPlaygrounds.xcodeproj рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ
+ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди
рдХрд░реЗрдВ ... рдФрд░ рдлрд┐рд░
рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ
рдЦрд╛рд▓реА рдХрд░реЗрдВ ,
рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбреЗрдореЛ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗрдВред
рдирд╡ рдЬреЛрдбрд╝рд╛ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд╢реБрд░реВ рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ:
import AudioKitPlaygrounds import AudioKit let oscillator = AKOscillator() AudioKit.output = oscillator try AudioKit.start() oscillator.start() sleep(10)
рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рддрдм рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдореЗрдиреВ рдЖрдЗрдЯрдо
рдЙрддреНрдкрд╛рдж / рдмрд┐рд▓реНрдб рдпрд╛ рдХреБрдВрдЬреА рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ until
-B ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреБрд▓рдЬрд╛рд░ рдзреНрд╡рдирд┐ рд╕реБрдиреЗрдВред (рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдХрднреА-рдХрднреА рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЖрдк рдкреНрд▓реЗ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗ рд╡рд┐рдВрдбреЛ рдХреЗ рдиреАрдЪреЗ рдмрд╛рдИрдВ рдУрд░ рдкреНрд▓реЗ / рд╕реНрдЯреЙрдк рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ Xcode рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджреЛрд╕реНрдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдФрд░ рдзреНрд╡рдирд┐ рднреМрддрд┐рдХреА
рдорд╛рдирд╡ рдЬрд╛рддрд┐ рд╣рдЬрд╛рд░реЛрдВ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рднреМрддрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреАрдд рдмрдЬрд╛ рд░рд╣реА рд╣реИред рд╣рдорд╛рд░реЗ рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдХрд░рдг, рдЬреИрд╕реЗ рдЧрд┐рдЯрд╛рд░ рдпрд╛ рдбреНрд░рдо, рд╕реИрдХрдбрд╝реЛрдВ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рд╣реИрдВред рдзреНрд╡рдирд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рд░рд┐рдХреЙрд░реНрдбреЗрдб рдЕрдиреБрднрд╡ 1874 рдореЗрдВ рдПрд▓рд┐рдпрд╛рд╕ рдЧреНрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрд▓реАрд╢рд╛ рдиреЗ рджреВрд░рд╕рдВрдЪрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ - рд╕рдВрдЧреАрдд рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ред рдЙрд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдкрдирд╛ рдЧреЛрддрд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,
рдирдпрд╛ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдкреГрд╖реНрда рдЪреБрдиреЗрдВ рдФрд░ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
import AudioKitPlaygrounds import AudioKit import PlaygroundSupport
рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдПрдХ рдирд┐рд░рдВрддрд░ рдЪрд░реНрдЪрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ - рдЬреИрд╕рд╛ рдХрд┐ рдЗрд░рд╛рджрд╛ рдерд╛ред рдЖрдк рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЙрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд▓рдЧрднрдЧ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБрдЧреЗред
рдХреНрд░рдо рдореЗрдВ рд╕рднреА рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдСрд╕рд┐рд▓реЗрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛
AKNode
рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИред рдиреЛрдбреНрд╕ рдПрдХ рдСрдбрд┐рдпреЛ рд╢реНрд░рдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рд╣реИрдВ рдЬреЛ рдзреНрд╡рдирд┐ рдЙрддреНрдкрдиреНрди рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдиреЛрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ AudioKit рдЗрдВрдЬрди рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдиреЛрдбред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдврд╛рдВрдЪрд╛ рдиреЛрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
- рдЦреИрд░, рд╣рдо рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╣ рдПрдХ рдзреНрд╡рдирд┐ рддрд░рдВрдЧ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдПрдХ рджреЛрд╣рд░рд╛рд╡ рд╕рдВрдХреЗрдд рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ,
AKOscillator
рд╕рд╛рдЗрди рд▓рд╣рд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред AudioKit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд╛рдЗрди рд╡реЗрд╡ рд╕рд┐рдЧреНрдирд▓ рд╕реНрдкреАрдХрд░ рдпрд╛ рд╣реЗрдбрдлрд╝реЛрди рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рдПрдХ рдзреНрд╡рдирд┐ рд╕реБрдирддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рдЗрди рд▓рд╣рд░ рдХреЗ рд╕рдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЙрддреНрдкрдиреНрди рдХреА рдереАред рдпрд╣ рд╕рд╛рдЗрди рд▓рд╣рд░ рдмрд╣реБрдд рд╕рдВрдЧреАрддрдордп рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдХреА рдзреНрд╡рдирд┐ рдХреЗ рд▓рд┐рдП рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ: рдЖрдпрд╛рдо - рд╕рд╛рдЗрди рд▓рд╣рд░ рдХреА рдКрдВрдЪрд╛рдИ, рдзреНрд╡рдирд┐ рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ - рдзреНрд╡рдирд┐ рдХреА рдКрдВрдЪрд╛рдИ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ, рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж рдХреЛрдб рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
oscillator.frequency = 300 oscillator.amplitude = 0.5
рдзреНрд╡рдирд┐ рдмрджрд▓ рдЧрдИ рд╣реИ, рдЕрдм рдпрд╣ рджреЛ рдмрд╛рд░ рд╢рд╛рдВрдд рдФрд░ рдмрд╣реБрдд рдХрдо рд▓рдЧрддрд╛ рд╣реИред рд╕рдВрдХреЗрдд рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╣рд░реНрдЯреНрдЬ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛) рдФрд░ рдиреЛрдЯ рдХреА рдкрд┐рдЪ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдпрд╛рдо (рдЖрдпрд╛рдо) 0 рд╕реЗ 1 рддрдХ рд╕реЗрдЯ рд╣реИ рдФрд░ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдПрд▓рд┐рдЬрд╛ рдЧреНрд░реЗ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреЗрдЯреЗрдВрдЯ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХрдИ рд╕рд╛рд▓ рдмрд╛рдж, рд▓рд┐рдпреЛ рдереЗрд░реЗрдорд┐рди рдиреЗ рдЗрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдЬреАрдм рд╕рд╛ рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ - рдереЗрд░реЗрдорд┐рди рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдореЗрдВ, рдЖрдк рдЙрдкрдХрд░рдг рдХреЗ рдКрдкрд░ рд╣рд╛рде рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЗ рд╕рд╛рде рдзреНрд╡рдирд┐ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдереЗрд░реЗрдорд┐рди рдХреИрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдк рдмреАрдЪ рдмреЙрдпрдЬрд╝ рдХрдВрдкрди рдХреЛ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ, рдереЗрд░реЗрдорд┐рди рдзреНрд╡рдирд┐ рдХреЛ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред
рдЖрдк рдереЗрд░реЗрдорд┐рдирд╡реЛрдХреНрд╕ рдХреА рдЖрд╡рд╛рдЬрд╝ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
oscillator.rampDuration = 0.2
рдФрд░ рдирд┐рдореНрди рдХреЗ рд╕рд╛рде
try AudioKit.start()
рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓реЗрдВ:
let performance = AKPeriodicFunction(every: 0.5) { oscillator.frequency = oscillator.frequency == 500 ? 100 : 500 } try AudioKit.start(withPeriodicFunctions: performance) performance.start()
rampDuration
рдкреНрд░реЙрдкрд░реНрдЯреА рдСрд╕рд┐рд▓реЗрдЯрд░ рдХреЛ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡реГрддреНрддрд┐ рдпрд╛ рдЖрдпрд╛рдо) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
AKPeriodicFunction
рдЖрд╡рдзрд┐рдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП AudioKit рд╕реЗ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд╣рд░ 0.5 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рд╛рдЗрди рд▓рд╣рд░ рдХреА рдЖрд╡реГрддреНрддрд┐ 500Hz рд╕реЗ 100Hz рддрдХ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдмрдзрд╛рдИ! рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЙрдкрдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рд╕рдВрдЧреАрдд рдиреЛрдЯреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдХрдИ рдХрд╛рд░рдХ рд╣реИрдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд┐рдпрд╛рдиреЛ рдЬреИрд╕реЗ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╛рдЬрд╝ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЖрдЧреЗ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдзреНрд╡рдирд┐ рд▓рд┐рдлрд╛рдлреЗ
рдЬрдм рдПрдХ рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдПрдХ рдиреЛрдЯ рдмрдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдзреНрд╡рдирд┐ рдХреА рдорд╛рддреНрд░рд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕рд╛рдзрди рд╕реЗ рд╕рд╛рдзрди рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИред рдПрдХ рдореЙрдбрд▓ рдЬреЛ рдЗрд╕ рдЖрд╢рдп рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рд╣рд▓реНрд▓рд╛-рдХреНрд╖рдп-рд╡рд┐рдореЛрдЪрди-рд╡рд┐рдореЛрдЪрди (ADSR) рд▓рд┐рдлрд╛рдлрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдиреЛрдЯ: рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХрднреА рднреА рд╕реНрдерд╛рдиреАрдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рдХреНрд░ рдХрд╛ рдирд╛рдо рд╡реИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреЗ рдкреИрдирд▓ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

ADSR рд▓рд┐рдлрд╛рдлреЗ рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рд╣рдорд▓рд╛ : рд╣рдорд▓рд╛ рдпрд╛ рд╕рдордп рдЬрд┐рд╕рдореЗрдВ рдзреНрд╡рдирд┐ рдЕрдкрдиреА рдЕрдзрд┐рдХрддрдо рдорд╛рддреНрд░рд╛ рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИред
- рдХреНрд╖рдп : рдЬрдВрдЧрд▓реА рдпрд╛ рд╕рдордп рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдорд╛рддреНрд░рд╛ рдЕрдзрд┐рдХрддрдо рд╕реЗ рдореБрдЦреНрдп рддрдХ рдЧрд┐рд░рддреА рд╣реИ
- рдирд┐рд░рдВрддрд░рддрд╛ : рдореБрдЦреНрдп рд╡реЙрд▓реНрдпреВрдо, рдкрд┐рдЫрд▓реЗ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд╣рдорд▓реЗ рдФрд░ рд╕реИрд╡реЗрдЬ рдХреЗ рдмрд╛рдж рдФрд░ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреБрдВрдЬреА рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рд╕рд╛рде рдзреНрд╡рдирд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА
- рд░рд┐рд▓реАрдЬ : рд░рд┐рд▓реАрдЬ рдпрд╛ рд╕рдордп рдЬрд┐рд╕рдореЗрдВ рд╡реЙрд▓реНрдпреВрдо рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдкрд┐рдпрд╛рдиреЛ рдореЗрдВ, рдзреНрд╡рдирд┐ рдХреЛ рд╣рдереМрдбрд╝реЛрдВ рджреНрд╡рд╛рд░рд╛ рддрд╛рд░ рдкрд░ рдЦрдЯрдЦрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рддреНрд╡рд░рд┐рдд рдпрд╛, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЫреЛрдЯреЗ рд╣рдорд▓реЗ рдФрд░ рд╡рд┐рд▓реНрдбреНрд╕ред рд╡рд╛рдпрд▓рд┐рди рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рд╣рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдВрдЧрд▓реА рдФрд░ рд╕реНрдерд┐рд░, рд╕рдВрдЧреАрддрдХрд╛рд░ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд╣ рдзрдиреБрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдпрдпрдВрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдореЛрдВрдб рдиреЛрд╡рд╛рдЪреЙрд░реНрдб рдерд╛ред рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг 1939 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ 163 рд╡реИрдХреНрдпреВрдо рдЯреНрдпреВрдм рдФрд░ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдХреИрдкреЗрд╕рд┐рдЯрд░ рд╢рд╛рдорд┐рд▓ рдереЗ, рдФрд░ рдЗрд╕рдХрд╛ рд╡рдЬрди 230 рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реМ рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдИ рдЧрдИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрднреА рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред
рдЬрд░реНрдиреА рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,
рдиреНрдпреВ рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдЪреБрдиреЗрдВ рдФрд░
ADSR рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдкреЗрдЬ рдмрдирд╛рдПрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ:
import AudioKitPlaygrounds import AudioKit import PlaygroundSupport let oscillator = AKOscillator()
рдпрд╣ рдмрд╕ рдПрдХ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЕрдЧрд▓рд╛, рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
let envelope = AKAmplitudeEnvelope(oscillator) envelope.attackDuration = 0.01 envelope.decayDuration = 0.1 envelope.sustainLevel = 0.1 envelope.releaseDuration = 0.3
рдпрд╣ рдПрдХ
AKAmplitudeEnvelope
рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ ADSR рд▓рд┐рдлрд╛рдлреЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрд╡рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ (рдЕрдЯреИрдХрдбреНрдпреВрд░реЗрд╢рди, рдбреЗрдХреНрд╕реНрдб рдбреНрдпреВрд░реЗрд╢рди, рд░рд┐рд▓реАрдЬрд╝рдбреНрдпреВрд░реЗрд╢рди) рд╕реЗрдХрдВрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЙрд▓реНрдпреВрдо (рд╕рд╕реНрдЯреЗрд╡реЗрд▓) рдХреЛ 0 рд╕реЗ 1 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
AKAmplitudeEnvelope
рдХреА рддрд░рд╣ рд╣реА
AKNode
рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╣рдо рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рд▓рд┐рдлрд╛рдлрд╛ рдиреЛрдбреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд╕реЗ
AKOscillator
, рдЬрд┐рд╕рд╕реЗ рдиреЛрдбреНрд╕ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
AudioKit.output = envelope let performance = AKPeriodicFunction(every: 0.5) { if (envelope.isStarted) { envelope.stop() } else { envelope.start() } } try AudioKit.start(withPeriodicFunctions: performance) performance.start() oscillator.start() PlaygroundPage.current.needsIndefiniteExecution = true
рдпрд╣ AudioKit рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо ADSR рдиреЛрдб рд╕реЗ рдЗрд╕рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдлрд╝реАрдб рдХрд░рддреЗ рд╣реИрдВред ADSR рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рдЧрд╛рддрд╛рд░
AKPeriodicFunction
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЛрдб рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рдЖрдк рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдиреЛрдЯ рдХреИрд╕реЗ рдЪрдХреНрд░ рдореЗрдВ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдкрд┐рдпрд╛рдиреЛ рдХреА рддрд░рд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИред
ADSR рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдпрд╛ рд░реЛрдХрдиреЗ рдХреЗ рджреМрд░рд╛рди рд▓реВрдк рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рджреЛ рдмрд╛рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЪрд▓рддрд╛ рд╣реИред рдЬрдм ADSR рдПрдХ рддреНрд╡рд░рд┐рдд рд╣рдорд▓реЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реЙрд▓реНрдпреВрдо 0.01 рд╕реЗрдХрдВрдб рдореЗрдВ рдЕрдкрдиреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡реЙрд▓реНрдпреВрдо 0.1 рд╕реЗрдХрдВрдб рдореЗрдВ рдореБрдЦреНрдп рд╕реНрддрд░ рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 0.5 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ 0.3 рд╕реЗрдХрдВрдб рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред
рдЖрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд╛рдпрд▓рд┐рди рдХреА рдЖрд╡рд╛рдЬред
рд╣рдореЗрдВ рдЬреЛ рдзреНрд╡рдирд┐рдпрд╛рдБ рдорд┐рд▓реАрдВ, рд╡реЗ рд╕рд╛рдЗрди рддрд░рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдЬреЛ рдХрд┐
AKOscillator
рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдпрджреНрдпрдкрд┐ ASDR рдХрдареЛрд░ рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЖрдк рдЗрди рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреАрддрдордп рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗред
рдЖрдЧреЗ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЧрд╣рд░реА рдзреНрд╡рдирд┐ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдпреЛрдЬреНрдп рд╕рдВрд╢реНрд▓реЗрд╖рдг
рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдп рдХреА рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖ рдзреНрд╡рдирд┐ рдпрд╛ рд╕рдордп рд╣реИред
рдПрдХ рдЯрд┐рдордмрд░ рдПрдХ рдкрд┐рдпрд╛рдиреЛ рдХреЛ рд╡рд╛рдпрд▓рд┐рди рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рд╣реА рдиреЛрдЯ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд╛рдЗрдордмрд░рд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ рдзреНрд╡рдирд┐ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рд╣реИред рдзреНрд╡рдирд┐ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдкреБрди: рдЙрддреНрдкрдиреНрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕реАрдорд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдиреЛрдЯ рджреЗрдВред рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдПрдХ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рдлреА рдХреГрддреНрд░рд┐рдо рд▓рдЧрддрд╛ рд╣реИред
рдЖрдк рдПрдХрд▓ рдиреЛрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЬреАрд╡рдВрдд рдзреНрд╡рдирд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдпреЛрдЧрд╛рддреНрдордХ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдЕрдЧрд▓реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред
рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,
рдирдпрд╛ рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдЪреБрдиреЗрдВ рдФрд░
рдПрдбрд┐рдЯрд┐рд╡ рд╕рд┐рдВрдереЗрд╕рд┐рд╕ рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдкреЗрдЬ рдмрдирд╛рдПрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ:
import AudioKitPlaygrounds import AudioKit import AudioKitUI import PlaygroundSupport func createAndStartOscillator(frequency: Double) -> AKOscillator { let oscillator = AKOscillator() oscillator.frequency = frequency return oscillator }
рдпреЛрдЧрд╛рддреНрдордХ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
createAndStartOscillator
рдЕрдЧрд▓рд╛, рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
let frequencies = (1...5).map { $0 * 261.63 }
рдпрд╣рд╛рдВ рд╣рдо 1 рд╕реЗ 5 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ 261.53, рдиреЛрдЯ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдИ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рд╛рд░реНрдореЛрдирд┐рдХреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
let oscillators = frequencies.map { createAndStartOscillator(frequency: $0) }
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдмрдирд╛рдпрд╛ред
рджреЛрд▓рдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
let mixer = AKMixer() oscillators.forEach { $0.connect(to: mixer) }
AKMixer
рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ AudioKit рдиреЛрдб рд╣реИред рдпрд╣ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдиреЛрдбреНрд╕ рд╕реЗ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
let envelope = AKAmplitudeEnvelope(mixer) envelope.attackDuration = 0.01 envelope.decayDuration = 0.1 envelope.sustainLevel = 0.1 envelope.releaseDuration = 0.3 AudioKit.output = envelope let performance = AKPeriodicFunction(every: 0.5) { if (envelope.isStarted) { envelope.stop() } else { envelope.start() } } try AudioKit.start(withPeriodicFunctions: performance) performance.start() oscillators.forEach { $0.start() }
рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдорд┐рдХреНрд╕рд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ ADSR рдЬреЛрдбрд╝реЗрдВ, AudioKit рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░реЗрдВред
рдпреЛрдЧрд╛рддреНрдордХ рд╕рдВрд╢реНрд▓реЗрд╖рдг рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕рдореЗрдВ, рд▓рд╛рдЗрд╡ рд╡реНрдпреВ рдЬреИрд╕реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХрд╛ рдЕрд╡рд╕рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
class LiveView: AKLiveViewController { override func viewDidLoad() { addTitle("Harmonics") oscillators.forEach { oscillator in let harmonicSlider = AKSlider( property: "\(oscillator.frequency) Hz", value: oscillator.amplitude ) { amplitude in oscillator.amplitude = amplitude } addView(harmonicSlider) } } } PlaygroundPage.current.needsIndefiniteExecution = true PlaygroundPage.current.liveView = LiveView()
AudioKit рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рдиреЛрдВ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
AKLiveViewController
рдЙрдкрдпреЛрдЧ
AKLiveViewController
, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдо рддрддреНрд╡реЛрдВ рдХреЛ рд▓рдВрдмрд╡рдд рд░рдЦрддреЗ рд╣реИрдВред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рднреА рд╣рдо рдПрдХ
AKSlider
ред рд╕реНрд▓рд╛рдЗрдбрд░реНрд╕ рдХреЛ рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдЖрдпрд╛рдо рдХреЗ рдореВрд▓реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдХреЗ рдЖрдпрд╛рдо рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рддреЛ рдЖрдк рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рдиреЛрдВ рдореЗрдВ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд▓рд╛рдЗрд╡ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛ рдХреЗ рдКрдкрд░реА рджрд╛рдПрдБ рднрд╛рдЧ рдореЗрдВ рд╣рд▓рдХреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓рд╛рдЗрд╡ рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдЯреЛрди рд╡реНрд╣реАрд▓ рдПрдХ рдШреВрд░реНрдгрди рдбрд┐рд╕реНрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рдЧреБрд╣рд╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдкрд╛рд╕ рд╕реНрдерд┐рдд рдПрдХ рдкрд┐рдХрдЕрдк рд╣реЛрддрд╛ рд╣реИред рд╣рдореНрдореЙрдиреНрдб рдЕрдВрдЧ рдореЗрдВ рдЯреЛрди рдкрд╣рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдерд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЧрддрд┐ рд╕реЗ рдШреВрдо рд╕рдХрддрд╛ рдерд╛ред рдзреНрд╡рдирд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдХреЗ рдмрдЬрд╛рдп рдЗрд▓реЗрдХреНрдЯреНрд░реЛрдореИрдХреЗрдирд┐рдХрд▓ рд╣реИред
рдЕрдзрд┐рдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдзреНрд╡рдирд┐ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рдФрд░ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВ: рдЖрд╡реГрддреНрддрд┐ рдореЙрдбреНрдпреВрд▓реЗрд╢рди (рдлрд╝реНрд░рд┐рдХреНрд╡реЗрдВрд╕реА рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдпрд╛ рдПрдлрдПрдо) рдФрд░ рдкрд▓реНрд╕ рдЪреМрдбрд╝рд╛рдИ рдореЙрдбреНрдпреВрд▓реЗрд╢рди (рдкрд▓реНрд╕ рдЪреМрдбрд╝рд╛рдИ рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдпрд╛ рдкреАрдбрдмреНрд▓реВрдПрдо), рджреЛрдиреЛрдВ рддрдХрдиреАрдХ рдХреНрд░рдорд╢рдГ
AKFMOscillator
рдФрд░
AKPWMOscillator
рдореЗрдВ AudioKit рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк
AKOscillator
рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░
AKOscillator
, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред
polyphony
1970 рдХреЗ рджрд╢рдХ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рд╕реЗ рдЖрдВрджреЛрд▓рди рд╢реБрд░реВ рд╣реБрдЖ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд┐рдлрд╛рдлреЗ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рд╢рд╛рдорд┐рд▓ рдереЗред рдПрдирд╛рд▓реЙрдЧ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдзреНрд╡рдирд┐ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдиреЗ рд▓рдЧреАред рдЗрд╕рдиреЗ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдХреЛ рд╕рд╕реНрддрд╛ рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛ рджрд┐рдпрд╛ рдФрд░ рдпрд╛рдорд╛рд╣рд╛ рдЬреИрд╕реЗ рдмреНрд░рд╛рдВрдбреЛрдВ рдХреЗ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдПред

рд╣рдорд╛рд░реЗ рд╕рднреА рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдиреЛрдЯ рдЪрд▓рд╛рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдереЗред рдХрдИ рдЙрдкрдХрд░рдг рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдиреЛрдЯ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ
рдкреЙрд▓реАрдлреЛрдирд┐рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдЙрдкрдХрд░рдг рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдиреЛрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ,
рдореЛрдиреЛрдлреЛрдирд┐рдХ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВред
рдкреЙрд▓реАрдлреЛрдирд┐рдХ рдзреНрд╡рдирд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдИ рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд┐рдХреНрд╕рд░ рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди AudioKit рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХрд╛ рд╣реИред
рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдкреЙрд▓реАрдлрдиреА рдирд╛рдо рджреЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ:
import AudioKitPlaygrounds import AudioKit import AudioKitUI import PlaygroundSupport let bank = AKOscillatorBank() AudioKit.output = bank try AudioKit.start()
рдпрд╣рд╛рдВ рд╣рдордиреЗ
AKOscillatorBank
рдХрд╛ рдмреИрдВрдХ рдмрдирд╛рдпрд╛ред рдпрджрд┐ рдЖрдк рдХрдХреНрд╖рд╛ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣
AKPolyphonicNode
рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ,
AKNode
рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░
AKPolyphonic
рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдХрд╛ рдмреИрдВрдХ рдПрдХ рд╣реА AudioKit рдиреЛрдб рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдереАред рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдорд┐рдХреНрд╕рд░, рд▓рд┐рдлрд╛рдлреЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд┐рд▓реНрдЯрд░ рдФрд░ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
AKPolyphonic
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреЙрд▓реАрдлреЛрдирд┐рдХ рдиреЛрдЯ рдкрд░ рдиреЛрдЯреНрд╕ рдХреИрд╕реЗ рдЦреЗрд▓реЗрдВ, рдЖрдЗрдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЕрдкрдиреЗ рдСрд╕рд┐рд▓реЗрдЯрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдиреЛрдЯ рдЪрд▓рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ!
рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓рд╛рдЗрд╡ рджреГрд╢реНрдп рдЦреБрд▓рд╛ рд╣реИ:
class LiveView: AKLiveViewController, AKKeyboardDelegate { override func viewDidLoad() { let keyboard = AKKeyboardView(width: 440, height: 100) addView(keyboard) } } PlaygroundPage.current.liveView = LiveView() PlaygroundPage.current.needsIndefiniteExecution = true
рдЬрдм рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

рдХреВрд▓, рд╣рд╣? рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдореЗрдВ рд╕рдВрдЧреАрдд рдХреАрдмреЛрд░реНрдб рд╕рд╣реА рд╣реИ!
AKKeyboardView
рдХреА рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ рдФрд░ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡реЗ рдХреЛрдИ рдЖрд╡рд╛рдЬрд╝ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ
PlaygroundView
рдХреЗ
setUp
рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
let keyboard = AKKeyboardView(width: 440, height: 100) keyboard.delegate = self addView(keyboard)
рдпрд╣ рд╣рдорд╛рд░реЗ
PlaygroundView
рдПрдХ рдХреАрдмреЛрд░реНрдб рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛ рджреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдХреАрд╕реНрдЯреНрд░реЛрдХ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВ:
class LiveView: AKLiveViewController, AKKeyboardDelegate
setUp
рдареАрдХ рдмрд╛рдж рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝реЗрдВ:
func noteOn(note: MIDINoteNumber) { bank.play(noteNumber: note, velocity: 80) } func noteOff(note: MIDINoteNumber) { bank.stop(noteNumber: note) }
рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рдХреБрдВрдЬреА рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ
noteOn
рд╡рд┐рдзрд┐ рдХреЛ
noteOn
, рдпрд╣ рд╕рдм рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдХреЗ рдмреИрдВрдХ рдХреЛ рдиреЛрдЯ рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ,
noteOff
рд╡рд┐рдзрд┐ рдореЗрдВ
noteOff
рдХреЛ рдЦреЗрд▓рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдорд╛рдЙрд╕ рдХреЛ рдкрдХрдбрд╝реЛ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рд╛рдЗрдк рдХрд░реЗрдВ, рдЖрдк рдПрдХ рд╕реБрдВрджрд░ рдЕрд░реНрдзрдЪрдВрджреНрд░рд╛ (рдзреНрд╡рдирд┐ рд╢рдХреНрддрд┐ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧреАрдд рд╢рдмреНрдж) рд╕реБрдиреЗрдВрдЧреЗред рдСрд╕рд┐рд▓реЗрдЯрд░реНрд╕ рдХреЗ рдмреИрдВрдХ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд ADSR рдкреНрд░рднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдиреЛрдЯ рдХрд╛ рдХреНрд╖реАрдгрди рдЕрдЧрд▓реЗ рдХреЗ рд╣рдорд▓реЗ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрд┐рди рдиреЛрдЯреЛрдВ рдиреЗ рд╣рдореЗрдВ рдЪрд╛рдмреА рджреА рд╣реИ, рд╡реЗ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ
MIDINoteNumber
рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛
MIDINoteNumber
ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
public typealias MIDINoteNumber = Int
рдорд┐рдбреА рдХрд╛ рдорддрд▓рдм рдореНрдпреВрдЬрд┐рдХрд▓ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдбрд┐рдЬрд┐рдЯрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рдпрд╣ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИред рдиреЛрдЯ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдорд╛рдирдХ рд╕рдВрдЧреАрдд рдХреАрдмреЛрд░реНрдб рдкрд░ рдиреЛрдЯреНрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ - рдпрд╣ рд╡реЗрдЧ (рд╡реЗрдЧ) рдХреБрдВрдЬреА рдкрд░ рд╣рд┐рдЯ рдХреА рддрд╛рдХрдд рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдХрдо рдореВрд▓реНрдп, рдХреБрдВрдЬреА рдкрд░ рд╕реНрдкрд░реНрд╢ рдХреЛ рдирд░рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдзреНрд╡рдирд┐ рдХреЛ рд╢рд╛рдВрдд рдХрд░рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдкрд░ рдкреЙрд▓реАрдлреЛрдирд┐рдХ рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рдореНрди рдХреЛрдб рдХреЛ
setUp
рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
keyboard.polyphonicMode = true
рдЕрдм рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдиреЛрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдзреНрд╡рдирд┐ рдХрд┐рддрдиреА рд╕рд╣реА рджрд░реНрдЬ рдХреА рдЧрдИ рдереА:
- рдмрд┐рдЯ рдбреЗрдкреНрде : рдпрд╛ рдмрд┐рдЯ рдбреЗрдкреНрде, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реЙрд▓реНрдпреВрдо рд▓реЗрд╡рд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╕реИрдореНрдкрд▓рд░ рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИ
- рдирдореВрдирд╛ рджрд░ : рдпрд╛ рдирдореВрдирд╛ рджрд░, рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдмрд╛рд░ рдЖрдпрд╛рдо рдорд╛рдк рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд░реНрдЯреНрдЬ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдирдП рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдЗрди рдЧреБрдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ "рдирдореВрдиреЗ" рдирд╛рдо рджреЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ:
import AudioKitPlaygrounds import AudioKit import PlaygroundSupport let file = try AKAudioFile(readFileName: "climax-disco-part2.wav", baseDir: .resources) let player = try AKAudioPlayer(file: file) player.looping = true
рдКрдкрд░ рдХрд╛ рдХреЛрдб рдирдореВрдирд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдВрддрд╣реАрди рдкреНрд▓реЗрдмреИрдХ рдкрд░ рдбрд╛рд▓рддрд╛ рд╣реИред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП WAV рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣
рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВред
рдлрд┐рд░ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
AudioKit.output = player try AudioKit.start() player.play() PlaygroundPage.current.needsIndefiniteExecution = true
рдпрд╣ рдЖрдкрдХреЗ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХреЛ AudioKit рд╕реЗ рдЬреЛрдбрд╝реЗрдЧрд╛, рдЖрдкрдХреЛ рдмрд╕ рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдФрд░ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!
, .
MP3-, , , . :
let bitcrusher = AKBitCrusher(player) bitcrusher.bitDepth = 16 bitcrusher.sampleRate = 40000
AudioKit:
AudioKit.output = bitcrusher
. , .
AKBitCrusher
тАФ AudioKit, . , , ZX Spectrum BBC Micro. , .
, (. delay). ,
AKBitCrusher
. :
let delay = AKDelay(player) delay.time = 0.1 delay.dryWetMix = 1
0.1 .
dryWetMix
. 1 , .
:
let leftPan = AKPanner(player, pan: -1) let rightPan = AKPanner(delay, pan: 1)
AKPanner
, - . .
AudioKit. ,
AKBitCrusher
AudioKit :
let mix = AKMixer(leftPan, rightPan) AudioKit.output = mix
, , .

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
AudioKit. , -, , , . , , .
.