我試圖從我的PC上的線路捕獲音頻,爲此我使用AudioSystem類。靜態AudioSystem.write方法有兩種選擇之一:寫入文件或寫入流。我可以把它寫入文件中,但是每當我嘗試寫入流時,都會拋出java.io.IOException(未指定流長度)。至於我的緩衝區,我正在使用ByteArrayOutputStream。是否有另一種我應該使用的流或在其他地方搞亂?Java AudioSystem和TargetDataLine
另外在一個相關的主題,人們可以通過調用read直接採樣音頻線(TargetDataLine)。這是進行音頻採集還是使用AudioSystem的首選方式?
更新被請求 源代碼:
final private TargetDataLine line;
final private AudioFormat format;
final private AudioFileFormat.Type fileType;
final private AudioInputStream audioInputStream;
final private ByteArrayOutputStream bos;
// Constructor, etc.
public void run()
{
System.out.println("AudioWorker Started");
try
{
line.open(format);
line.start();
// This commented part is regarding the second part
// of my question
// byte[] buff = new byte[512];
// int bytes = line.read(buff, 0, buff.length);
AudioSystem.write(audioInputStream, fileType, bos);
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("AudioWorker Finished");
}
// Stack trace in console
AudioWorker Started
java.io.IOException: stream length not specified
at com.sun.media.sound.WaveFileWriter.write(Unknown Source)
at javax.sound.sampled.AudioSystem.write(Unknown Source)
at AudioWorker.run(AudioWorker.java:41)
AudioWorker Finished
你可以發表一些代碼嗎? – 2009-02-28 17:59:44
將堆棧跟蹤(至少是前幾幀)發佈到應用程序。 – erickson 2009-02-28 18:22:55