下面是从一个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