语音播报音频文件的生成,IOS12可能需要它

首先,我不是做IOS的,但是为什么我知道IOS需要它,还是IOS12以后才需要,其实很简单,因为我是做Android,同事是做IOS的,因为语音播报中IOS12后的推送出现了限制,目前只能使用此方法,做IOS自然懂,我不懂,就不多说了,其实没任何技术含量,只是闲着无事研究了一下如何合并音频文件,如何压缩音频文件,得到效果最好而且文件小,这样的事情。

其实,本文的本质其实就是生成批处理文件,然后去执行它而已,我虽然没有MAC,但是其执行的命令行应该不会差太多,然后我自己写的代码其实没有几行,而且只是为了实现需求,无事性能,因为考虑到生成个批处理文件,慢个10、20倍也没多大影响,加之代码质量差,就没有任何代码了,毕竟现在还只是个菜鸡,给自己和面子。

一、音频文件的获取和形式
首先是获取,如果你们公司还算对语音播报比较重视,那么公司应该会安排好,然后最终把音频文件给你的,但是,我想会自己录制的公司可能不多,我所在的公司是一家乙方公司,给甲方维护APP,我给甲方提交了需要音频文件的需求,目前还没有回复我,这种情况先用已经录制好的音频好了,或者用百度语音、讯飞什么的合成一些素材,这里我使用的是支付宝的语音播报文件。
然后是语音的形式,其实没什么可说的,它就是每个字每个字的音频文件,如“135.6元”,那么音频文件就是“一”、“百”、“三”、"十"、“五”、“点”、“六”、“元”,一般情况下语音播报多采用这种拼接的方式进行连续的音频文件播放,因为此方式在效率,性能、及时性方面都是最好的,如果你有更好的方式,来告诉我哇。

二、生成批处理文件
这里的批处理文件,是指Windows下的BAT文件,我对BAT的语法和使用方式并不了解,可以的话,完全可以优化一下这里使用的方法。这里只说逻辑,我这里直接使用了Android的开源项目,如何将数字对应上相应的音频文件,全部使用了此项目。
生成批处理文件是为了拼接音频文件,这里使用的是FFMPEG,这里不在赘述,拼接的命令行如下

ffmpeg -i tts_success.mp3 -i tts_9.mp3 -i tts_ten.mp3 -i tts_9.mp3 -i tts_yuan.mp3 -filter_complex "[0:0] [1:0] [2:0] [3:0] [4:0] concat=n=5:v=0:a=1 [a]" -map [a] tmp\99.mp3

这里生成的音频文件为“99元”,使用了5个音频文件,-i后面跟音频文件,然后是固定的“-filter_complex”方法命令,然后是“[0:0] [1:0] [2:0] [3:0] [4:0] ”音频集合,“concat=n=5”,5则是音频文件的数量,然后后面的“v=0:a=1 [a]" -map [a]”都是固定写法,然后是输出的目录“tmp99.mp3”,你只需生成这样的命令行然后执行它,就得到了拼接好的音频文件了。

我是将这样的命令行生成一个文本,然后Window去一行一行执行它即可,但是,效率低,因为这样生成出来的是单线程执行的,无法全速在电脑运行,因为IO读写导致CPU无法全力发挥效率,这里还需要生成多线程,也就是多个BAT来同时执行,这样效率就会上去了,它的命令如下

start "Thread 0" cmd /k call output0.bat
start "Thread 1" cmd /k call output1.bat
start "Thread 2" cmd /k call output2.bat
start "Thread 3" cmd /k call output3.bat
start "Thread 4" cmd /k call output4.bat

这些命令行,是开启了5个线程(应该说是进程?)执行多个BAT,来进行全力的音频处理,然后它的完全形式如下,假设使用5条进程,生成100条音频,那么先把这100条分成5等分,每份是20条,生成5个批处理文件,然后再生成一个开启bat批处理文件的文件,最终运行它,这里我使用的文件名如下

output0.bat
output1.bat
output2.bat
output3.bat
output4.bat
output_run.bat

最终运行“output_run.bat”文件运行即可。

三、音频文件的压缩
假设生成了10000条音频文件,我这里的大小是约400MB,把这400MB的音频文件全部打包进APP,不太现实,所以需要压缩它,采用何种压缩方式,何种格式呢,这里使用的是HE-AACv2,具体理由参考如下文章:
AAC规格(LC,HE,HEv2)及性能对比
FFMPEG默认编译好的window下文件无法编码HE-AACv2,因为确实编码器,需要自己去编译,这里太麻烦,我就没有使用FFMPEG去转换文件,这里使用替代品——“fdkaac.exe”,其内核和ffmpeg需要使用的编码器是一个,但是“fdkaac.exe”可以单独运行,就方便了不少,使用命令如下

fdkaac "99.wav" --ignorelength -S -b 1 --profile 29 -o "aac\99.m4a"

这里只有“-b 1”需要说明,其他都是固定格式,或者可自行参考fdkaac,“-b 1”是转换为1比特率的音频文件,为什么1,音损会不会很大,不会,因为此命令并不会强制转换为1比特率,只是去接近它,实际转换后的比特率大概是6-15比特率左右,音频还算可以听清说的是什么。这里使用的命令行只是转换一条,如何批量转换?使用命令行如下

for %%a in ("*.wav") do fdkaac "%%a" --ignorelength -S -b 1 --profile 29 -o "aac\%%~na.m4a"

将本目录下的wav转换为aac,其目录为音频文件下面的aac文件夹下面,这里就不赘述了,但是这是单进程单线程的,你可以去优化为多线程,已经有相关文章,可以去搜索到下。

最终,压缩完毕后会得到60-70MB的音频文件,打包进包里即可,但是不知道IOS是否允许,音频文件其实可以做出拓展包的形式另外下载,这些音频文件压缩后实际只有几MB,也可以考虑先压缩进包,再解压,如果IOS允许的话。


10000条已经合成好的音频文件(有小数点)
链接: https://pan.baidu.com/s/112cV64IwmIlts4eKQHBUsg 提取码: fdxc

10000条已经合成好的音频文件(无小数点后面)
链接: https://pan.baidu.com/s/1k5Z14Pay-P25-ecwaGxrKg 提取码: pws8

支付宝商家语音播报Android开源项目
https://github.com/YzyCoding/PushVoiceBroadcast

搞定“vc_runtimeAdditional_x64.msi”,解决“VC_redist.x64.exe”无法安装问题

折腾个C#开发环境,发现Visual Studio有个组件安装出错,查明原因为VC_redist.x64.exe没有安装成功,安装失败的原因是旧版无法卸载,于是开始折腾。
卸载弹出无“vc_runtimeAdditional_x64.msi”包,随便网上下载个,弄进去没用,查看这个VC_redist.x64.exe到底是哪个文件,用控制面板的 程序卸载 找出,卸载出错,查找自己电脑全盘的vc_runtimeAdditional_x64.msi的文件,发现有很多个,区别是版本不同,查看了VC_redist.x64.exe的版本,匹配了版本还是无法卸载,何解呢?
管他何解,强制卸载,发现了 Windows Installer CleanUp Utility 这个东西,是微软官方 msi 卸载工具,网上随便可以找到,发现软件列出名称略有不同,但是更加版本号的唯一性,把相同版本的2个包清理了,然后再去卸载"Microsoft Visual C++ 2015 edistributable (x64)",“VC_redist.x64.exe”安装后的名称为"Microsoft Visual C++ 2015 edistributable (x64)",一下就没了,然后报出未安装的错,但是确实不在卸载列表里面了,再次安装“VC_redist.x64.exe”成功,他们的关系如下:

“VC_redist.x64.exe” 实际是安装了"Microsoft Visual C++ 2015 edistributable (x64)" 同时卸载列表名称是这个;
卸载“Microsoft Visual C++ 2015 edistributable (x64)”需要“vc_runtimeAdditional_x64.msi”包,且版本号一致,可能我的包损坏了。

这里不得不说 Windows Installer CleanUp Utility 是个好东西,233。
好了,水完了,这种事情经常发生,这次记录试试。

我快遗忘这个blog了,但是现在想起来了!

本来是想着恒心写写博客,但是我这持久力,自己都醉了,没憋出没什么有营养的东西,于是啥也不想写,慢慢的,我忘记了这儿,还是朋友说我博客打不开了才来看看。
博客打不开的原因是因为博客程序Typecho需要强制更新,卧槽,上次更新差不多是3年前,居然最近更新了,估计下次更新是2020年吧,不说三年后的2021年是因为我猜着整数年应该会更新一次吧。不得不说,这个Typecho对于长期不开博客的人,比如我,非常的不友好,百度、谷歌的收录全部都没了,等会再去提交下,希望2大哥能给点面子。
水,这篇就是水,在没什么可写的情况下,还是得逼自己多少打两个字,再忘记就不太好了。以后可能会更新内容吧,虽然这里估计也没人看,来看的人估计也全靠2位大哥了吧。
笑。

神舟精盾K480N-i5 D1笔记本更换网卡为Intel7260AC

断线,断线,断线,不能忍又断线,于是果断的换掉垃圾网卡。
继笔记本加内存条,换屏幕,魔改增加SSD固态盘后,这次来折腾网卡,这应该是我最后一次折腾这台笔记本,再折腾估计就是键盘、IPS屏幕上面的了,但是这主板这年龄,已经不值得再折腾了,划不来了,其实换完这次网卡就感觉划不来了,应该换低端的网卡,卖家都发货我都装上去了,就用着吧。
这款网卡几年前价格200-400,现在价格40-90,现在基本是笔记本标配网卡了,比如惠普的某款。
到货后收到的快递,嗯,很简洁,很绿色。
DSCF9127.jpg

收到的快递内容如下,网卡、螺丝和板子、说明书,板子我也用不上,也许有的笔记本需要。
DSCF9129.jpg

说明书里面写的更换方法写的比较详细。
DSCF9130.jpg

原来的网卡型号AR9285,现在这个型号也就价值一份快递费,旧网卡只用到一根天线,新网卡需要两根,看介绍旧笔记本都只有一根天线,但是神舟用了一根,还预留了一根,不错,旧网卡后面预留有白色天线。
DSCF9136.jpg

新旧网卡的对比,使用的针脚差距明显。
DSCF9138.jpg

换网卡和换内存条,除了多处理一下天线和螺丝,没什么区别,很简单。换好后把预留的天线用上了。
DSCF9147.jpg

开机还没装驱动,可以正常使用,速率一下就上去了,算是和现在的路由器速率差不多了。
未标题-1.jpg

但是,蓝牙却无法识别,设备管理器列表里面根本找不到蓝牙,驱动也是折腾了一番,没有蓝牙,怎么办,一顿百度后,再参考了一下买过的人的评论,需要屏蔽正面最右的针脚,没找到透明胶,用纸了,一顿折腾才能好,要不是没透明胶我也绝不会用纸片了,真心折腾人。
DSCF9150.jpg

纸片不齐,但是开机测试后使用正常,就不纠结了,蓝牙也正常了。
QQ截图20170722175158.png

这里在PS一句,看到买家评论,有网卡本身就无法识别的,需要屏蔽20针脚,蓝牙网卡都不能使用的,就要屏蔽两针脚了。

费语几句,以前百度收录了个我博客首页,到现在博客首页都没有了,啧啧啧,如果这段文字有帮助到他人的地方,那80%是谷歌找到我的了,我就默默写这段百度不要的文字了。

TinyPNG for Typecho 高性价比图片压缩插件

  TinyPNG是一个国外提供了很长时间的图片压缩服务商,压缩后的图片损失很低,在网络上预览几乎可以忽略不计,这给网页的加载的速度和自己的存储空间都带来了不少的好处,压缩率基本在70%左右,我自己已经使用了一段了,感觉良好,希望大家也能够喜欢。

TinyPNGExplain.png
  可以压缩的图片拓展名:jpg、png、jpeg;一份ApiKey每月可以压缩500张,超过需要去官网付费使用,ApiKey可以在多站点使用;卸载后图片依然是压缩后的。

这里再给大家一张对比图:
TinyPNG图片对比.png
对比图的原始图 原图插画 压缩后插画

配置方法:
申请TinyPNG ApiKey后在插件设置面板填入保存即可。

注意:此插件尚未稳定,实际使用可能有未知BUG,对此产生的影响概不负责。
下载(下载后修改文件夹名为TinyPNG)

GitHub

Changlog
0.0.1 TinyPNG插件基本功能完善,发布。