Skip to content

Commit a8284b1

Browse files
committed
style: optimize AudioController class structure
1 parent 0a08ba7 commit a8284b1

File tree

3 files changed

+32
-31
lines changed

3 files changed

+32
-31
lines changed

.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module.exports = {
1616
rules: {
1717
'space-before-function-paren': 'off',
1818
'@typescript-eslint/no-explicit-any': 'off',
19+
'@typescript-eslint/no-non-null-assertion': 'off',
1920
'vue/no-setup-props-destructure': 'off',
2021
'vue/multi-word-component-names': 'off',
2122
},

src/modules/Audio.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export default class WebAudio {
1010
protected props: IllestWaveformProps
1111
protected audioCtx: AudioContext
1212
protected audioBuffer!: AudioBuffer
13-
protected audioBufferSourceNode!: AudioBufferSourceNode
1413
private filteredData!: number[]
1514
private arrayBuffer!: ArrayBuffer
1615

@@ -61,19 +60,4 @@ export default class WebAudio {
6160

6261
this.filteredData = filteredData
6362
}
64-
65-
protected connectDestination(): void {
66-
this.createAudioBufferSourceNode()
67-
this.disconnectDestination()
68-
this.audioBufferSourceNode.connect(this.audioCtx.destination)
69-
}
70-
71-
private createAudioBufferSourceNode(): void {
72-
this.audioBufferSourceNode = this.audioCtx.createBufferSource()
73-
this.audioBufferSourceNode.buffer = this.audioBuffer
74-
}
75-
76-
protected disconnectDestination(): void {
77-
if (this.audioBufferSourceNode) this.audioBufferSourceNode.disconnect()
78-
}
7963
}

src/modules/AudioController.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export default class WebAudioController extends WebAudio {
1313
private pauseAt: number
1414
private pickAt: number
1515
private playing: boolean
16+
private audioBufferSourceNode!: AudioBufferSourceNode | null
1617

1718
constructor(props: IllestWaveformProps) {
1819
super(props)
@@ -33,45 +34,43 @@ export default class WebAudioController extends WebAudio {
3334
}
3435

3536
public play(): void {
36-
const offset = this.pickAt ? this.pickAt : this.pauseAt
37+
this.audioBufferSourceNode && this.disconnectDestination()
38+
this.createAudioBufferSourceNode()
3739
this.connectDestination()
38-
this.audioBufferSourceNode.start(0, offset)
40+
41+
const offset = this.pickAt ? this.pickAt : this.pauseAt
42+
this.audioBufferSourceNode!.start(0, offset)
3943
this.startAt = this.audioCtx.currentTime - offset
4044
this.pauseAt = 0
4145
this.playing = true
4246
}
4347

4448
public pause(): void {
4549
const elapsed = this.audioCtx.currentTime - this.startAt
46-
this.stop()
50+
this.disconnectDestination()
51+
this.initializeState()
4752
this.pauseAt = elapsed
4853
}
4954

5055
public pick(pickedTime: number): void {
5156
this.pickAt = pickedTime
5257
if (!this.playing) return
53-
this.stopSource()
58+
this.disconnectDestination()
5459
this.play()
5560
}
5661

5762
public replay(): void {
58-
if (this.audioBufferSourceNode) this.stop()
63+
if (this.audioBufferSourceNode) {
64+
this.disconnectDestination()
65+
this.initializeState()
66+
}
5967
this.play()
6068
}
6169

6270
public finish(): void {
6371
this.pauseAt = 0
64-
this.stop()
65-
}
66-
67-
private stop(): void {
68-
this.stopSource()
69-
this.initializeState()
70-
}
71-
72-
private stopSource() {
7372
this.disconnectDestination()
74-
this.audioBufferSourceNode.stop()
73+
this.initializeState()
7574
}
7675

7776
private initializeState() {
@@ -80,4 +79,21 @@ export default class WebAudioController extends WebAudio {
8079
this.pauseAt = 0
8180
this.pickAt = 0
8281
}
82+
83+
protected connectDestination(): void {
84+
this.audioBufferSourceNode!.connect(this.audioCtx.destination)
85+
}
86+
87+
private createAudioBufferSourceNode(): void {
88+
if (this.audioBufferSourceNode) return
89+
this.audioBufferSourceNode = this.audioCtx.createBufferSource()
90+
this.audioBufferSourceNode.buffer = this.audioBuffer
91+
}
92+
93+
protected disconnectDestination(): void {
94+
if (!this.audioBufferSourceNode) return
95+
this.audioBufferSourceNode.disconnect()
96+
this.audioBufferSourceNode.stop()
97+
this.audioBufferSourceNode = null
98+
}
8399
}

0 commit comments

Comments
 (0)