장음계, 자연단음계, 화성단음계, 가락단음계
각 4개의 음계를 표현해 주는 콘솔 프로그램의 작성.
코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication8
{
class ScaleNote
{
// arr = All_Note[], a = Note
{
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];
{
// 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]);
{
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++;
}
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];
{
// 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]);
{
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++;
}
}
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];
{
// 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]);
{
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++;
}
}
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];
{
// 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]);
{
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++;
}
}
}
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("선택 : ");
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("{0}. ", i + 1);
Console.Write(Scale_Note[i]);
Console.WriteLine();
}
Console.Write("선택 : ");
int Note = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
int Note = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
// 5옥타브 C음을 기준으로 시작합니다.
// 음 간격을 계산하기 위한 변수입니다.
// 계산된 음계를 Note_Scale이라는 배열에 넣습니다.
// 1옥타브까지 12음을 가지고 있습니다.
ScaleNote scalenote1 = new ScaleNote();
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;
}
}
}
}
{
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;
}
}
}
}
실행화면
이제 코드 공부하고 올리겠습니다 ㅇㅅ<)/