如何在Java媒体框架中学习.wav持续时间?
我打算使用java媒体框架将.mov文件与.wav文件合并,因此我需要知道它们的持续时间。我该怎么做?如果您有任何想法,我将不胜感激。我不熟悉java media framework,但以下内容可能会有所帮助: 1) 理论上,您可以从“事实”块中获取wav文件的持续时间。但我怀疑JMF是否能直接访问该区块。此外,区块可能包含不正确的值如何在Java媒体框架中学习.wav持续时间?,java,audio,wav,jmf,Java,Audio,Wav,Jmf,我打算使用java媒体框架将.mov文件与.wav文件合并,因此我需要知道它们的持续时间。我该怎么做?如果您有任何想法,我将不胜感激。我不熟悉java media framework,但以下内容可能会有所帮助: 1) 理论上,您可以从“事实”块中获取wav文件的持续时间。但我怀疑JMF是否能直接访问该区块。此外,区块可能包含不正确的值 2) 您可以计算持续时间,知道音频数据大小(以字节为单位)和采样率(或比特率)。您可以使用这种方法(这是VitalyVal的第二种方法)了解声音文件的持续时间:
2) 您可以计算持续时间,知道音频数据大小(以字节为单位)和采样率(或比特率)。您可以使用这种方法(这是VitalyVal的第二种方法)了解声音文件的持续时间:
我尝试了被接受的答案,但在得到例外后,我决定用简单的方法来做 如果您有一些基本信息,您可以计算音频数据长度。主要作品有:
- 采样率
- 样本大小(每个样本的位数)
- 文件大小
- 通道数(单声道/立体声)
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文件进行了测试。请您给出一个具体的例子好吗?恐怕我不知道您所说的“具体例子”是什么意思。正如我所说,我不熟悉JMF。此外,对于第1点),您只需要阅读RIFF-WAV文件规范。对于第2点:持续时间(以秒为单位)=数据大小/块对齐/采样器。我想告诉你的是-只有两种可能的常用方法可以在不解压缩的情况下确定wav文件的持续时间。当音频为压缩格式时,您需要@ibrahimyilmaz的解决方案中显示详细信息。例如,如果文件是MP3,则使用的
file.length()
将是不正确的引用长度。
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) { }
}
}