我是通过使用Delphi在2000/NT/XP中创建OLE对象来实现的,如下所示:
Voice := CreateOLEObject('SAPI.SpVoice');
Voice.speak(...)
Run Code Online (Sandbox Code Playgroud)
但是这在Vista中不起作用,我怎么能让我的程序只是在Vista中说一些文字?
我正在使用Python和谷歌翻译.当我在翻译时点击Listen时,会生成一个声音文件并传递一个URL,如下所示:http://translate.google.com/translate_tts?tl=en&q=text.
我想使用Python在本地生成URL,然后将它们发送到Web并从Google Translate接收这些声音文件.我尝试了很多URLlib2和URLparse,但我不清楚我需要做些什么来使这项工作.
通过一些优秀的答案,我知道我可以使用以下带有属性的URL从文本输入中获取MP3文件:
http://www.translate.google.com/translate_tts?tl=zh-TW&q =我要吃饼干
但MP3上的声音是女性(我正在使用中文).
我可以通过提供其他属性来获得不同性别的语音输出:
http://www.translate.google.com/translate_tts?tl=zh-TW&q =我要吃饼干&性别=男
有谁知道?非常感谢!
我正在尝试使用Java从Google Translate下载文本到语音.它适用于英语,但对于日语则不成功.以下是我的代码:
try{
String word="?????";
word=java.net.URLEncoder.encode(word, "UTF-8");
URL url = new URL("http://translate.google.com/translate_tts?tl=ja&q="+word);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.addRequestProperty("User-Agent", "Mozilla/4.76");
InputStream audioSrc = urlConn.getInputStream();
DataInputStream read = new DataInputStream(audioSrc);
OutputStream outstream = new FileOutputStream(new File("mysound.mp3"));
byte[] buffer = new byte[1024];
int len;
while ((len = read.read(buffer)) > 0) {
outstream.write(buffer, 0, len);
}
outstream.close();
}catch(IOException e){
System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
你有什么想法或建议吗?
我已经尝试了几天通过SmartBand Talk(SWR30)发送Google文本到语音的音频.我在AndroidManifest.xml上拥有正确的权限
PERMISSION_CONTROL_EXTENSION,BLUETOOTH_ADMIN,BLUETOOTH,MODIFY_AUDIO_SETTINGS,BROADCAST_STICKY
我正在使用此代码获取AudioManager:
mAudioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
Run Code Online (Sandbox Code Playgroud)
并使用AudioManager通过SmartBand Talk讲话,如下所示:
mAudioManager.setSpeakerphoneOn(false);
mAudioManager.startBluetoothSco();
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
mAudioManager.setBluetoothScoOn(true);
speakMethod();
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于某些设备,这意味着我可以通过SmartBand Talk真正听到消息.但对于其他一些设备(如三星Galaxy S5 4.4.2,LG Nexus 5 Lollipop和索尼Z3 4.4.4),这个解决方案不起作用,因为很少有音频通过SmartBand Talk,几乎95%的时间都在手机,而不是配对的蓝牙设备.
我想知道设备扩展是否能够正常使用此方案,其中音频将被发送到蓝牙设备,正确配对电话.
我想知道是否有可能有稳定的东西,在每部手机上工作,或者如果不可能的话.
我试图用RegEx来阅读圣经评论中的一些文本,其中一些文章在括号内有很多引文和参考文献(例如,其中一条评论背后几乎所有他用括号内的圣经段落说的,这在神学上是好的,但对于阅读和享受一些早晨散步的目的不是).因此,当我正在听许多文本时,我想忽略它们(括号内的任何内容)(如果需要,我会在以后跟随它们).
这是我现在正在制作的文字示例:
圣经清楚地教导说,上帝爱整个世界(参见:约翰福音3:16和其他圣经书1:3-7,9),而不仅仅是以色列.
我想在播放应用时只听到以下短语:
圣经清楚地教导说,上帝爱整个世界,而不仅仅是以色列.
我需要进入的"模式"是什么?(所有这些奇怪的字符对程序员来说意味着什么,但对我来说没有任何意义).我正在使用名为@Voice Aloud的Android应用.
我最近实现了一个基本的Web应用程序,该应用程序依赖于Google的TTS URL生成清晰的MP3文件,以便在前端播放。
从那以后,它就受到了额外的安全检查,这意味着我不得不更新代码库以使用替代方法。
一种此类替代方法是javascript的语音合成API,即SpeechSynthesisUtterance()和window.speechSynthesis.speak('...')。这在我的台式机和笔记本电脑上确实能很好地工作,但是一旦在iOS设备上使用它,音频的速度就会大大提高。
谁能建议我可以解决这个问题?
参见下面的示例代码:
var msg = new SpeechSynthesisUtterance();
msg.text = item.title;
msg.voice = "Google UK English Male";
msg.rate = 0.7;
msg.onend = function(){
console.log('message has ended');
$('.word-img').removeClass('img-isplaying');
};
msg.onerror = function(){
console.log('ERROR WITH SPEECH API');
$('.word-img').removeClass('img-isplaying');
};
window.speechSynthesis.speak(msg);
Run Code Online (Sandbox Code Playgroud) voice_kal_diphone并且voice_ral_diphone在唱歌模式下正常工作(有声音输出,并且音高对于指定的音符是正确的).
voice_cmu_us_ahw_cg 和其他CMU声音不能正常工作 - 有声音输出,但音高不会根据指定的音符改变.
是否可以使用更高质量的CMU声音获得正确的输出?
工作(音高影响)输出的命令行是:
text2wave -mode singing -eval "(voice_kal_diphone)" -o song.wav song.xml
Run Code Online (Sandbox Code Playgroud)
非工作(音高不受影响)输出的命令行是:
text2wave -mode singing -eval "(voice_cmu_us_ahw_cg)" -o song.wav song.xml
Run Code Online (Sandbox Code Playgroud)
这是song.xml:
<?xml version="1.0"?>
<!DOCTYPE SINGING PUBLIC "-//SINGING//DTD SINGING mark up//EN" "Singing.v0_1.dtd" []>
<SINGING BPM="60">
<PITCH NOTE="A4,C4,C4"><DURATION BEATS="0.3,0.3,0.3">nationwide</DURATION></PITCH>
<PITCH NOTE="C4"><DURATION BEATS="0.3">is</DURATION></PITCH>
<PITCH NOTE="D4"><DURATION BEATS="0.3">on</DURATION></PITCH>
<PITCH NOTE="F4"><DURATION BEATS="0.3">your</DURATION></PITCH>
<PITCH NOTE="F4"><DURATION BEATS="0.3">side</DURATION></PITCH>
</SINGING>
Run Code Online (Sandbox Code Playgroud)
您可能还需要此补丁singing-mode.scm:
@@ -339,7 +339,9 @@
(defvar singing-max-short-vowel-length 0.11)
(define (singing_do_initial utt token)
- (if (equal? (item.name token) "")
+ …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个用不同语言读取文本的应用程序.令人惊讶的是,当我使用isLanguageAvailable(Locale loc)方法时,对于尚未下载的Google TTS列表中的语言,它返回true.当我调用speak()方法时,它们甚至被播放.我的结论是,这是因为它们是在线声音.
文档显示您可以通过Voice对象使用方法getFeatures()来了解语音是否在线.但是,Voice类是针对API> = 21实现的.对于API <21,在TextToSpeech类上还有一个getFeatures(Locale loc)方法,它应该返回一个具有不同特征描述的字符串数组.我在不同的引擎和语言环境中尝试了最后一种方法,我通常得到一个空数组.可能这是TTS开发人员可以填写或不填写的额外信息......
那么,我怎么知道tts-locale是否是API <21的在线版本?
android voice text-to-speech google-text-to-speech android-5.0-lollipop
我正在开发一个应用程序,要求我在Web浏览器中使用文本到语音.我正在使用HTML5语音合成.在谷歌浏览器上,代码运行正常,所有可用的声音都使用| getVoices()|列出,但在Firefox中根本没有列出语音.我在Firefox 56.0(Ubuntu)上测试我的代码.
在通过互联网搜索时,我确实遇到了一个StackOverflow 答案,该答案表明应该在| onVoiceChanged |之后调用getVoices()函数.事件
window.speechSynthesis.onvoiceschanged = function() {
window.speechSynthesis.getVoices();
...
};
Run Code Online (Sandbox Code Playgroud)
我正在以上述方式调用该呼叫,它在Chrome中可以正常工作,但在Firefox上则不行.
另一个StackOverflow回答建议我启用| media.webspeech.synth.enabled | 在about:配置Firefox,但在我的Firefox中首选| media.webspeech.synth.enabled | 已经设置为true.
我查看了MDN文档https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis/getVoices,此页面上的示例在Firefox中没有运行,但在Chrome中运行良好.我发现CanIUse.com列出了Firefox 55以后支持的SpeechSynthesis,但它对我不起作用.
还演示由Mozilla开发者网络来演示语音合成失败对我的Firefox浏览器,但在谷歌浏览器运行正常.我在网上广泛搜索了一个解决方案,但找不到一个.有人可以在这里指出我正确的方向.