summaryrefslogtreecommitdiff
path: root/animism-align
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align')
-rw-r--r--animism-align/frontend/app/utils/index.js20
-rw-r--r--animism-align/frontend/app/views/audio/audio.actions.js8
-rw-r--r--animism-align/frontend/app/views/editor/align/align.actions.js2
-rw-r--r--animism-align/frontend/app/views/editor/sidebar/components/waveUpload.component.js12
-rw-r--r--animism-align/frontend/app/views/editor/timeline/components/waveform.component.js4
-rw-r--r--animism-align/frontend/app/views/site/site.actions.js5
6 files changed, 36 insertions, 15 deletions
diff --git a/animism-align/frontend/app/utils/index.js b/animism-align/frontend/app/utils/index.js
index dc80fee..92aa769 100644
--- a/animism-align/frontend/app/utils/index.js
+++ b/animism-align/frontend/app/utils/index.js
@@ -103,6 +103,26 @@ export const timestampToSeconds = time_str => {
return time_str_parts[0]
}
+export const commatize = (n, radix) => {
+ radix = radix || -1
+ var nums = [], i, counter = 0, r = Math.floor
+ if (radix !== -1 && n > radix) {
+ n /= radix
+ nums.unshift(r((n * 10) % 10))
+ nums.unshift(".")
+ }
+ do {
+ i = r(n % 10)
+ n = r(n / 10)
+ counter += 1
+ if (n && ! (counter % 3))
+ { i = ',' + r(i) }
+ nums.unshift(i)
+ }
+ while (n)
+ return nums.join("")
+}
+
export const percent = n => (n * 100).toFixed(1) + '%'
export const px = (n, w) => Math.round(n * w) + 'px'
diff --git a/animism-align/frontend/app/views/audio/audio.actions.js b/animism-align/frontend/app/views/audio/audio.actions.js
index 48fffd6..08a8ba4 100644
--- a/animism-align/frontend/app/views/audio/audio.actions.js
+++ b/animism-align/frontend/app/views/audio/audio.actions.js
@@ -16,16 +16,20 @@ audioPlayer.addEventListener('timeupdate', () => {
dispatch({ type: types.audio.update_time, play_ts: audioPlayer.currentTime })
})
-export const load = () => dispatch => {
+export const load = (url) => 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
+ audioPlayer.src = url
})
}
+export const loadEpisodeAudio = (episode) => dispatch => {
+ return load(episode.settings.audio.url)(dispatch)
+}
+
export const play = () => dispatch => {
dispatch({ type: types.audio.play })
audioPlayer.play()
diff --git a/animism-align/frontend/app/views/editor/align/align.actions.js b/animism-align/frontend/app/views/editor/align/align.actions.js
index a2f4881..3b6450b 100644
--- a/animism-align/frontend/app/views/editor/align/align.actions.js
+++ b/animism-align/frontend/app/views/editor/align/align.actions.js
@@ -150,7 +150,7 @@ export const spliceTime = start_ts => dispatch => {
/* peaks */
export const loadPeaks = (episode) => dispatch => (
- api(dispatch, types.peaks, 'peaks', URLS.peaks)
+ api(dispatch, types.peaks, 'peaks', episode.settings.peaks.url)
)
/* longform text */
diff --git a/animism-align/frontend/app/views/editor/sidebar/components/waveUpload.component.js b/animism-align/frontend/app/views/editor/sidebar/components/waveUpload.component.js
index 3ca19f0..efd4bee 100644
--- a/animism-align/frontend/app/views/editor/sidebar/components/waveUpload.component.js
+++ b/animism-align/frontend/app/views/editor/sidebar/components/waveUpload.component.js
@@ -3,7 +3,7 @@ import { connect } from 'react-redux'
import extractPeaks from 'webaudio-peaks'
import actions from 'app/actions'
-import { formatSize, timestampHMS } from 'app/utils'
+import { formatSize, timestampHMS, commatize } from 'app/utils'
import { Loader } from 'app/common'
class WaveUpload extends Component {
@@ -43,7 +43,7 @@ class WaveUpload extends Component {
audioContext.decodeAudioData(arrayBuffer, (audioBuffer) => {
// buffer, samplesPerPixel, isMono, startOffset, endOffset, bitResolution
this.setState({ duration: audioBuffer.duration })
- var peaks = extractPeaks(audioBuffer, 441, true);
+ var peaks = extractPeaks(audioBuffer, audioBuffer.sampleRate / 5, true);
console.log(peaks)
const array = Array.from(peaks.data[0])
const peaksBlob = new Blob([ JSON.stringify(array) ], {type: "application/json"});
@@ -93,6 +93,8 @@ class WaveUpload extends Component {
duration: null,
size: null,
})
+ actions.align.loadPeaks(episode)
+ actions.audio.loadEpisodeAudio(episode)
})
}
@@ -143,11 +145,7 @@ class WaveUpload extends Component {
<small>{episode.settings.audio.fn}</small>
<small>{'Size: '}{formatSize(episode.settings.audio.size)}</small>
<small>{'Duration: '}{timestampHMS(episode.settings.audio.duration)}</small>
- </div>
- )}
- {peaks.length && (
- <div>
- Peaks: {peaks.length}
+ <small>{'Peaks: '}{commatize(peaks.length)}</small>
</div>
)}
<div className="uploadButton">
diff --git a/animism-align/frontend/app/views/editor/timeline/components/waveform.component.js b/animism-align/frontend/app/views/editor/timeline/components/waveform.component.js
index 0161129..992f0d5 100644
--- a/animism-align/frontend/app/views/editor/timeline/components/waveform.component.js
+++ b/animism-align/frontend/app/views/editor/timeline/components/waveform.component.js
@@ -68,13 +68,13 @@ class Waveform extends Component {
for (i = 0; i < pixelWidth; i++) {
step = i * stepsPerPixel + stepMin
peak = peaks[step]
- y = (1 - peak) * waveformPeak
+ y = (1 - peak / 127) * waveformPeak
ctx.lineTo(y, i)
}
for (i = pixelWidth - 1; i > 0; i--) {
step = i * stepsPerPixel + stepMin
peak = peaks[step]
- y = (1 + peak) * waveformPeak
+ y = (1 + peak / 127) * waveformPeak
ctx.lineTo(y, i)
}
ctx.lineTo(origin, 0)
diff --git a/animism-align/frontend/app/views/site/site.actions.js b/animism-align/frontend/app/views/site/site.actions.js
index 5538df7..4d0c4da 100644
--- a/animism-align/frontend/app/views/site/site.actions.js
+++ b/animism-align/frontend/app/views/site/site.actions.js
@@ -19,9 +19,8 @@ export const loadEpisode = (project, episode) => dispatch => {
const { id: episode_id } = episode
dispatch({ type: types.editor.loading })
return Promise.all([
- // actions.align.loadText(episode),
- // actions.align.loadPeaks(episode),
- actions.audio.load(episode),
+ actions.align.loadPeaks(episode),
+ actions.audio.loadEpisodeAudio(episode),
actions.annotation.index({ episode_id }),
actions.paragraph.index({ episode_id }),
actions.media.index({ episode_id }),