2010-11-09 140 views
4

經過對該主題的深入研究後,我到達了一堵磚牆。將字節數組轉換爲Wav文件

我想要做的就是將一組.wav文件逐個添加到字節數組中,並將它們全部輸出到一個完整的新創建的.wav文件中。我將所有.wav數據提取到一個字節數組中,跳過.wav頭並直接進行數據處理,然後將它寫入新創建的.wav文件時,出現如下錯誤: Error1:javax.sound .sampled.UnsupportedAudioFileException:無法從輸入流 誤差2獲得音頻輸入流:無法從輸入流中獲得音頻輸入流

的代碼是:

try 
    { 
    String path = "*********"; 
    String path2 = path + "newFile.wav"; 

    File filePath = new File(path); 
    File NewfilePath = new File(path2); 

    String [] folderContent = filePath.list(); 

    int FileSize = 0; 

    for(int i = 0; i < folderContent.length; i++) 
     { 
      RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r"); 
      FileSize = FileSize + (int)raf.length(); 

     } 

    byte[] FileBytes = new byte[FileSize]; 

    for(int i = 0; i < folderContent.length; i++) 
     { 
      RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r"); 
      raf.skipBytes(44); 
      raf.read(FileBytes); 
      raf.close(); 

     } 

    boolean success = NewfilePath.createNewFile(); 

    InputStream byteArray = new ByteArrayInputStream(FileBytes); 

    AudioInputStream ais = AudioSystem.getAudioInputStream(byteArray); 

    AudioSystem.write(ais, Type.WAVE, NewfilePath); 

    } 
+0

聲音文件需要全部格式(例如22500 KHz,單聲道,8位)。它們也需要是相同的編碼(例如a-law或pcm)。 AudioSystem類提供了在特定類型的流/格式之間進行轉換的方法。研究一下。 – 2010-11-09 13:47:28

+0

即使它們都是相同的格式,簡單地連接它們將不起作用,因爲wav文件有一個標題...並將它們連接起來會使標題意外出現在文件的中間。 – Powerlord 2010-11-09 15:45:31

+1

他確實說過他跳過了標題。 – AHungerArtist 2010-11-09 18:00:04

回答

-1

你的字節數組不包含任何頭這可能意味着AutoSystem.write不認爲它真的是WAV數據。

您可以爲您的組合數據創建合適的標題嗎?

更新:This問題可能會爲您解答。

+1

謝謝Richard,這可能是我能找到的答案中最接近的東西。在分割文件時,我一直對wav頭文件的創建和放置感到困惑。 – user501861 2010-11-10 08:55:25

+1

鏈接的問題根本不處理字節數組?你沒有回答這個問題,只是告訴他爲什麼它不工作(他已經知道)。爲什麼這麼難以找到答案??? – CpILL 2013-10-04 06:57:58