从java中的Url获取音频持续时间

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 存储库

【讨论】:

以上是关于从java中的Url获取音频持续时间的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 glide 从 android 中的音频 url 获取缩略图

从 Java Swing App 中的 URL 流式传输音频

音频持续时间返回 0.0

ios中的音频流持续时间

如何在 iOS 中获取音频文件的持续时间?

MP3/wav 音频文件的持续时间