iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >教你如何在Nuxt3中使用wavesurfer.js
  • 339
分享到

教你如何在Nuxt3中使用wavesurfer.js

Nuxt3使用wavesurfer.jswavesurfer.js使用 2023-01-15 15:01:43 339人浏览 独家记忆
摘要

目录安装 wavesurfer.js常规方式引入正确的引入方式加载插件加载波形数据暴露插件的方法项目安装 wavesurfer.js 在项目中安装 wavesurfer.js npm

安装 wavesurfer.js

在项目中安装 wavesurfer.js

npm install --save wavesurfer.js

常规方式引入

如果你的根目录中没有 components 目录则需要创建该目录,并在此目录中创建 WaveSurfer.Vue 内容如下:

<template>  
  <div ref="wavesurferMain"></div>  
</template>  
<script setup>  
import WaveSurfer from 'wavesurfer.js'  
  
const props = defineProps({  
  src:{  
    type:String,  
    required:true  
  },  
  options:{  
    type:Object,  
  }  
});
const wavesurferMain = ref(null);  
const waveSurfer = ref(null);  
  
  
let options = props.options;  
let wsOptions = Object.assign({  
      container: wavesurferMain.value  
    },  
    options);  

waveSurfer.value = new WaveSurfer.create(wsOptions);  
waveSurfer.value.load(props.src); 
</script>

然后我们集成该组件,在这个例子中我们将在 app.vue 直接引用,并且我将测试音频文件 demo.wav,放在根目录的public 中。

<template>  
  <div>
    <WaveSurfer src="/demo.wav":options="waveSurferOption" />
  </div>
</template>  
<script setup>  
const waveSurferOption = {  
  height: 340,  
  progressColor: '#e03639',  
  waveColor: '#e7e7e7',  
  cursorColor: '#FFDDDD',  
  barWidth: 2,  
  mediaControls: true,  
  backend: 'MediaElement',  
  scrollParent:true,  
  xhr: {  
    mode: 'no-cors'  
  }  
};  
</script>

现在执行 npm run dev ,页面将报错 self is not defined
这是因为在 setup 这个生命周期中,DOM 节点并未创建,所以我们需要在mounted 阶段进行导入。

正确的引入方式

更改 WaveSurfer.vue 文件内容如下:

<template>  
  <div ref="wavesurferMain"></div>  
</template>  
<script setup>  
const props = defineProps({  
  src:{  
    type:String,  
    required:true  
  },  
  options:{  
    type:Object,  
  }  
});  
  
const wavesurferMain = ref(null);  
const waveSurfer = ref(null);  
  
onMounted(async ()=>{  
  const WaveSurfer = (await import('wavesurfer.js')).default;  
  const options = props.options;  
  const wsOptions = Object.assign({  
        container: wavesurferMain.value  
      },  
      options);  
  waveSurfer.value = new WaveSurfer.create(wsOptions);  
  waveSurfer.value.load(props.src);  
});  
</script>

现在你应该能看到已经可以正常加载了。

加载插件

加载方式和插件一样,官方的插件在 wavesurfer.js/dist/plugin 目录下,这个例子将加载时间线插件如下:

<template>  
  <div ref="wavesurferMain"></div>  
  <div ref="waveTimeline"></div>  
</template>  
<script setup>  
const props = defineProps({  
  src:{  
    type:String,  
    required:true  
  },  
  options:{  
    type:Object,  
  }  
});  
  
const wavesurferMain = ref(null);  
const waveTimeline = ref(null);  
const waveSurfer = ref(null);  
  
onMounted(async ()=>{  
  const WaveSurfer = (await import('wavesurfer.js')).default;  
  const Timeline  = (await import('wavesurfer.js/dist/plugin/wavesurfer.timeline')).default;  
  const options = props.options;  
  const wsOptions = Object.assign({  
        container: wavesurferMain.value,  
        plugins:[  
          Timeline.create({container:waveTimeline.value})  
        ]  
      },  
      options);  
  waveSurfer.value = new WaveSurfer.create(wsOptions);  
  waveSurfer.value.load(props.src);  
  
});  
</script>

加载波形数据

如果音频文件过大,使用插件原生的波形生成方式会非常慢。这个时候可以通过服务端生成波形数据,并让插件直接通过波形数据进行渲染。具体生成方式可以参考官方的解决方案FAQ。在这个项目中,生成波形数据文件后,我把它移动到项目的public中,更改 WaveSurfer.vue 内容如下:

<template>  
  <div ref="wavesurferMain"></div>  
  <div ref="waveTimeline"></div>  
</template>  
<script setup>  
const props = defineProps({  
  src:{  
    type:String,  
    required:true  
  },  
  peaksData:{  
    type:String,  
  },  
  options:{  
    type:Object,  
  }  
});  
  
const wavesurferMain = ref(null);  
const waveTimeline = ref(null);  
const waveSurfer = ref(null);  
  
onMounted(async ()=>{  
  const WaveSurfer = (await import('wavesurfer.js')).default;  
  const Timeline  = (await import('wavesurfer.js/dist/plugin/wavesurfer.timeline')).default;  
  const options = props.options;  
  const wsOptions = Object.assign({  
        container: wavesurferMain.value,  
        plugins:[  
          Timeline.create({container:waveTimeline.value})  
        ]  
      },  
      options);  
  waveSurfer.value = new WaveSurfer.create(wsOptions);  
  fetch(props.peaksData)  
      .then(response => {  
        if (!response.ok) {  
          throw new Error("Http error " + response.status);  
        }  
        return response.JSON();  
      })  
      .then(peaks => {  
        waveSurfer.value.load(props.src,peaks.data);  
      })  
      .catch((e) => {  
        console.error('error', e);  
      });  
  
});  
</script>

app.vue 中变更如下:

<template>  
  <div> 
    <WaveSurfer src="/demo.wav" peaks-data="/demo.json" :options="waveSurferOption" />  
  </div>
  </template>  
<script setup>  
const waveSurferOption = {  
  height: 340,  
  progressColor: '#e03639',  
  waveColor: '#e7e7e7',  
  cursorColor: '#FFDDDD',  
  barWidth: 2,  
  mediaControls: false,  
  backend: 'MediaElement',  
  scrollParent:true,  
  xhr: {  
    mode: 'no-cors'  
  }  
}  
</script>

暴露插件的方法

现在我们只是正常初始化插件并让它加载了音频文件,目前我们并不能操作它。
因为 vue3 中,默认并不会暴露 <script setup> 中声明的绑定。我们需要使用 defineExpose 来暴露对应的属性。WaveSurfer.vue 如下变更:

<template>  
  <div ref="wavesurferMain"></div>  
  <div ref="waveTimeline"></div>  
</template>  
<script setup>  
const props = defineProps({  
  src:{  
    type:String,  
    required:true  
  },  
  peaksData:{  
    type:String,  
  },  
  options:{  
    type:Object,  
  }  
});  
  
const wavesurferMain = ref(null);  
const waveTimeline = ref(null);  
const waveSurfer = ref(null);  
  
onMounted(async ()=>{  
  // 省略逻辑
  
});  
defineExpose(  
    {  
      waveSurfer  
    }  
)  
</script>

app.vue 中我们可以这样调用:

<template>  
  <div>    
  <WaveSurfer ref="refWaveSurfer" src="/demo.wav" peaks-data="/demo.json" :options="waveSurferOption"/>  
    <button @click="play">play</button>  
    <button @click="pause">pause</button>  
  </div>
  </template>  
<script setup>  
const waveSurferOption = {  
  height: 340,  
  progressColor: '#e03639',  
  waveColor: '#e7e7e7',  
  cursorColor: '#FFDDDD',  
  barWidth: 2,  
  mediaControls: false,  
  backend: 'MediaElement',  
  scrollParent:true,  
  xhr: {  
    mode: 'no-cors'  
  }  
}  
const refWaveSurfer = ref(null);  
  
function play() {  
  refWaveSurfer.value.waveSurfer.play();  // 调用播放方法 
}  
  
function pause(){  
  refWaveSurfer.value.waveSurfer.pause();  // 调用暂停方法
}  
</script>

项目

你可以在以下仓库看到完整的示例

https://GitHub.com/AnyStudy/nuxt-3-wavesurfer-demo 

到此这篇关于如何在 Nuxt 3 中使用 wavesurfer.js的文章就介绍到这了,更多相关Nuxt 3 使用 wavesurfer.js内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 教你如何在Nuxt3中使用wavesurfer.js

本文链接: https://www.lsjlt.com/news/177806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 教你如何在Nuxt3中使用wavesurfer.js
    目录安装 wavesurfer.js常规方式引入正确的引入方式加载插件加载波形数据暴露插件的方法项目安装 wavesurfer.js 在项目中安装 wavesurfer.js npm...
    99+
    2023-01-15
    Nuxt 3 使用 wavesurfer.js wavesurfer.js使用
  • nuxt3中的server routes如何使用
    这篇“nuxt3中的server routes如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nuxt3中的...
    99+
    2023-06-30
  • 教你如何在Pytorch中使用TensorBoard
    什么是TensorboardX Tensorboard 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研究人员观察神经网络训练过程。可是对于 ...
    99+
    2022-11-12
  • 教你如何在Node.js中使用jQuery
    想要在NodeJs中使用jQuery? 首先,我们得安装jquery, npm install jquery 。安装后的版本是 3.1.0 接着,第一感觉我们会使用 var $ = require('jqu...
    99+
    2022-06-04
    教你 如何在 Node
  • 教你如何在pycharm中使用less
    前端css中用到less,在pycharm中安装配置less操作步骤如下: 1.点开setting,在Plugins中搜索node.js(安装less之前得安装node.js),安装...
    99+
    2022-11-12
  • 一文教你如何在java中使用SpringMVC
    这期内容当中小编将会给大家带来有关一文教你如何在java中使用SpringMVC,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、简介在SpringMVC 中,控制器Controller 负责处理由Dis...
    99+
    2023-05-31
    java springmvc ava
  • 一文教你如何在Java 中使用Calendar类
    今天就跟大家聊聊有关一文教你如何在Java 中使用Calendar类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java Calendar类的使用总结  在实际项目当中,我们经常会...
    99+
    2023-05-31
    java calendar ava
  • 教你如何在 Linux 中使用 unzip 解压缩文件
    ZIP 是最广泛使用的归档文件格式,支持无损数据压缩。 ZIP 文件是包含一个或多个压缩文件或目录的数据容器。在本教程中,我们将向您展示如何使用 unzip 命令通过命令行解压缩 Linux 系统中的文件。什么...
    99+
    2023-06-05
  • 你知道如何在go api教程中使用npm吗?
    Go语言是一种越来越流行的编程语言,而Node.js则是一种广泛使用的JavaScript运行时环境。在开发Go API时,使用Node.js的npm包管理器可以方便地添加外部库和依赖项。在本文中,我们将探讨如何在Go API教程中使用np...
    99+
    2023-08-04
    api 教程 npm
  • 教你在pycharm中使用tensorflow的方法
    需求: 需要在pycharm中跑一个深度学习的项目 但是tensorflow包导不入 问题分析: 当前使用的是anaconda的3.8版本,无法正常下载tensorflow包,需...
    99+
    2022-11-12
  • 一文教会你在MySQL中使用DateTime
    目录mysql 日期时间教程  MySQL 日期和时间类型MySQL 日期时间  简单的日期和时间计算  日期函数的基本算术运算  NOW() 函数  CURRENT_D...
    99+
    2022-09-12
  • 手把手教你在vue中使用three.js
    目录在vue中使用three.js1.首先安装three.js、引入2.在页面内写入three.js 总结在vue中使用three.js 下面我会介绍three.js的基础...
    99+
    2023-03-01
    vue使用threejs threejs教程 three.js案例
  • PHP教程中,你知道如何在Laravel中使用缓存吗?
    在Laravel中,缓存是一个非常重要的概念,它可以显著提高应用程序的性能。Laravel提供了一种简单而强大的缓存系统,可以轻松地将缓存添加到您的应用程序中。 在本文中,我们将介绍Laravel中的缓存概念,并演示如何使用Laravel...
    99+
    2023-11-11
    教程 缓存 laravel
  • 你知道如何在Python教程中使用git来load你的数据吗?
    当你学习Python编程的时候,你需要处理大量的数据。而这些数据往往需要从不同的来源获取。在这种情况下,Git是一个非常好的工具,可以帮助你轻松地获取和加载你需要的数据。 Git是一个版本控制系统,它可以帮助你管理你的代码和数据。它可以让你...
    99+
    2023-06-26
    教程 load git
  • 如何在ASP中使用numpy?同步教程带你get到!
    Numpy是一个开源的Python科学计算库,它提供了高效的多维数组对象以及用于处理这些数组的工具。在Python中,Numpy可以轻松地进行安装和使用,但是在ASP中使用Numpy可能需要一些特殊的配置和安装。本文将为大家介绍如何在AS...
    99+
    2023-11-01
    numpy 教程 同步
  • 一篇文章教你如何在SpringCloud项目中使用OpenFeign
    目录OpenFeign的介绍OpenFeign是一种声明式 、模板化的HTTP客户端。OpenFeign与Feign的之间的关系OpenFegin中的两个常用注解在项目中使用Open...
    99+
    2022-11-12
  • 如何在Python教程中使用git来load你的代码?
    在Python教程中,使用Git来管理代码和版本控制是非常重要的技能。在这篇文章中,我们将学习如何使用Git来load你的代码,并在Python项目中使用它。 Git是一个版本控制系统,可以跟踪你的代码更改并帮助你管理代码库。它可以帮助你在...
    99+
    2023-06-26
    教程 load git
  • 教你如何使用Python selenium
    目录一、了解selenium二、selenium的下载三、selenium的基本使用四、结语一、了解selenium Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox...
    99+
    2022-06-02
    Python selenium python爬虫
  • 教你如何使用JAVA POI
    目录一、导入jar包二、导出三、导出一、导入jar包 所需jar包,在pom中添加如下坐标即可 <dependency> <groupId>org...
    99+
    2022-11-12
  • 一文教会你如何在JavaScript中使用展开运算符
    目录前言语法功能以及参数创建数组创建对象将 NodeList 转换为数组从数组中删除重复项扩展运算符与休息运算符结论总结前言 在本教程中,您将了解在 JavaScript 中使用扩展...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作