我正在寻找一种我能负担得起的高品质TTS发动机(假设不到1000美元).到目前为止,我已尝试使用默认语音进行flite和festival.然而,虽然结果肯定是可以理解的,但技术文本很难遵循.
Loquendo和Readspeaker的 商用TTS解决方案听起来更好.然而,这些公司似乎并不愿意将产品卖给凡人 - 我无法在任何一个主页上找到价格.
那么,什么是适合个人使用的优质TTS解决方案?
我正在尝试在nginx服务器上运行PHP命令text2wave.
问题是命令只是默默地退出而没有按预期工作.它也没有显示任何错误.
这是代码:
<?php
$result = `/usr/bin/text2wave --help`;
var_dump($result);
Run Code Online (Sandbox Code Playgroud)
如果我通过shell中的php命令运行脚本(作为普通用户),它按预期工作.但是,如果我通过nginx通过http请求运行它,var_dump将返回NULL(错误日志文件中也没有日志)
谢谢你的帮助!
我不是盲目的,我只是想让我的Windows机器读取缓冲区的内容.以下是基本要求:
我找到了几个可能的解决方案:
哪个选项是最好的计划?我不想在这里进行为期一周的项目.Windows中的编译节是一个痛苦的实验.对于我想要的东西,Emacspeak看起来有点矫枉过正.
我试图使用Python子进程执行以下等效操作:
>cat /var/log/dmesg | festival --tts &
[1] 30875
>kill -9 -30875
Run Code Online (Sandbox Code Playgroud)
请注意,我正在杀死进程组(由负号前面指示进程ID号),以便终止所有子进程Festival启动.
在Python中,我目前有以下代码,其中两个进程是通过管道创建和链接的.
process_cat = subprocess.Popen([
"cat",
"/var/log/dmesg"
], stdout = subprocess.PIPE)
process_Festival = subprocess.Popen([
"festival",
"--tts"
], stdin = process_cat.stdout, stdout = subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
我应该如何以与上面显示的Bash方式相同的方式杀死这些进程及其子进程?以下方法是不够的,因为它不会杀死子进程:
os.kill(process_cat.pid, signal.SIGKILL)
os.kill(process_Festival.pid, signal.SIGKILL)
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) 我在我的程序中使用了Festival TTS c ++ API.我已经从http://www.cstr.ed.ac.uk/downloads/festival/2.0.95/下载了所有文件, 并在我的UBUNTU 10.04上成功安装了festival和speech_tools
现在编译我的c ++程序时gcc给出错误:
g++ -L/usr/lib -L/home/peeyush/Desktop/festival/src/lib -L/home/peeyush/Desktop/speech_tools/lib -o"peeyush" ./src/peeyush.o -llibeststring.a -llibestbase.a -llibestools.a -llibFestival.a
/usr/bin/ld: cannot find -llibeststring.a
collect2: ld returned 1 exit status
make: *** [peeyush] Error 1
Run Code Online (Sandbox Code Playgroud)
所以请帮我解决这个错误.
-谢谢
Peeyush Chandel(印度)
如果我提供一个语音合成器(节日,在这种情况下,但它适用于所有),下面的文字:
"在美国的USPGA锦标赛上,BBC的记者去了MIA".它写着"在美国的uspga锦标赛中,BBC的记者去了mia".
换句话说,我猜这是因为它是一组辅音,它正确地读取"BBC",但却从其他人那里得到"单词".
我想,最简单的方法是通过一个php脚本来运行它,它寻找2个或更多的大写字母,并简单地将这个单词"爆炸"成空格,如USPG A.
我意识到这会导致像"我告诉他不要这样做"这样的事情的奇怪,但在新闻报道中往往会发生更少.
这就是事情; 我可以"爆炸"一个词好吧,问题是,我是那些尽管经过几个月的尝试,却无法理解REGEX某些方面的人之一.在这种情况下,它正在寻找:在大写字母中彼此相邻的两个或多个字母.
我之前给出所有前导码的原因是万一有更好的方法可以做到这一点我没有找到或通过 - 或许是一个词汇或其他东西的缩写词.