Mercurial > hg > ugly-duckling
changeset 117:b8627a18c72d
Simplistically add separate spectrogram layer
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Tue, 14 Mar 2017 11:05:58 +0000 |
parents | 0d73dbe1a6a6 |
children | 5a4cd7add25a |
files | src/app/waveform/waveform.component.ts |
diffstat | 1 files changed, 39 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/src/app/waveform/waveform.component.ts Mon Mar 13 16:10:51 2017 +0000 +++ b/src/app/waveform/waveform.component.ts Tue Mar 14 11:05:58 2017 +0000 @@ -40,8 +40,10 @@ @Input() set audioBuffer(buffer: AudioBuffer) { this._audioBuffer = buffer || undefined; - if (this.audioBuffer) + if (this.audioBuffer) { this.renderWaveform(this.audioBuffer); + this.renderSpectrogram(this.audioBuffer); + } } get audioBuffer(): AudioBuffer { @@ -110,7 +112,8 @@ const width: number = track.getBoundingClientRect().width; const pixelsPerSecond = width / duration; const timeline = new wavesUI.core.Timeline(pixelsPerSecond, width); - timeline.createTrack(track, height, 'main'); + timeline.createTrack(track, height/2, 'wave'); + timeline.createTrack(track, height/2, 'grid'); return timeline; } @@ -196,8 +199,8 @@ } renderWaveform(buffer: AudioBuffer): void { - const height: number = this.trackDiv.nativeElement.getBoundingClientRect().height; - const mainTrack = this.timeline.getTrackById('main'); + const height: number = this.trackDiv.nativeElement.getBoundingClientRect().height / 2; + const waveTrack = this.timeline.getTrackById('wave'); if (this.timeline) { // resize const width = this.trackDiv.nativeElement.getBoundingClientRect().width; @@ -207,18 +210,21 @@ for (let i = 0, length = this.disposableLayers.length; i < length; ++i) { let layer = this.disposableLayers.pop(); - mainTrack.remove(layer); +// if (waveTrack.hasElement(layer)) { +// waveTrack.remove(layer); +// } const index = timeContextChildren.indexOf(layer.timeContext); - if (index >= 0) + if (index >= 0) { timeContextChildren.splice(index, 1); + } layer.destroy(); } this.colouredLayers.clear(); this.timeline.visibleWidth = width; this.timeline.pixelsPerSecond = width / buffer.duration; - mainTrack.height = height; + waveTrack.height = height; } else { this.timeline = this.renderTimeline(buffer.duration) } @@ -229,30 +235,22 @@ height: height, color: '#b0b0b0' }); - this.addLayer(timeAxis, mainTrack, this.timeline.timeContext, true); + this.addLayer(timeAxis, waveTrack, this.timeline.timeContext, true); const waveformLayer = new wavesUI.helpers.WaveformLayer(buffer, { top: 10, height: height * 0.9, color: 'darkblue' }); - this.addLayer(waveformLayer, mainTrack, this.timeline.timeContext); -/* - const spectrogramLayer = new wavesUI.helpers.SpectrogramLayer(buffer, { - top: 10, - height: height * 0.9, - stepSize: 512, - fftSize: 1024 - }); - this.addLayer(spectrogramLayer, mainTrack, this.timeline.timeContext); -*/ + this.addLayer(waveformLayer, waveTrack, this.timeline.timeContext); + this.cursorLayer = new wavesUI.helpers.CursorLayer({ height: height }); - this.addLayer(this.cursorLayer, mainTrack, this.timeline.timeContext); + this.addLayer(this.cursorLayer, waveTrack, this.timeline.timeContext); this.timeline.state = new wavesUI.states.CenteredZoomState(this.timeline); - mainTrack.render(); - mainTrack.update(); + waveTrack.render(); + waveTrack.update(); if ('ontouchstart' in window) { @@ -343,6 +341,21 @@ this.animate(); } + renderSpectrogram(buffer: AudioBuffer): void { + const height: number = this.trackDiv.nativeElement.getBoundingClientRect().height / 2; + const gridTrack = this.timeline.getTrackById('grid'); + + const spectrogramLayer = new wavesUI.helpers.SpectrogramLayer(buffer, { + top: 10, + height: height * 0.9, + stepSize: 512, + fftSize: 1024 + }); + this.addLayer(spectrogramLayer, gridTrack, this.timeline.timeContext); + + this.timeline.tracks.update(); + } + // TODO refactor - this doesn't belong here private renderFeatures(extracted: SimpleResponse, colour: Colour): void { if (!extracted.hasOwnProperty('features') || !extracted.hasOwnProperty('outputDescriptor')) return; @@ -350,7 +363,7 @@ const features: FeatureCollection = (extracted.features as FeatureCollection); const outputDescriptor = extracted.outputDescriptor; const height = this.trackDiv.nativeElement.getBoundingClientRect().height; - const mainTrack = this.timeline.getTrackById('main'); + const waveTrack = this.timeline.getTrackById('main'); // TODO refactor all of this switch (features.shape) { @@ -377,7 +390,7 @@ }); this.colouredLayers.set(this.addLayer( lineLayer, - mainTrack, + waveTrack, this.timeline.timeContext ), colour); break; @@ -403,7 +416,7 @@ }); this.colouredLayers.set(this.addLayer( markerLayer, - mainTrack, + waveTrack, this.timeline.timeContext ), colour); } else if (isRegion) { @@ -471,7 +484,7 @@ ); this.colouredLayers.set(this.addLayer( segmentLayer, - mainTrack, + waveTrack, this.timeline.timeContext ), colour); } @@ -496,7 +509,7 @@ }); this.colouredLayers.set(this.addLayer( matrixLayer, - mainTrack, + waveTrack, this.timeline.timeContext ), colour); break;