0
開發映射樂器上演奏的音符的應用程序。例如: - 如果在鋼琴上播放C,應用程序將顯示一個C.Android:將從FFT獲得的映射頻率映射到音符
double [] notes={16.35,17.32,18.35,19.45,20.6,21.83,23.12,24.5,25.96,27.5,29.14,30.87};
char [] notations={'c','C','d','D','e','f','F','g','G','a','A','b'};
int index=0;
double minvalue=999999;
if(values[0]>16.34){
for (int i=0;i<=11;i++)
{
double result=values[0]%notes[i];
if(result==0)
{
index=i;
break;
}
double temp=notes[i]-result;
if(temp<minvalue)
{
minvalue=temp;
index=i;
}
}
TextView display2 = (TextView) findViewById(R.id.textView2);
display2.setText(String.valueOf(notations[index]));
筆記數組由12個不同音符的頻率組成。 value [0]由獲得的頻率組成。 value [0]%notes [i]用於確定頻率所屬的最接近的音符。
問題:
值發生很大的變化! 因此,當在鋼琴上演奏C時,它在C上設置,但是由於改變的值而快速變化到另一個。
是否有更好的映射方案可以遵循?
謝謝您的回覆!我嘗試過使用過零方法。我應該多長時間使用過零點方法來調用計算頻率的功能?因爲我不希望它經常改變 – shivram