在java中怎么获取音频的总时长?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中怎么获取音频的总时长?相关的知识,希望对你有一定的参考价值。

如题

java中直接使用AudioInputStream类来操作音乐文件,获取时长,实例如下:

import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.Audiosystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
public class AudioLength 
    public static void main(String[] args) throws LineUnavailableException,
            UnsupportedAudioFileException, IOException 
        File file = new File("d:/test.wav");
        Clip clip = AudioSystem.getClip();
        AudioInputStream ais = AudioSystem.getAudioInputStream(file);
        clip.open(ais);
        System.out.println( clip.getMicrosecondLength() / 1000000D + " s" );//获取音频文件时长
    
参考技术A 调用DLL文件,只要找到一个可以比较好解析播放时长的DLL,然后JNI调用,CPP或者Delphi都好,只要能实现就oK了,DLL放在BIN目录;

PS:问题解决;

Java代码
public class CtrlFtpFile
//读取Dll
static
System.loadLibrary("GetPlayTime");


public native String getMediaTime(String arg);

public static void main(String[] args)

CtrlFtpFile hw = new CtrlFtpFile();
// System.out.println(hw.getMediaTime("D:\\TDDOWNLOAD\\小强.mp3"));
System.out.println(hw.getMediaTime("file:///G:/tomcat/apache-tomcat-6.0.18/webapps/mbs/ftp/0/real/B1224487037153.mpeg"));
//file:///G:\tomcat\apache-tomcat-6.0.18\webapps\mbs\ftp\0/real/B1224487037153.mpeg



调用方法:String.valueOf(ftpFile.getPlaytime());因为得到是一个秒数字符串;

那个附件到参考资料那个网站下载就行
:"http://jatula.javaeye.com/blog/259328"

参考资料:http://jatula.javaeye.com/blog/259328

本回答被提问者采纳
参考技术B 调用DLL文件,只要找到一个可以比较好解析播放时长的DLL,然后JNI调用,CPP或者Delphi都好,只要能实现就oK了,DLL放在BIN目录;

PS:问题解决;

Java代码
public class CtrlFtpFile
//读取Dll
static
System.loadLibrary("GetPlayTime");


public native String getMediaTime(String arg);

public static void main(String[] args)

CtrlFtpFile hw = new CtrlFtpFile();
// System.out.println(hw.getMediaTime("D:\\TDDOWNLOAD\\小强.mp3"));
System.out.println(hw.getMediaTime("file:///G:/tomcat/apache-tomcat-6.0.18/webapps/mbs/ftp/0/real/B1224487037153.mpeg"));
//file:///G:\tomcat\apache-tomcat-6.0.18\webapps\mbs\ftp\0/real/B1224487037153.mpeg



调用方法:String.valueOf(ftpFile.getPlaytime());因为得到是一个秒数字符串;

那个附件到参考资料那个网站下载就行
:"http://jatula.javaeye.com/blog/259328"

在 JS 中获取音频时长并在 HTML 中显示

【中文标题】在 JS 中获取音频时长并在 HTML 中显示【英文标题】:Get audio duration in JS and display in HTML 【发布时间】:2021-01-13 07:02:06 【问题描述】:

为了显示音频播放器,我的以下代码运行良好,但我还想获得要显示的音频文件的总持续时间:

HTML

    <button id="playAudio"></button>

    <div id="seekObjContainer">
        <div id="seekObj">
            <div id="percentage"></div>
        </div>
    </div>

    <p><small id="currentTime">00:00</small></p>

</div>

JS

    // Audio Player

function $(id)  return document.getElementById(id); ;
const media = document.getElementById('audio');

let ui = 
    play: 'playAudio',
    audio: 'audio',
    percentage: 'percentage',
    seekObj: 'seekObj',
    currentTime: 'currentTime'
;

function togglePlay() 
    if (media.paused === false) 
        media.pause();
        $(ui.play).classList.remove('pause');
     else 
        media.play();
        $(ui.play).classList.add('pause');
    


function calculatePercentPlayed() 
    let percentage = (media.currentTime / media.duration).toFixed(2) * 100;
    $(ui.percentage).style.width = `$percentage%`;


function calculateCurrentValue(currentTime) 
    const currentMinute = parseInt(currentTime / 60) % 60;
    const currentSecondsLong = currentTime % 60;
    const currentSeconds = currentSecondsLong.toFixed();
    const currentTimeFormatted = `$currentMinute < 10 ? `0$currentMinute` : currentMinute:$currentSeconds < 10 ? `0$currentSeconds` : currentSeconds
        `;

    return currentTimeFormatted;


function initProgressBar() 
    const currentTime = calculateCurrentValue(media.currentTime);
    $(ui.currentTime).innerHTML = currentTime;
    $(ui.seekObj).addEventListener('click', seek);

    media.onended = () => 
        $(ui.play).classList.remove('pause');
        $(ui.percentage).style.width = 0;
        $(ui.currentTime).innerHTML = '00:00';
    ;

    function seek(e) 
        const percent = e.offsetX / this.offsetWidth;
        media.currentTime = percent * media.duration;
    

    calculatePercentPlayed();


$(ui.play).addEventListener('click', togglePlay)
$(ui.audio).addEventListener('timeupdate', initProgressBar);

我想要什么:

我想在 html 中获取音频文件的总持续时间,以便显示当前时间/持续时间。有什么想法吗?

【问题讨论】:

你的问题的解决方案已经在***上here 【参考方案1】:

根据 MDN: (https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/duration)

myDuration = htmlMediaElement.duration

一个双精度浮点值,指示持续时间 媒体在几秒钟内。如果没有可用的媒体数据,则 NaN 值为 回来。如果元素的媒体没有已知的持续时间——例如 对于实时媒体流——持续时间的值为 +Infinity。

但是,您需要确保在尝试访问该属性之前已加载音频(准确地说是其元数据) - 使用 onloadedmetadata 事件。

所以,首先 - 在您的 html 代码中添加一个 DIV。

然后添加js代码:

media.onloadedmetadata = function() 
  document.getElementById('total-duration').innerText = media.duration;
;

【讨论】:

是的,我看到了这个,但我根本不懂 JS,所以我无法在我的 HTML 中调用它来显示它。 我已添加:

00:00

在 html 和 JS 中的代码,但它什么也不显示(跨度>
你能保证音频文件存在并且可以工作吗?您是否在 Web 开发人员控制台中遇到任何错误? (铬 F12) 它工作正常,只是总时长不显示 添加“alert(media.duration);”在“media.onloadedmetadata = function() ”行下方。刷新并让我知道是否弹出任何“警报框”。

以上是关于在java中怎么获取音频的总时长?的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么获取音频文件时长

在 JS 中获取音频时长并在 HTML 中显示

java获取音频文件播放时长

如何获取音频文件的准确时长,比如MP3

java 获取音频视频文件时长代码示例

java 获取音频视频文件时长代码示例