我打算使用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