2014-07-20 60 views
0

在我的應用程序中,我想將原始字節數據更改爲音頻。所以,起初我接收數據並將其添加到字節數組列表中,而我想將整個數組列表更改爲音頻。由於數據是通過音頻插孔生成的,如果您讓我知道哪種音頻格式合適(wav,3gp等),我將不勝感激。另外,我在將這些數據保存到文件時遇到了問題。這是我的代碼。在fileOuputStream.write(audiod.toArray())中,它給出了一個錯誤,並要求我將audiod的類型改爲byte。將原始字節數據轉換爲音頻

private static ArrayList<Byte> audiod = new ArrayList<Byte>(); 
audioFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myaudio.wav"; 

if (dg == 1) { 
    //audiod.append(data[i]); 
    for (int i = 0; data != null && i < data.length; i++) { 
     audiod.add(data[i]); 
    } 
    if (stt.equalsIgnoreCase(("r"))) { 
     dg = 0; 
     recordButton.setEnabled(true); 
     File file = new File(audioFilePath); 
     try { 
      FileOutputStream fileOuputStream = new FileOutputStream(audioFilePath); 
      fileOuputStream.write(audiod.toArray()); 
      fileOuputStream.close(); 
      System.out.println("Done"); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

回答

1

audiod.toArray()會給你一個Byte[],但你需要一個byte[]。在Java中,原始數據類型有所謂的包裝類。 A Byte是包含byte值的對象。

爲什麼你根本不使用Byte的列表?它需要比簡單的byte[]更多的內存,你似乎無論如何(data)。

數據格式(wav,3gp等)取決於您如何獲取數據。

+0

正如你所看到的,我想向Audiod添加數據,我不確定Audiod的尺寸是多少。如果我將Audiod定義爲字節,有什麼方法可以將數據[i](它是一個字節)添加到該字段嗎?... – user3839386

+0

我會直接將數據寫入文件,或者如果您確實必須保留它可以在內存中使用'ByteArrayOutputStream'(http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html)。它根據需要增長底層字節數組。 – Henry