рдпреВрдирд┐рдЯреА 3 рдбреА рдореЗрдВ рдзреНрд╡рдирд┐ рдФрд░ рд╕рдВрдЧреАрдд рдЖрдзрд╛рд░рд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг рдкреАрдврд╝реАред рднрд╛рдЧ 2. рд╕рдВрдЧреАрдд рд╕реЗ 2 рдбреА рдЯреНрд░реИрдХ рдмрдирд╛рдирд╛

рдЕрдореВрд░реНрдд


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдпреВрдирд┐рдЯреА 3 рдбреА рдореЗрдВ рдзреНрд╡рдирд┐ рдФрд░ рд╕рдВрдЧреАрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдРрд╕реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП, рдЬреЛ рд╕рдВрдЧреАрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдиреЗ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЦреЗрд▓реЛрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХреАред рд▓реЗрдЦ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдЕрдЧрд▓реА рдХрдбрд╝реА рд╣реЛрдЧреАред рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд╣реИред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЖрдкрдХреЗ рд╕рдВрдЧреАрдд рд╕реЗ рд╣рд┐рд▓ рдХреНрд▓рд╛рдЗрдВрдм рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ 2 рдбреА рджреМрдбрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░реИрдХ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рд╣рдореЗрдВ ..



рдкрд░рд┐рдЪрдп


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


рдЖрдЬ рдХрд╛ рд╣рдорд╛рд░рд╛ рд░реЛрдб рдореИрдк рдпрд╣рд╛рдВ рд╣реИ:


  1. рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рд╡рд┐рд╡реЗрдХ рдХреНрдпрд╛ рд╣реИред
  2. рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдСрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдпреВрдирд┐рдЯреА рд╕реЗ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  3. рд╕рдордЭреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  4. рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗ рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  5. рдЬрд╛рдиреЗрдВ рдХрд┐ рдЗрд╕ рдЦреЗрд▓ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЦреЗрд▓ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ)

рддреЛ рдЪрд▓рд┐рдП!


рдПрдирд╛рд▓реЙрдЧ рд╕рд┐рдВрд╣рд▓ рдХрд╛ рд╡рд┐рд╡реЗрдХ


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


рдЕрдХреНрд╖рд░ T рдирдореВрдирд╛ рдЕрд╡рдзрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрдо рдЕрд╡рдзрд┐, рд╕рд┐рдЧреНрдирд▓ рд░реВрдкрд╛рдВрддрд░рдг рдЬрд┐рддрдирд╛ рд╕рдЯреАрдХ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╡реЗ рдЙрд▓рдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ: рдирдореВрдирд╛ рджрд░ (рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдпрд╣ рдПрдл = 1 / рдЯреА рд╣реИ)ред рдЯреЗрд▓реАрдлреЛрди рд╕рд┐рдВрдЧрдирд▓ рдХреЗ рд▓рд┐рдП 8,000 рд╣рд░реНрдЯреНрдЬ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрд╡реАрдбреА-рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ 192,000 рд╣рд░реНрдЯреНрдЬ рдХреА рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдбрд┐рдЬрд┐рдЯрд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ (рдЦреЗрд▓ рд╕рдВрдкрд╛рджрдХреЛрдВ, рд╕рдВрдЧреАрдд рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ) рдХрд╛ рдорд╛рдирдХ 44 100 рд╣рд░реНрдЯреНрдЬ рд╣реИ - рдпрд╣ рд╕реАрдбреА рдСрдбрд┐рдпреЛ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╣реИред


рдЖрдпрд╛рдо рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рддрдерд╛рдХрдерд┐рдд рдирдореВрдиреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЙрдирдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдирдореВрдиреЗ рдХрд╛ рдореВрд▓реНрдп рдлреНрд▓реЛрдЯ рд╣реИ рдФрд░ рдпрд╣ -1 рд╕реЗ 1 рддрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд░рд▓реАрдХреГрдд, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред



рдзреНрд╡рдирд┐ рддрд░рдВрдЧ рдкреНрд░рддрд┐рдкрд╛рджрди (рд╕реНрдерд┐рд░)


рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА


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



рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдСрдбрд┐рдпреЛ рд╕реНрд░реЛрдд рдФрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдХрддрд╛ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗ рд╕рдХрддреА рд╣реИред


//  AudioSource    AudioSource myAudio = gameObject.GetComponent<AudioSource>(); //     .     44100. int freq = myAudio.clip.frequency; 

рд░рд┐рдкреЛрд░реНрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреА рдзреНрд╡рдирд┐ рдХреА рдкреНрд░рддрд┐рдкрд╛рджрди рдЧрд╣рд░рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 44100 рд╣рд░реНрдЯреНрдЬ рдХреЗ рдирдореВрдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде, рд╣рдо 44100 рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЯреНрд░реИрдХ рдХреЛ 10 рд╕реЗрдХрдВрдб рд▓рдВрдмрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рдЗрдб рдореЗрдВ рдПрдХ рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рддрд░рдВрдЧ 441,000 рдкрд┐рдХреНрд╕реЗрд▓ рд▓рдВрдмреА рд╣реЛрдЧреАред рдЖрдкрдХреЛ рдмрд╣реБрдд рд▓рдВрдмреА, рд▓рдореНрдмреА рдФрд░ рдЫреЛрдЯреА рд╕рдордЭ рд╡рд╛рд▓реА рдзреНрд╡рдирд┐ рддрд░рдВрдЧ рдорд┐рд▓рддреА рд╣реИред рд▓реЗрдХрд┐рди, рдЗрд╕рдореЗрдВ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ! рдФрд░ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рдЪрд╛рд╣реЗ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рднреА рдЦреАрдВрдЪ рд▓реЗрдВред



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



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


рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИ


рдЪрд▓реЛ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдирдореВрдиреЗ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд┐рдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдирдореВрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред


 int quality = 100; int sampleCount = 0; sampleCount = freq / quality; 

рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рд╣реЛрдЧрд╛ред


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


 public bool GetData(float[] data, int offsetSamples); 

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


рдирдореВрдиреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:


 float[] samples; float[] waveFormArray; //      samples = new float[myAudio.clip.samples * myAudio.clip.channels]; 

рд╣рдордиреЗ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд▓рдВрдмрд╛рдИ рдХреНрдпреЛрдВ рдмрдврд╝рд╛рдИ? рдЕрдм рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ ...


рдПрдХрддрд╛ рдСрдбрд┐рдпреЛ рдЪреИрдирд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА


рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдзреНрд╡рдирд┐ рдореЗрдВ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рджреЛ рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВред рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ 2.1 рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВ, рд╕рд╛рде рд╣реА 5.1, 7.1 рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдзреНрд╡рдирд┐ рд╕реНрд░реЛрдд рд╕рднреА рддрд░рдл рд╕реЗ рдШрд┐рд░реЗ рд╣реИрдВред рдЪреИрдирд▓реЛрдВ рдХреА рдереАрдо рд╡рд┐рдХреА рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдпрд╣ рдПрдХрддрд╛ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?


рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдХреНрд▓рд┐рдк рдЦреЛрд▓рддреЗ рд╕рдордп, рдЖрдк рдирд┐рдореНрди рдЫрд╡рд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:



рдмрд╕ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЪреИрдирд▓ рд╣реИрдВ, рдФрд░ рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рдПрдХрддрд╛ рдЗрди рдЪреИрдирд▓реЛрдВ рдХреЗ рдирдореВрдиреЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рджрд░реНрдЬ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд╕реНрд╡реАрд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:
[L1,R1,L2,R2,L3,R3,L4,R4,L5,R5,L6,R6,L7,R7,L8,R8...]


рдЗрд╕реАрд▓рд┐рдП рд╣рдореЗрдВ рд╕рд░рдгреА рдореЗрдВ рдХреЗрд╡рд▓ рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреЛрдЧреБрдирд╛ рд╕реНрдерд╛рди рдЪрд╛рд╣рд┐рдПред


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




рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:


 private int quality = 100; private int sampleCount = 0; private float[] waveFormArray; private float[] samples; private AudioSource myAudio; void Start() { myAudio = gameObject.GetComponent<AudioSource>(); int freq = myAudio.clip.frequency; sampleCount = freq / quality; samples = new float[myAudio.clip.samples * myAudio.clip.channels]; myAudio.clip.GetData(samples,0); //  ,    .       waveFormArray = new float[(samples.Length / sampleCount)]; //             for (int i = 0; i < waveFormArray.Length; i++) { waveFormArray[i] = 0; for (int j = 0; j < sampleCount; j++) { //Abs     ""    . .  waveFormArray[i] += Mathf.Abs(samples[(i * sampleCount) + j]); } waveFormArray[i] /= sampleCount; } } 

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрджрд┐ рдЯреНрд░реИрдХ 10 рд╕реЗрдХрдВрдб рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рджреЛ-рдЪреИрдирд▓ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓реЗрдВрдЧреЗ:


  • рдХреНрд▓рд┐рдк рдореЗрдВ рдирдореВрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ (myAudio.clip.sample) = 44100 * 10 = 441000
  • рджреЛ рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирдореВрдиреЗ рд╕рд░рдгреА рд▓рдВрдмреА рд╣реИ (рдирдореВрдиреЗред рдЧрддрд┐) = 441000 * 2 = 882000
  • рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдирдореВрдирд╛) = 44100/100 = 441
  • рдЕрдВрддрд┐рдо рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ = рдирдореВрдиреЗред рдЧрддрд┐ / рдирдореВрдирд╛рдХрд╛рдЙрдВрдЯ = 2000

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


рдСрдбрд┐рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди


рдбреАрдмрдЧ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдХ рдмрдирд╛рдПрдВ


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


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


 for (int i = 0; i < waveFormArray.Length - 1; i++) { //      Vector3 upLine = new Vector3(i * .01f, waveFormArray[i] * 10, 0); //      Vector3 downLine = new Vector3(i * .01f, -waveFormArray[i] * 10, 0); } 

рдЕрдЧрд▓рд╛, рдмрд╕ рд╣рдорд╛рд░реЗ рд╡реИрдХреНрдЯрд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Debug.DrawLine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреЛрдИ рднреА рд░рдВрдЧ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рд░ рдлреНрд░реЗрдо рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред


 Debug.DrawLine(upLine, downLine, Color.green); 

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ "рд╕реНрд▓рд╛рдЗрдбрд░" рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЯреНрд░реИрдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЦреЗрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА "AudioSource.timeSamples" рдлрд╝реАрд▓реНрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред


 private float debugLineWidth = 5; // ""  .       int currentPosition = (myAudio.timeSamples / quality) * 2; Vector3 drawVector = new Vector3(currentPosition * 0.01f, 0, 0); Debug.DrawLine(drawVector - Vector3.up * debugLineWidth, drawVector + Vector3.up * debugLineWidth, Color.white); 

рдХреБрд▓, рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:


 using UnityEngine; public class WaveFormDebug : MonoBehaviour { private readonly int quality = 100; private int sampleCount = 0; private int freq; private readonly float debugLineWidth = 5; private float[] waveFormArray; private float[] samples; private AudioSource myAudio; private void Start() { myAudio = gameObject.GetComponent<AudioSource>(); //  freq = myAudio.clip.frequency; sampleCount = freq / quality; //  samples = new float[myAudio.clip.samples * myAudio.clip.channels]; myAudio.clip.GetData(samples, 0); //       waveFormArray = new float[(samples.Length / sampleCount)]; for (int i = 0; i < waveFormArray.Length; i++) { waveFormArray[i] = 0; for (int j = 0; j < sampleCount; j++) { waveFormArray[i] += Mathf.Abs(samples[(i * sampleCount) + j]); } waveFormArray[i] /= sampleCount; } } private void Update() { for (int i = 0; i < waveFormArray.Length - 1; i++) { //      Vector3 upLine = new Vector3(i * 0.01f, waveFormArray[i] * 10, 0); //      Vector3 downLine = new Vector3(i * 0.01f, -waveFormArray[i] * 10, 0); // Debug  Debug.DrawLine(upLine, downLine, Color.green); } // ""  .       int currentPosition = (myAudio.timeSamples / quality) * 2; Vector3 drawVector = new Vector3(currentPosition * 0.01f, 0, 0); Debug.DrawLine(drawVector - Vector3.up * debugLineWidth, drawVector + Vector3.up * debugLineWidth, Color.white); } } 

рдФрд░ рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:



PolygonCollider2D рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд┐рдХрдиреА рд╕рд╛рдЙрдВрдбрд╕реНрдХреЗрдк рдмрдирд╛рдПрдВ


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


  1. рдЯреНрд░реИрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рднреА рдЪреЛрдЯрд┐рдпрд╛рдБ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЖрдк рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ "рдЕрдкрдиреЗ рд╕рдВрдЧреАрдд рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛" рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ
  2. рдЖрдорддреМрд░ рдкрд░, рд╕рдВрдЧреАрдд рдЯреНрд░реИрдХ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрдХреБрдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдзреНрд╡рдирд┐ рдИрдВрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ 2D рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред
  3. рд╣рдорд╛рд░реЗ рдкрд░рд┐рд╡рд╣рди рдХреА рдЧрддрд┐ рдХрд╛ рдЕрдирд╕реБрд▓рдЭрд╛ рдореБрджреНрджрд╛, рдЬреЛ рдЯреНрд░реИрдХ рдХреА рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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


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


 private Vector2[] CreatePath(float[] src) { Vector2[] result = new Vector2[src.Length]; for (int i = 0; i < size; i++) { result[i] = new Vector2(i * 0.01f, Mathf.Abs(src[i] * lineScale)); } return result; } 

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


 path = CreatePath(waveFormArray); poly.points = path; 

рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдЯреНрд░реИрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ ... рд╣рдореНрдо ... рдпрд╣ рдмрд╣реБрдд рд╣реА рдирд┐рд╖реНрдХреНрд░рд┐рдп рдирд╣реАрдВ рд▓рдЧрддрд╛ (рдЕрднреА рддрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рд╕реЛрдЪреЛ, рдЯрд┐рдкреНрдкрдгреА рдмрд╛рдж рдореЗрдВ рдЖрдПрдЧреА)ред



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


рдПрдХрддрд╛ рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 private float[] MovingAverage(int frameSize, float[] data) { float sum = 0; float[] avgPoints = new float[data.Length - frameSize + 1]; for (int counter = 0; counter <= data.Length - frameSize; counter++) { int innerLoopCounter = 0; int index = counter; while (innerLoopCounter < frameSize) { sum = sum + data[index]; innerLoopCounter += 1; index += 1; } avgPoints[counter] = sum / frameSize; sum = 0; } return avgPoints; } 

рд╣рдо рдЕрдкрдиреЗ рдкрде рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:


 float[] avgArray = MovingAverage(frameSize, waveFormArray); path = CreatePath(avgArray); poly.points = path; 

рдЬрд╛рдБрдЪ рд╣реЛ рд░рд╣реА рд╣реИ ...



рдЕрдм рд╣рдорд╛рд░рд╛ рдЯреНрд░реИрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ 10 рдХреА рд╡рд┐рдВрдбреЛ рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЪреМрд░рд╕рд╛рдИ рдЪреБрди рд╕рдХреЗрдВред


рдЗрд╕ рдЦрдВрдб рдХреА рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 using UnityEngine; public class WaveFormTest : MonoBehaviour { private const int frameSize = 10; public int size = 2048; public PolygonCollider2D poly; private readonly int lineScale = 5; private readonly int quality = 100; private int sampleCount = 0; private float[] waveFormArray; private float[] samples; private Vector2[] path; private AudioSource myAudio; private void Start() { myAudio = gameObject.GetComponent<AudioSource>(); int freq = myAudio.clip.frequency; sampleCount = freq / quality; samples = new float[myAudio.clip.samples * myAudio.clip.channels]; myAudio.clip.GetData(samples, 0); waveFormArray = new float[(samples.Length / sampleCount)]; for (int i = 0; i < waveFormArray.Length; i++) { waveFormArray[i] = 0; for (int j = 0; j < sampleCount; j++) { waveFormArray[i] += Mathf.Abs(samples[(i * sampleCount) + j]); } waveFormArray[i] /= sampleCount * 2; } //  ,    frameSize float[] avgArray = MovingAverage(frameSize, waveFormArray); path = CreatePath(avgArray); poly.points = path; } private Vector2[] CreatePath(float[] src) { Vector2[] result = new Vector2[src.Length]; for (int i = 0; i < size; i++) { result[i] = new Vector2(i * 0.01f, Mathf.Abs(src[i] * lineScale)); } return result; } private float[] MovingAverage(int frameSize, float[] data) { float sum = 0; float[] avgPoints = new float[data.Length - frameSize + 1]; for (int counter = 0; counter <= data.Length - frameSize; counter++) { int innerLoopCounter = 0; int index = counter; while (innerLoopCounter < frameSize) { sum = sum + data[index]; innerLoopCounter += 1; index += 1; } avgPoints[counter] = sum / frameSize; sum = 0; } return avgPoints; } } 

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


рд╢рд╛рдпрдж рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ, рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рджреЗрдЦрдХрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдереЗ рдХрд┐ рдореИрдВрдиреЗ рдЯреНрд░реИрдХ рдХреЛ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛? рд╕рдм рдХреЗ рдмрд╛рдж, рдХреЛрд▓рд╛рдЗрдбрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВред


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


рд╕рдорд╛рдкрди


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


  1. рдорд╢реАрди рдХреА рдЧрддрд┐ рдХреЛ рдмреАрдкреАрдПрдо рдЯреНрд░реИрдХ рд╕реЗ рдмрд╛рдВрдзреЗрдВред рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗрд╡рд▓ рдХрд╛рд░ рдХреЗ рдЭреБрдХрд╛рд╡ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрддрд┐ рдХреЛ рдирд╣реАрдВред рддрдм рд╕рдВрдЧреАрдд рдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рджреМрд░рд╛рди рдЕрдзрд┐рдХ рдордЬрдмреВрдд рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  2. рдереЛрдбрд╝рд╛ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЬреЛрдбрд╝реЗрдВред рдкреНрд░рднрд╛рд╡ рдЬреЛ рдмреАрдЯ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрд╛рд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдмреАрдЯ рдХреЗ рдмреАрдЯ рдкрд░ рдЙрдЫрд╛рд▓ рджреЗрдЧрд╛ред рдпрд╣ рд╕рдм рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  3. рдЪрд▓рддреА рдФрд╕рдд рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЪреЛрдЯрд┐рдпрд╛рдВ рдЧрд╛рдпрдм рди рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдЯреНрд░реЗрд╕ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдерд╛ред
  4. рдЦреИрд░, рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдкрдХреЛ рдЧреЗрдордкреНрд▓реЗ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╣рд┐рдЯ рдкрд░ рдПрдХ рд╕рд┐рдХреНрдХрд╛ рдмрд┐рдЯ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрддрд░реЗ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред

рд╣рдо рдпрд╣ рд╕рдм рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╢реЗрд╖ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗред рдЖрдк рд╕рднреА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles