diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2020-06-28 23:11:49 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2020-06-28 23:11:49 +0200 |
| commit | 3132458de93217dbd2ebaee3faae046f30f818e1 (patch) | |
| tree | 2dd05419bf130cecabb54f4b720896a3876a3af5 /animism-align/frontend/views/align/components | |
| parent | e2369c0b434779e38165976647d39a5a3435a7b2 (diff) | |
displaying a waveform!!
Diffstat (limited to 'animism-align/frontend/views/align/components')
| -rw-r--r-- | animism-align/frontend/views/align/components/ticks.component.js | 3 | ||||
| -rw-r--r-- | animism-align/frontend/views/align/components/timeline.component.js | 42 |
2 files changed, 39 insertions, 6 deletions
diff --git a/animism-align/frontend/views/align/components/ticks.component.js b/animism-align/frontend/views/align/components/ticks.component.js index 95a2b32..832144b 100644 --- a/animism-align/frontend/views/align/components/ticks.component.js +++ b/animism-align/frontend/views/align/components/ticks.component.js @@ -26,9 +26,6 @@ export default class Ticks extends Component { pixelsPerTick *= 2 subdivision *= 2 } - if (subdivision > 60) { - - } console.log('start ts', start_ts) let pixelOffset = (start_ts / secondsPerPixel) diff --git a/animism-align/frontend/views/align/components/timeline.component.js b/animism-align/frontend/views/align/components/timeline.component.js index af3c57b..0a97c3a 100644 --- a/animism-align/frontend/views/align/components/timeline.component.js +++ b/animism-align/frontend/views/align/components/timeline.component.js @@ -8,7 +8,7 @@ import actions from '../../../actions' import Ticks from './ticks.component' -import * as constants from '../constants' +import { DEFAULT_HEIGHT, WAVEFORM_HEIGHT, ZOOM_STEPS, ZOOM_LABEL_STEPS, ZOOM_TICK_STEPS } from '../constants' class Timeline extends Component { constructor(props){ @@ -39,21 +39,56 @@ class Timeline extends Component { resize() { const canvas = this.canvasRef.current canvas.width = window.innerWidth - canvas.height = constants.DEFAULT_HEIGHT + canvas.height = DEFAULT_HEIGHT } draw() { const canvas = this.canvasRef.current const ctx = canvas.getContext('2d') const w = window.innerWidth this.clearCanvas(ctx, w) + this.drawCurve(ctx, w) } clearCanvas(ctx, w) { - const h = constants.WAVEFORM_HEIGHT + const h = WAVEFORM_HEIGHT ctx.clearRect(0, 0, w, h) ctx.fillStyle = 'rgba(0,0,0,0.5)' ctx.fillRect(0, 0, w, h) ctx.fillStyle = 'rgba(64,128,192,0.5)' } + drawCurve(ctx, w) { + let { peaks, timeline } = this.props + let { start_ts, zoom, duration } = timeline + let stepsPerPixel = ZOOM_STEPS[zoom] // 0.1 sec / step + let indexesPerPixel = stepsPerPixel * 2 + let stepMin = start_ts * 10 + let stepDuration = duration * 10 / stepsPerPixel + let stepMax = stepDuration - stepMin + let stepWidth = Math.min(stepMax, w) + stepWidth += 2 + (stepWidth % 2) + let i = 0 + let step = stepMin + let waveformPeak = WAVEFORM_HEIGHT / 2 + let origin = (1 - peaks[step]) * waveformPeak + let y = origin + let peak + ctx.beginPath() + ctx.moveTo(0, y) + for (i = 0; i < stepWidth; i++) { + step = i * indexesPerPixel + stepMin + peak = peaks[step] + y = (1 - peak) * waveformPeak + ctx.lineTo(i, y) + } + for (i = stepWidth - 1; i > 0; i--) { + step = i * indexesPerPixel + stepMin + peak = peaks[step] + y = (1 + peaks[step]) * waveformPeak + ctx.lineTo(i, y) + } + ctx.lineTo(0, origin) + ctx.fillStyle = 'rgba(255,255,255,0.8)' + ctx.fill() + } render() { return ( <div className='timeline'> @@ -66,6 +101,7 @@ class Timeline extends Component { const mapStateToProps = state => ({ timeline: state.align.timeline, + peaks: state.site.peaks, }) const mapDispatchToProps = dispatch => ({ |
