Ola,
Estou capturando o som do microfone, mas depois gostaria de exibir para o usuario controles para ele mudar a frequencia do som, balanco, e etc. Depois que eu capturo o som eu pego o AudioInputStream e tento pegar um Clip com ele e usar o clip.open(), gera a exception: java.lang.IllegalArgumentException: illegal call to open() in interface Clip.
o código :
public void captureAudio() {
try {
audioFormat = getAudioFormat();
DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class,audioFormat);
targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
new CaptureThread().start();
} catch (Exception e) {
System.out.println(e);
System.exit(0);
}
}
A Thread
public void run() {
byteArrayOutputStream = new ByteArrayOutputStream();
setStopCapture(false);
try {
targetDataLine.open(audioFormat);
targetDataLine.start();
//Loop de captura de dados e gravacao no outputstream
while (!isStopCapture()) {
//faz a leitura do buffer interno
int cnt = targetDataLine.read(
tempBuffer,
0,
tempBuffer.length);
if (cnt > 0) {
//salva os dados no outputstream
byteArrayOutputStream.write(
tempBuffer, 0, cnt);
}
}
byteArrayOutputStream.close();
targetDataLine.stop();
targetDataLine.close();
} catch (Exception e) {
System.out.println(e);
}
}
Depois eu retorno um AudioInputStream com isso:
public AudioInputStream getAudioInputStream() {
try {
byte audioData[] = byteArrayOutputStream.toByteArray();
InputStream byteArrayInputStream = new ByteArrayInputStream(audioData);
AudioFormat audioFormat = getAudioFormat();
return audioInputStream = new AudioInputStream(
byteArrayInputStream,
audioFormat,
audioData.length / audioFormat.getFrameSize());
} catch (Exception e) {
System.out.println(e);
return null;
}
}
Alguem sabe o que me impede de usar o clip.open() com esse AudioInputStream? ou outro modo de fornecer para o usuário os controles?