1
- // Multi-track mixer
1
+ /**
2
+ * Multi-track mixer
3
+ *
4
+ * @see https://github.com/katspaugh/wavesurfer-multitrack
5
+ */
2
6
3
- // Import wavesurfer and plugins
4
- import Multitrack from 'https://unpkg.com/wavesurfer.js@beta/dist/plugins/multitrack.js'
5
-
6
- // If you prefer a script tag, use this instead:
7
7
/*
8
- <script>
9
- window.WaveSurfer = {}
10
- </script>
11
- <script src="https://unpkg.com/wavesurfer.js@beta/dist/wavesurfer.Multitrack.min.js"></script>
12
- <script>
13
- window.Multitrack = window.WaveSurfer.Multitrack
14
- </script>
8
+ <html>
9
+ <label>
10
+ Zoom: <input type="range" min="10" max="100" value="10" />
11
+ </label>
12
+
13
+ <div style="margin: 2em 0">
14
+ <button id="play">Play</button>
15
+ <button id="forward">Forward 30s</button>
16
+ <button id="backward">Back 30s</button>
17
+ </div>
18
+
19
+ <div id="multitrack" style="background: #2d2d2d; color: #fff"></div>
20
+
21
+ <script src="https://unpkg.com/wavesurfer-multitrack/dist/multitrack.min.js"></script>
22
+ </html>
15
23
*/
16
24
17
- // Call Multitrack.create to initialize the multitrack mixer
18
- // Pass the tracks array and WaveSurfer options with a container element
25
+ // Call Multitrack.create to initialize a multitrack mixer
26
+ // Pass a tracks array and WaveSurfer options with a container element
19
27
const multitrack = Multitrack . create (
20
28
[
21
29
{
@@ -79,7 +87,7 @@ const multitrack = Multitrack.create(
79
87
} ,
80
88
] ,
81
89
{
82
- container : document . body , // required!
90
+ container : document . querySelector ( '#multitrack' ) , // required!
83
91
minPxPerSec : 10 , // zoom level
84
92
rightButtonDrag : true , // drag tracks with the right mouse button
85
93
cursorWidth : 2 ,
@@ -118,6 +126,8 @@ multitrack.on('fade-out-change', ({ id, fadeOutStart }) => {
118
126
multitrack . on ( 'intro-end-change' , ( { id, endTime } ) => {
119
127
console . log ( `Track ${ id } intro end updated to ${ endTime } ` )
120
128
} )
129
+
130
+ // Drag'n'drop a track object (not an audio file!)
121
131
multitrack . on ( 'drop' , ( { id } ) => {
122
132
multitrack . addTrack ( {
123
133
id,
@@ -131,24 +141,6 @@ multitrack.on('drop', ({ id }) => {
131
141
} )
132
142
} )
133
143
134
- // Page styles
135
- document . body . style . background = '#161313'
136
- document . body . style . color = '#fff'
137
-
138
- /*
139
- <html>
140
- <label>
141
- Zoom: <input type="range" min="10" max="100" value="10" />
142
- </label>
143
-
144
- <div style="margin: 1em 0 2em;">
145
- <button id="play">Play</button>
146
- <button id="forward">Forward 30s</button>
147
- <button id="backward">Back 30s</button>
148
- </div>
149
- </html>
150
- */
151
-
152
144
// Play/pause button
153
145
const button = document . querySelector ( '#play' )
154
146
button . disabled = true
@@ -176,7 +168,7 @@ slider.oninput = () => {
176
168
multitrack . zoom ( slider . valueAsNumber )
177
169
}
178
170
179
- // Destroy all wavesurfer instances on unmount
171
+ // Destroy the plugin on unmount
180
172
// This should be called before calling initMultiTrack again to properly clean up
181
173
window . onbeforeunload = ( ) => {
182
174
multitrack . destroy ( )
0 commit comments