changkejun / hzspkr

Pure JavaScript TTS for Chinese. 纯JavaScript中文语音合成.
https://changkejun.github.io/hzspkr/
Apache License 2.0
30 stars 5 forks source link

是否可以增加真人音源? #1

Closed watersoft123 closed 2 years ago

watersoft123 commented 2 years ago

你好,我一直在找一款离线版的中文tts引擎,最好是js的,能够跨平台使用。我找到过mespeak/https://www.masswerk.at/mespeak/,功能确实强大,能够支持好多语言,但采用的是拼音音源,体积很小,只有几十k,结果听起来不太理想,是个奥地利人弄的espeak加强版,他说他不懂汉语的各种规则,所以难以满足我的要求。也找到过webspeech/https://www.eguidedog.net/cn/WebSpeech_cn.php,采用的是wav音源,这些音源作者也提供了下载地址。我问过作者说也支持体积更小的mp3音源,但是音源数据是放在服务器上,必须配置一个WebSpeech服务器。我的需求是能够离线的,我问过他似乎不愿意加上离线功能,因为我不太懂js,因此也无法修改他的代码。这两天我在Github发现了你的作品,觉得不错,对汉语的规则有比较深刻的理解,但听了之后声音不太清晰,不仔细听还真听不明白。我看了音源发现体积很小,可能跟mespeak类似采用的是纯拼音音源。我的意思是能不能改用拼音对应的真人发音音源,可以是mp3格式,也可以是wav格式,建议采用体积更小的mp3,这里有一部分https://github.com/cmguo/PinYinSound,不知道全不全。也可以把webspeech用的wav格式音源通过工具转为MP3格式,我转了体积小了很多,但听起来没啥区别。

watersoft123 commented 2 years ago

不知道为什么,上面的链接不能跳转,建议拷到地址栏进入查看

changkejun commented 2 years ago

你好。 这个·tts很不成熟。最开始的设想是能不能用语音里有特色周期来算出其他的周期,这样就可以节省存储的数据量。所以这个音源是从wav音源里再改造处理来的。但是当时犯了个错误,想当然的认为所有的拼音的可能发声最高频率和最低频率是一样的。结果采样的数据频率里该包含的少一些不该有的多了一些。用程序去挑频率就非常失真。 结果东西确实很小。但是听不清。后来看到掌阅的语音阅读(可能是科大的吧?),就没有动力再搞了。赫赫。

曾经想过借用mp3的原理来存采样周期。但是mp3的程序太复杂,没有看懂。另外好像周期少的话mp3编不了码。所以这个方向就不了了之了。

changkejun commented 2 years ago

https://cloud.google.com/text-to-speech google也有tts服务。偶尔用用可以免费。嵌到web上应该可以用。

watersoft123 commented 2 years ago

回复我太快了,刚进来想加点东西。我下载过科大的语音包,每个不到2M,但确实清晰,不知道怎么实现的。建议参照WebSpeech再优化下去,这个也是js的。毕竟开源离线的优秀tts很少,我主要是用到一款免费app中,也不打广告,有安卓和苹果版。本来是想调用成熟的产品,但考虑还要装他们的引擎,用户多是年纪大的人,操作起来反映有难度,上网也不熟练,所以就想搞一个离线的,不让使用的人费心太多。

watersoft123 commented 2 years ago

我是业余的,纯出于爱好,甚至不懂java和object-c,主要是采用一款跨平台第三方编程工具写移动程序,你可能听说过,就是B4X,主页是www.b4x.com,类似VB6,以前玩过一阵子VB6,因为没有太多时间学其它,所以就选择了这个简单的,其实功能蛮强的,比用官方写的包小很多,速度也不错,很适合业余的玩

watersoft123 commented 2 years ago

如果必须采用URL也行,B4X可以建立本地 http server。我程序中将要加入一个功能用的是ABCjs,是五线谱数字化的js库,播放声音用的音色库就是mp3格式的soundfont,我是通过本地 http server访问的,当然这个库也支持远程调用音色库。

changkejun commented 2 years ago

这行业都习惯夜里看东西,是吧。 我的tts是600kb,但是走歪路了。改回正道需要体力啊。中年事多,缺体力的年纪。 www.b4x.com 看起来不错,收藏一下,谢谢。 我主要是web开发,app没干过。软件行业细分很多。不会java很正常。我会java,但不会object-c。且我不喜欢java的spring,所以我是java程序员的异类。我们公司可以选择开发框架的时候,用https://github.com/efwGrp/efw4.X 公司自己的框架,我开发的。后台在java里跑js代码 前台基本不写js 框架提供ajax功能。程序简单开发效率高。 免费界的无名。

watersoft123 commented 2 years ago

web开发比较灵活,纯app开发受限太多。我本来是看看webspeech是不是可以采用本地 http server,但发现不是那么简单,似乎server端还要做一些cmd之类的操作(js里看到的)什么的,作者也不愿跟我多说,所以能力有限,无从下手。

watersoft123 commented 2 years ago

我看你似乎是在日企工作的,前些日子我看到一款模拟歌唱的东西,这玩意日本比较在行,主页是 www.sinsy.jp/,有js版的 https://github.com/oov/emsinsy/,但似乎不支持中文,主页上支持。不过有点过时,现在有很多商业性的比这个强很多

watersoft123 commented 2 years ago

是啊,中年确实体力不行了,我是搞土建工程的,也是经常加班,闲暇的时候玩玩代码。如果你那天有心思有时间了,建议把这个库继续搞下去,至少让声音听起来可以

changkejun commented 2 years ago

https://github.com/paulrosen/abcjs 这也是个好东西。收藏一下。再谢谢。 如果你的app里需要的声音是固定的话,直接录些mp3就好了。必须tts的场合我就知道是读小说。

收费的日语tts有非常好的。https://readspeaker.jp/ 公司项目里给客户用过一次。效果确实对得起价钱。年60万日元(RMB 3.5万?) 那个项目是有点在线教育意思的东西。

watersoft123 commented 2 years ago

我有MP3的文件,都是书籍的,太大了将近40G,这怎么搞。对了不是小说,我信基督教,是圣经和一些神学书籍,所以是免费的,也不打广告

watersoft123 commented 2 years ago

ABCJS这个东西的确不错,乐谱和歌词编码采用的是纯文本,很小几个K,但渲染出来却跟专业排版软件生成的无线谱一样好看

watersoft123 commented 2 years ago

如果有可能也帮忙看看那个webspeech.js是否可以用本地http server,因为我不专业,所以很容易把问题复杂化,也许对专业人士很简单,先谢谢了

changkejun commented 2 years ago

这到是。读书比歌曲时间长。文件肯定大。 1,调整mp3品质可以大大减少文件大小。 2,如果你的用户不是非常多的话,租个个人空间,几十个G一年花不了多少钱。比如亚马逊的S3服务。 你如果在国外这个很容易就能做到。国内不知到怎么样。

watersoft123 commented 2 years ago

我之所以要做离线,是因为从今年3月份政策有收紧,信仰类的审核有难度,容易封服务

changkejun commented 2 years ago

哦。原来如此,网络版不行。

changkejun commented 2 years ago

那么类似的百度云下载什么的都可能被查是吧?

changkejun commented 2 years ago

出个歪招,你的app安装后,把文件解压出来txt文件。然后让客户用掌阅什么的加入本机文件。然后读小说。

watersoft123 commented 2 years ago

我不想引入第三方地东西,老年人嫌麻烦。 是的,文件已经下发了,涉及信仰的各类网络和即时通讯都要审核。 我还有一款打简谱的,这位朋友也是在日本工作的,https://github.com/sinri/SinriScoreDrawer 功能没有ABC那么强大,但数字化赞美诗也是相当好了,我已经完成了1000多首的诗歌编码。

watersoft123 commented 2 years ago

总之我的目标是安装包尽量小,显示效果尽量好,阅读至少能够听清楚,不引入第三方地东西,也不引入商业性地插件等,这可能有点冲突hehe,但我一直超这个方向进行,但水平有限,目前只能做能实现的,比如赞美诗的编码等

watersoft123 commented 2 years ago

在阅读上目前几款比较好的 js 版的TTS都卡在了音源上,要么不清晰,要么不能离线,所以需要大牛出手帮助。希望能帮忙看看前面提到的webspeech能不能做到音源离线。谢了,明天还有事,我先下了

changkejun commented 2 years ago

已经很厉害了。虽然我不信神。但是很佩服你的工作。 我那个tts要想成熟起来时间要年单位。别期待它了。 https://wicg.github.io/speech-api/ webspeech是这个url吗?这个是不是chrome提供的服务吧?如果是这样的话,和local不local没有关系。你的网站是local的。使用online的tts。不冲突的吧?

changkejun commented 2 years ago

如果用app的时候手机断网就不行了。chrome的那个服务必须在线的。但是tts的资源可以是本地的。不过这不是和浏览器种类绑定了吗? 如果这样还是我的外招方便易用。比如是华为手机,默认自带和掌阅类似的小说阅览器,可以直接tts读。 如果小说阅览器类似于标配的话,就和浏览器级别接近了。就不用执着于安装的麻烦了。

watersoft123 commented 2 years ago

https://www.eguidedog.net/cn/index.php是这个。另外他写了一个古籍库的安卓应用,不开源,我拆包后发现用的是webspeeh.js,比菜单里面下载的版本新一点,大小也大了许多,你可以比较一下

watersoft123 commented 2 years ago

https://www.eguidedog.net/cn/WebSpeech_cn.php

https://www.eguidedog.net/books.php

changkejun commented 2 years ago

这个不是纯javascript。需要非js的后台。 你看到的webspeech.js,这个web speech只是一个前台调用的js. 后台安装说明在这里。https://www.eguidedog.net/doc/doc_setup_espeak_server.php 我咋看咋觉得安装不到手机上。这个应该需要一个linux服务器。 考虑一下这个如何? 文字转语音(TTS) 输出- Android 无障碍功能帮助。如果是app的话调用这个功能应该是容易的吧? https://blog.csdn.net/hfut_why/article/details/80587630

watersoft123 commented 2 years ago

哎,又失望了,看来这个东西真不是那么简单。我现在测试就是用的你说的方法,麻烦的是必须要装这个引擎,我试了讯飞和谷歌的引擎,可以下载多个语音使用,效果可能没有付费在线版的好,但听起来也不错。真不行我就把引擎打包在我的apk内,随app一起安装。现在有个问题是,用代码可以设置默认引擎,但实际不行,还必须在系统设置界面里面手动设置,至少我用B4X是不行,不知道java是否可以。另外讯飞和谷歌都有好几个中文语音可供选择,B4X无法罗列这些语音,所以还得进系统设置默认语音,我估计java也不行,因为B4X的库是用java封装的,还有可能是封装的功能不全。 另外我看到你的源码里有个分词整理工具,这个是否有js版的,我在传给引擎前,也想把某些词处理一下,毕竟有一些宗教词汇,硬读的话可能不好听,该连贯或停顿的地方得处理一下。

watersoft123 commented 2 years ago

我在github上发现了别人收集得中文语音语料,不知道对你制作音源是否有帮助,比较大,放在百度网盘上的(https://www.github.com/fighting41love/zhvoice)

changkejun commented 2 years ago

分词整理工具有js版。这个是node.js的。应该web上可以用。 https://github.com/leizongmin/node-segment

watersoft123 commented 2 years ago

分词整理工具有js版。这个是node.js的。应该web上可以用。 https://github.com/leizongmin/node-segment

好的,谢谢,我试试看

watersoft123 commented 2 years ago

你好。 这个·tts很不成熟。最开始的设想是能不能用语音里有特色周期来算出其他的周期,这样就可以节省存储的数据量。所以这个音源是从wav音源里再改造处理来的。但是当时犯了个错误,想当然的认为所有的拼音的可能发声最高频率和最低频率是一样的。结果采样的数据频率里该包含的少一些不该有的多了一些。用程序去挑频率就非常失真。 结果东西确实很小。但是听不清。后来看到掌阅的语音阅读(可能是科大的吧?),就没有动力再搞了。赫赫。

最近我在python这里发现了一款利用人工智能的TTS,效果非常好,不知道能不能用js改写一下。 (https://manaai.cn/aicodes_detail3.html?id=70) TensorFlow有js版的,声码器应该也有js的吧,希望你出手试一试。合成效果你听听(https://www.bilibili.com/video/BV1kK4y1f7qj/) 另外,(https://manaai.cn) 里面有好多AI的东西