рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рд▓рд┐рдкрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рджреЛ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдЕрдм рдореИрдВрдиреЗ рдорд┐рдбреА рдХреАрдмреЛрд░реНрдб рдЦрд░реАрджрд╛ред
рдлрд┐рдирд╛рд▓реЗ рдФрд░ рд╕рд┐рдмреЗрд▓рд┐рдпрд╕ рд╕рд╣рд┐рдд рдХрдИ рдиреЛрдЯ рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ рдорд┐рдбреА рдХреАрдмреЛрд░реНрдб рд╕реЗ рджреЛ рддрд░рд╣ рд╕реЗ рдиреЛрдЯреНрд╕ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ: рдпрд╛ рддреЛ рдЖрдк рдХрд┐рд╕реА рдореЗрдЯреНрд░реЛрдиреЛрдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рдФрд░ рддрд╛рд▓ рд╕реЗ рдиреЛрдЯреНрд╕ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдЕрд╡рд╕рд░ рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рд▓рд┐рд▓рд┐рдкрдВрдб рдХреЗ рд▓рд┐рдП рджреБрдЦ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдПрдХ рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдорд┐рдбреА 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдореБрдЭреЗ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рд╕рд┐рд░реНрдл рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рдбреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА ) - рдореИрдВрдиреЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рджрдмрд╛рдпрд╛ рдЬрд╛рдП рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рддрд╛рд░ рддреБрд░рдВрдд рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЧрдПред
UPD: рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдиреЛрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ\ рд╕рд╛рдкреЗрдХреНрд╖ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рд▓реАрдкреЙрдиреНрдб рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдЖрдк
рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдХреНрдЯреЗрд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрд╕ рджрд┐рд╢рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдСрдХреНрдЯреЗрд╡ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рдмрд┐рдирд╛, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдиреЛрдЯ (рдПрдХ рд░рд╛рдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдзреНрд╡рдирд┐) рдПрдХ рдХреНрд╡рд╛рд░реНрдЯ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рд╣реИред рдпрд╣реА рд╣реИ,
рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдмрд╛рдж рдХрд╛ рд╕реНрдХреЛрд░ рдЙрдЪреНрдЪрддрд░ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдПрдл рддреЗрдЬ рд╣реЛ, рдФрд░ рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рд╕рдкрд╛рдЯ (рджреЛрдЧреБрдирд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЪреМрдерд╛рдИ, рд╣рд╛рдБ)ред
рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореБрдЭреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд┐рдбреА рдХреАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ред
рдорд┐рдбреА-рдбреЙрдЯ-рдиреЗрдЯ: рдорд┐рдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ
рдорд┐рдбреА-рдбреЙрдЯ-рдиреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдереАред рдпрд╣ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рджреЛрдиреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдм рдЗрдирдкреБрдЯ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА, рдЦреЛрд▓рдирд╛ рдФрд░ рдмрдВрдж рдХрд░рдирд╛
рдЙрдкрд▓рдмреНрдз рдЗрдирдкреБрдЯ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдореЗрдВ рднрд░ рджрд┐рдпрд╛ред
using Midi;
рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдирд┐рд░реНрдорд╛рддрд╛рдЖрдИрдб, рдкреНрд░реЛрдбрдХреНрдЯрдЖрдИрдб рдФрд░ рдЗрди рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХ рдлреАрд▓реНрдб рд╕реНрдкреЗрд╕ рдореЗрдВ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдУрдкрди () рдФрд░ рдХреНрд▓реЛрдЬрд╝ () рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрдкрдХрд░рдг рдХреЛ рдЦреЛрд▓рддреА рдФрд░ рдмрдВрдж рдХрд░рддреА рд╣реИрдВ, рд░рд╛рдЬреНрдп рдХреЛ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ IsOpen, StartReceiving (), StopReceiving (), IsReceiving рдлрд╝реАрд▓реНрдб рд╕реЗ рдХреНрд░рдорд╢рдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ C # -рд╕реНрдЯрд╛рдЗрд▓ рдЗрд╡реЗрдВрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
StartReceiving () рд╡рд┐рдзрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд▓реЙрдХ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореБрдЦреНрдп рд░реВрдк рд╕реЗ MIDI рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдкреНрд╕ рдХреА рдЧрдгрдирд╛ рдЙрд╕ рдХреНрд╖рдг рд╕реЗ рдХреА рдЬрд╛рдПрдЧреА рдЬрдм StartReceiving () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
private void UpdateDevice() { if (d != null) { if (d.IsReceiving) d.StopReceiving(); if (d.IsOpen) d.Close(); } d = InputDevice.InstalledDevices[DeviceList.SelectedIndex]; if (!d.IsOpen) d.Open(); if (d.IsReceiving) d.StopReceiving(); d.StartReceiving(null); if (d != null) { d.NoteOn += new InputDevice.NoteOnHandler(this.NoteOn); d.NoteOff += new InputDevice.NoteOffHandler(this.NoteOff); d.ControlChange += new InputDevice.ControlChangeHandler(this.ControlChange); } }
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╕рдордп рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ
private void SettingsWindow_FormClosing(object sender, FormClosingEventArgs e) { d.StopReceiving(); d.Close(); }
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЗрд╕ рддрд░рд╣ рдЪреБрдирд╛: рдЬрдм рдЖрдк рд╕рднреА рдХреБрдВрдЬреА рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрд┐рдиреНрд╣реЗрдВ 50 рд╕реЗ рдЕрдзрд┐рдХ рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рдереЛрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ SendKeys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреЛрдЯреНрд╕ рдФрд░ рдХреЙрд░реНрдб рджреЛрдиреЛрдВ рдХреЛ рдбрд╛рдпрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдЕрдкрдорд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:
рдиреЛрдЯрдСрди // рдиреЛрдЯрдСрдл private List<Pitch> notes; private Dictionary<Pitch, float> events;
рдореИрдВрдиреЗ рдирд┐рд░рдВрддрд░ рдкреЗрдбрд▓ (рдФрд░, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрдЯрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реАрдЧ (рдХреЛрд╖реНрдардХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХреЛрд╖реНрдардХ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ред рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рдХреАрдмреЛрд░реНрдб рджреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓рдЪреЗрдВрдЬ рднреЗрдЬрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рдЬреЛрдбрд╝рд╛ред
bool sustain;
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ ProgramChange рдФрд░ PitchBend рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рд╣рдо рд╕рдВрдЧреАрдд рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдкрд╛рдЧрд▓ рдХрд╛рдЯрддреЗ рд╣реИрдВ
рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ред рдореИрдВрдиреЗ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдПрдХ рдкреНрд░рдореБрдЦ-рдорд╛рдореВрд▓реА рд╕реНрд╡рд┐рдЪ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪрдиреЗ рд▓рдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдорд┐рдбреА. рдкрд┐рдЪ рдореВрд▓реНрдп рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмреАрдЪ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд▓рд┐рдВрдХ рдмрдирд╛рдпрд╛ - рдЧрд╛рдорд╛ рд╕реНрдЯреЗрдк рдХреНрд▓рд╛рд╕ (рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА, рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЧреНрд░реЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдбрд┐рдЧреНрд░реА рдЖрд╡рд╢реНрдпрдХ рдереА)ред рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо Midi.Pitch рдХреЛ рдбрд┐рдЧреНрд░реА рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред
Arrays 7-рдЪрд░рдг рдкреИрдорд╛рдиреЗ рдХреЗ рдЪрд░рдг рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди (рд╡реГрджреНрдзрд┐ рдпрд╛ рдХрдореА) рдХреЗ рд▓рд┐рдП рд░рдВрдЧреАрди (12-рдЪрд░рдг) рдкреИрдорд╛рдиреЗ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рдкрд┐рдЪрдХреЛрд░реНрдбреНрд░реЗрдб () private static int[] majorScale = { 0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6 }; private static int[] majorAcc = { 0, -1, 0, -1, 0, 0, 1, 0, -1, 0, -1, 0 }; private static int[] minorScale = { 0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6 }; private static int[] minorAcc = { 0, -1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1 }; private Degree PitchToGrade(Pitch p) {
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдЕрдкреНрд░рд┐рдп рдмрд╛рдд рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ: рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдиреЛрдЯ рдФрд░ рдХрд┐рд╕ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрджрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рджрд┐рдП рдЧрдП рдЯрди рдореЗрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рдеред
рдбрд┐рдЧреНрд░реА рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдПрдлрдПрд╕ рдЪрд░ рдореЗрдВ
рдХреБрдВрдЬреА рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА
рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ , рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЪрд┐рд╣реНрди рд╣реЛред рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдЪрд░рдг рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдСрдХреНрдЯреЗрд╡, рдЕрдВрдХрдореЛрдб - рдЦрд╛рддреЗ рдореЗрдВ рд▓реЗрдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЬрд╛рджреБрдИ рддрд░реАрдХреЗ рд╕реЗ (рдЪрд╛рд░ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рджреЛ рдХреЛ рдорд╛рдореВрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдШрдЯрд╛рддреЗ рд╣реБрдП), рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╕рдлреЗрдж-рдХреБрдВрдЬреА рдкреИрдорд╛рдиреЗ рдореЗрдВ рдиреЛрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ fs рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ "рдореВрд▓" рдЯрдирдХ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╕рдорд╛рдзрд╛рди () private static String[] Naturals = { "c", "d", "e", "f", "g", "a", "h" }; private static String[] Sharps = { "cis", "dis", "eis", "fis", "gis", "ais", "his" }; private static String[] Flats = { "ces", "des", "es", "fes", "ges", "as", "b" }; private static String[] DoubleSharps = { "cisis", "disis", "eisis", "fisis", "gisis", "aisis", "bisis" }; private static String[] DoubleFlats = { "ceses", "deses", "eses", "feses", "geses", "ases", "beses" }; public String resolveIn(int keys, bool isMajor) { int fAcc = Acc; int fs; int fNum; int numMod = Number % 7; fs = isMajor ? 6 : 3; fs = (fs - 2*numMod) % 7; if (fs <= 0) fs += 7; if (keys < 0) fs = 8 - fs; if (fs <= Math.Abs(keys)) fAcc += keys / Math.Abs(keys); fNum = (numMod + keys*4 - (isMajor ? 0 : 2)) % 7; if (fNum < 0) fNum += 7; switch (fAcc) { case -2: return DoubleFlats[fNum]; case -1: return Flats[fNum]; case 0: return Naturals[fNum]; case 1: return Sharps[fNum]; case 2: return DoubleSharps[fNum]; default: return ""; } }
рдмрд╛рдХреА рд╕рд░рд▓ рд╣реИ: рдЯреЙрдиреНрд╕рд┐рд▓рд┐рдЯреА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕реНрдЯреЗрдк рд╕рдмрдЯреНрд░реИрдХреНрд╢рди рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдКрдВрдЪрд╛рдИ рдХреЛ рд▓рд╛рд╕реНрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдХрдиреНрд╡рд░реНрдЯ () рдФрд░ рдмрд╛рдХреА рд╕рдм рдирд┐рд╖реНрдХрд░реНрд╖
рдЬрдЯрд┐рд▓рддрд╛ рдореЗрд░реЗ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рдереА, рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд╣реАрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдХреНрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдВрдЧреАрдд рд╕реНрдХреВрд▓ рдореЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ :-)ред рдФрд░ рдиреЛрдЯ рдорд┐рд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реЛ рдЧрдпрд╛ред
https://github.com/m0003r/LilyInput