Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java媒体框架中学习.wav持续时间?_Java_Audio_Wav_Jmf - Fatal编程技术网

如何在Java媒体框架中学习.wav持续时间?

如何在Java媒体框架中学习.wav持续时间?,java,audio,wav,jmf,Java,Audio,Wav,Jmf,我打算使用java媒体框架将.mov文件与.wav文件合并,因此我需要知道它们的持续时间。我该怎么做?如果您有任何想法,我将不胜感激。我不熟悉java media framework,但以下内容可能会有所帮助: 1) 理论上,您可以从“事实”块中获取wav文件的持续时间。但我怀疑JMF是否能直接访问该区块。此外,区块可能包含不正确的值 2) 您可以计算持续时间,知道音频数据大小(以字节为单位)和采样率(或比特率)。您可以使用这种方法(这是VitalyVal的第二种方法)了解声音文件的持续时间:

我打算使用java媒体框架将.mov文件与.wav文件合并,因此我需要知道它们的持续时间。我该怎么做?如果您有任何想法,我将不胜感激。

我不熟悉java media framework,但以下内容可能会有所帮助:

1) 理论上,您可以从“事实”块中获取wav文件的持续时间。但我怀疑JMF是否能直接访问该区块。此外,区块可能包含不正确的值


2) 您可以计算持续时间,知道音频数据大小(以字节为单位)和采样率(或比特率)。

您可以使用这种方法(这是VitalyVal的第二种方法)了解声音文件的持续时间:


我尝试了被接受的答案,但在得到例外后,我决定用简单的方法来做

如果您有一些基本信息,您可以计算音频数据长度。主要作品有:

  • 采样率
  • 样本大小(每个样本的位数)
  • 文件大小
  • 通道数(单声道/立体声)
如果你有这些,你可以找出持续时间。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文件进行了测试。

请您给出一个具体的例子好吗?恐怕我不知道您所说的“具体例子”是什么意思。正如我所说,我不熟悉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) { }
    }
}