【发布时间】:2015-06-14 02:19:44
【问题描述】:
我正在尝试这段代码,但在测试 5 和测试 9 之后,代码似乎在 audioStream.write() 处停止运行。
之后什么都没有
AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);
由程序执行。我该如何解决这个问题,或者有其他方法可以录制我的声音吗?
import javax.sound.sampled.*;
import java.io.*;
public class Mic{
public static void main(String[] args){
System.out.println("Sound test starting");
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 is not supported");
}
final TargetDataLine targetLine = (TargetDataLine)AudioSystem.getLine(info);
targetLine.open();
System.out.println("Recording voice");
targetLine.start();
Thread thread = new Thread();
{
//@Override public void run();
{
AudioInputStream audioStream = new AudioInputStream(targetLine);
File audioFile = new File("Recording.wav");
System.out.println("test5");
try { System.out.println("test9");
AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);
System.out.println("audio writing test");
}
catch(IOException e){
e.printStackTrace();
}
System.out.println("test6");
System.out.println("Recording Stopped");
}
};
thread.start();
Thread.sleep(5000);
targetLine.stop();
targetLine.close();
System.out.println("Ended sound test");
}
catch(InterruptedException ie){
ie.printStackTrace();
}
catch(LineUnavailableException e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
如果编译运行,"System.out.println("audio writing test");"永远不会执行,但会执行打印测试“test5”和“Test9”。我对 audiosystem.write 方法做错了什么?
-
audioFile.canWrite()是否返回true? -
这是我运行代码时发生的情况。 gyazo.com/8d5d2db0f061d30cac0411b17ccab3c1
-
@PatrickRoberts 是的,它返回 true
-
我唯一能想到的就是你在做一些不是线程安全的事情。
标签: java file audio audio-streaming microphone