C#/작곡 프로젝트

장음계, 자연단음계, 화성단음계, 가락단음계

각 4개의 음계를 표현해 주는 콘솔 프로그램의 작성.


코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication8
{
    class ScaleNote
    {
        // arr = All_Note[], a = Note
        public void Major_Scale(string[] arr, int a)
        {
            // 5옥타브 C음을 기준으로 시작합니다.
            int j = 47 + a;
            // 음 간격을 계산하기 위한 변수입니다.
            int count_scale = 1;
            // 계산된 음계를 Note_Scale이라는 배열에 넣습니다.
            string[] Note_Scale = new string[8];
            while (j <= 59 + a)
            {
                Note_Scale[count_scale - 1] = arr[j];
                Console.Write("{0} ", Note_Scale[count_scale - 1]);
                j = j + 2;
                if (count_scale == 3) // 3음과 4음이 반음
                {
                    j = j - 1;
                }
                if (count_scale == 7) // 7음과 8음이 반음
                {
                    j = j - 1;
                }
                count_scale++;
            }
        }
        public void N_Minor_Scale(string[] arr, int a)
        {
            // 5옥타브 C음을 기준으로 시작합니다.
            int j = 47 + a;
            // 음 간격을 계산하기 위한 변수입니다.
            int count_scale = 1;
            // 계산된 음계를 Note_Scale이라는 배열에 넣습니다.
            string[] Note_Scale = new string[8];
            while (j <= 59 + a)
            {
                Note_Scale[count_scale - 1] = arr[j];
                Console.Write("{0} ", Note_Scale[count_scale - 1]);
                j = j + 2;
                if (count_scale == 2) // 2음과 3음이 반음
                {
                    j = j - 1;
                }
                if (count_scale == 5) // 5음과 6음이 반음
                {
                    j = j - 1;
                }
                count_scale++;
            }
        }
        public void H_Minor_Scale(string[] arr, int a)
        {
            // 5옥타브 C음을 기준으로 시작합니다.
            int j = 47 + a;
            // 음 간격을 계산하기 위한 변수입니다.
            int count_scale = 1;
            // 계산된 음계를 Note_Scale이라는 배열에 넣습니다.
            string[] Note_Scale = new string[8];
            while (j <= 59 + a)
            {
                Note_Scale[count_scale - 1] = arr[j];
                Console.Write("{0} ", Note_Scale[count_scale - 1]);
                j = j + 2;
                if (count_scale == 2) // 2음과 3음이 반음
                {
                    j = j - 1;
                }
                if (count_scale == 5) // 5음과 6음이 반음
                {
                    j = j - 1;
                }
                if (count_scale == 6) // 7음을 반음 올리므로
                                      // 다음 차례를 +1 해줌
                {
                    j = j + 1;
                }
                count_scale++;
            }
        }
        public void M_Minor_Scale(string[] arr, int a)
        {
            // 5옥타브 C음을 기준으로 시작합니다.
            int j = 47 + a;
            // 음 간격을 계산하기 위한 변수입니다.
            int count_scale = 1;
            // 계산된 음계를 Note_Scale이라는 배열에 넣습니다.
            string[] Note_Scale = new string[8];
            while (j <= 59 + a)
            {
                Note_Scale[count_scale - 1] = arr[j];
                Console.Write("{0} ", Note_Scale[count_scale - 1]);
                j = j + 2;
                if (count_scale == 2) // 2음과 3음이 반음
                {
                    j = j - 1;
                }
                if (count_scale == 7) // 7을 다음이 반음.
                {
                    j = j - 1;
                }
                count_scale++;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string[] Scale_Note = new string[12] { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
            // 2차원 배열보다 일차원 배열로 담는게 음계를 계산할 때 편합니다.
            string[] All_Note
                = new string[84]
            {
                "C-1", "C#-1", "D-1", "D#-1", "E-1", "F-1", "F#-1", "G-1", "G#-1", "A-1", "A#-1", "B-1",
                "C-2", "C#-2", "D-2", "D#-2", "E-2", "F-2", "F#-2", "G-2", "G#-2", "A-2", "A#-2", "B-2",
                "C-3", "C#-3", "D-3", "D#-3", "E-3", "F-3", "F#-3", "G-3", "G#-3", "A-3", "A#-3", "B-3",
                "C-4", "C#-4", "D-4", "D#-4", "E-4", "F-4", "F#-4", "G-4", "G#-4", "A-4", "A#-4", "B-4",
                "C-5", "C#-5", "D-5", "D#-5", "E-5", "F-5", "F#-5", "G-5", "G#-5", "A-5", "A#-5", "B-5",
                "C-6", "C#-6", "D-6", "D#-6", "E-6", "F-6", "F#-6", "G-6", "G#-6", "A-6", "A#-6", "B-6",
                "C-7", "C#-7", "D-7", "D#-7", "E-7", "F-7", "F#-7", "G-7", "G#-7", "A-7", "A#-7", "B-7"
            };
            Console.WriteLine("음계를 선택하세요.");
            Console.WriteLine("1.장음계(Major Scale)");
            Console.WriteLine("2.자연 단음계(Nature Minor Scale)");
            Console.WriteLine("3.화성 단음계(Harmonic Minor Scale)");
            Console.WriteLine("4.가락 단음계(Melodic Minor Scale)");
            Console.Write("선택 : ");
            int Scale = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine();
            Console.WriteLine("기준음(Root Note)을 선택해 주세요.");
            for (int i = 0; i <= 11; i++)
            {
                Console.Write("{0}. ", i + 1);
                Console.Write(Scale_Note[i]);
                Console.WriteLine();
            }
            Console.Write("선택 : ");
            int Note = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine();
            // 5옥타브 C음을 기준으로 시작합니다.
            // 음 간격을 계산하기 위한 변수입니다.
            // 계산된 음계를 Note_Scale이라는 배열에 넣습니다.
            // 1옥타브까지 12음을 가지고 있습니다.
            ScaleNote scalenote1 = new ScaleNote();
            switch (Scale)
            {
                case 1:
                    scalenote1.Major_Scale(All_Note, Note);
                    break;
                case 2:
                    scalenote1.N_Minor_Scale(All_Note, Note);
                    break;
                case 3:
                    scalenote1.H_Minor_Scale(All_Note, Note);
                    break;
                case 4:
                    scalenote1.N_Minor_Scale(All_Note, Note);
                    break;
            }
        }
    }
}



실행화면



이제 코드 공부하고 올리겠습니다 ㅇㅅ<)/