Oi, copiei o exemplo de como fazer um programa para capturar audio do microfone através de JMF que achei no JMF Guide que baixei no site da Oracle e meio que entendi como ele funciona, mas quando fui tentar criar a interface gráfica pra ele não deu certo e não sei o que to fazendo errado.
Alguém pode me apontar um caminho?
package exemploaudio;
import java.awt.Component;
import javax.media.Processor;
import javax.swing.JFrame;
public class NewClass extends JFrame{
public NewClass(Processor p){
Component visualComponent = p.getVisualComponent();
add(visualComponent);
Component controlPanel = p.getControlPanelComponent();
add(controlPanel);
}
}
Classe main:
package exemploaudio;
import java.awt.Component;
import javax.swing.JApplet;
import java.io.IOException;
import java.net.URL;
import java.util.Vector;
import javax.media.*;
import javax.media.control.StreamWriterControl;
import javax.media.format.AudioFormat;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;
import jmapps.util.StateHelper;
public class Main {
public static void main(String[] args) {
CaptureDeviceInfo di = null;
Processor p = null;
StateHelper sh = null;
DataSink filewriter = null;
Vector deviceList = CaptureDeviceManager.getDeviceList(new AudioFormat("Linear", 44100, 16, 2));
if (deviceList.size() > 0) {
di = (CaptureDeviceInfo) deviceList.firstElement();
} else {
System.exit(-1);
}
try {
p = Manager.createProcessor(di.getLocator());
sh = new StateHelper(p);
} catch (IOException e) {
System.err.println("IOException");
} catch (NoPlayerException e) {
System.err.println("NoPlayerException");
}
if (!sh.configure(10000)) {
System.exit(-1);
}
p.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.WAVE));
if (!sh.realize(10000)) {
System.exit(-1);
}
DataSource source = p.getDataOutput();
try {
MediaLocator dest = new MediaLocator(new URL("file://foo.wav"));
filewriter = Manager.createDataSink(source, dest);
filewriter.open();
} catch (NoDataSinkException e) {
System.exit(-1);
} catch (IOException e) {
System.exit(-2);
} catch (SecurityException e) {
System.exit(-3);
}
StreamWriterControl swc = (StreamWriterControl) p.getControl("javax.media.control.StreamWriterControl");
if (swc != null) {
swc.setStreamSizeLimit(5000000);
}
try {
filewriter.start();
} catch (IOException e) {
System.exit(-1);
}
sh.playToEndOfMedia(5000);
sh.close();
filewriter.close();
//Essa foi a parte que adicionei por minha conta, sem isso aqui ele funciona, mas sem GUI.
NewClass frame = new NewClass(p);
frame.setSize(375, 100);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
}
