Bil*_*ici 3 java math signals trigonometry
我正在尝试生成正弦波并将其添加到字节数组.我搜索并找到了.但是,我总是像附件一样得到扭曲的波形.
请告诉我你为什么会这样.谢谢.
我的代码在这里
private byte[] getData(int freq) { // taking pitch data
double pha = Math.PI/2; // defining phase
final int LENGTH = 44100 * 10; // defining length of sine wave, byte array
final byte[] arr = new byte[LENGTH];
for(int i = 0; i < arr.length; i++) {
double angle = (2.0 * Math.PI * i*freq+pha) / (44100);
arr[i] = (byte) (Math.cos(angle) *127* 0.3); // 0.3 is amplitude scale
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)

代码看起来很好.我怀疑它是可视化器将两个补码符号值解释为无符号(-1成为255,-2成为254等等).
我写了一个wav文件并用SonicVisualiser绘制它
8位采样存储为无符号字节,范围从0到255. 16位采样存储为2的补码有符号整数,范围从-32768到32767.
看起来您需要将正弦波向上移动128(使其完全适合0-255范围内),或者转向使用16位采样.
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |