2009-10-02 119 views
6

我有一個非常大的WAV文件,大小約100MB。我想用Java來讀取這個wav文件,並且每隔2秒鐘將它分成更小的塊。如何使用Java將wav文件分割爲更小的塊?

在Java中可以這樣做嗎?你可以給我一個API,我可以實現它嗎?

由於提前, Snehal

+0

嗨。我正在讀取一個.wav文件,我也想將它分成更小的塊並傳遞給它,以便找出每個塊中的頻率。我在Java Sound中很新,所以你可以幫我解決這個問題。我在接下來的評論中附加了我的代碼部分。在此先感謝 – Learner 2016-12-13 06:34:04

+0

final float [] floatBuffer = DTMF.generateDTMFTone(character); String read =「D:/RecordAudio31.wav」; InputStream in = new FileInputStream(read); //從輸入流創建audiostream AudioStream audioStream = new AudioStream(in); final AudioFormat format = new AudioFormat(44100,16,1,true,false); final AudioInputStream inputStream = new AudioInputStream(audioStream,format,floatBuffer.length); final AudioDispatcher dispatcher = new AudioDispatcher(inputStream,stepSize,0); dispatcher.addAudioProcessor(goertzelAudioProcessor); new Thread(dispatcher).start(); – Learner 2016-12-13 06:36:14

+0

我想通了。不管怎麼說,多謝拉。 – Learner 2016-12-14 10:22:08

回答

4

您可以使用AudioInputStream及其AudioFileFormat成員(其中包含一個AudioFormat實例)知道寫什麼(格式,採樣率),你可以使用AudioSystem寫。

根據格式的採樣率,您可以找出音頻的有多少個字節爲2秒,然後繼續從AudioInputStream讀取許多字節的循環,將它們寫入新文件。

+0

通過AudioFileFormat我可以找出採樣率是8000.採樣率和它佔用的字節數之間的關係是什麼?我是音頻處理方面的總新手,對不起我的無知 – Snehal 2009-10-02 07:34:54

+2

除了採樣率(f)以外,還需要AudioFormat提供的每採樣位數(bps)和通道數量(n)。對於一秒鐘的音頻,您需要bps * n * f/8個字節。 – eljenso 2009-10-02 07:52:44

+0

謝謝Elijenso。我可以找出2秒鐘音頻所需的字節數。現在,我試圖使用AudioSystem的寫入方法來寫入讀取字節。但是,其中一個輸入參數是AudioInputStream。我無法根據讀取字節創建該對象。任何指針都會很有幫助。謝謝! – Snehal 2009-10-02 08:27:15

0

如果你不關心你的代碼的壽命,然後的QuickTime for Java是媒體一個不錯的選擇。它運行在Windows和Mac上,可以讀寫任何音頻(和視頻)格式。缺點是蘋果多年來一直沒有支持它,所以雖然它仍然有效,但你正在投資一種垂死的技術。

1

你也可以查查specification for a wav file這是很基本的,簡單的。 然後二進制讀取文件,並再次保存在較小的位。

我認爲這樣做是一種更好的學習體驗,而不是總是依賴圖書館。

+1

給定更大塊的格式,您還需要知道如何格式化較小塊的頭。不是一個「簡單」的任務,但它也不是一個非常困難的任務。絕對需要查看規格。 – 2012-08-18 17:40:34