收藏
回答

能不能增加参数指定文本中连续的数字不要当个一个数字合成,而是每个数字分别合成?

问题类型 插件 AppID 插件版本号 AppID 操作系统 微信版本 基础库版本
需求 wx069ba97219f66d99 0.3.4 wx921296bfe7c30658 iOS 8.0.6 2.17.0

例如“源和1916创意产业园”,需要合成为“源和一九一六创意产业园”,而不是“源和一千九百一十六创意产业园”。另外(0595)-22968769这种格式的固定电话,其中0595合成正确,22968769合成为“二千二百九十六万八千七百六十九”,不正确。

回答关注问题邀请回答
收藏

1 个回答

  • 魏波
    魏波
    2021-06-19

    想了个办法绕过这个问题:自己写正则表达式检查文本中是否有需要每位数字单独合成语音的连续数字,如果有就转成中文数字,再调用插件合成语音。以下以检测并转换国内固定电话号码为例:

    const plugin = requirePlugin('WechatSI');
    function textToSpeech(content) {
    	const digitsToChinese = (digits) => {
    		if (!/^[0-9]+$/.test(digits)) {
    			throw new Error('请输入一个自然数');
    		}
    		const chineseChars = ['〇','一','二','三','四','五','六','七','八','九','十'];
    		let retVal = "";
    		for (let digit of digits)
    			retVal += chineseChars[digit];
    		return retVal;
    	}
    	// 国内固定电话的正则表达式
    	const DIGIT_REGEP_PHONE = /(?:[\((]?0\d{2,4}[\))]?-)?([2-9]\d{5,7})/g;
    	let matched;
    	while ((matched = DIGIT_REGEP_PHONE.exec(content)) != null) {
    		const chinese = digitsToChinese(matched[1]);
    		matched[1] = matched[0].replace(matched[1], chinese);
    		content = content.replace(matched[0], matched[1]);
    	}
    
    
    	plugin.textToSpeech({
    		lang: "zh_CN",
    		tts: true,
    		content,
    		success: (res) => {
    			if (res.retcode == 0) {
    				console.log("合成的语音文件Url: " + res.filename)
    			} else {
    				console.error("无法合成语音:未知错误");
    			}
    		},
    		fail: (err) => {
    			console.error("Error on TextToSpeech: " + JSON.stringify(err));
    		}
    	});
    }
    
    2021-06-19
    有用
    回复
登录 后发表内容