是否有任何开源库可用于提供字母和声音并生成文本到语音系统.
从头开始我该怎么办?Python将是我的首选语言,因此我必须在哪里开始用我的语言开发自己的文本到语音.
我的活动onInit()包含对TextToSpeech.setEngineByPackageName()以下内容的调用:
tts = new TextToSpeech(this, this);
tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra");
Run Code Online (Sandbox Code Playgroud)
它适用于 Android 2.2.2 设备,但在 Android 2.3.4 设备上它产生 NullPointerException,具有以下堆栈跟踪:
E/TextToSpeech.java - setEngineByPackageName(3423): NullPointerException
W/System.err(3423): java.lang.NullPointerException
W/System.err(3423): at android.os.Parcel.readException(Parcel.java:1328)
W/System.err(3423): at android.os.Parcel.readException(Parcel.java:1276)
W/System.err(3423): at android.speech.tts.ITts$Stub$Proxy.setEngineByPackageName(ITts.java:654)
W/System.err(3423): at android.speech.tts.TextToSpeech.setEngineByPackageName(TextToSpeech.java:1356)
Run Code Online (Sandbox Code Playgroud)
因为我提供了一个硬编码的字符串参数,所以我知道该参数不是导致 NullPointerException 的原因。
我也知道setEngineByPackageName()已被弃用,但这只是从 API 14 开始,所以这不是原因。
知道是什么导致了这个 NullPointerException?
编辑:如果这不会导致无休止的轰炸,我就不会关心“为什么”:
I/TextToSpeech.java(3652): initTts() successfully bound to service
Run Code Online (Sandbox Code Playgroud)
其次是调用onInit()(由系统,而不是我的代码)。
我的希望是,如果我理解为什么会发生这种情况,我可以停止对onInit()s的轰击并从错误中优雅地恢复。
我TextToSpeech有时会使用一些长文本,我注意到,因为Android 4.1.2如果文本超过4000个字符,它就不会播放.
我没有收到任何错误,但文本将不会播放.到目前为止,我能够重现这一点Android 4.1.2(三星Galaxy Nexus,Nexus7).
这是一个bug 4.1.2还是正常的(虽然我没有找到任何关于这种行为的文档)?
另外我发现了一个帖子:如果收到的TTS太长则onUtteranceCompleted()会丢失,这表示文本超过4000个字符会出现不同的问题.
编辑:我试图将我的字符串拆分为4k长度的块,并将其发送到TTS使用QUEUE_ADD,我遇到了另一个错误:QUEUE_ADD无法工作,而是刷新现有队列,只有最后一个块被播放.
EDIT2:这是我的号召TTS
mTTS.speak(longText, TextToSpeech.QUEUE_FLUSH, null);
Run Code Online (Sandbox Code Playgroud) 我有以下用于文本到语音转换的 VBScript 代码:
Set objVoice = CreateObject("SAPI.SpVoice")
objVoice.Speak Inputbox("Enter Text")
Run Code Online (Sandbox Code Playgroud)
我想将演讲保存到音频文件中。我怎样才能做到这一点?
我正在尝试构建一个应用程序,当用户按下按钮时会对用户说话.
语音合成器代码如下
Windows.Media.SpeechSynthesis.SpeechSynthesizer x = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
var stream = await x.SynthesizeTextToStreamAsync(someString);
var mediaElement = new MediaElement();
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();
Run Code Online (Sandbox Code Playgroud)
虽然此代码在不同的应用程序中工作,但它不适用于此项目.我一直收到以下错误.
+ e {System.UnauthorizedAccessException: Access is denied. Access is denied. at Windows.Media.SpeechSynthesis.SpeechSynthesizer..ctor() at TalkingWalkingMaps.ManeuverDisplayer.<DisplayManeuver>d__0.MoveNext()} System.Exception {System.UnauthorizedAccessException}
Run Code Online (Sandbox Code Playgroud)
我在线阅读我必须使用regedit从我的注册表中删除HKEY_CURRENT_USER\Software\Microsoft\Speech\CurrentUserLexicon值,但这不起作用.
有人可以帮忙吗?
简单地说,它非常简单,包含最少的量(只有两行)
但我仍然没有听到任何声音.但谷歌TTS在我的笔记本电脑上完美运行.
当我运行下面的页面时,我只看到"一二"警报.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head>
<body>
<script>
var utterance = new SpeechSynthesisUtterance('Hello baby');
window.speechSynthesis.speak(utterance);
alert("one two");
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我使用Google Chrome版本36.如何在JavaScript中查看错误?非常感谢Stack Overflow!
在FreeTTS的Java程序中使用MBROLA语音...
我正在研究一个简单的Java 文本到语音程序.我决定使用FreeTTS,但声音并不是我想的,而且我还是想用一个女声.所以我开始环顾四周,并决定使用MBROLA来改变我的文本到语音转换程序的声音.
我读到"FreeTTS可以使用MBROLA语音",但我在各处搜索,找不到如何设置MBROLA的明确指南,以及需要哪些文件.MBROLA上有许多论坛与FreeTTS一起工作,但似乎没有人知道他们在做什么.
所以问题:
我想用Web Speech API大声说出一系列单词.
这些词是一,二,三,四,五.
在Chrome上说出单词时,下面的脚本会显示第一个单词,然后重复最后一个单词,直到迭代完成,语音输出为:
一,五,五,五,五.
在Firefox上,脚本说第一个单词然后停止,语音输出是:
一个.
我已经把东西记录到控制台,试图弄清楚发生了什么,这是两个浏览器的结果.
word: one
message: one
word: two
message: two
word: three
message: three
word: four
message: four
word: five
message: five
Run Code Online (Sandbox Code Playgroud)
控制台的输出是所需的语音输出,所以我不确定到底发生了什么.
var msg = new SpeechSynthesisUtterance();
var words = ['one', 'two', 'three', 'four', 'five'];
for (var i = 0; i < words.length; i++) {
msg.text = words[i];
console.log('word: ' + words[i]);
console.log('message: ' + msg.text);
window.speechSynthesis.speak(msg);
}Run Code Online (Sandbox Code Playgroud)
可能导致这种情况的原因是什么?我该怎么做才能纠正它?
下面是我的代码.我无法听到我的kitkat设备中的声音.播放出现但声音没有播放.我正在按照本教程
https://www.tutorialspoint.com/android/android_text_to_speech.htm
package com.example.insert;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.Locale;
import android.widget.Toast;
import android.util.Log;
import java.lang.Object;
public class SecondActivity extends AppCompatActivity {
TextToSpeech t1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String emailid;
emailid = "Hi,say your email id";
t1 = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = t1.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA …Run Code Online (Sandbox Code Playgroud) android speech-recognition text-to-speech voice-recognition google-text-to-speech
这段代码正在运行,但我只能在Microsoft Windows中预先安装的声音之间切换.这些声音是"Microsoft David Mobile"和"Microsoft Zira Mobile".
后来我安装了"Microsoft Kalpana Mobile"并将其设置为默认的Windows语音.但我仍然无法切换到"Microsoft Kalpana Mobile".代码是 -
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id) #changing index changes voices but ony 0 and 1 are working here
engine.say('Hello World')
engine.runAndWait()
Run Code Online (Sandbox Code Playgroud)
只有0和1作为声音[]内的索引.
我想要"微软Kalpana Mobile"发言.我在这个项目上工作了2个月.如果这不起作用,我所有的努力都将继续下去.请帮忙:(
提前致谢.
text-to-speech ×10
android ×3
javascript ×2
c# ×1
eclipse ×1
freetts ×1
html5 ×1
java ×1
python ×1
python-3.x ×1
pyttsx ×1
sapi ×1
vbscript ×1