我正在尝试创建信号发生器,其频率由陀螺仪传感器数据控制(通过移动手机)。问题是,我正在调用内部,并且我对输出进行了“点击”,因为每次更新senzor时,我都会调用AudioTrackonSensorChanged
stopSinus();
setSinus(Frequency);
startSinus();
它被定义为这样
siAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,
buffsize, AudioTrack.MODE_STATIC);
public void stopSinus() {
int checkPlay = siAudioTrack.getPlayState();
if (checkPlay == 3) { //
siaudioTrack.stop();
}
}
public void startSinus() {
siAudioTrack.reloadStaticData();
siAudioTrack.setLoopPoints(0, sampleCount, -1);
siAudioTrack.play();
}
public void setSinus(int frequency) {
sampleCount = (int) ((float) SAMPLE_RATE / frequency);
short sample[] = new short[sampleCount];
int amplitude = 32767;
double twoPi = 2 * Math.PI;;
double phase = 0.0;
for (int i = 0; i < sampleCount; i++) {
sample[i] = (short) (amplitude * Math.sin(phase));
phase += twoPi * frequency / SAMPLE_RATE;
}
siAudioTrack.write(sample, 0, sampleCount);
}
onSensorChanged每秒变化几次,它将在波浪中间停止发电机 - 这就是“咔哒”的来源。
有人可以告诉我如何在一整波之后停止发电机吗?如何找出os何时通过零?还是一些不同的解决方案?phase
慕哥6287543
相关分类