|
private void SetOctaveArray() { octavearray[0] = 8.176;//C0 octavearray[1] = 8.662; octavearray[2] = 9.177; octavearray[3] = 9.723; octavearray[4] = 10.301; octavearray[5] = 10.913; octavearray[6] = 11.562; octavearray[7] = 12.250; octavearray[8] = 12.978; octavearray[9] = 13.750; octavearray[10] = 14.568; octavearray[11] = 15.434;
...
octavearray[120] = 8372.018;//C10 octavearray[121] = 8869.844; octavearray[122] = 9397.273; octavearray[123] = 9956.063; octavearray[124] = 10548.082; octavearray[125] = 11175.303; octavearray[126] = 11839.822; octavearray[127] = 12543.854; } |
C0~C10의 128개의 주파수를 double형 배열에 보관하였다.
private void MakeMusic() { MakeFre(octavearray[64], 0.5); MakeFre(octavearray[62], 0.5); MakeFre(octavearray[60], 0.5); MakeFre(octavearray[62], 0.5); MakeFre(octavearray[64], 0.5); MakeFre(octavearray[64], 0.5); MakeFre(octavearray[64], 0.5); MakeFre(0, 0.5); MakeFre(octavearray[62], 0.5); MakeFre(octavearray[62], 0.5);
...
MakeFre(octavearray[64], 0.5); MakeFre(octavearray[64], 0.5); MakeFre(octavearray[64], 0.5); MakeFre(0, 0.5); MakeFre(octavearray[62], 0.5); MakeFre(octavearray[62], 0.5); MakeFre(octavearray[64], 0.5); MakeFre(octavearray[62], 0.5); MakeFre(octavearray[60], 0.5); }
|
Midi에서 인자로 옥타브와 시간을 받으면 주파수를 인자로 넘긴다.
테스트를 위해 음악 비행기에 해당하는 주파수들을 생성 하였다.
쉼표는 0으로 표시 하였다.
private void MakeFre(double frequency, double time) {
int filesize = (int)(time * ((16 * channelCount * samplerate) / 8)); //double _time = filesize / ((16 * channelCount * samplerate) / 8);
for (int i = 0; i < filesize/2; i++) { buf.Add((short)(amplitude * Math.Sin((2 * Math.PI * i * frequency) / samplerate))); } } |
전체 시간 = FileSize/(Bps X ChannelCount X Samplete))/8 이므로
FileSize = 전체시간*((Bps X ChannelCount X Samplete))/8)이 된다.