-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
292 lines (251 loc) · 16.4 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Podcastify It!</title>
<meta name="description" content="Cut Screen Time and Start Listening! Podcastify It! Turn any content into quick Podcasts. Online text to speech WebApp. Choose a Voice.">
<meta property="og:type" content="wesbite">
<meta property="og:url" content="https://vivek-nexus.github.io/podcastify-it/">
<meta property="og:title" content="Podcastify It!">
<meta property="og:description" content="Cut Screen Time and Start Listening! Podcastify It! Online text to speech WebApp. Choose a Voice.">
<meta property="og:image" content="https://vivek-nexus.github.io/podcastify-it/images/podcastify.png" />
<meta name="google-site-verification" content="XmMcBIPLmWvddzuw6OfuDUHDFaCKMctQ7ql8LRtdjtI" />
<link href="https://fonts.googleapis.com/css2?family=Merienda:wght@400;700&family=Montserrat:ital,wght@0,400;0,700;1,400&family=Source+Sans+Pro:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<link rel="stylesheet" href="https://vivek-nexus.github.io/css/style.css">
<link rel="stylesheet" href="style.css">
<link rel="manifest" href="wespeak.webmanifest">
<link rel="icon" type="image/png" href="images/podcastify.png"/>
</head>
<body>
<section id="hero" class="container my-5">
<div class="row row-cols-1 row-cols-sm-2">
<div class="col text-center text-sm-right">
<img src="images/podcastify.svg" alt="podcastify" style="min-height: 200px; max-height: 250px;">
</div>
<div class="col col-sm-auto d-flex justify-content-between text-center text-sm-left mt-5 mt-sm-0" style="flex-direction: column;">
<h1 style="line-height: 3rem;">Cut Screen Time, <br/> Start Listening!</h1>
<h1 class="font-weight-bold">Podcastify It!</h1>
</div>
</div>
</section>
<section class="container">
<div class="row justify-content-center flex-wrap align-items-stretch">
<div class="col-3 mini-cards font-weight-bold">Proof-Read your <br />Articles</div>
<div class="col-3 mini-cards font-weight-bold">Listen to News</div>
<div class="col-3 mini-cards font-weight-bold">Any Device<br /> WebApp</div>
<div class="col-3 mini-cards">
<img src="images/icon-url.svg" alt="icon-url">
<div>Fetch from URL</div>
</div>
<div class="col-3 mini-cards">
<img src="images/icon-paste.svg" alt="icon-paste">
<div class="mt-2">Paste Content</div>
</div>
<div class="col-3 mini-cards">
<img src="images/icon-text.svg" alt="icon-text">
<div class="mt-2">Any Length Content</div>
</div>
</div>
<!-- <a href="#app" class="d-block text-center my-4">
<button>Take me there!</button>
</a> -->
</section>
<section class="container mt-5 pt-5" id="app">
<h1 class="font-weight-bold text-center" style="color: #2200FF;">Podcastify!</h1>
<p class="text-center">We use Text to Speech Engine of your device for speech synthesis.</p>
<!-- URL and modal -->
<div>
<div class="input-group">
<input type="url" id="input-url" class="form-control" placeholder="https://myarticle.com/sample-article" style="color: #2200FF;">
<div class="input-group-append">
<span class="input-group-text" style="background-color: #2200FF; border: #2200FF;"><button id="fetch-button" style="border-radius: 0px 5px 5px 0px;padding: 0px;">Fetch</button></span>
</div>
</div>
<!-- Button trigger modal -->
<div class="d-flex justify-content-end">
<button class="button-link-like" data-toggle="modal" data-target="#url-not-working">Not Working?</button>
</div>
<!-- Modal -->
<div class="modal fade" id="url-not-working" tabindex="-1" role="dialog" aria-labelledby="url-not-working-label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="url-not-working-label">Fetching Articles Help</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="font-weight-bold mb-3">If 'Fetch Article' is not working or returning unexpected results, please copy paste the desired content from source page, into the text box directly.</div>
<div>Common reasons for this behaviour:</div>
<ol>
<li>Shortened URLs or re-directing URLs.</li>
<li>Article content has bullet points or numbered lists.</li>
<li>Non standard formatting of source website.</li>
</ol>
</div>
</div>
</div>
</div>
<img class="mx-auto" id="fetch-animation" src="images/loading.svg" alt="loading" style="display: none;">
</div>
<div class="font-weight-bold text-center" style="font-size: 1.125rem;">OR</div>
<h2 class="text-center mt-3">Paste content directly into the text box below</h2>
<!-- Text Input -->
<div>
<textarea class="d-block mx-auto" id="input-text" cols="300" rows="5">This is a sample text!
You can use Podcastify It to proof-read your articles, listen to news or web pages instead of reading them, explore pronunciation, accents and even just to have fun!
Mobile devices(Android/iOS) contain better Text to Speech Engines, providing a more natural experience.</textarea>
<div class="d-flex justify-content-end">
<button id="reset-button" class="button-link-like">Clear Content</button>
</div>
</div>
<!-- Voice Choice and modal -->
<div>
<label class="d-block mx-auto text-center mb-1 mt-3" for="input-voice" style="font-size: 1.125rem; font-weight: bold;">Pick a Voice</label>
<select name="input-voice" class="d-block mx-auto" name="input-voice" id="input-voice" style="max-width: 100%;">
<option value="" data-voice-name="" data-voice-lang="">Choose</option>
</select>
<!-- Button trigger modal -->
<div class="mt-1 d-flex justify-content-center">
<button class="button-link-like" data-toggle="modal" data-target="#more-tts-settings">More Settings</button>
</div>
<!-- Modal -->
<div class="modal fade" id="more-tts-settings" tabindex="-1" role="dialog" aria-labelledby="more-tts-settings-label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="more-tts-settings-label">More Settings</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div>
<label for="input-rate">Rate</label>
<input type="range" min="0.5" max="2" value="1" step="0.1" id="input-rate">
</div>
<div>
<label for="input-pitch">Pitch</label>
<input type="range" min="0" max="2" value="1" step="0.1" id="input-pitch">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="player-container mt-5">
<div class="d-flex justify-content-center align-items-center text-center my">
<button id="prev-button"><img src="images/icon-previous.svg" alt="previous-button"></button>
<button id="speak-button"><img src="images/icon-play.svg" alt="play-button"></button>
<button id="pause-button"><img src="images/icon-pause.svg" alt="pause-button"></button>
<button id="resume-button"><img src="images/icon-play.svg" alt="resume-button"></button>
<button id="next-button"><img src="images/icon-next.svg" alt="next-button"></button>
</div>
<button class="d-block mx-auto my-2" id="stop-button" class="mb-4">Reset</button>
<p id="reading-text" class="mx-auto p-3 text-center"></p>
<div class="animation-wrapper justify-content-center mb-3 mb-sm-0" style="height: 30px;">
<div class="line1 speaking-animation"></div>
<div class="line2 speaking-animation"></div>
<div class="line3 speaking-animation"></div>
<div class="line4 speaking-animation"></div>
</div>
<div class="progress" style="height: 10px; background-color: #CBEAFF;">
<div class="progress-bar" id="progress-bar" style="width:0%; background-color: #2200FF;"></div>
</div>
</div>
<!-- Button trigger modal -->
<div class="mt-2 d-flex justify-content-center">
<button class="button-link-like" data-toggle="modal" data-target="#help-tts-settings">Need help on Text to Speech?</button>
</div>
<!-- Modal -->
<div class="modal fade" id="help-tts-settings" tabindex="-1" role="dialog" aria-labelledby="help-tts-settings-label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="help-tts-settings-label">Help on Voices and Text to Speech</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="font-weight-bold">Some sentences are cut off in the middle.</div>
<div>Long sentences may not be supported by some Cloud Based Text to Speech Engines. Please skip such sentences.</div>
<div class="font-weight-bold mt-3">My Voice Choice is not respected.</div>
<div>Some Text to Speech Engines(TTS) use the defeault voice set in device TTS settings for a language. Please install and configure voices in your device settings. Please see links below for indicative guides.</div>
<ul>
<li><a href="https://support.google.com/accessibility/android/answer/6006983?hl=en">Setting up Text to Speech on Android</a></li>
<li><a href="https://support.microsoft.com/en-us/office/how-to-download-text-to-speech-languages-for-windows-10-d5a6b612-b3ae-423f-afa5-4f6caf1ec5d3">Setting up Text to Speech on Windows</a></li>
<li><a href="https://support.apple.com/en-in/guide/ipad/ipad9a247097/ipados">Setting up Text to Speech on iPad / iPhone</a></li>
<li><a href="https://etc.usf.edu/techease/4all/vision/how-can-i-use-text-to-speech-in-mac-os-x/">Setting up Text to Speech on Mac</a></li>
</ul>
</div>
</div>
</div>
</div>
</section>
<section class="container mt-5 pt-5">
<h1 class="font-weight-bold text-center" style="color: #2200FF;">Love Podcastify?</h1>
<div class="text-center m-0 p-0 mini-cards" style="background: none;">
<!-- Button trigger modal -->
<div class="mt-2 d-flex justify-content-center">
<button class="button-link-like" data-toggle="modal" data-target="#help-a2hs">
<img style="display: inline-block;" src="images/icon-a2hs.svg" alt="">
<p class="font-weight-bold text-dark">Add Podcastify to Home Screen</p>
</button>
</div>
<!-- Modal -->
<div class="modal fade" id="help-a2hs" tabindex="-1" role="dialog" aria-labelledby="help-a2hs-label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="help-a2hs-label">Adding Podcastify to Home Screen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="font-weight-bold"><h2>Chrome</h2></div>
<div><img src="images/a2hs-chrome.jpeg" alt="chrome" style="max-width: 90%; border: 1px solid black; border-radius: 5px;"></div>
<div class="font-weight-bold mt-5"><h2>Mozilla Firefox</h2></div>
<div><img src="images/a2hs-firefox.jpeg" alt="Firefox" style="max-width: 90%; border: 1px solid black; border-radius: 5px;"></div>
<div class="font-weight-bold mt-5"><h2>Safari</h2><a href="https://blog.expo.io/enabling-ios-splash-screens-for-progressive-web-apps-34f06f096e5c">(Image Credits)</a></div>
<div><a href="https://miro.medium.com/max/1050/1*4yTqRXTD-GK2GOmqblGhxA.png"><img src="images/a2hs-ios.png" alt="Safari" style="max-width: 90%; border: 1px solid black; border-radius: 5px;"></a></div>
</div>
</div>
</div>
</div>
</div>
<div class="text-center m-0 p-0 mt-1 mini-cards" style="background: none;">
<a href="https://vivek-nexus.medium.com/podcast-ify-a-text-to-speech-case-study-45538ce904e3">
<img style="display: inline-block;" src="images/design-journey.svg.svg" alt="Like">
<p class="font-weight-bold text-dark">Read the Design Journey</p>
</a>
</div>
<div class="text-center m-0 p-0 mt-1 mini-cards" style="background: none;">
<a href="https://www.linkedin.com/posts/activity-6692270711857319936-KohB">
<img style="display: inline-block;" src="images/icon-like.svg" alt="Like">
<p class="font-weight-bold text-dark">Give me a Like!</p>
</a>
</div>
</section>
<footer>Designed and built by Vivek. Copyright 2020.<br />See the nerdy version of this page <a class="text-light" href="https://vivek-nexus.github.io/tts.html">here</a>.</footer>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
<script src="tts.js"></script>
<script src="nosleep.js"></script>
<script>
setTimeout(() => {
const newURL = "https://vivek-nexus.github.io/listen/"
const result = confirm("There's a new version of this tool. Would you like to use that?");
if (result) {
window.location.assign = newURL;
window.open(newURL, "_top")
}
}, 1000);
</script>
</body>
</html>