使⽤wavesurfer.js绘制⾳频波形图⼩⽩极速上⼿总结
⼀、简介
  1.1  引
  公司有语⾳识别业务,需要做⼀个web⽹页来整合语⾳引擎的标注结果和错误率等参数,并提供⼈⼯⽐对的语⾳标注功能(功能类似于TranscriberAG等),(博主有点话痨。。。适应适应,原谅我)  可以直接读第⼆⾏,简单来说,我⽤wavesurfer.js绘制波形,并提供语⾳标注的⽂本框进⾏⾳频标注,简易页⾯如下:
  1.2 啥是wavesurf?
    wavesurfer.js是⼀个可⾃定义的语⾳⾳频可视化⼯具,建⽴于web audio和H5 canvas之上
⼆、Let's  Start
  本⽂是wavesurf的简单实现⼩⽩教程
  按照下⾯步骤,你就可以极速的应⽤wavesurfer.js实现⼀个⾳频的可视化啦~~
  1、将wavesurfer.js的包引⽤到项⽬中
<script src="unpkg/wavesurfer.js"></script>
  2、为wavesurfer.js开辟⼀个空间,⽤来画图
<div id="waveform" class="waveform"></div>
  3、在script标签中,创建⼀个wavesurfer实例,传递容器选择器及⼀些选项(更多选项在官⽅⽂档option中,可查阅⾃⾏添加)
var wavesurfer = ate({
container: '#waveform',
waveColor: 'violet',
  cursorColor:'#ff0000',
  progressColor:'#0000ff',
});
  4、加载⾳频。⽤wavesurfer.js⽅法中的load(),直接传⼊⾳频路径即可,可以是在线⾳频(需注意跨域问题),更多可⽤函数参阅⽂档中的Method⼀项
wavesurfer.load('audio.wav');
  5、我们可以⽤wavesurfer.playpause()  和 wavesurfer.stop()创建好⽤的播放暂停按钮和重播按钮,需要注意的是要在相应的html中创建button
var playPause = document.querySelector('#playPause');
playPause.addEventListener('click', function() {
wavesurfer.playPause();
});
<('play', function() {
document.querySelector('#play').style.display = 'none';
document.querySelector('#pause').style.display = '';
});
<('pause', function() {
document.querySelector('#play').style.display = '';
document.querySelector('#pause').style.display = 'none';
});
btnStop.addEventListener('click', function () {
wavesurfer.stop();
});
  创建相应按钮:
<div class="box">
<button id="playPause">
<span id="play">
<i class=""></i>
Play
</span>
<span id="pause" >
<i class=""></i>
jquery官方文档下载
Pause
</span>
</button>
<button id="btnStop">Stop</button>
</div>
三、贴⼀份可以直接运⾏的demo!
demo中加⼊了时间插件(timeline),频谱插件(spectrogram)、光标插件(cursor)等,可⾃⾏删除,
  近⽇收到有关于wavesurfer插件下载的相关问题,增加此内容:
  wavesurfer相关插件如时间插件(timeline),频谱插件(spectrogram)等,可在官⽹Document,Api中,到相关插件,点击右上的source后,control + s 即可保存到本地
  此代码运⾏还需要将相应的插件从官⽹下载下来,再将⾳频存⼊合适位置即可
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<meta charset="UTF-8">
5<title></title>
6<link href="test.css" type="text/css" rel="stylesheet">
7<script src="jquery.js"></script>                      //可⾃⾏下载jquery包
8</head>
9
10<body>
11<h1> ZX test demo Wavesurfer.js</h1>
12<br/><br/><br/><br/><br/>
13
14<script src="wavesurfer.min.js"></script>                  //此包需要从官⽹下载下来,src中填⼊合适路径即可
15<script src="wavesurfer.timeline.js"></script>              //此包需要从官⽹下载下来,src中填⼊合适的路径即可
16<script src="wavesurfer.cursor.js"></script>                //此包需要从官⽹下载,直接打开插件源码,
按ctrl+s 选择路径保存即可,src中填⼊合适的路径
17<script src="wavesurfer.spectrogram.js"></script>            //这⼏个包都⼀样
18
19
20<div id="waveform" class="waveform"></div>
21<br/>
22<div id="wave-timeline" class="wave-timeline"></div>
23<div class="zoom">
24<!-- <input data-action="zoom" type="range" min="1" max="200" value="0" />    -->
25<input data-action="zoom" type="range" min="1" max="200" value="0"/>
26</div>
27<div id="wave-spectrogram" class="wave-spectrogram"></div>
28<br/><br/>
29<div class="box">
30<button id="playPause">
31<span id="play">
32<i class=""></i>
33                                Play
34</span>
35
36<span id="pause" >
37<i class=""></i>
38                                Pause
39</span>
40</button>
41
42<button id="btnStop">Stop</button>
43</div>
44<script>
45 document.addEventListener('DOMContentLoaded', function() {
46var wavesurfer = ate({
47    container: '#waveform',
48    barHeight: 2,
49    cursorColor:'#ff0000',
50    progressColor:'#0000ff',
51    scrollParent:true,
52    height:160,
53    cursorWidth:2,
54    autoCenter:false,
55    fillParent:true,
56    hideScrollbar:false,
57
58
59    plugins: [
60    ate({                            //timeline plugin
61        container: "#wave-timeline",
62        height: 10,
63    }),
64    ate({                              //cursor plugin
65            container:"#wave-cursor",
66            showTime: true,
67            opacity: 1,
68            customShowTimeStyle: {
69                'background-color': '#000',
70                color: '#fff',
71                padding: '2px',
72                'font-size': '10px'
73            }
74        }),
75      ate({
76            wavesurfer: wavesurfer,
77            container: "#wave-spectrogram",
78            labels: true,
79            fftSamples:512
80        })
81  ]
82
83
84 });
85
86//TimeLine
('ready', function () {
88var timeline = ate(WaveSurfer.timeline);
89
90  ate({
91    wavesurfer: wavesurfer,
92    container: '#wave-timeline'
93  });
94 });
95
96// load ⾳频
97 wavesurfer.load('0f35840eeddd47e6a6d0fe0971db277c.wav');      //此处添加⾃⼰的⾳频路径(可将⾳频存⼊前端可访问的⽂件夹内,避免跨域) 98
99 console.Duration());                //test
100 console.Volume());                  // test
101 setTimeout(function(){                                //test
102    console.Duration());
103 },500)
104
105//Stop
106 btnStop.addEventListener('click', function () {
107    wavesurfer.stop();
108 });
109// PlayPause
110var playPause = document.querySelector('#playPause');
111    playPause.addEventListener('click', function() {
112        wavesurfer.playPause();
113    });
114// Toggle play/pause text
115    ('play', function() {
116        document.querySelector('#play').style.display = 'none';
117        document.querySelector('#pause').style.display = '';
118    });
119    ('pause', function() {
120        document.querySelector('#play').style.display = '';
121        document.querySelector('#pause').style.display = 'none';
122    });
123
124var d1 = new Date();                          //test
125    console.LocaleString());              //test
126    console.log('test');                            //test
127
128// Zoom slider
129var slider = document.querySelector('[data-action="zoom"]');
130    slider.value = wavesurfer.params.minPxPerSec;
131    slider.min = wavesurfer.params.minPxPerSec;
132    slider.addEventListener('input', function() {
133        (Number(this.value));
134    });
135
136 });
137</script>
138</body>
139</html>
四、上述代码运⾏效果
上述demo为仅作为学习之⽤的简易使⽤,⼯程中需注意个中其他细节
  (⽔平有限,⽇志基本作记录本之⽤,欢迎指正错误,欢迎交流)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。