【问题标题】:Getting an audio duration from an Url in java从java中的Url获取音频持续时间
【发布时间】:2018-08-14 07:51:25
【问题描述】:

我需要从 java 中的音频 URL 中获取音频的持续时间,但无法找到执行此操作的方法。 任何人都可以请建议如何做到这一点?

【问题讨论】:

    标签: java audio


    【解决方案1】:

    我认为应该这样做:

    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new URL("http://www.url.com/"+ args[0] +".mp3"));
    AudioFormat format = audioInputStream.getFormat();
    long audioFileLength = file.length();
    int frameSize = format.getFrameSize();
    float frameRate = format.getFrameRate();
    float durationInSeconds = (audioFileLength / (frameSize * frameRate));
    

    【讨论】:

    • 这里的file 是什么?该代码正在读取流而不是文件。在任何情况下,对于像 mp3 这样的压缩文件,使用文件长度和帧大小都会给出错误的答案,因为文件中的帧是压缩的。
    【解决方案2】:

    经过一番研究,我找到了这个问题的答案,并发布了答案,以便其他人也可以这样做。

    String filePrefix = FileUtils.getTempDirectoryPath() + File.separator;
    
            URL audioURL = new URL(url);
            File destination = new File(filePrefix + UUID.randomUUID().toString());  // To store the file at a certain destination for temporary usage
            FileUtils.copyURLToFile(audioURL, destination);
    
            IsoFile isoFile = new IsoFile(destination.getAbsolutePath());
    
            double lengthInSeconds = (double)
                    isoFile.getMovieBox().getMovieHeaderBox().getDuration() /
                    isoFile.getMovieBox().getMovieHeaderBox().getTimescale();
    
            try {
                System.out.println("Length of audio in seconds === " + lengthInSeconds);
                destination.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    注意: FileUtils 来自 apache.commons 存储库,IsoFile 来自 coremedia.iso 存储库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-01
      • 2019-04-19
      • 1970-01-01
      • 2014-02-08
      • 2010-11-17
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多