我在Android上研究了正弦波生成很长一段时间,我在网上得到了一些示例代码。但是,当我自己编码时,我仍然感到困惑。 我使用如下代码
double[] buf = new double[(int) sampleRate];
byte[] buffer = new byte[(int) sampleRate];
double sampleInterval = sampleRate/frequency;
for(int i=0; i<sampleRate;i++){
buf[i] = (Math.sin((2.0*Math.PI*i)/sampleInterval));
buffer[i] = (byte)(buf[i]*Byte.MAX_VALUE);
}
while(flag) {
audioTrack.write(buffer, 0, buffer.length);
}
2.产生的声音往往不稳定,有时是连续的,但有时它可能是断断续续的,声音会有明显的规律性起伏。
如何改进我的代码以使其稳定和准确?
答案 0 :(得分:0)
为什么要两个缓冲区?
你可以用一个
来做double phase = 0.0;
amp = 10000;
short[] buffer = new short[BUFSIZE]; // BUFSIZE should be result from audiotrack.getMinBufferSize
double phaseIncrement = (2 * Math.PI * frequency) / sampleRate;
for (int i = 0; i < BUFSIZE; i++) {
buffer[i] = (short) (amp * Math.sin(phase));
phase += phaseIncrement;
}
audioTrack.write(buffer, 0, buffer.length);