【问题标题】:Extracting the song frequency of an mp3 file using HTML5 web audio API使用 HTML5 网络音频 API 提取 mp3 文件的歌曲频率
【发布时间】:2012-01-31 17:13:11
【问题描述】:

我正在使用 HTML5 网络音频 API 来分析歌曲并在平均声音频率低于某个值时创建标记。使用现有的 AudioNode 基础设施,我设法做到了这一点,但仅在播放歌曲时才分析声音。

然而,我想要的是提前分析歌曲,这样我就可以提取静音标记,并将它们变成 CUE 按钮,用户可以使用这些按钮在歌曲中移动。

显然,首先依靠播放整首歌曲来分析它会很慢,特别是如果歌曲是类似 50 分钟的播客。我尝试将播放速度提高到 10 倍,但这没有帮助。

我认为解决方案在于跳过 Web 音频 API,并分析原始 ArrayBuffer,但是,我真的不知道从哪里开始。

建议?想法?

【问题讨论】:

    标签: javascript html audio mp3 arraybuffer


    【解决方案1】:

    上面的卷积描述了一个傅立叶变换,它将您的音频从随时间变化的强度移动到随频率变化的强度。我建议谷歌搜索javascript傅里叶变换。根据您要查找的内容,我看到了几个关于该主题的有用链接。

    【讨论】:

      【解决方案2】:

      我已经能够在演示文稿中找到一张幻灯片,它正是这样描述的:here

      API 的正常使用是实时处理音频。相反,我们可以通过整个系统对音频进行预处理并得到结果:

      唯一的问题是我对音频 API 的理解过于简单,无法从代码示例中看出“技巧”是什么:

      var sampleRate = 44100.0;
      var length = 20; // seconds
      var ctx = new webkitAudioContext(2, sampleRate * length, sampleRate);
      ctx.oncomplete = function(e) {
        var resultAudioBuffer = e.renderedBuffer;
        ...
      };
      
      function convolveAudio(audioBuffer, audioBuffer2) {
        var source = ctx.createBufferSource();
        var convolver = ctx.createConvolver();
        source.buffer = audioBuffer;
        convolver.buffer = audioBuffer2;
      
        // source -> convolver -> destination.
        source.connect(convolver);
        convolver.connect(ctx.destination);
      
        source.noteOn(0);
        ctx.startRendering();
      }
      

      但我认为至少分享这个比完全保留它更好,即使这不是我希望给出的答案。

      【讨论】:

      • 令人惊讶的是,您在三年内学到了这么多,刚刚对这个答案投了赞成票,现在通读它似乎就像儿戏:)。
      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      相关资源
      最近更新 更多