summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/audio/audio.actions.js
blob: 48fffd61e1a70d3306c404f5c02112d077b55553 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import * as types from 'app/types'
import { store, dispatch } from 'app/store'
import oktween from 'app/utils/oktween'

import { URLS } from 'app/constants'

const audioPlayer = document.createElement('audio')
// audioPlayer.volume = 0.0
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 load = () => dispatch => {
  return new Promise((resolve, reject) => {
    audioPlayer.addEventListener('loadedmetadata', () => {
      // console.log('audio duration:', audioPlayer.duration)
      dispatch({ type: types.align.set_display_setting, key: 'duration', value: audioPlayer.duration })
      resolve()
    })
    audioPlayer.src = URLS.audio
  })
}
export const play = () => dispatch => {
  dispatch({ type: types.audio.play })
  audioPlayer.play()
}
export const pause = () => dispatch => {
  dispatch({ type: types.audio.pause })
  audioPlayer.pause()
}
export const seek = play_ts => dispatch => {
  console.log('seek to', play_ts)
  audioPlayer.currentTime = play_ts
  // console.log(play_ts, audioPlayer.currentTime)
  dispatch({ type: types.audio.seek, seek_ts: audioPlayer.currentTime })
}
export const jump = delta_ts => dispatch => {
  audioPlayer.currentTime += delta_ts
  dispatch({ type: types.audio.seek, seek_ts: audioPlayer.currentTime })
}
export const toggle = () => dispatch => {
  if (store.getState().audio.playing) {
    pause()(dispatch)
  } else {
    play()(dispatch)
  }
}
export const setVolume = volume => dispatch => {
  audioPlayer.volume = volume
  dispatch({ type: types.audio.set_volume, volume })
}
export const setCC = value => dispatch => {
  dispatch({ type: types.audio.set_cc, value })
}

/*
// unfortunately these generate audible popping unless fadeTime is > 1000ms
let fadeTween
export const fade = (volume, fadeTime) => {
  if (fadeTween) fadeTween.done = true
  console.log('fade', audioPlayer.volume, '=>', volume, fadeTime)
  return new Promise((resolve) => {
    fadeTween = oktween.add({
      from: { volume: audioPlayer.volume },
      to: { volume },
      duration: fadeTime,
      // easing: oktween.easing.quad_in_out,
      update: obj => {
        console.log("VOLUME ==>", obj)
        audioPlayer.volume = obj.volume
      },
      finished: () => {
        console.log("done")
        fadeTween = null
        resolve()
      }
    })
    console.log(fadeTween)
  })
}

const fadeIn = (fadeTime) => fade(1.0, fadeTime)
const fadeOut = (fadeTime) => fade(0.0, fadeTime)
*/