【问题标题】:How to get the size and duration of an mp3 file?如何获取 mp3 文件的大小和持续时间?
【发布时间】:2013-12-25 10:39:35
【问题描述】:

我需要计算一个 mp3 文件的总长度。

目前我正在使用我发现的一个 PHP 类 @http://www.zedwood.com/article/php-calculate-duration-of-mp3

如果 mp3 文件在同一服务器上,这将完美运行。

但是如果我有来自其他站点的 URL,它会抛出错误。请帮帮我。

有没有 JavaScript J-Query 函数来获取 mp3 文件的长度

<?php include("mp3.class.php");
$f = 'http://cdn.enjoypur.vc/upload_file/5570/5738/5739/7924/Blue%20Eyes%20-%20Yo%20Yo%20Honey%20Singh%20(PagalWorld.com)%20-192Kbps%20.mp3';
$m = new mp3file($f);
$a = $m->get_metadata();

if ($a['Encoding']=='Unknown')
    echo "?";
else if ($a['Encoding']=='VBR')
    print_r($a);
else if ($a['Encoding']=='CBR')
    print_r($a);
unset($a);
?>

【问题讨论】:

    标签: javascript php jquery


    【解决方案1】:

    以下是使用 Web Audio API 获取 mp3 持续时间的方法:

    const mp3file = 'https://raw.githubusercontent.com/prof3ssorSt3v3/media-sample-files/master/doorbell.mp3'
    const audioContext = new (window.AudioContext || window.webkitAudioContext)()
    const request = new XMLHttpRequest()
    request.open('GET', mp3file, true)
    request.responseType = 'arraybuffer'
    request.onload = function() {
        audioContext.decodeAudioData(request.response,
            function(buffer) {
                let duration = buffer.duration
                console.log(duration)
                document.write(duration)
            }
        )
    }
    request.send()

    【讨论】:

      【解决方案2】:

      也许最简单的解决方案是使用音频 html 元素来获取持续时间,并直接从 FileReader 对象返回的文件中获取大小。这种方法的代码示例如下所示。

      这一点以及目前所有其他解决方案的一个缺点是加载大型文件(例如 > 200MB 文件)时,音频标签的 durationchanged 事件触发需要 10-20 秒的延迟。显然,有一种更快的方法来获取此信息,因为当文件作为 file:///.... URL 输入浏览器时,持续时间会立即显示。

      function checkMp3SizeAndDuration()
      {    
          var files = document.getElementById('upload-file').files;
          var file = files[0];
          if (file.size > MAX_FILE_SIZE) {
              return;
          }
      
          var reader = new FileReader();
          var audio = document.createElement('audio');
          reader.onload = function (e) {
              audio.src = e.target.result
              audio.addEventListener('durationchange', function() {
                  console.log("durationchange: " + audio.duration);
              },false);
      
              audio.addEventListener('onerror', function() {
                  alert("Cannot get duration of this file.");
              }, false);
          };
          reader.readAsDataURL(file);
      });
      

      【讨论】:

        【解决方案3】:

        实际上有一个库可以在客户端运行,试图获取足够的 MP3 来读取 ID3 标签:

        http://github.com/aadsm/JavaScript-ID3-Reader

        试试

        HTML 文件 API。

        http://lostechies.com/derickbailey/2013/09/23/getting-audio-file-information-with-htmls-file-api-and-audio-element/

        【讨论】:

        • MP3 文件的时长通常存储在 ID3 标签中,必须通过扫描所有音频帧来计算。
        【解决方案4】:

        由于无法找到快速且不需要大量额外样板代码的东西,我调整了现有的服务器端 javascript 实用程序以直接在浏览器中运行。演示代码位于:https://github.com/eric-gilbertson/fast-mp3-duration

        【讨论】:

        • 有没有快速解决wav的方法?
        【解决方案5】:

        您可以使用的著名且非常 SPI MP3 SPI 而且代码也很简单

        File file = new File("filename.mp3");
        AudioFileFormat baseFileFormat = AudioSystem.getAudioFileFormat(file);
        Map properties = baseFileFormat.properties();
        Long duration = (Long) properties.get("duration");
        

        【讨论】:

          【解决方案6】:

          使用也适用于 VBR 文件的 getID3() PHP 库。

          此链接可以帮助您sourceforge.net

          它在开发中非常活跃。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-12
            • 1970-01-01
            相关资源
            最近更新 更多