diff --git a/index.html b/index.html deleted file mode 100644 index 63b5cd700f..0000000000 --- a/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - -

Vocodes is launching soon!

- - diff --git a/vocodes/src/App.tsx b/vocodes/src/App.tsx index cfdf232ead..2238604216 100644 --- a/vocodes/src/App.tsx +++ b/vocodes/src/App.tsx @@ -1,7 +1,7 @@ import './App.scss'; import React from 'react'; import { AboutComponent } from './modes/about/AboutComponent'; -import { ExtrasMode } from './modes/speak/extras/ExtrasComponent'; +import { ExtrasMode } from './modes/speak/SpeakComponent'; import { Footer } from './navigation/Footer'; import { HistoryComponent } from './modes/history/HistoryComponent'; import { Mode } from './AppMode'; @@ -12,7 +12,13 @@ import { TermsComponent } from './modes/terms/TermsComponent'; import { TopNav } from './navigation/TopNav'; import { Utterance } from './model/utterance'; -interface Props {} +interface Props { + // Certan browsers (iPhone) have pitiful support for drawing APIs. Worse yet, + // they seem to lose the "touch event sandboxing" that allows for audio to be + // played after user interaction if the XHRs delivering the audio don't do so + // as actual audio mimetypes. (Decoding from base64 and trying to play fails.) + enableSpectrograms: boolean, +} enum SpectrogramMode { VIRIDIS, @@ -66,6 +72,9 @@ class App extends React.Component { } switchExtrasMode = (extrasMode: ExtrasMode) => { + if (!this.props.enableSpectrograms && extrasMode == ExtrasMode.SPECTROGRAM) { + return; + } this.setState({ extrasMode: extrasMode }); } @@ -91,6 +100,9 @@ class App extends React.Component { } updateSpectrogram = (spectrogram: Spectrogram) => { + if (!this.props.enableSpectrograms) { + return; // unsupported + } this.setState({ currentSpectrogram: spectrogram, extrasMode: ExtrasMode.SPECTROGRAM, @@ -116,6 +128,7 @@ class App extends React.Component { switch (this.state.mode) { case Mode.SPEAK_MODE: component = - + , document.getElementById('root') ); diff --git a/vocodes/src/modes/speak/SpeakComponent.tsx b/vocodes/src/modes/speak/SpeakComponent.tsx index c3cf621b23..243f60ff16 100644 --- a/vocodes/src/modes/speak/SpeakComponent.tsx +++ b/vocodes/src/modes/speak/SpeakComponent.tsx @@ -1,13 +1,14 @@ import React from 'react'; import { Form } from './Form'; -import { StatusText } from './StatusText'; -import { getRandomInt } from '../../Utils'; -import { SpeakerDropdown } from './SpeakerDropdown'; import { Speaker } from '../../model/Speakers'; -import { ExtrasComponent, ExtrasMode } from './extras/ExtrasComponent'; +import { SpeakerDropdown } from './SpeakerDropdown'; +import { SpeakerInfo } from './extras/SpeakerInfo'; import { Spectrogram } from './extras/Spectrogram'; +import { SpectrogramComponent } from './extras/SpectrogramComponent'; import { SpectrogramMode } from '../../App'; +import { StatusText } from './StatusText'; import { Utterance } from '../../model/utterance'; +import { getRandomInt } from '../../Utils'; enum StatusState { NONE, @@ -16,7 +17,13 @@ enum StatusState { ERROR, } +enum ExtrasMode { + SPEAKER_INFO, + SPECTROGRAM, +} + interface Props { + enableSpectrograms: boolean, extrasMode: ExtrasMode, currentSpeaker: Speaker, currentSpectrogram?: Spectrogram, @@ -129,16 +136,37 @@ class SpeakComponent extends React.Component { } public render() { - let modeText; + let speakerPictureOrSpectrogram; switch (this.props.extrasMode) { case ExtrasMode.SPEAKER_INFO: - modeText = "Speaker Info"; + speakerPictureOrSpectrogram = break; case ExtrasMode.SPECTROGRAM: - modeText = "Spectrogram"; + speakerPictureOrSpectrogram = break; } + let switchButton = + if (this.props.enableSpectrograms) { + let modeText; + switch (this.props.extrasMode) { + case ExtrasMode.SPEAKER_INFO: + modeText = "Speaker Info"; + break; + case ExtrasMode.SPECTROGRAM: + modeText = "Spectrogram"; + break; + } + + switchButton = + } + return (
{ changeSpeakerCallback={this.props.changeSpeakerCallback} /> - + {switchButton}
- + {speakerPictureOrSpectrogram}
+
{ } } -export { SpeakComponent, StatusState }; +export { SpeakComponent, StatusState, ExtrasMode }; diff --git a/vocodes/src/modes/speak/extras/ExtrasComponent.tsx b/vocodes/src/modes/speak/extras/ExtrasComponent.tsx deleted file mode 100644 index 234c1d7e81..0000000000 --- a/vocodes/src/modes/speak/extras/ExtrasComponent.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react'; -import { Speaker } from '../../../model/Speakers'; -import { SpeakerInfo } from './SpeakerInfo'; -import { Spectrogram } from './Spectrogram'; -import { SpectrogramComponent } from './SpectrogramComponent'; -import { SpectrogramMode } from '../../../App'; - -enum ExtrasMode { - SPEAKER_INFO, - SPECTROGRAM, -} - -interface Props { - extrasMode: ExtrasMode, - currentSpeaker: Speaker, - currentSpectrogram?: Spectrogram, - spectrogramMode: SpectrogramMode, - changeExtrasModeCallback: (extrasMode: ExtrasMode) => void, - changeSpectrogramMode: (spectrogramMode: SpectrogramMode) => void, -} - -interface State { -} - -class ExtrasComponent extends React.Component { - - constructor(props: Props) { - super(props); - this.state = { - }; - } - - public render() { - let modeComponent; - switch (this.props.extrasMode) { - case ExtrasMode.SPEAKER_INFO: - modeComponent = - break; - case ExtrasMode.SPECTROGRAM: - modeComponent = - break; - } - return ( -
- {modeComponent} -
- ) - } -} - -export { ExtrasComponent, ExtrasMode };