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}
+