【发布时间】:2016-04-14 13:43:35
【问题描述】:
我在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);
}
- 播放“Math.sin((2.0*Math.PI*i)/sampleInterval)”公式生成的正弦波缓冲区时噪音太大。我不知道这是 Java 和 Android 的问题还是我的编码问题。在模拟器和我真正的索尼手机上都显示了噪音。但是在我同学的笔记本电脑上使用 Matlab 的相同公式可以很好地工作。 我还尝试在桌面 java 代码中使用 DataSourceLine。噪音也存在。
2.产生的声音往往不稳定,有时是连续的,但有时是断断续续的,声音有明显的规律起伏。
如何改进我的代码以使其稳定和准确?
【问题讨论】:
标签: java android audio pcm audiotrack