Skip to content

Commit a0f6e54

Browse files
committed
fix: 🐛 engine example audio play
1 parent 8150141 commit a0f6e54

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

docs/engine/engine-basic/audioControl.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
import { Howl } from "howler";
2-
import { TimelineEngine } from "@xzdarcy/react-timeline-editor";
1+
import { Howl } from 'howler';
2+
import { TimelineEngine } from '@xzdarcy/react-timeline-editor';
33

44
class AudioControl {
55
cacheMap: Record<string, Howl> = {};
6-
listenerMap: Record<string, {
7-
time?: (data: {time: number}) => void
8-
rate?: (data: {rate: number}) => void
9-
}> = {};
6+
listenerMap: Record<
7+
string,
8+
{
9+
time?: (data: { time: number }) => void;
10+
rate?: (data: { rate: number }) => void;
11+
}
12+
> = {};
1013

11-
start(data: { id: string; engine: TimelineEngine, src: string; startTime: number; time: number }) {
14+
start(data: { id: string; engine: TimelineEngine; src: string; startTime: number; time: number }) {
1215
const { id, src, startTime, time, engine } = data;
1316
let item: Howl;
1417
if (this.cacheMap[id]) {
@@ -19,8 +22,10 @@ class AudioControl {
1922
} else {
2023
item = new Howl({ src, loop: true, autoplay: true });
2124
this.cacheMap[id] = item;
22-
item.rate(engine.getPlayRate());
23-
item.seek((time - startTime) % item.duration());
25+
item.on('load', () => {
26+
item.rate(engine.getPlayRate());
27+
item.seek((time - startTime) % item.duration());
28+
});
2429
}
2530

2631
const timeListener = (data: { time: number }) => {
@@ -31,9 +36,9 @@ class AudioControl {
3136
const { rate } = data;
3237
item.rate(rate);
3338
};
34-
if(!this.listenerMap[id])this.listenerMap[id] = {};
35-
engine.on("afterSetTime", timeListener);
36-
engine.on("afterSetPlayRate", rateListener);
39+
if (!this.listenerMap[id]) this.listenerMap[id] = {};
40+
engine.on('afterSetTime', timeListener);
41+
engine.on('afterSetPlayRate', rateListener);
3742
this.listenerMap[id].time = timeListener;
3843
this.listenerMap[id].rate = rateListener;
3944
}
@@ -43,13 +48,12 @@ class AudioControl {
4348
if (this.cacheMap[id]) {
4449
const item = this.cacheMap[id];
4550
item.stop();
46-
if(this.listenerMap[id]) {
47-
this.listenerMap[id].time && engine.off("afterSetTime", this.listenerMap[id].time);
48-
this.listenerMap[id].rate && engine.off("afterSetPlayRate", this.listenerMap[id].rate);
49-
delete this.listenerMap[id]
51+
if (this.listenerMap[id]) {
52+
this.listenerMap[id].time && engine.off('afterSetTime', this.listenerMap[id].time);
53+
this.listenerMap[id].rate && engine.off('afterSetPlayRate', this.listenerMap[id].rate);
54+
delete this.listenerMap[id];
5055
}
5156
}
52-
5357
}
5458
}
5559

docs/engine/engine-standalone/audioControl.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Howl } from 'howler';
21
import { TimelineEngine } from '@xzdarcy/react-timeline-editor';
2+
import { Howl } from 'howler';
33

44
class AudioControl {
55
cacheMap: Record<string, Howl> = {};
@@ -22,8 +22,10 @@ class AudioControl {
2222
} else {
2323
item = new Howl({ src, loop: true, autoplay: true });
2424
this.cacheMap[id] = item;
25-
item.rate(engine.getPlayRate());
26-
item.seek((time - startTime) % item.duration());
25+
item.on('load', () => {
26+
item.rate(engine.getPlayRate());
27+
item.seek((time - startTime) % item.duration());
28+
});
2729
}
2830

2931
const timeListener = (data: { time: number }) => {

0 commit comments

Comments
 (0)