下面是從一個Android應用採取:函數來生成頻調跳過cretain頻率
public void genTone(int freq){
for(int i = 0; i<numSamples; i++){
samples[i] = Math.pow(-1, (float)(i/(sampleRate/freq)));
}
int idx = 0;
int volume = 32767 * cx/wide;
for (final double dVal : samples) {
final short val = (short) ((dVal+1) * volume);
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
if(isRecording){
toRec.add((byte)(val & 0x00ff));
toRec.add((byte)((val & 0xff00) >>> 8));
}
}
}
上面的代碼是在Android的Java函數應用中的產生方波具有指定頻率。頻率由整數'音符'確定,該音符是MotionEvent的最後記錄位置除以屏幕高度的值。頻率爲440 * 2 ^(注/ 12)。我用文本輸出了音符和頻率,並輸出我想要的內容,但是在某些音符處,即使它在文本中輸出不同的頻率,聽起來也完全一樣。 8000是否過低(每秒)sampleRate?這是一個衆所周知的bug嗎?任何你可以幫助我的東西?
是sampleRate一個int或float? – jaket 2014-12-04 22:59:05
@jaket Int:8000,它有什麼區別?無可否認,idk的四捨五入是如何運作的。 – user2649681 2014-12-05 00:30:50
什麼是cx,wide,numSamples和freq在每種情況下,你希望是不同的,但聽起來相同?聞起來像整數溢出給我。除非您生成一些高頻音調,否則8 KHz不是問題。 – 2014-12-05 03:22:53