summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/audio
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align/frontend/app/views/audio')
-rw-r--r--animism-align/frontend/app/views/audio/audio.actions.js40
-rw-r--r--animism-align/frontend/app/views/audio/audio.reducer.js30
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
+ }
+}