- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于部分面向无法阅读的人的问卷,我需要一个文本到语音应用程序。出于可用性原因,应在突出显示(“标记”)时阅读文本。在研究如何执行此操作的不同方法时,我发现了以下工具,它应该可以做到这一点。由于某些原因,它不会工作。我想在问卷软件 SoSci 上使用它,所以这可能是个问题(有人在那里有任何经验吗?)。
我将不胜感激任何提示,我所缺少的,但也非常欢迎其他解决问题的方法!
祝福
<script>
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
// for Internet Explorer 8 and below. For Blogger, you should use && instead of &&.
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
$(document).ready(function (){ // when the document has completed loading
$(document).mouseup(function (e){ // attach the mouseup event for all div and pre tags
setTimeout(function() { // When clicking on a highlighted area, the value stays highlighted until after the mouseup event, and would therefore stil be captured by getSelection. This micro-timeout solves the issue.
responsiveVoice.cancel(); // stop anything currently being spoken
responsiveVoice.speak(getSelectionText()); //speak the text as returned by getSelectionText
}, 1);
});
});
</script>
最佳答案
好的,所以我提到你学习如何使用 SpeechSynthesis
,你说你觉得自己作为程序员的能力还不够强,无法实现一个利用这个特性的应用程序。在您可以在 MDN 上找到的文档和我将要向您展示的这个演示之间,您应该能够毫不费力地实现这样的功能。
我建议您尽量避免使用功能非常简单的库,也就是充当原生技术的包装器,它会阻止您学习底层技术。我的意思是无论如何,将它们作为起点,但我建议您稍后学习 native 方法,这将帮助您作为开发人员取得进步,至少我是这么认为的。
在这个演示中,我几乎复制并粘贴了可以在 MDN 上找到的代码。
我的代码和可以在 MDN 上找到的代码的唯一区别是我使用的是 "use strict;"
和一个立即调用的调用函数。在这种情况下,我建议您阅读更多关于 strict mode 的内容和 IIFE .
// A simple IIFE function.
(function() {
"use strict"; // For the sake of practice.
if (typeof speechSynthesis === 'undefined')
return;
// Some config stuffs...
var voiceSelect = document.getElementById("voiceSelect");
var myPhrase = 'Hello World!';
var voices = [];
// This is essentially similar to jQuery's $.ready.
var ready = function(callback) {
var d = document, s = d.readyState;
// DOMContentLoaded was fired
if (s == "complete" || s == "loaded" || s == "interactive") {
callback();
} else {
if (d.addEventListener) {
d.addEventListener("DOMContentLoaded", callback, false);
} else {
d.attachEvent("onDOMContentLoaded", callback);
}
}
};
// This is a function to display all possible voice options.
function populateVoiceList() {
voices = speechSynthesis.getVoices();
for (var i = 0; i < voices.length; i++) {
var option = document.createElement('option');
option.textContent = voices[i].name + ' (' + voices[i].lang + ')';
option.textContent += voices[i].default ? ' -- DEFAULT' : '';
option.setAttribute('data-lang', voices[i].lang);
option.setAttribute('data-name', voices[i].name);
document.getElementById("voiceSelect").appendChild(option);
}
}
// This is the handler for when the select tag is changed.
function handler() {
var utterThis = new SpeechSynthesisUtterance(myPhrase);
var selectedOption = voiceSelect.selectedOptions[0].getAttribute('data-name');
for (var i = 0; i < voices.length; i++) {
if (voices[i].name === selectedOption) {
utterThis.voice = voices[i];
}
}
speechSynthesis.speak(utterThis);
};
// This is your code to get the selected text.
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
// for Internet Explorer 8 and below. For Blogger, you should use && instead of &&.
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
// This is the on mouse up event, no need for jQuery to do this.
document.onmouseup = function(e) {
setTimeout(function() {
speechSynthesis.cancel();
myPhrase = getSelectionText();
handler();
}, 1);
};
// Some place for the application to start.
function start() {
populateVoiceList();
if (speechSynthesis.onvoiceschanged !== undefined)
speechSynthesis.onvoiceschanged = populateVoiceList;
voiceSelect.onchange = handler;
setTimeout(handler, 75);
}
// Run the start function.
ready(start);
})();
<!-- Learn about this code on MDN: https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis/getVoices -->
<hr/>
<select id="voiceSelect"></select>
<hr/>
<p>Testing... Testing... One Two Three... Testing</p>
<p>I like big butts and I can not lie, you other brothers can't deny!</p>
希望本文对您有所帮助,祝一切顺利! :)
关于javascript - 突出显示文本的文本到语音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54535468/
我有一个说一些短语的音板应用程序,但是现在我希望能够从男声/女声中改变出来,问题是我不知道该怎么做。任何帮助,将不胜感激。 我正在使用AVFoundation/AVAudioPlayer播放声音。 谢
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
因为我想在后台录制音频,所以我使用了服务..但是我无法在服务中录制音频。 我在 Activity 中尝试了相同的代码,它对我有用。但是如何在输入语音/语音时在后台进行录音,这意味着如果有语音输入就应该
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我有一个音频流,我会从中提取单词(语音)。因此,例如使用 audio.wav 我会得到 001.wav、002.wav、003.wav 等,其中每个 XXX.wav 是一个词。 我正在寻找一个库或程序
不幸的是,我只能说四种语言,那么如果我知道文本的语言,我如何知道我必须使用哪种 OS X 语音?我在Apple的文档中找不到任何有关它的信息。至少有一张有语音/语言的 table 吗? 最佳答案 您可
有没有办法从命令行使用 MS Speech 实用程序?我可以在 Mac 上完成,但在 Windows XP 上找不到任何引用。 最佳答案 我在这个主题上的 2 美分,命令行单行: 在 Win 上使用
所以我开始了我的不和谐机器人的音乐部分。现在,正如我在上一个问题中所做的那样,这里只是音乐命令的片段:Pastebin #1 在显示 if (msg.member.voiceConnection ==
有谁知道有什么好的 API 或库可以听(语音)文本。我尝试听三种语言的(语音)文本,我想知道最好从哪里开始以及如何开始。我可以对所有三种语言使用通用语音吗?我将使用 eclipse 和 java 作为
首先,我只是一个爱好者,如果这是一个愚蠢的问题或者我太天真了,我很抱歉。 (这也意味着我买不起昂贵的库) 情况是这样的:我正在使用 C#.NET 构建一个简单的语音聊天应用程序(类似于 Ventril
我正在制作一个模块,可以生成和传输语音 IP 数据包。我知道我必须为服务类型字段设置一些值。这个值是多少? 最佳答案 该值应该是x。 关于c - 语音 ip 的服务类型字段集,我们在Stack Ove
有人能帮帮我吗?我使用 SAPI 语音文本,但我不能设置女声,这是代码,它用男声说话,但我想改变它,我想要女声 #include "stdafx.h" using namespace std; voi
我正在寻找一种方法来为一个项目在 Java 中识别预注册的语音命令,但我还没有想出一个好的方法,我研究了快速傅里叶 和处理 wave 文件 的不同方法,但我无法决定我应该如何实现它。 这个想法很简单,
我在 android 的语音识别 API 工作。 我是 Speech Recognition Api 的新手,我的要求是西类牙语语音,并从 Android 的语音识别 API 中获得西类牙语的最佳匹配
我在 Java 中使用一组名为(MaryTTS[实际上还有更多])的库来将 text to speech 转换为该目的,使用以下代码: public class TextToSpeech {
我正在尝试使用webRTC和php作为服务器端来实现单向语音传输。 查看samples ,我无法理解webRTC机制。 在我看来,流程应该是这样的: 调用者和接收者在服务器上注册 接收者监听来电 调用
我的名字是 Joey,我想知道是否有一种在 C++ 中使用语音的方法,如果有人可以给我指出引用资料和书籍,非常感谢...... 最佳答案 你应该看看 Windows Text-To-Speech AP
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我正在使用 Java 语音识别 API - Jarvis,位于 https://github.com/lkuza2/java-speech-api 但是,当我运行应用程序时,出现错误:服务器返回 HT
我们正在做一个需要讲阿拉伯语的项目,我们找到了一个开源工具,Mbrola project , 可以做到这一点。 但是,我还需要一些方法将阿拉伯语文本转换为 SAMPA 语音。那么有人可以帮助我将阿拉伯
我是一名优秀的程序员,十分优秀!