我打算使用java媒體框架將.mov文件與.wav文件合併,因此我需要知道它們的持續時間。我怎樣才能做到這一點?任何想法,將不勝感激..如何在Java媒體框架工作中學習.wav持續時間?
3
A
回答
6
你可以學習使用這種方式的聲音文件的持續時間(即VitalyVal的第二種方式):
import java.net.URL;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
public class SoundUtils {
public static double getLength(String path) throws Exception {
AudioInputStream stream;
stream = AudioSystem.getAudioInputStream(new URL(path));
AudioFormat format = stream.getFormat();
if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format
.getSampleRate(), format.getSampleSizeInBits() * 2, format
.getChannels(), format.getFrameSize() * 2, format
.getFrameRate(), true); // big endian
stream = AudioSystem.getAudioInputStream(format, stream);
}
DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(),
((int) stream.getFrameLength() * format.getFrameSize()));
Clip clip = (Clip) AudioSystem.getLine(info);
clip.close();
return clip.getBufferSize()
/(clip.getFormat().getFrameSize() * clip.getFormat()
.getFrameRate());
}
public static void main(String[] args) {
try {
System.out
.println(getLength("..."));
} catch (Exception e) {
e.printStackTrace();
}
}
}
1
我不熟悉Java媒體框架,但可能下面會有所幫助:
1)理論上可以從「事實」塊得到一個wav文件的時間。但我懷疑,JMF可以直接訪問該塊。此外,該塊可能包含不正確的值。
2)您可以計算持續時間,瞭解音頻數據大小(以字節爲單位)和採樣率(或比特率)。
4
我試圖接受的答案,但得到的異常與它之後,我決定只做到這一點簡單的方法。
如果您有幾條基本信息,您可以繪製音頻數據的長度。主要作品有:
- 採樣率
- 樣品尺寸(每個樣品位)
- 文件大小渠道
- 號(單聲道/立體聲)
如果您有這些,你可以找出持續時間。 Java很好,因爲它提供的庫可以輕鬆檢索所有這些信息。方程是下面:
採樣率*樣品尺寸*持續時間*通道數=文件大小
見下面的代碼執行此計算中的java:
public static double getDurationOfWavInSeconds(File file)
{
AudioInputStream stream = null;
try
{
stream = AudioSystem.getAudioInputStream(file);
AudioFormat format = stream.getFormat();
return file.length()/format.getSampleRate()/(format.getSampleSizeInBits()/8.0)/format.getChannels();
}
catch (Exception e)
{
// log an error
return -1;
}
finally
{
try { stream.close(); } catch (Exception ex) { }
}
}
希望這有助於有人在那裏!不過,我只用WAV文件測試過它。
+0
當音頻採用壓縮格式時,您需要在@ibrahimyilmaz的解決方案中顯示詳細信息。例如,如果文件是MP3文件,那麼使用'file.length()'就會導致錯誤的長度。 – metasim 2012-06-17 13:22:09
相關問題
- 1. ASP.NET持續學習
- 2. 如何學習Erlang框架?
- 3. 你如何學習框架?
- 4. 如何編寫一個web框架作爲學習體驗
- 5. 學習火花流媒體
- 6. 在Android中使用java媒體框架
- 7. Java媒體框架x64bit
- 8. Scala/Java媒體框架?
- 9. 如何確定媒體文件的持續時間?
- 10. 如何從Windows媒體服務獲取持續時間值9
- 11. 學習CSLA.NET框架
- 12. 學習WCF實體框架4.0
- 13. Matlab - .wav的雙倍持續時間
- 14. 如何去學習android框架
- 15. HTML5媒體捕獲在移動 - 視頻持續時間
- 16. 我應該如何開始學習ADO.NET實體框架?
- 17. 我應該學習Web框架在使用之前如何工作?
- 18. iOS媒體框架
- 19. Flex媒體框架
- 20. 如何在上傳之前在php中查找wav文件的持續時間?
- 21. 如果不先學習PHP,是否可以學習Zend框架?
- 22. 如何在工作時間持續運行bash腳本?
- 23. Java媒體框架MP3插件
- 24. 最佳100%純Java媒體框架
- 25. panTo()持續時間不工作?
- 26. jquery toggleClass持續時間不工作
- 27. 學習Java中
- 28. 如何提取只包含持續時間的持續時間?
- 29. 如何實體框架的工作
- 30. 在C中訪問媒體文件的shell屬性「Length」(aka持續時間)
請您舉個具體的例子嗎? – yasemin 2010-04-25 21:05:30
恐怕,我不確定你的意思是「具體的例子」。正如我所說我不熟悉JMF。而且,至於第1)點,您只需要讀取RIFF-WAV文件規格。至於點2:持續時間(以秒爲單位)= data_size/block_align/samplerate。我想說的 - 只有兩種可能的常用方法來確定wav文件的持續時間,而不需要解壓縮。 – VitalyVal 2010-04-25 21:33:25