Skip to content

Commit c932f97

Browse files
committed
feat: add <Audio> mute controls
1 parent 06bb52a commit c932f97

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

src/Audio/index.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ export interface IAudioState {
4242
time?: number;
4343
duration?: number;
4444
isPlaying?: boolean;
45-
volume: number;
45+
muted?: boolean;
46+
volume?: number;
4647
}
4748

4849
export class Audio extends Component<IAudioProps, IAudioState> {
@@ -52,7 +53,8 @@ export class Audio extends Component<IAudioProps, IAudioState> {
5253
time: 0,
5354
duration: 0,
5455
isPlaying: false,
55-
volume: NaN
56+
muted: false,
57+
volume: 1
5658
};
5759

5860
ref = (el) => {
@@ -103,6 +105,18 @@ export class Audio extends Component<IAudioProps, IAudioState> {
103105
}
104106
};
105107

108+
mute = () => {
109+
if (this.el) {
110+
this.el.muted = true;
111+
}
112+
};
113+
114+
unmute = () => {
115+
if (this.el) {
116+
this.el.muted = false;
117+
}
118+
};
119+
106120
event = (name: string) => (event) => {
107121
const handler = this.props[name];
108122

@@ -128,8 +142,11 @@ export class Audio extends Component<IAudioProps, IAudioState> {
128142
};
129143

130144
onVolumeChange = (event) => {
145+
const {muted, volume} = this.el;
146+
131147
this.setState({
132-
volume: this.el.volume
148+
muted,
149+
volume
133150
});
134151

135152
this.event('onVolumeChange')(event);

src/Audio/story.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,31 @@ storiesOf('Generators/Audio', module)
3131
<button onClick={() => audio.seek(state.time + 5)}>Seek +</button>
3232
<button onClick={() => audio.volume(state.volume - 0.05)}>Volume -</button>
3333
<button onClick={() => audio.volume(state.volume + 0.05)}>Volume +</button>
34+
<button onClick={audio.mute}>Mute</button>
35+
<button onClick={audio.unmute}>Unmute</button>
3436
<pre style={{fontFamily: 'monospace'}}>
3537
{JSON.stringify(state, null, 4)}
3638
</pre>
39+
<hr />
40+
<pre style={{fontFamily: 'monospace'}}>
41+
{`
42+
<Audio src={src}>{(audio, state) =>
43+
<div>
44+
<button onClick={audio.play}>Play</button>
45+
<button onClick={audio.pause}>Pause</button>
46+
<button onClick={() => audio.seek(state.time - 5)}>Seek -</button>
47+
<button onClick={() => audio.seek(state.time + 5)}>Seek +</button>
48+
<button onClick={() => audio.volume(state.volume - 0.05)}>Volume -</button>
49+
<button onClick={() => audio.volume(state.volume + 0.05)}>Volume +</button>
50+
<button onClick={audio.mute}>Mute</button>
51+
<button onClick={audio.unmute}>Unmute</button>
52+
<pre style={{fontFamily: 'monospace'}}>
53+
{JSON.stringify(state, null, 4)}
54+
</pre>
55+
</div>
56+
}</Audio>
57+
`}
58+
</pre>
3759
</div>
3860
}</Audio>
3961
);

0 commit comments

Comments
 (0)