实在是被逼得没办法了。

事情的起因是这样的。最近要录制一组视频,视频需要配音,自己配的话(去年视频月活动时是自己配的音),操作起来太过麻烦。这一次为了提供视频制作效率,决定用机器合成。

其实2010年舍得制作的《SuperMemo UX课程制作实例》视频用的就是机器合成的,当时选择的是科大讯飞InterPhonic 5.0,因为这是业界中文TTS技术领域中最牛X的,比什么NeoSpecch强多了。这一次起初选择的仍是讯飞的,但感觉发音还是欠自然一些——没办法,舍得的要求太高了。于是放狗搜索,结果发现讯飞出了个语音云,InterPhonic也从5.0升级到6.0了),从它的在线演示那里一看(在线演示地址:

http://open.voicecloud.cn/index.php/default/online_demo),我擦,同样一句话,6.0比5.0自然了不少,虽然仍有机器感,但舍得相信,再牛也就是这样了!而且,居然还有东北、湖南、四川等地的方言……咋没有咱浙江的捏?遐想一下,视频中的配音操着一口浓重的浙江方言,逼得各路童鞋不得不埋头去看字幕,那该是一件多么令人神往的事情啊!

就是它了。舍得立即注册了语音云的账号,下载好开发用的SDK……下完之后一看文档就傻眼了,我只会Python,最多加上个Qt,TNND的SDK居然是C++?虽然之前多少有些心理准备,但短暂的茫然和失落总是难免的。

语音合成

科大讯飞的语音合成在线演示

没办法,有困难要上,没有困难制造困难也要上啊。期间想了很多办法,找了很多资料(中间略去5000余字不表)……最后悲哀地发现,看起来,只剩下埋头苦学Visual C++开发技术一条路了。

手册

科大讯飞的开发手册,这语言非常陌生,舍得直接就看醉了

微软的Visual Studio虽然也算不上陌生,大概在2009年曾经用它编译过一次SuperMemo的插件——波兰一个技术牛人开发的,我只是硬着头皮改改试试,没想到成了。可那是C#,这回是C++,俩码事好不好?

好在天无绝人之路,讯飞的SDK(开发工具包)中有n个实例,其中有一个正好是舍得用得着的——将文本转换为语音。

装好Visual Studio 2012之后,打开那个实例,生成一个程序,唔,还算顺利,尽管生成的语音是PCM格式,不是舍得想要的wav,还在可忍受范围之内。

但是——这个时候往往会有个但是,问题来了,这个实例里,用来转换的文本是内嵌在程序中的……我去,难道我每转换一句话,就得重新编译一次程序?虽然勉强能用,但不能这么坑爹啊?

有没有办法加上一个最最最简单的功能,来个文本框,好让我输入文本,然后一点按钮,就把语音转出来捏?

继续想,继续想(中间再略去3000余字),终于想起舍得多年前的独门绝学——修改大法。大意是,找一个差不多的程序,把它改一改,再和这个实例拼在一起……哼哼,我看行。

马上放狗上网搜一堆实例下来,有书,有源代码,不到2个小时的时间里从网上拖下来3个多G的内容(那个块头最大的《VC++范例大全》,2.69G,最后没用上),凭感觉找了一个叫FileSpliter的实例,开始祭出修改大法。

刚动手改时还找不着北,晕了一阵之后,头脑里开始有了思路。舍得先改出如何从文本框中获取文字,实例中没有讲到的语法,就直接上网搜索。这个改起来是最快的。

然后把TTS中的代码往FileSpliter上加……经过几次尝试之后,成果开始慢慢显现。

C

修改中的部分代码:舍得连参数、控件名称都没改

最后做出下面这个叫“Dubber”的程序:

dubber

操作起来很简单,在文本框里粘贴上中文台词,然后点击开始合成,就会自动从科大讯飞的语音云中提取TTS语音数据,生成音频文件。

接下来,舍得还需要对这个程序进行改动,比如说,不再粘贴台词,而是先打开一个文本文件,以每一行为单位,逐句输出音频,这样才是高效率嘛!

或许还有更高的,讯飞除了语音合成,还有语音识别,咱可以对着麦克吼出台词,然后自动生成音频文件,女声的哦……

 

最后,来对比一下效果,这是用InterPhonic5.0合成的:

http://pan.baidu.com/s/1hqHzPyc

这是用Dubber合成的:

http://pan.baidu.com/s/1c0Eki0C

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客