如何仅加载波形并等待用户单击“播放”以在 Wavesurfer-js 上下载音频?

2024-01-05

在我的服务器上,我使用 Audiowaveform 从音频文件生成 JSON 数据。

在前端我使用Wavesurfer-JS https://wavesurfer-js.org根据之前的JSON数据绘制波形。

问题是,在页面就绪时,Wavesurfer-JS 始终在后台下载音频文件(而不仅仅是当用户点击播放按钮时)。

This http://codepen.io/katspaugh/pen/oLmwoZ是我的尝试。

这是最重要的部分:

<div id="waveform">
    <audio id="song" style="display: none" preload="false" src="http://api.soundcloud.com/tracks/45398925/stream?client_id=fa791b761f68cafa375ab5f7ea51927a"></audio>
</div>

<script>
    var wavesurfer = WaveSurfer.create({
      container: '#waveform',
      waveColor: 'grey',
      backend: 'MediaElement',
      mediaType:'audio',
      progressColor: 'red',
      cursorColor: '#fff',
      normalize: true,
      barWidth: 3
    });

    wavesurfer.load(document.querySelector('#song'), ['.$json.']);
</script>

所以基本上我需要关注wavesurfer.load并向其添加一个新函数JavaScript http://wavesurfer-js.org/dist/wavesurfer.js仅从峰值(JSON 数据)绘制波形,并且仅在用户点击播放按钮时才在页面加载时下载音频文件。

我怎样才能实现它?


我花了一些时间来破解 wavesurfer js 代码,以找出如何在不加载歌曲的情况下使其绘制:P

在后端变量中设置峰值并调用drawBuffer就达到了目的,将其与一些播放按钮逻辑相结合,我们得到以下代码:

//Create new wavesurfer
wavesurfer = WaveSurfer.create({
    container: '#waveform',
    backend: 'MediaElement',
    mediaType:'audio',
    normalize: true,
    barWidth: 3
});

//Set song
wavesurfer.song = "http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3"

//Set peaks
wavesurfer.backend.peaks = [0.0218, 0.0183, 0.0165, 0.0198, 0.2137, 0.2888, 0.2313, 0.15, 0.2542, 0.2538, 0.2358, 0.1195, 0.1591, 0.2599, 0.2742, 0.1447, 0.2328, 0.1878, 0.1988, 0.1645, 0.1218, 0.2005, 0.2828, 0.2051, 0.1664, 0.1181, 0.1621, 0.2966, 0.189, 0.246, 0.2445, 0.1621, 0.1618, 0.189, 0.2354, 0.1561, 0.1638, 0.2799, 0.0923, 0.1659, 0.1675, 0.1268, 0.0984, 0.0997, 0.1248, 0.1495, 0.1431, 0.1236, 0.1755, 0.1183, 0.1349, 0.1018, 0.1109, 0.1833, 0.1813, 0.1422, 0.0961, 0.1191, 0.0791, 0.0631, 0.0315, 0.0157, 0.0166, 0.0108];

//Draw peaks
wavesurfer.drawBuffer();

//Variable to check if song is loaded
wavesurfer.loaded = false;

//Load song when play is pressed
wavesurfer.on("play", function () {
    if(!wavesurfer.loaded) {
        wavesurfer.load(wavesurfer.song, wavesurfer.backend.peaks);
    }
});

//Start playing after song is loaded
wavesurfer.on("ready", function () {
    if(!wavesurfer.loaded) {
        wavesurfer.loaded = true;
        wavesurfer.play();
    }
});

确保删除不必要的<audio>来自 html 的标签,浏览器似乎会在加载时下载这些标签中的所有音频文件和属性,例如preload=false好像被忽略了……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅加载波形并等待用户单击“播放”以在 Wavesurfer-js 上下载音频? 的相关文章

随机推荐

  • 阻止提交 HTML 表单字段

    我想以编程方式允许或隐藏在 HTML5 表单中提交的表单字段 我以为我可以设置它的 CSSdisplay归因于none 但是 它仍然被提交 只是看不到 我是否可以设置另一个属性 而不是从 HTML5 文档中完全删除该元素 简单设定disab
  • 如何从 AWS Lambda (Node.js) 中的处理程序调用 module.exports

    AWS 中是这么说的 函数中的 module name export 值 例如 index handler 调用index js中的exports handler 它正确地调用了这个函数 exports handler username p
  • ol.interaction.Select 在 ol.source.VectorTile 上给出错误

    我试图在选择 VectorTile 图层后更改该功能的样式 但是 第一次触发选择交互时 控制台会报告错误 Uncaught TypeError feature getId is not a function at ol source Vec
  • 限制java只执行签名的jar?

    Java jar 可以使用 JDK jarsigner 工具进行签名 这与策略工具结合使用 似乎只允许您在运行时向 jar 添加权限 我想要一个默认的 撤销运行访问权限 是否有可能让java以这样的方式进行白名单 只允许运行由一组特定证书签
  • iPhone 上的 iAds 插页式广告?

    我和我的开发人员之前曾尝试在 iPhone 和 iPad 上加载插页式广告 但只在 iPad 上成功 在我们的测试过程中 我们发现 iPhone 不支持插页式广告 但自从 iOS7 发布以来 有些人说这是可能的 但是我找不到任何关于此的像样
  • Android Studio 中出现错误“无法解析所有配置文件”[重复]

    这个问题在这里已经有答案了 我尝试运行一个在编码中没有明显错误的应用程序 但是 当我尝试运行它时 会弹出此错误 导致 org gradle api internal artifacts ivyservice DefaultLenientCo
  • Java 2D 性能缓慢 - 调整大小

    我使用的是带 Aero 的 Windows 7 并且有一个非常快的显卡 Radeon 6870 用于游戏 在调整用 java 编写的非常简单的程序大小时 我遇到了一些问题 例如 这个程序完全不执行任何操作 它没有动作监听器 没有循环 它只是
  • 从 Firebase 通知中打开特定活动

    我将 firebase 通知集成到我的应用程序中 但我想发送一条通知来打开特定活动并执行我计划执行的操作 而不仅仅是打开应用程序 就像一条通知 点击它就会促使用户访问 Google Play 商店 我看到了一段代码Firebase 控制台
  • 如何在 HDInsight Spark/Jupyter 上使用 Avro?

    我正在尝试读取 HDInsight Spark Jupyter 集群内的 avro 文件 但得到了 u Failed to find data source com databricks spark avro Please find an
  • 学习二郎? speedbump线程,常见,小问题

    我只想知道当你刚接触 Erlang 时 你和最终解决方案之间存在的所有小问题 例如 这是我遇到的第一个减速带 如果您在多个线程中生成 请使用controlling process Socket Pid 正确的数据包到正确的线程 您要开始与另
  • 使用Sinon 建立 Mongoose 模型

    我想为 Mongoose 创建一个存根save特定模型中的方法 以便我创建的模型的任何实例都将调用存根而不是普通的 Mongoosesave方法 我的理解是 做到这一点的唯一方法是像这样存根整个模型 var stub sinon stub
  • 如何将数据从大小为 N 的 Cassandra 集群迁移到大小为 N+/-M 的不同集群

    我正在尝试弄清楚如何将数据从一个 cassandra 集群迁移到另一个环大小不同的 cassandra 集群 比如从 5 节点集群迁移到 7 节点集群 我开始查看 sstable2json 因为它为特定 cassandra 节点上的 SST
  • 从 Cosmos 中的 JSON 文件中选择列时发生 MapReduce 错误

    问题如下 使用 Cygnus 0 2 1 创建表后 在尝试从 Hive 选择列时收到 MapReduce 错误 如果我们看到Cygnus在hadoop中创建的文件 我们可以看到使用的格式是JSON 这个问题在以前版本的 Cygnus 中没有
  • 使用 sqlalchemy 列出索引

    是否可以使用 sqlalchemy 列出数据库中的所有索引 yes http www sqlalchemy org docs core schema html sqlalchemy engine reflection Inspector g
  • 结构内存黑客重叠对象引用 - 这可能吗?

    我猜这个问题的答案是 不可能 切换到 C 但我想无论如何我都会把它扔掉 我正在处理一个巨大的二叉树 我有一个结构数组来表示分支节点 在遍历树时 我用它来帮助确定内存的局部性 为了节省一点内存 从而提高缓存局部性 我正在考虑重叠叶节点的对象引
  • 1 个 imageview android 上的多个动画

    我有 2 个动画已经可以使用了 我想同时淡出我的火车 补间我的火车 如果我执行其中 1 行 它就会起作用 但如果我尝试同时执行这两个操作 则只有 1 个可以工作 我在这里实在找不到解决办法 也许你能帮忙 final ImageView my
  • postgres 中的主键值可以为零吗?

    我的数据库中有一个表 其中一行的 ID 等于 0 零 主键是一个序列列 我习惯于看到以 1 开头的序列 那么 如果我将此 ID 保留为零 是否会出现问题 串行数据类型创建自动递增的整数列 因此 您应该能够向该列添加任何整数值 包括 0 来自
  • Telegram API:如何保持 ApiState 来保存登录状态

    我使用了来自此来源的 telegram api https github com voleon telegram trivia bot https github com voleon telegram trivia bot但我的问题是 如何
  • Laradock 不支持 mysql

    我无法理解如何让 Laradock 与 mysql 数据库一起正常工作 我已遵循 laradock 文档并安装了所有内容 使用以下命令启动容器 docker compose up d nginx mysql 我有这样的多项目版本布局 pro
  • 如何仅加载波形并等待用户单击“播放”以在 Wavesurfer-js 上下载音频?

    在我的服务器上 我使用 Audiowaveform 从音频文件生成 JSON 数据 在前端我使用Wavesurfer JS https wavesurfer js org根据之前的JSON数据绘制波形 问题是 在页面就绪时 Wavesurf