先来简单的计算程序:将MIDI Notes映射到对应频率,或给出一个频率找到与之临近的MIDI映射。(相当于刚开始学C时做的计算题代入到这个情境中,简单,主要理解MIDI音符和频率的等比关系)。只是理解在寻找临近midi映射的时候midinote1 = (int)(fracmidi + 0.5);
这个+0.5,就是小数点超过0.5,该进位就先进了、加上去了再舍弃小数点,这算最初级的四舍五入方法。
#include
#include
int main(void)
{
double semitone_ratio,frequency,frequency1,fracmidi;
double c0;//MIDI note 0
double c5;//MIDI note central C
int midinote,midinote1;
semitone_ratio = pow(2, 1 / 12.0);
c5 = 220.0*pow(semitone_ratio, 3);
c0 = c5 * pow(0.5, 5);
midinote = 73;//73 midinotes in total
frequency = c0 * pow(semitone_ratio, midinote);
printf("frequency %f cosrespond to MIDI Note %d\n", frequency, midinote);
printf("input frequency\n");
scanf_s("%lf", &frequency1);
fracmidi = log(frequency1 / c0) / log(semitone_ratio);
midinote1 = (int)(fracmidi + 0.5);
printf("nearest MIDI note to f %f is %d\n", frequency1, midinote1);
system("pause");
return 0;
}
原创文章 31获赞 13访问量 6006
关注
私信
展开阅读全文
作者:粽子哥哥123