2011-02-10 49 views
0

我想將整數數組轉換爲聲音表示。目前,我正在玩的每個值作爲一個單獨的短調,但我想創建一個從信息的單一採樣波形和回放,就像這樣:合成採樣聲音

image

代表一個數據點,每個紅點。理想情況下,我想結束一個簡單的方法,如playSound(int[] array);。我已經瀏覽了javax.sound.sampled包,但我不知道從哪裏開始。

回答

0

首先,樣本數組是不足以播放聲音的信息。

  • 您還需要指定採樣率。 (例如,如果以25個採樣/秒記錄,則重複-1,+ 1等的50個採樣可以是50Hz的正弦波,或者如果以50個採樣/秒(我的數學可能是關閉的)記錄,則採樣爲12.5Hz的正弦波。

  • 另一件需要的就是如何存儲聲音。 MAX_INT是您最高的聲音還是255您的峯值音量?

  • 您還需要指定編碼。您可能需要PCM_SIGNED或PCM_UNSIGNED(取決於您是否有負樣本),或者可能有其他編碼需要使用。

javax.sound.sampled包在AudioFormat類中表示此信息。

您將需要構建反映您的音頻採樣方法的音頻格式。例如,如果你的樣品佔去了全整數的範圍,你代表的各樣本與一個整數,你以每秒22000個樣本進行採樣,這是一個單聲道聲音,你會構建以下的AudioFormat ...

AudioFormat desiredFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22000,32,1,32,22000,true); 

一旦你有一個AudioFormat,你可以打開一條線並將音頻轉儲到它。 This page演示如何做到這一點(他們作弊並正在播放音頻文件,以便他們從文件中獲取AudioFormat)。

當然,您可能無法爲所有格式打開一行,因此您可能需要進行一些轉換。所有這些說,可能有Java聲音庫在那裏,這可以使這更容易。

+0

感謝您的信息!爲了回答一些問題,這些值只有0-99,並且數組長度在5-500之間。採樣率對我來說並不重要,儘管我希望樣本的總長度在100-300毫秒左右。 – EscapeNT 2011-02-10 02:50:56