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 = (url) => dispatch => ( 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 = url }) ) export const loadEpisodeAudio = (episode) => dispatch => ( episode.settings.audio ? load(episode.settings.audio.url)(dispatch) : new Promise((resolve) => resolve(true)) ) 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) */