From ab6b3dcb96bec26fcf46ac2cd06dbdf58c1d23a2 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 23 Jun 2020 05:21:35 -0400 Subject: [PATCH] make a sub-mode: speaker info vs spectrogram --- vocodes/src/App.tsx | 14 +++- vocodes/src/modes/speak/Form.tsx | 54 +-------------- vocodes/src/modes/speak/SpeakComponent.tsx | 24 +++++-- .../src/modes/speak/{ => extras}/Avatar.tsx | 2 +- .../modes/speak/extras/ExtrasComponent.tsx | 52 +++++++++++++++ .../src/modes/speak/extras/SpeakerInfo.tsx | 29 ++++++++ vocodes/src/modes/speak/extras/Spectrogram.ts | 14 ++++ .../speak/extras/SpectrogramComponent.tsx | 66 +++++++++++++++++++ 8 files changed, 197 insertions(+), 58 deletions(-) rename vocodes/src/modes/speak/{ => extras}/Avatar.tsx (94%) create mode 100644 vocodes/src/modes/speak/extras/ExtrasComponent.tsx create mode 100644 vocodes/src/modes/speak/extras/SpeakerInfo.tsx create mode 100644 vocodes/src/modes/speak/extras/Spectrogram.ts create mode 100644 vocodes/src/modes/speak/extras/SpectrogramComponent.tsx diff --git a/vocodes/src/App.tsx b/vocodes/src/App.tsx index 6dd7782430..2a3381d894 100644 --- a/vocodes/src/App.tsx +++ b/vocodes/src/App.tsx @@ -9,11 +9,13 @@ import { TermsComponent } from './modes/terms/TermsComponent'; import { TopNav } from './navigation/TopNav'; import { UsageComponent } from './modes/usage/UsageComponent'; import { Speaker, SPEAKERS } from './Speakers'; +import { ExtrasMode } from './modes/speak/extras/ExtrasComponent'; interface Props {} interface State { mode: Mode, + extrasMode: ExtrasMode, speaker: Speaker, } @@ -23,6 +25,7 @@ class App extends React.Component { super(props); this.state = { mode: Mode.SPEAK_MODE, + extrasMode: ExtrasMode.SPEAKER_INFO, speaker: SPEAKERS[0], }; } @@ -35,6 +38,10 @@ class App extends React.Component { this.setState({ mode: Mode.SPEAK_MODE }); } + switchExtrasMode = (extrasMode: ExtrasMode) => { + this.setState({ extrasMode: extrasMode }); + } + setSpeaker = (speaker: Speaker) : void => { this.setState({ speaker: speaker }); } @@ -52,7 +59,12 @@ class App extends React.Component { let component; switch (this.state.mode) { case Mode.SPEAK_MODE: - component = ; + component = ; break; case Mode.USAGE_MODE: component = ; diff --git a/vocodes/src/modes/speak/Form.tsx b/vocodes/src/modes/speak/Form.tsx index 76699ee0f5..0b13748465 100644 --- a/vocodes/src/modes/speak/Form.tsx +++ b/vocodes/src/modes/speak/Form.tsx @@ -5,18 +5,7 @@ import { Speaker } from '../../Speakers'; import { createColorMap, linearScale } from "@colormap/core"; //import { VIRIDIS, CIVIDIS, PLASMA, INFERNO, MAGMA, BLACK_WHITE, } from "@colormap/presets"; import { MAGMA } from "@colormap/presets"; - -class Spectrogram { - pixels: Uint8ClampedArray; - width: number; - height: number; - - constructor(pixels: Uint8ClampedArray, width: number, height: number) { - this.pixels = pixels; - this.width = width; - this.height = height; - } -} +import { Spectrogram } from './extras/Spectrogram'; interface Props { currentSpeaker: Speaker, @@ -27,12 +16,12 @@ interface Props { onSpeakErrorCallback: () => void, onPlayCallback: () => void, onStopCallback: () => void, + updateSpectrogramCallback: (spectrogram: Spectrogram) => void, } interface State { text: string, howl?: Howl, - spectrogram?: Spectrogram, } class Form extends React.Component { @@ -149,6 +138,7 @@ class Form extends React.Component { let bytes = base64ToArrayBuffer(res.spectrogram.bytes_base64); const spectrogram = new Spectrogram(bytes, res.spectrogram.width, res.spectrogram.height); + this.props.updateSpectrogramCallback(spectrogram); const sound = new Howl.Howl({ src: [data], @@ -162,7 +152,6 @@ class Form extends React.Component { this.setState({ howl: sound, - spectrogram: spectrogram, }); sound.play(); @@ -219,48 +208,11 @@ class Form extends React.Component { componentDidMount() { this.textarea?.focus(); - this.updateCanvas(); } - componentDidUpdate() { - this.updateCanvas(); - } - - updateCanvas() { - const ctx = (this.refs.canvas as any).getContext('2d'); - // let width = 300; - // let height = 80; - // ctx.clearRect(0,0, width, height); - - if (this.state.spectrogram !== undefined) { - let width = this.state.spectrogram!.width; - let height = this.state.spectrogram!.height; - - var image = new ImageData(this.state.spectrogram!.pixels, width, height); - - createImageBitmap(image).then(renderer => { - ctx.drawImage(renderer, 0, 0, width * 3, height * 3) - }); - } - } - - public render() { - let width = 150 * 3; - let height = 80 * 3; - - if (this.state.spectrogram !== undefined) { - width = this.state.spectrogram.width * 3; - height = this.state.spectrogram.height * 3; - } - - // TODO: This needs to go way up the tree. - let canvas = - return (
- {canvas} -