最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VUE中使用Wavesurfer.js實(shí)現(xiàn)可視化音頻波形功能

 更新時(shí)間:2025年06月04日 09:13:35   作者:在飄著呢6751  
這篇文章主要介紹了VUE中使用Wavesurfer.js實(shí)現(xiàn)可視化音頻波形功能的相關(guān)資料,通過(guò)npm安裝、創(chuàng)建組件、傳入音頻路徑參數(shù),并配置波紋顏色、大小等樣式屬性,需要的朋友可以參考下

最近有一個(gè)在線(xiàn)音波方法的功能需求,考慮使用Wavesurfer.js來(lái)實(shí)現(xiàn)這塊

1.首先安裝Wavesurfer.js

npm install wavesurfer.js

2.創(chuàng)建 Wavesurfer 組件

在 Vue 2項(xiàng)目中創(chuàng)建一個(gè)音頻播放器組件(如 WaveSurferPlayer.vue),。

<template>
  <div style="padding: 30px">
    <div ref="waveform_Ref" style="cursor: pointer"></div>
    <!-- 時(shí)間信息 -->
    <div class="time-info">
      <span
        >當(dāng)前時(shí)間:
        <span style="color: #72df90">{{ formatTime(currentTime) }}</span>
      </span>
      <span>總時(shí)長(zhǎng): {{ formatTime(duration) }}</span>
    </div>
    <div style="padding: 30px; width: 120px; margin: auto">
      <el-button
        type="success"
        icon="el-icon-video-play"
        @click="playMusic"
        circle
        v-if="!playing"
      >
      </el-button
      ><el-button
        v-if="playing"
        type="danger"
        icon="el-icon-video-pause"
        circle
        @click="playMusic"
      >
      </el-button>
    </div>
  </div>
</template>

<script>
import WaveSurfer from "wavesurfer.js";

export default {
  name: "WaveSurferPlayer",
  props: {
    audioSrc: {
      type: String,
      required: true,
    },
  },
  data() {
    return {
      wavesurfer: null,
      playing: false,
      duration: 0,
      currentTime: 0, // 當(dāng)前播放時(shí)間
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.wavesurfer = WaveSurfer.create({
        // 波形圖的容器
        container: this.$refs.waveform_Ref,
        // 已播放波形的顏色
        progressColor: "#13ce66",
        // 未播放波形的顏色
        // waveColor: "lightgrey",
        // 波形圖的高度,單位為px
        // height: 10,
        // 是否顯示滾動(dòng)條,默認(rèn)為false
        scrollParent: true,
        // 波形的振幅(高度),默認(rèn)為1
        // barHeight: 0.8,
        // 波形條的圓角
        // barRadius: 2,
        // 波形條的寬度
        // barWidth: 1,
        // 波形條間的間距
        // barGap: 3
        // 播放進(jìn)度光標(biāo)條的顏色
        cursorColor: "red",
        // 播放進(jìn)度光標(biāo)條的寬度,默認(rèn)為1
        // cursorWidth: 10,
        // 播放進(jìn)度顏色
        // progressColor: "blue",
        //  波形容器的背景顏色
        // backgroundColor: "yellow",
        // 音頻的播放速度
        // audioRate: "1",
        // (與區(qū)域插件一起使用)啟用所選區(qū)域的循環(huán)
        // loopSelection:false
      });
      this.wavesurfer.on("error", (error) => {
        console.error("音頻加載失敗:", error);
        this.$message({
          type: "error",
          message: "音頻加載失敗,請(qǐng)檢查文件路徑或網(wǎng)絡(luò)連接",
        });
      });
      this.wavesurfer.load(this.audioSrc);
      // 監(jiān)聽(tīng)結(jié)束事件
      this.wavesurfer.on("finish", () => {
        this.playing = false;
      });
      // 監(jiān)聽(tīng)時(shí)間更新事件
      this.wavesurfer.on("audioprocess", (time) => {
        this.currentTime = time;
      });
      // 監(jiān)聽(tīng)暫停事件
      this.wavesurfer.on("pause", () => {
        this.playing = false;
      });
      // 監(jiān)聽(tīng)音頻加載完成事件
      this.wavesurfer.on("ready", () => {
        this.duration = this.wavesurfer.getDuration();
      });
    });
  },
  methods: {
    // 格式化時(shí)間(秒 -> 分:秒)
    formatTime(time) {
      const minutes = Math.floor(time / 60);
      const seconds = Math.floor(time % 60);
      return `${minutes}:${seconds.toString().padStart(2, "0")}`;
    },
    playMusic() {
      this.wavesurfer.playPause.bind(this.wavesurfer)();
      this.playing = !this.playing;
    },
  },
  beforeDestroy() {
    // 銷(xiāo)毀 Wavesurfer 實(shí)例
    if (this.wavesurfer) {
      this.wavesurfer.destroy();
    }
  },
};
</script>
<style scoped>
.time-info {
  font-size: 18px;
  color: #666;
}
</style>

3.在頁(yè)面中引入組件,audioUrl是音頻路徑,把音頻文件路徑audioUrl子組件傳參進(jìn)去

       <WaveSurferPlayer :audioSrc="audioUrl" />

4.頁(yè)面中顯示樣式,其中波紋顏色,大小等等都可通過(guò)配置項(xiàng)設(shè)置

總結(jié) 

到此這篇關(guān)于VUE中使用Wavesurfer.js實(shí)現(xiàn)可視化音頻波形功能的文章就介紹到這了,更多相關(guān)VUE Wavesurfer.js可視化音頻波形內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令

    vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令

    本文主要介紹了vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • vue中SPA單頁(yè)面應(yīng)用程序詳解

    vue中SPA單頁(yè)面應(yīng)用程序詳解

    這篇文章主要為大家詳細(xì)介紹了vue中SPA單頁(yè)面應(yīng)用程序的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue.js如何監(jiān)聽(tīng)window窗口尺寸變化

    Vue.js如何監(jiān)聽(tīng)window窗口尺寸變化

    使用VUE開(kāi)發(fā)后臺(tái)項(xiàng)目,后臺(tái)項(xiàng)目需要進(jìn)行后臺(tái)根據(jù)瀏覽器窗口進(jìn)行變化,需要使用vue來(lái)監(jiān)聽(tīng)瀏覽器的窗口變化,這篇文章主要給大家介紹了關(guān)于Vue.js如何監(jiān)聽(tīng)window窗口尺寸變化的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • VUE引入DataV報(bào)錯(cuò)解決實(shí)戰(zhàn)記錄

    VUE引入DataV報(bào)錯(cuò)解決實(shí)戰(zhàn)記錄

    在使用vue開(kāi)發(fā)大屏?xí)r,發(fā)現(xiàn)了一個(gè)很好用的可視化組件庫(kù)DataV,下面這篇文章主要給大家介紹了關(guān)于VUE引入DataV報(bào)錯(cuò)解決的實(shí)戰(zhàn)記錄,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • vue實(shí)現(xiàn)圖片上傳到后臺(tái)

    vue實(shí)現(xiàn)圖片上傳到后臺(tái)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片上傳到后臺(tái),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 前端面試手撕合集之純HTML、Vue和React組件

    前端面試手撕合集之純HTML、Vue和React組件

    Vue 和React都是當(dāng)前非常流行的前端框架,它們都可以用來(lái)構(gòu)建單頁(yè)面應(yīng)用(SPA)和響應(yīng)式的用戶(hù)界面,這篇文章主要介紹了前端面試手撕代碼之純HTML、Vue和React組件的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • element-ui 表格實(shí)現(xiàn)單元格可編輯的示例

    element-ui 表格實(shí)現(xiàn)單元格可編輯的示例

    下面小編就為大家分享一篇element-ui 表格實(shí)現(xiàn)單元格可編輯的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Vue.js表單標(biāo)簽中的單選按鈕、復(fù)選按鈕和下拉列表的取值問(wèn)題

    Vue.js表單標(biāo)簽中的單選按鈕、復(fù)選按鈕和下拉列表的取值問(wèn)題

    這篇文章主要介紹了Vue.js表單標(biāo)簽中的單選按鈕、復(fù)選按鈕和下拉列表的取值問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • vue2.0 實(shí)現(xiàn)導(dǎo)航守衛(wèi)的具體用法(路由守衛(wèi))

    vue2.0 實(shí)現(xiàn)導(dǎo)航守衛(wèi)的具體用法(路由守衛(wèi))

    這篇文章主要介紹了vue2.0 實(shí)現(xiàn)導(dǎo)航守衛(wèi)的具體用法(路由守衛(wèi)),vue-route 提供的 beforeRouteUpdate 可以方便地實(shí)現(xiàn)導(dǎo)航守衛(wèi)(navigation-guards),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • vue基礎(chǔ)之使用get、post、jsonp實(shí)現(xiàn)交互功能示例

    vue基礎(chǔ)之使用get、post、jsonp實(shí)現(xiàn)交互功能示例

    這篇文章主要介紹了vue基礎(chǔ)之使用get、post、jsonp實(shí)現(xiàn)交互功能,結(jié)合實(shí)例形式分析了vue.js中g(shù)et、post及jsonp針對(duì)本地文件、網(wǎng)絡(luò)接口實(shí)現(xiàn)交互功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03

最新評(píng)論

武隆县| 法库县| 大厂| 秦安县| 威远县| 馆陶县| 隆化县| 巴彦淖尔市| 刚察县| 通州市| 巴林右旗| 喀什市| 吴桥县| 肃宁县| 大理市| 商河县| 台南市| 洪洞县| 广汉市| 钟山县| 沧源| 阿合奇县| 房山区| 余江县| 阿拉善右旗| 莫力| 即墨市| 通海县| 尉氏县| 正镶白旗| 沈丘县| 庐江县| 东乌珠穆沁旗| 抚远县| 秦皇岛市| 易门县| 新巴尔虎右旗| 二连浩特市| 丁青县| 建德市| 贵阳市|