2012-03-26 93 views
0

我有一個奇怪的問題。現在,我可以讀取wav文件樣本,並在處理它們之後,再將其保存到文件中。但對於我的項目,我必須用空值更改一些字節。我的意思是,如果我把一些整數轉換成wav文件(例如:二進制格式爲25),這意味着聲卡會給我們提供25的電信號(我可能對聲卡和wav文件有一些誤解)。Java - Wav文件 - 空字節?

但在我的項目中,我需要將null值放入wav文件中。就像聲卡讀取二進制格式爲25時,它會發出信號,但之後會出現空字節,聲卡將不會發出任何電信號,因爲有另一個值。

我知道了,我無法正確表達我的問題。爲了使其更容易理解;

讓我們假設有是存儲這樣的

data[] = {10,12,13,14,15,14,13,12,11,10}; 

我想讓它

data[]= {10,12,13,14,null,null,null,12,11,10} 

,當聲卡讀取該數據,這將爲我們的示例文件

10 voltage,12 voltage,13 voltage,14 voltage,no any signal,no any signal,no any signal,12 voltage, 11 voltage, 10 voltage} 
+0

只需使用值'0'而不是'null'。 – Jesper 2012-03-26 11:34:26

+1

*「我有一個奇怪的問題。」*大多數時候,這應該提示檢查基本事實。你的意思是你是否想爲音頻文件的一部分寫'沉默'?另一種方式是將聲音信號的一部分「靜音」。請注意,在聲音文件的某些部分寫入純粹的'0'值通常會在靜音部分的開始和結尾處造成大聲點擊。最好從正常音量開始消失(非常快)到0,然後在最後再次消失。 – 2012-03-26 11:54:11

+0

如果您添加了更多詳細信息並提供了更廣泛的用途,我們可能會爲您提供更多幫助。例如。 「我在Java字節數組中有10秒的8KHz/8位帶符號PCM音頻,我想在第五秒後插入1秒的靜音」... – thkala 2012-03-26 12:24:18

回答

0

我懷疑WAV文件是否在波形中間表示「無信號」的特定方式。 (粗略閱讀this description似乎證實了這一點。)

我認爲你最好的選擇是簡單地使用零,你沒有信號。 (顯然,將所需要的零到使用所選的編解碼器進行編碼。)


順便說一句,即使WAV文件確實有代表「無信號」的方式,也不涉及把null值到Java字節數組中。一個Java字節數組不能包含null ......永遠。 Java語言規範禁止它。

+0

請注意,恆定值的範圍內的任何值將達到相同的效果。在下一個樣本中,從一個樣本中的'14'直接轉到'0,0,0,..'通常會導致大聲的'咔嗒'型聲音。 – 2012-03-26 12:00:48

0

當您處理字節時,您不能將null放入文件中 - 每個字節必須是256個位組合中的一個。

當聲卡返回no any signal時,你的意思是什麼?是不是等於零電壓(即在文件中使用整數值0)?或者你是否使用null作爲佔位符來表示「未知」?

你可能還沒有完全表達你的問題 - 這聽起來像你已經決定,你需要將空值放在一個文件中,而且似乎沒有理由這樣做。你是什​​麼實際上試圖實現(而不是「把空值放入WAV」) - 這將工作與零?

0

沒有「空信號」。如果你的意思是你不想輸出只發送0(如果你使用的是有符號值)。如果您使用的是無符號值(不受Java支持),請發送128位8位採樣和32768 16位採樣。

所以剛纔說

data[]= {10,12,13,14,0,0,0,12,11,10}; 

其次是像

yourSoundCardObject.write(data); //The method write is hypothetical 

什麼是你的採樣率?

+0

謝謝你的回答,我嘗試了零,但它不適用於我的情況。 – user1252105 2012-03-28 01:45:23