您好我试图修复我的音频频率程序。扫描用户输入,例如#4,作为音符,平坦或清晰或不清晰,并且八度音程和程序输出音符频率。我使用a4作为我的基频。我以为我把它设置得很好但是当我输入时只是a4 440不能输出它应该是。这可能是pow语句的一个问题,因为我还不是很擅长。 这是我的参考方程式: fn = f0 *(a)n 哪里 f0 =必须定义的一个固定音符的频率。常见的选择是将A设置在中间C(A4)上,f0 = 440 Hz。 n =离固定音符半步的数量。如果你有更高的音符,则n是正数。如果你是低音,则n为负数。 fn =音符的频率n半步之遥。 a =(2)1/12 = 2的第二根=与自身相乘的次数12次等于2 = 1.059463094359 ...
到目前为止,这是我的代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int octave;
char letter, sharpFlat;
printf("Enter the note letter in lower case, # if sharp, b if flat, space if none, and enter octave number: \n");
scanf("%c%c%d",&letter, &sharpFlat, &octave);
int semitones;
int modifier;
switch (letter)
{
case 'c' :
semitones = -9;
break;
case 'd' :
semitones = -7;
break;
case 'e' :
semitones = -5;
break;
case 'f' :
semitones = -4;
break;
case 'g' :
semitones = -2;
break;
case 'a' :
semitones = 0;
break;
case 'b' :
semitones = 2;
break;
default :
semitones = 2;
break;
}
switch (sharpFlat)
{
case '#' :
modifier = 1;
break;
case 'b' :
modifier = -1;
break;
case ' ' :
modifier = 0;
break;
}
semitones = semitones + sharpFlat;
float basefreq = 440.0;
float twelth = .083333;
float aa = pow(2, twelth);
float an = pow(aa, semitones);
float freq = basefreq * an;
printf("The frequency of the note is %f\n",freq);
return 0;
}
谢谢你,请耐心等待我,我只是在学习编程大声笑。