注意频率程序

时间:2014-09-30 20:08:40

标签: c

您好我试图修复我的音频频率程序。扫描用户输入,例如#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;   
}

谢谢你,请耐心等待我,我只是在学习编程大声笑。

0 个答案:

没有答案