f
ゼロまで直線的に縮小します。これは、式t * Math.PI * 2
もゼロに縮小されることを意味します。渡す値sin()
は、最初は0(t = 0のため)から正の値(t>0およびf>0のため)になり、0に戻ります(f = 0のため)。
t * Math.PI * 2 * f
時間の経過と頻度の値を見てみましょう。
- t = 0では、値は0であり、速度220とともに増加します。
- t = 0.5では、値は345であり、増加を停止します
- t = 1で、値は再び0になり、速度-220で減少します。
t * Math.PI * 2
fが掛けられ、fが小さくなっているため、方向が逆になっています。これは、tが1に近づくにつれて、式全体が小さくなることを意味します。
代わりにこのコードを試してください:
double ct = 0;
for (;;) {
if(t>=1) break;
//System.out.println(t+" "+e.getValueAt(t));
for (int i = 0; i < buff.length; i++) {
double f=lerp(fa,fb,t);
buff[i] = (short) (Short.MAX_VALUE * 0.5 * Math.sin(Math.PI * 2 * ct));
toSoundCard[2 * i] = (byte) buff[i];
toSoundCard[2 * i + 1] = (byte) (buff[i] >> 8); //(i know i could avoid doing this)
t += 1.0 / 44100.0;
ct += f / 44100.0;
}
speaker.write(toSoundCard, 0, toSoundCard.length);
}