我想在Ubuntu 11.10笔记本电脑上用Java写一个自定义合成器。这是我的代码:如何在Java中合成声音?
package com.sibbo.audio;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
public class Audio {
public static void main(String[] args) throws LineUnavailableException {
byte[] data = new byte[16000 * 2];
sinus(data);
AudioFormat format = new AudioFormat(16000, 8, 1, true, true);
Clip c = javax.sound.sampled.AudioSystem.getClip();
c.open(format, data, 0, data.length); // throws IllegalArgumentException
}
private static void sinus(byte[] data) {
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (Math.sin(i/200.0) * 127);
}
}
}
在标记的行,它会抛出一个异常,说:“格式无效”。我怎样才能找出哪些AudioFormats是合法的?我已经试过的是切换有符号/无符号和小/大端的布尔值。
缓冲区的大小似乎对我来说没问题...您对格式有什么看法?顺便说一句,我试图用SourceDataLine解决这个问题,但是用我的第一种方法解决这个问题真的很不错。 – Sibbo