2011-05-10 144 views
2
public AudioInputStream append(AudioInputStream main, AudioInputStream s) throws UnsupportedAudioFileException, IOException { 
    AudioSystem.write(new AudioInputStream(
      new SequenceInputStream(main, s),  
      main.getFormat(), 
      main.getFrameLength() + s.getFrameLength()), AudioFileFormat.Type.WAVE, new File("/home/nikkka/Desktop/alphabet/result_for_watch.wav")); 
    return AudioSystem.getAudioInputStream(new File("/home/nikkka/Desktop/alphabet/result_for_watch.wav")); 
} 

它應該追加音頻文件,但它總是返回最後一個文件,而不是它們兩個!......有什麼問題? :S爲什麼此方法不起作用?

+0

你是什麼意思「它返回最後一個文件」? – Phonon 2011-05-10 16:44:55

+0

我的意思是audioinputstream s – nicks 2011-05-10 16:46:44

+0

當然我是...... – nicks 2011-05-10 17:07:26

回答

1

我只能看到這隻返回第二個(s)AudioInputStream的唯一方法是如果在第一個讀取時出現問題。 我會建議打破一些你的方法。在這裏我已經擴展了一些方法,以便添加一些日誌記錄並使其更加冗長。我沒有改變任何功能。

public AudioInputStream append(AudioInputStream main, AudioInputStream s) 
      throws UnsupportedAudioFileException, IOException { 

     SequenceInputStream sis = new SequenceInputStream(main, s); 

     long length = main.getFrameLength() + s.getFrameLength(); 
     logger.debug(main.getFrameLength() + "+" + s.getFrameLength() + 
        "=" + length); 

     AudioFormat fmt = main.getFormat(); 

     File file = new File("c:/MyNew.wav"); //changed for testing 

     AudioInputStream ais = new AudioInputStream(sis, fmt, length); 
     int size = AudioSystem.write(ais, AudioFileFormat.Type.WAVE, file); 
     logger.debug("Wrote :" + size); 

     return AudioSystem.getAudioInputStream(file); 
    } 

此外,確保您捕捉和記錄你的錯誤,在一些情況下,拋出。在我的測試案例中,一切正常。檢查添加的日誌語句,它顯示文件大小前後的大小,並確保寫入的內容大於或等於該值。

使方法更詳細將有助於找到問題。有了這樣更詳細的內容,您就可以更輕鬆地使用調試器了。一旦你發現問題的根源,如果你願意,你可以恢復到更緊湊的方式。

+0

我試過你的代碼......它不適用於我... – nicks 2011-05-10 17:36:33

+0

什麼不行?有沒有錯誤?你能告訴我你的輸出中顯示了什麼嗎? – Sean 2011-05-10 18:55:33

+0

沒有錯誤。相同... – nicks 2011-05-10 19:04:42

相關問題