From c5a6bfea8aa89900ae6d072313eef02948c79658 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 19 Apr 2021 16:47:28 +0200 Subject: mute button. muting audio --- frontend/site/audio/audio.actions.js | 9 +++++++++ frontend/site/audio/audio.icons.js | 13 +++++++++++++ frontend/site/audio/audio.player.js | 15 +++++++++++++-- frontend/site/audio/audio.reducer.js | 15 +++++++++++++++ frontend/site/audio/mute.button.js | 18 ++++++++++++++++++ 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 frontend/site/audio/audio.actions.js create mode 100644 frontend/site/audio/audio.icons.js create mode 100644 frontend/site/audio/mute.button.js (limited to 'frontend/site/audio') diff --git a/frontend/site/audio/audio.actions.js b/frontend/site/audio/audio.actions.js new file mode 100644 index 0000000..0b0b44b --- /dev/null +++ b/frontend/site/audio/audio.actions.js @@ -0,0 +1,9 @@ +import * as types from 'site/types' + +export const mute = () => dispatch => { + dispatch({ type: types.site.mute_audio }) +} + +export const unmute = () => dispatch => { + dispatch({ type: types.site.unmute_audio }) +} \ No newline at end of file diff --git a/frontend/site/audio/audio.icons.js b/frontend/site/audio/audio.icons.js new file mode 100644 index 0000000..1e1b251 --- /dev/null +++ b/frontend/site/audio/audio.icons.js @@ -0,0 +1,13 @@ +import React from 'react' + +export const VolumeOn = ( + + + +) + +export const VolumeOff = ( + + + +) diff --git a/frontend/site/audio/audio.player.js b/frontend/site/audio/audio.player.js index d036347..fcdcb6f 100644 --- a/frontend/site/audio/audio.player.js +++ b/frontend/site/audio/audio.player.js @@ -37,9 +37,14 @@ export default class AudioPlayer { delete this.players[id] } + toggleMuted(muted) { + this.muted = muted + Object.keys(this.players).forEach(id => this.players[id].toggleMuted(muted)) + } + playPage(page) { const { background_audio_id, restart_audio, stop_all_sounds } = page.settings - console.log('playPage', page) + // console.log('playPage', page) if (stop_all_sounds && this.current_background_id !== background_audio_id) { Object.keys(this.players).forEach(id => this.stop(id)) } else if ( @@ -86,8 +91,9 @@ export default class AudioPlayer { item, tile, type, - done: this.done + done: this.done, }) + this.players[id].toggleMuted(this.muted) this.players[id].play() return this.players[id] } @@ -100,6 +106,7 @@ export default class AudioPlayer { type: "url", done: this.done }) + this.players[id].toggleMuted(this.muted) this.players[id].play() return this.players[id] } @@ -120,6 +127,10 @@ class Player { this.audio.src = item.url } + toggleMuted(muted) { + this.audio.muted = muted + } + release() { if (this.type === 'click' && this.tile && this.tile.settings.navigate_when_audio_finishes) { history.push(this.tile.href) diff --git a/frontend/site/audio/audio.reducer.js b/frontend/site/audio/audio.reducer.js index f0bf0e9..9cdda54 100644 --- a/frontend/site/audio/audio.reducer.js +++ b/frontend/site/audio/audio.reducer.js @@ -3,6 +3,7 @@ import * as types from 'site/types' const initialState = { player: new AudioPlayer(), + muted: false, } export default function audioReducer(state = initialState, action) { @@ -12,6 +13,20 @@ export default function audioReducer(state = initialState, action) { state.player.load(action.data.graph) return state + case types.site.mute_audio: + state.player.toggleMuted(true) + return { + ...state, + muted: true, + } + + case types.site.unmute_audio: + state.player.toggleMuted(false) + return { + ...state, + muted: false, + } + default: return state } diff --git a/frontend/site/audio/mute.button.js b/frontend/site/audio/mute.button.js new file mode 100644 index 0000000..c2606d3 --- /dev/null +++ b/frontend/site/audio/mute.button.js @@ -0,0 +1,18 @@ +import React from 'react' +import { connect } from 'react-redux' + +import { VolumeOn, VolumeOff } from './audio.icons' + +import actions from 'site/actions' + +const MuteButton = ({ muted }) => ( +
+ {muted ? VolumeOff : VolumeOn} +
+) + +const mapStateToProps = state => ({ + muted: state.audio.muted, +}) + +export default connect(mapStateToProps)(MuteButton) -- cgit v1.2.3-70-g09d2