diff --git a/.gitignore b/.gitignore
index b1b0fc42f..c444fd224 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,4 @@ yarn-error.log
templates/storyteller-stream-green
packages/fakeyou/.env
+packages/storyteller-stream/.env
diff --git a/packages/storyteller-stream/package.json b/packages/storyteller-stream/package.json
index 95fc2f167..92a005cfc 100644
--- a/packages/storyteller-stream/package.json
+++ b/packages/storyteller-stream/package.json
@@ -24,7 +24,9 @@
"react-router-dom": "^5.2.0",
"react-scripts": "5.0.0",
"typescript": "^4.5.5",
- "web-vitals": "^2.1.4"
+ "web-vitals": "^2.1.4",
+ "react-wavesurfer.js": "^0.0.5",
+ "wavesurfer.js": "^6.2.0"
},
"scripts": {
"start": "craco start",
diff --git a/packages/storyteller-stream/public/assets/preview/monokuma.wav b/packages/storyteller-stream/public/assets/preview/monokuma.wav
new file mode 100644
index 000000000..5ce286eda
Binary files /dev/null and b/packages/storyteller-stream/public/assets/preview/monokuma.wav differ
diff --git a/packages/storyteller-stream/public/assets/preview/son-goku.wav b/packages/storyteller-stream/public/assets/preview/son-goku.wav
new file mode 100644
index 000000000..4b1f55dd6
Binary files /dev/null and b/packages/storyteller-stream/public/assets/preview/son-goku.wav differ
diff --git a/packages/storyteller-stream/public/assets/preview/stan-lee.wav b/packages/storyteller-stream/public/assets/preview/stan-lee.wav
new file mode 100644
index 000000000..5537f691e
Binary files /dev/null and b/packages/storyteller-stream/public/assets/preview/stan-lee.wav differ
diff --git a/packages/storyteller-stream/public/assets/preview/tracer.wav b/packages/storyteller-stream/public/assets/preview/tracer.wav
new file mode 100644
index 000000000..898010cb2
Binary files /dev/null and b/packages/storyteller-stream/public/assets/preview/tracer.wav differ
diff --git a/packages/storyteller-stream/src/App.scss b/packages/storyteller-stream/src/App.scss
index ddf66743f..3ae67f859 100644
--- a/packages/storyteller-stream/src/App.scss
+++ b/packages/storyteller-stream/src/App.scss
@@ -88,6 +88,10 @@ p {
color: rgba(255, 255, 255, 0.8);
}
+.fw-semibold {
+ font-weight: 500;
+}
+
.pre-heading {
font-size: 18px;
color: #fc6b68;
@@ -291,7 +295,7 @@ span.word:after {
.btn-secondary:focus,
.btn-secondary:active {
background-color: #fff;
- color: #443a40;
+ color: #212529;
border: 2.5px solid;
border-color: #fff;
transition: 0.2s;
@@ -299,7 +303,7 @@ span.word:after {
.btn-secondary:hover {
background-color: #ccc;
- color: #443a40;
+ color: #212529;
border: 2.5px solid;
border-color: #ccc;
}
@@ -418,7 +422,7 @@ span.word:after {
opacity: 15%;
width: 115%;
min-height: 150px;
- // background-image: url("assets/hero-audio-wave.png");
+ background-image: url("../public/assets/hero-audio-wave.png");
background-repeat: repeat-x;
animation: animatedBackground 20s linear infinite;
mix-blend-mode: screen;
@@ -513,6 +517,13 @@ span.word:after {
background-size: cover;
}
+.voices-section {
+ width: 100%;
+ text-align: center;
+ margin-top: 50px;
+ margin-bottom: -60px;
+}
+
.insights-section {
max-width: 1000px;
}
@@ -759,6 +770,18 @@ span.word:after {
color: rgba(255, 255, 255, 0.4);
}
+.voice-preview-text {
+ font-size: 14px;
+}
+
+.btn-voice-preview {
+ padding: 0;
+ margin: 0;
+ height: 30px;
+ width: 30px;
+ min-width: 30px;
+}
+
@media (min-width: 992px) {
.panel-title {
position: absolute;
diff --git a/packages/storyteller-stream/src/pages/index/AudioSampleButton.tsx b/packages/storyteller-stream/src/pages/index/AudioSampleButton.tsx
new file mode 100644
index 000000000..dc4b574c8
--- /dev/null
+++ b/packages/storyteller-stream/src/pages/index/AudioSampleButton.tsx
@@ -0,0 +1,22 @@
+import React, { useState, useCallback, useEffect } from "react";
+
+interface Props {
+ filename: string;
+ title: string;
+}
+
+function AudioSampleButton(props: Props) {
+ const [isPlaying, setIsPlaying] = useState(false);
+ const [position, setPosition] = useState(0);
+
+ const handleTogglePlay = useCallback(() => {
+ setIsPlaying(false);
+ });
+
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/packages/storyteller-stream/src/pages/index/IndexPage.tsx b/packages/storyteller-stream/src/pages/index/IndexPage.tsx
index 9f2fec8cc..b02f776cc 100644
--- a/packages/storyteller-stream/src/pages/index/IndexPage.tsx
+++ b/packages/storyteller-stream/src/pages/index/IndexPage.tsx
@@ -1,7 +1,15 @@
-import React from "react";
+import React, { useState } from "react";
import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper";
-import { LoggedInIndex } from "./subpages/LoggedInIndex";
-import { LoggedOutIndex } from "./subpages/LoggedOutIndex";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import {
+ faArrowRight,
+ faLongArrowAltRight,
+ faMicrophone,
+ faPlay,
+ faVolumeUp,
+} from "@fortawesome/free-solid-svg-icons";
+import { faDiscord } from "@fortawesome/free-brands-svg-icons";
+import VoicePreviewPlayer from "./VoicePreviewPlayer";
interface Props {
sessionWrapper: SessionWrapper;
@@ -23,15 +31,17 @@ function IndexPage(props: Props) {
@@ -138,6 +148,36 @@ function IndexPage(props: Props) {
+
+
+
+

+
+ Our TTS Voices
+
+

+
+
+ Voice Previews
+
+
+
+
+
@@ -336,7 +376,12 @@ function IndexPage(props: Props) {
Get started with Storyteller Stream!
-
+
+
+
+
diff --git a/packages/storyteller-stream/src/pages/index/VoicePreviewPlayer.tsx b/packages/storyteller-stream/src/pages/index/VoicePreviewPlayer.tsx
new file mode 100644
index 000000000..3f4247015
--- /dev/null
+++ b/packages/storyteller-stream/src/pages/index/VoicePreviewPlayer.tsx
@@ -0,0 +1,84 @@
+import React from "react";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { faMicrophone, faPlay } from "@fortawesome/free-solid-svg-icons";
+import Wavesurfer from "react-wavesurfer.js";
+import AudioSampleButton from "./AudioSampleButton";
+
+export default class MyComponent extends React.Component {
+ constructor(props: any) {
+ super(props);
+
+ this.state = {
+ playing: false,
+ pos: 0,
+ };
+ this.handleTogglePlay = this.handleTogglePlay.bind(this);
+ this.handlePosChange = this.handlePosChange.bind(this);
+ }
+ handleTogglePlay() {
+ this.setState({
+ playing: !this.state.playing,
+ });
+ }
+ handlePosChange(e: any) {
+ this.setState({
+ pos: e.originalArgs[0],
+ });
+ }
+
+ render() {
+ let wavesurferConfigs = [
+ {
+ filename: "/assets/preview/tracer.wav",
+ title: "Tracer (Overwatch)",
+ },
+ {
+ filename: "/assets/preview/son-goku.wav",
+ title: "Son Goku (Sean Schemmel)",
+ },
+ {
+ filename: "/assets/preview/stan-lee.wav",
+ title: "Stan Lee",
+ },
+ ];
+
+ let wavesurfers = wavesurferConfigs.map((config) => {
+ let ws = (
+
+
+
+
+
+
+ {config.title}
+
+
+
+
+
+
+
+ );
+ return ws;
+ });
+ return {wavesurfers}
;
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 97fdc6a14..3c1192cab 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -11746,6 +11746,16 @@ react-scripts@5.0.0:
optionalDependencies:
fsevents "^2.3.2"
+react-wavesurfer.js@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/react-wavesurfer.js/-/react-wavesurfer.js-0.0.5.tgz#e2f4e1195f9b01c084ced1aa3e4ddda89de394ab"
+ integrity sha512-KLjNTKS25xfsTWrJd+knXF5wFH8CRu7repXSeDSjh4zhj27QbNL5jtcK8pNl82/kcoTeB0fZvtCcxPreEE8dQw==
+
+react-wavesurfer@^0.8.6:
+ version "0.8.6"
+ resolved "https://registry.yarnpkg.com/react-wavesurfer/-/react-wavesurfer-0.8.6.tgz#da05f3f501e566a63853f9babec45a5251111538"
+ integrity sha512-uHJxtFtb/NqM9DnQNGJNsukmutJ2EOUvLGFkg3GXUY779xYhU+hg1juwstBfky4xtGyZohdUCyQOJfRzzUwBpA==
+
react@^16.13.1:
version "16.14.0"
resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
@@ -14019,6 +14029,11 @@ wavesurfer.js@^5.2.0:
resolved "https://registry.yarnpkg.com/wavesurfer.js/-/wavesurfer.js-5.2.0.tgz#efae107b5b561e9bfe3fffc50e6158136a17643e"
integrity sha512-SkPlTXfvKy+ZnEA7f7g7jn6iQg5/8mAvWpVV5vRbIS/FF9TB2ak9J7VayQfzfshOLW/CqccTiN6DDR/fZA902g==
+wavesurfer.js@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wavesurfer.js/-/wavesurfer.js-6.2.0.tgz#47b2c2006d8780749fd88ef372a1ec84f886ad5a"
+ integrity sha512-yuOteX+RKgJl4p5V+YNflm79QRNFWpNo0UHtKaGf1G05qMNChfbcJU0MZYL7+OJTHgYszYqN3dgUXjugYd/Iew==
+
wbuf@^1.1.0, wbuf@^1.7.3:
version "1.7.3"
resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"