Ich versuche über Audio aufnehmen, was auch klappt, jedoch während der Aufnahme friert alles ein und erst nach der Beendigung der Aufnahme kann ich wieder Text eingeben. Wo Genau muss ich den Thread einbauen, damit mir das nicht passiert?
Die AudioRecorder Klasse sieht so aus. Ich habe hier ein Thread schon eingebaut. Trotzdem friert es ein:
Java:
public class Main extends Application {
Boolean isRecording = false;
@Override
public void start(Stage primaryStage) throws Exception {
try {
VBox root = new VBox();
root.setPadding(new Insets(20));
root.setSpacing(20);
Button btn = new Button("RECORD");
btn.setOnAction(e->{
if(!isRecording){
isRecording = true;
AudioRecorder audioRecorder = new AudioRecorder(10000);
}
});
TextField tf = new TextField();
root.getChildren().addAll(btn,tf);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Die AudioRecorder Klasse sieht so aus. Ich habe hier ein Thread schon eingebaut. Trotzdem friert es ein:
Java:
package audioRecording_1;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
public class AudioRecorder {
final long recordTime;
private AudioInputStream targetLine;
public AudioRecorder(long recordTime)
{
this.recordTime = recordTime;
System.out.println("AUDIO RECORDING START:");
try {
AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
if(!AudioSystem.isLineSupported(info)){
System.err.println("Line not supported");
}
final TargetDataLine targetLine = (TargetDataLine)AudioSystem.getLine(info);
targetLine.open();
System.out.println("Start Recording: ");
targetLine.start();
File desktopDir = new File(System.getProperty("user.home"), "Desktop");
System.out.println(desktopDir.getPath() + " " + desktopDir.exists());
Thread thread = new Thread(){
@Override public void run()
{
AudioInputStream audioStream = new AudioInputStream(targetLine);
File audioFile = new File(desktopDir.getPath(),"record.wav");
try {
AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);
} catch (IOException io) {
io.printStackTrace();
}
System.out.println("Stopped Recording: ");
}
};
thread.start();
Thread.sleep(recordTime);
targetLine.stop();
targetLine.close();
System.out.println("Ended Recording: ");
}
catch (LineUnavailableException lue) { lue.printStackTrace(); }
catch (InterruptedException ie) { ie.printStackTrace(); }
}
public static void main(String[] args) {}
}