diff options
Diffstat (limited to 'animism-align/frontend/app/views/audio')
| -rw-r--r-- | animism-align/frontend/app/views/audio/audio.actions.js | 40 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/audio/audio.reducer.js | 30 |
2 files changed, 70 insertions, 0 deletions
diff --git a/animism-align/frontend/app/views/audio/audio.actions.js b/animism-align/frontend/app/views/audio/audio.actions.js new file mode 100644 index 0000000..bd256a4 --- /dev/null +++ b/animism-align/frontend/app/views/audio/audio.actions.js @@ -0,0 +1,40 @@ +import * as types from 'app/types' +import { store, history, dispatch } from 'app/store' +import actions from 'app/actions' +import { session } from 'app/session' + +const audioPlayer = document.createElement('audio') +audioPlayer.src = '/static/data_store/peaks/animismA080720.mp3' +audioPlayer.addEventListener('loadedmetadata', () => { + console.log('audio duration:', audioPlayer.duration) + dispatch({ type: types.align.set_display_setting, key: 'duration', value: audioPlayer.duration }) +}) +audioPlayer.addEventListener('play', () => { + dispatch({ type: types.audio.play }) +}) +audioPlayer.addEventListener('pause', () => { + dispatch({ type: types.audio.pause }) +}) +audioPlayer.addEventListener('timeupdate', () => { + dispatch({ type: types.audio.update_time, play_ts: audioPlayer.currentTime }) +}) + +export const play = () => dispatch => { + audioPlayer.play() +} +export const pause = () => dispatch => { + audioPlayer.pause() +} +export const seek = play_ts => dispatch => { + audioPlayer.currentTime = play_ts +} +export const jump = delta_ts => dispatch => { + audioPlayer.currentTime += delta_ts +} +export const toggle = () => dispatch => { + if (store.getState().audio.playing) { + pause()(dispatch) + } else { + play()(dispatch) + } +} diff --git a/animism-align/frontend/app/views/audio/audio.reducer.js b/animism-align/frontend/app/views/audio/audio.reducer.js new file mode 100644 index 0000000..6149ca6 --- /dev/null +++ b/animism-align/frontend/app/views/audio/audio.reducer.js @@ -0,0 +1,30 @@ +import * as types from 'app/types' +import { session, getDefault, getDefaultInt } from 'app/session' + +const initialState = { + playing: false, + play_ts: 0, +} + +export default function alignReducer(state = initialState, action) { + // console.log(action.type, action) + switch (action.type) { + case types.audio.play: + return { + ...state, + playing: true, + } + case types.audio.pause: + return { + ...state, + playing: false, + } + case types.audio.update_time: + return { + ...state, + play_ts: action.play_ts, + } + default: + return state + } +} |
